apple-health-export-mcp
An MCP server that lets an AI assistant query your Apple Health data — sleep, heart rate, steps, body mass, workouts, and any other metric in your export.
Apple has no live export API, so this works on a snapshot: you export your health archive once, ingest it into a local SQLite database, then the server answers queries against it. See docs/adr.md for why.
Privacy: your health data never leaves your machine and is never committed to git (
.gitignoreexcludes*.zip/*.db).
How it works
export.zip ──(ingest, one-time ~1-3 min)──► health.db (SQLite) ──◄── MCP server queries
Setup
-
Export your data on iPhone: Settings → Health → tap your photo → Export All Health Data. AirDrop/save the resulting
export.zip. -
Install with uv. Installing once (rather than
uvxon every launch) keeps the process tree shallow, which matters for clean shutdown — see Shutdown & process model.uv tool install apple-health-export-mcp # …or from source: uv tool install git+https://github.com/burakdirin/apple-health-export-mcp
This puts two commands on your PATH:
apple-health-export-mcp(the server) andapple-health-export-mcp-ingest. -
Ingest the archive (one time per new export):
AH_DB_PATH=~/.local/share/apple-health-export-mcp/health.db \ apple-health-export-mcp-ingest ~/Downloads/export.zip
-
Add to your MCP client (e.g. Claude Code
.mcp.json). The bare command starts the stdio server; point it at the DB you just built.Installed (recommended) — invoke the binary directly (no wrapper process):
{ "mcpServers": { "apple-health": { "command": "apple-health-export-mcp", "env": { "AH_DB_PATH": "/Users/you/.local/share/apple-health-export-mcp/health.db" } } } }
Use an absolute path to the binary (
which apple-health-export-mcp) if your client doesn't inherit yourPATH.Or via
uvx(no install; the bare package name runs the server):{ "mcpServers": { "apple-health": { "command": "uvx", "args": ["apple-health-export-mcp"], "env": { "AH_DB_PATH": "/Users/you/.local/share/apple-health-export-mcp/health.db" } } } }
claude mcp addequivalent:claude mcp add apple-health --env AH_DB_PATH=~/.local/share/apple-health-export-mcp/health.db \ -- apple-health-export-mcp
Shutdown & process model
The server is a single process that shuts down on stdin EOF — the MCP
spec's primary shutdown signal — so closing your client terminates it cleanly.
Avoid extra wrapper layers (uv run … fastmcp run …): uv/uvx stay in the
process tree as a parent and only conditionally forward signals, so a wrapped
server can be orphaned when the client exits or you press Ctrl+C. Installing the
tool and launching the binary directly (config above) gives the shallowest tree
and the most reliable cleanup. fastmcp run fastmcp.json is for local dev only.
Tools
| Tool | Returns |
|---|---|
list_types() |
Which metrics exist in your data + row counts and date spans (discovery) |
list_sources(type) |
Which devices/apps wrote a metric (counts, date spans) |
get_quantity(type, start, end, agg, bucket, source) |
Per day/week/month/all aggregate for a numeric metric (steps, HR, weight…) |
get_sleep(start, end) |
Per-night sleep stage durations |
get_workouts(start, end) |
Workout summary per activity type in the range |
All query tools require a date range and return aggregates only — never raw rows (ADR-0008).
get_quantity with agg="sum" auto-deduplicates parallel devices (Watch + iPhone + apps) so totals
aren't inflated (ADR-0010); pass source (see list_sources) to force one device.
Prompts
Reusable coaching workflows the client can invoke (they orchestrate the tools and reply in your language):
| Prompt | Purpose |
|---|---|
daily_summary(day?) |
One day's snapshot |
weekly_review(week_of?) |
Calendar week (Mon–Sun): load vs recovery + advice |
monthly_summary(month?) |
A month in review (YYYY-MM) |
yearly_summary(year?) |
A year's fitness trajectory (YYYY) |
readiness_check() |
Train hard today? From sleep + recovery markers |
sleep_report(start?, end?) |
Sleep duration, stages, consistency |
Arguments are optional — they default to today / this week / this month / this year.
Development
uv sync
uv run pytest
uv run ruff check
License
MIT
Metadata
Release files for apple-health-export-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| apple_health_export_mcp-0.1.1.tar.gz | 98.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| apple_health_export_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 116.0 kB
Release files / apple_health_export_mcp-0.1.1.tar.gz
| Download URL | apple_health_export_mcp-0.1.1.tar.gz |
|---|---|
| Size | 98.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34e80f93a6c09bb126047677c9fab15d52d9f08a4dbbc6a36cbe785581aeae70
|
|
BLAKE2b-256 checksum How to use checksums |
ade16e70fec3b82f55e9bce1dfbca033505827ea66f28d5e85cc1a082f986a59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / apple_health_export_mcp-0.1.1-py3-none-any.whl
| Download URL | apple_health_export_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 17.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
daf9f48667ca4f6ad18eaf55b05c42ed00178c7571b47bc9037641a83ac4697c
|
|
BLAKE2b-256 checksum How to use checksums |
ba94f283facba59b2834fce7424fb9044d580c1489287c8ea7facd28242aa67d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|