SkillAgentSearch skills...

life-dashboard-stack

Health Connect and Apple Health data and screen time per app in your own Postgres and Grafana: six ready-made dashboards, an MCP server so the AI you choose can read your history, a read-only API and QR pairing. Docker Compose or a Helm chart with CloudNativePG. No cloud. Part of Life Dashboard.

Install / Use

claude mcp add owen282000 -- npx -y github:owen282000/life-dashboard-stack

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

83/100

Category

Operations

Supported Platforms

Claude Code
Claude Desktop

Our assessment of life-dashboard-stack

life-dashboard-stack scores 83/100 on our quality scale, 592nd of 752 Operations skills we index.

Its MCP Server is 19 KB long, well organised into 16 sections with 3 code examples: a thorough specification that gives an agent plenty to work with.

It has 10 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
30/30
Structure
18/20
Description
15/15
Adoption
4/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated today, so life-dashboard-stack is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

life-dashboard-stack compared with similar skills

All 4 of these similar skills score higher than life-dashboard-stack; compare them before choosing.

SkillScoreStarsUpdatedFormat
life-dashboard-stack (this skill)by owen2820008310todayMCP Server
claude-memby thedotmack100110.9ktodayCLAUDE.md
Agent-Reachby Panniantong100108.1k2d agoCLAUDE.md
headroomby headroomlabs-ai10078.7ktodayCLAUDE.md
CowAgentby zhayujie10047.8k1d agoCLAUDE.md

Frequently asked questions

How do I install life-dashboard-stack?
Run claude mcp add owen282000 -- npx -y github:owen282000/life-dashboard-stack. The install tabs above show the steps for each supported agent.
Which AI agents does life-dashboard-stack work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is life-dashboard-stack safe to use?
It is MIT-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is life-dashboard-stack still maintained?
The repository was last updated today, so life-dashboard-stack is actively maintained.
<p align="center"> <img src="docs/readme-icon.png" alt="Life Dashboard icon" width="128" height="128"> </p> <h1 align="center">Life Dashboard Stack</h1> <p align="center"> <b>Your phone's health data and screen time in your own Postgres and Grafana.</b><br> The backend for the Life Dashboard Companion apps: six Grafana dashboards and an MCP server with eight read-only tools for Claude or a local model. Docker Compose or Kubernetes, no cloud. </p> <p align="center"> <a href="https://github.com/owen282000/life-dashboard-stack/releases/latest"><img src="https://img.shields.io/github/v/release/owen282000/life-dashboard-stack" alt="Latest release"></a> <a href="docker-compose.yml"><img src="https://img.shields.io/badge/Docker%20Compose-3%20services-2496ED" alt="Docker Compose with three services"></a> <a href="docs/kubernetes.md"><img src="https://img.shields.io/badge/Helm-chart-0F1689" alt="Helm chart for Kubernetes"></a> <a href="https://artifacthub.io/packages/search?repo=life-dashboard"><img src="https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/life-dashboard" alt="Artifact Hub"></a> <a href="https://www.postgresql.org/"><img src="https://img.shields.io/badge/Postgres-18-4169E1" alt="Postgres 18"></a> <a href="https://grafana.com/"><img src="https://img.shields.io/badge/Grafana-13.2-F46800" alt="Grafana 13.2"></a> <a href="docs/mcp.md"><img src="https://img.shields.io/badge/MCP-server-6E56CF" alt="MCP server"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue" alt="MIT license"></a> </p> <p align="center"> <a href="#quick-start"><b>Quick&nbsp;start</b></a> &nbsp;·&nbsp; <a href="docs/install.md">Setup&nbsp;guide</a> &nbsp;·&nbsp; <a href="#dashboards">Dashboards</a> &nbsp;·&nbsp; <a href="docs/views.md">SQL&nbsp;views</a> &nbsp;·&nbsp; <a href="#ask-your-own-ai-mcp">MCP&nbsp;server</a> &nbsp;·&nbsp; <a href="docs/kubernetes.md">Kubernetes</a> &nbsp;·&nbsp; <a href="https://owen282000.com/life-dashboard/grafana/">Website</a> </p> <p align="center"> <sub>Life Dashboard: <a href="https://github.com/owen282000/life-dashboard-companion-app">Android app</a> &nbsp;·&nbsp; <a href="https://github.com/owen282000/life-dashboard-companion-app-ios">iPhone app</a> &nbsp;·&nbsp; <a href="https://github.com/owen282000/life-dashboard-ha">Home Assistant integration</a> &nbsp;·&nbsp; <b>Grafana stack</b></sub> </p> <p align="center"> <picture> <source media="(max-width: 600px)" srcset="docs/readme-hero-phone.png"> <img src="docs/readme-hero.png" alt="The Life Dashboard overview in Grafana with sample data: tiles for steps today, last night's sleep, overnight low heart rate, weight, screen time and the last sync, a table of the last 7 days against the 28 before, steps per day with a goal line, sleep stages per night and an hourly heart rate band" width="900"> </picture> <br><sub>Sample data</sub> </p>

