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-stackIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
OperationsSupported Platforms
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.
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.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| life-dashboard-stack (this skill)by owen282000 | 83 | 10 | today | MCP Server |
| claude-memby thedotmack | 100 | 110.9k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 108.1k | 2d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.7k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.8k | 1d ago | CLAUDE.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.
Skill content
View source on GitHubThe 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
recordstable. Thedashviews 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.iofor 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.
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>
-
Run the installer. It puts the release files in
./life-dashboard, writes.envwith 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 | shPrefer 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 -
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.
-
Open Grafana on port 3000 and log in as
adminwithGRAFANA_PASSWORDfromlife-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
claude-mem
110.9kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
108.1kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
78.7kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.8kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