The Life Dashboard Companion apps send Health Connect data and screen time per app from an Android phone, or Apple Health from an iPhone, to a webhook. This repository is the other end. One command starts a receiver that checks every signature, Postgres with your records in plain SQL, Grafana with six dashboards, and an optional MCP server so the AI you choose can answer questions about your own history.

It's for people who want their records in a database they can query, next to Home Assistant or instead of it. With a local model nothing leaves your machine. It's a one-person project offered as-is and built to be changed: the views, the dashboards and the receiver are yours to adapt.

What you get

  • Every record, checked and kept once. The receiver checks the HMAC signature and stores every record in Postgres. A payload that arrives twice is applied once, a late one can't overwrite a newer one, and records you delete on the phone are deleted here too.
  • One table, plain SQL views. All 34 record types of the Android app and the 28 of the iPhone app fit in one records table. The dash views turn them into days, nights, hours and apps in your time zone.
  • Six dashboards. An overview as the home page, then Activity, Sleep, Heart and body, Screen time, and Data and sync. Grafana reads as a user that can only SELECT.
  • Ask your own AI. An optional MCP server lets Claude, a local model in Ollama or any other MCP client answer questions such as "did I sleep better in the weeks I walked more?" from your own history, with read-only tools only. It stays off until you set a token.
  • Pairing with a QR code. The receiver shows a code that the app scans, so you type neither the address nor the secret.
  • Every phone in your household. Android phones and iPhones send to the same database, and each shows up as its own Phone in the dashboards.
  • Your data back out. A read-only JSON API for scripts, widgets and home screens, off until you set a token.
  • Images, not a build. Every part is an image on ghcr.io for amd64 and arm64 (so a Raspberry Pi with a 64-bit OS can run them), for Docker Compose or the Helm chart. Within a major version, nothing you build on changes.
<p align="center"> <picture> <source media="(max-width: 600px)" srcset="docs/readme-screen-time-phone.png"> <img src="docs/readme-screen-time.png" alt="The Screen time dashboard with sample data: tiles for today, yesterday, the daily average, the top app, apps used and the last use, minutes per day stacked by app, the top apps, a table per app, minutes per app per day as a heatmap, and how long before sleep the phone was last used" width="900"> </picture> <br><sub>Sample data. Minutes per app, per day, in a table you own.</sub> </p>

How it works

The phone pushes signed JSON to you. There's no cloud account in between, so there's no login that expires, no token to refresh and no API that changes under you.

<p align="center"> <picture> <source media="(max-width: 600px)" srcset="docs/how-it-works-phone.png"> <img src="docs/how-it-works.png" alt="Diagram: the Android app (Health Connect and screen time per app) and the iPhone app (Apple Health) send HMAC-signed JSON to the receiver, a webhook that checks every signature. The receiver writes every record once to Postgres, with the dash views. Grafana reads them as grafana_ro and shows six dashboards. The optional read-only API and the optional MCP server read them as dash_ro, and the MCP server gives the AI model you choose eight read-only tools through any MCP client, with a local model or one in the cloud." width="900"> </picture> </p>

views.md explains how records become days and nights, and compatibility.md lists what stays the same within a major version.

Part of Life Dashboard

Life Dashboard is four projects, and you only install the parts you need. Put the app on each phone, then pick where the data goes. Both apps send the same payload, so an Android phone and an iPhone can share one Home Assistant or one stack.

On Android, Google Play is the easy way: a one-time purchase, with automatic updates, that supports development. The same app stays free from GitHub, Obtainium and F-Droid, with the same signature. On an iPhone, the app is on the App Store.

<p align="center"> <a href="https://github.com/owen282000/life-dashboard-companion-app"><img src="docs/family/android.png" alt="Android app: Health Connect and screen time" width="400"></a> <a href="https://github.com/owen282000/life-dashboard-companion-app-ios"><img src="docs/family/ios.png" alt="iPhone app: Apple Health" width="400"></a> <a href="https://github.com/owen282000/life-dashboard-ha"><img src="docs/family/ha.png" alt="Home Assistant integration: sensors and a year of history" width="400"></a> <picture><img src="docs/family/stack-here.png" alt="Grafana stack: Postgres and Grafana dashboards (this repository)" width="400"></picture> </p>

The data can also go to an MQTT broker or a webhook of your own instead. Both apps have that built in, for n8n, Node-RED or a script.

Quick start

You need Docker with Compose, or Podman, and a phone that can reach this machine (the same network, or a VPN). With a year of sample data for two phones (235,000 records), the stack used about 450 MB of memory while every dashboard loaded, 520 MB with the MCP server, and 530 MB on disk: 210 MB of data and 320 MB of Postgres write-ahead log. The images are about 650 MB to download, most of it Grafana. Pairing with a QR code needs the Android app 1.16.0 or the iPhone app 1.4.0 or newer.

<a id="pair-the-app"></a>

  1. Run the installer. It puts the release files in ./life-dashboard, writes .env with a random secret and passwords, starts the stack and shows the pairing code:

    curl -fsSL https://github.com/owen282000/life-dashboard-stack/releases/latest/download/install.sh | sh
    

    Prefer to read it first? Download it, read it, then run it:

    curl -fsSLO https://github.com/owen282000/life-dashboard-stack/releases/latest/download/install.sh
    less install.sh
    sh install.sh
    
  2. In the app, open the Webhook card on the Health tab, tap Scan a pairing code and scan the code in your terminal. Then tap Sync Now (on Android, on both tabs) and Backfill the last 90 days.

  3. Open Grafana on port 3000 and log in as admin with GRAFANA_PASSWORD from life-dashboard/.env. The overview is the home page.

Something wrong? The same line with -s -- doctor checks the install and says what to fix. The setup guide has the installer's options, the install by hand, a NAS or Portainer, Podman, the pairing code, setting a phone up by hand and several phones.

Try it without a phone

The demo profile posts 60 days of made-up data for an Android phone and an iPhone through the real receiver. Run it in a folder of its own, under its own project name and ports, so it never touches your own data:

mkdir lifedash-demo && cd lifedash-demo
curl -fsSLO https://github.com/owen282000/life-dashboard-stack/releases/latest/download/docker-compose.yml
printf '%s\n' "WEBHOOK_SECRET=$(openssl rand -hex 32)" GRAFANA_PASSWORD=demo-admin \
  GRAFANA_DB_PASSWORD=demo-ro DASH_DB_PASSWORD=demo-dash RECEIVER_PORT=18080 GRAFANA_PORT=13000 > .env
docker compose -p lifedash-demo --profile demo up -d

Then open http://localhost:13000 and log in as admin with the password demo-admin. A new stack starts only with a secret and passwords of its own, so the .env line gives the demo its own. Try it without a phone has the full steps and how to remove it again. To try the MCP server on the same made-up data, put MCP_TOKEN=$(openssl rand -hex 32) in front of the command and add --profile mcp, then connect your MCP client to http://localhost:8090/mcp with that token.

Dashboards

Every dashboard has a Phone picker at the top, and every panel an info icon that says where its figure comes from.

| | Dashboard | What it answers | |---|---|---| | <img src="docs/screenshots/overview.png"

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars10
CategoryOperations
Updated11h ago
Forks1

Languages

Python

Trust signals

97/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 info