Probably the most complete Apple Health MCP server
Project description
apple-health-mcp-server
Probably the most complete Apple Health MCP server.
apple-health-mcp-server exposes the contents of your Apple Health export
(export.xml plus the ECG CSV and GPX route files Apple ships alongside it)
to any Model Context Protocol client —
including Claude Desktop — through 17 read-oriented tools backed by a local
DuckDB database.
Features
- Comprehensive ingestion. Imports
Record,Workout(withWorkoutEvent,WorkoutStatistics,WorkoutRoute, andWorkoutMetadataEntry),ActivitySummary,Correlation,Me,ExportDate, ECG voltage samples, and GPX route points. Categorical state-of-mind entries (iOS 17+) land in a dedicated table. - All data stays local — no external transmission. The importer reads files from disk, the server speaks MCP over stdio (HTTP is opt-in), and the only network artefact is whatever the client itself decides to send.
- DuckDB-backed. Re-imports are idempotent thanks to deterministic
deduplication; ad-hoc analysis through
run_custom_queryruns at native DuckDB speed. - Time-zone aware. GPX route timestamps are aligned to each parent workout's local offset so joins against XML-derived rows are clean.
- Cross-platform. Tested on Ubuntu, macOS, and Windows against Python 3.12 / 3.13 / 3.14.
- 100% branch-tested. Every release gates on full coverage with
pytest --cov-branch --cov-fail-under=100.
Installation
The recommended entry point is uvx, which fetches a one-shot virtualenv on demand and never pollutes the system Python:
uvx apple-health-mcp-server --help
Claude Desktop
Add the following to ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"apple-health": {
"command": "uvx",
"args": ["apple-health-mcp-server", "serve"]
}
}
}
Restart Claude Desktop. Before the tools return anything useful, import your data once:
uvx apple-health-mcp-server import /path/to/apple_health_export
The expected directory is the one Apple Health unzips for you (it
contains export.xml, an electrocardiograms/ folder, and a
workout-routes/ folder).
Database location
By default the database lands at the XDG-resolved data directory:
- Linux / macOS:
~/.local/share/apple-health-mcp/health.duckdb - Windows:
%LOCALAPPDATA%\apple-health-mcp\health.duckdb
Override with --db /custom/path/health.duckdb on either subcommand.
Tools
17 tools are registered with FastMCP, grouped by family:
| Family | Tools |
|---|---|
| Record types & data | list_record_types, query_records, get_record_statistics |
| Workouts | list_workouts, get_workout_details, get_workout_route |
| Activity summaries | get_activity_summaries |
| Heart rate | get_heart_rate_samples |
| Correlations | list_correlations, get_correlation_details |
| ECG | list_ecg_readings, get_ecg_data |
| State of mind | list_state_of_mind |
| Me characteristics | get_me_attributes |
| Metadata & ops | list_data_sources, get_import_history |
| Escape hatch | run_custom_query (read-only validated SQL) |
Updating
uvx caches the package on first run and re-uses that cached copy on
subsequent invocations, so a new release does not install itself
automatically. Pick one:
-
Always run the latest — pass
--refreshonce whenever you want to pull a newer version:uvx --refresh apple-health-mcp-server serve
-
Pin a specific version — write the version directly in your Claude Desktop / Codex / Cursor config so an unrelated
uvxcache eviction cannot move you off it:{ "mcpServers": { "apple-health": { "command": "uvx", "args": ["apple-health-mcp-server==0.1.0", "serve"] } } }
See CHANGELOG.md for the per-release notes.
Development
uv sync
uv run pytest
See CLAUDE.md for the full command list, conventions, and
the mandatory /code-review --fix policy on every pull request.
Contributing
Issues and pull requests in English or Japanese are both first class; see CLAUDE.md §6 for the full language policy.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file apple_health_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: apple_health_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 163.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bae6769f495c5e995337b369a1b2afbad7f82c25969dec515d398c05b9de0c34
|
|
| MD5 |
92cd92ce17bf0675899ebaa7a845dbe6
|
|
| BLAKE2b-256 |
18fb3d5eaa7c8a82cde9b8f3421e4809fbb3cf9bb65e1b4467a79cc845683553
|
Provenance
The following attestation bundles were made for apple_health_mcp_server-0.1.0.tar.gz:
Publisher:
release.yml on rinoshiyo/apple-health-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
apple_health_mcp_server-0.1.0.tar.gz -
Subject digest:
bae6769f495c5e995337b369a1b2afbad7f82c25969dec515d398c05b9de0c34 - Sigstore transparency entry: 1909564323
- Sigstore integration time:
-
Permalink:
rinoshiyo/apple-health-mcp-server@adee68d8fd81e9aeecfb7cbe76623b5a38bac869 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rinoshiyo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@adee68d8fd81e9aeecfb7cbe76623b5a38bac869 -
Trigger Event:
push
-
Statement type:
File details
Details for the file apple_health_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: apple_health_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 66.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df72972f0e4b1fd725fba19dd9fce0c44763b9c8050253c58fee3f1358be4320
|
|
| MD5 |
e134ba3e0f10e113247cc83535e14f5d
|
|
| BLAKE2b-256 |
2b13b2e264ba71f9a3c1ac957c106b49199e2e41cb74f1faef52bfeb37143f1c
|
Provenance
The following attestation bundles were made for apple_health_mcp_server-0.1.0-py3-none-any.whl:
Publisher:
release.yml on rinoshiyo/apple-health-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
apple_health_mcp_server-0.1.0-py3-none-any.whl -
Subject digest:
df72972f0e4b1fd725fba19dd9fce0c44763b9c8050253c58fee3f1358be4320 - Sigstore transparency entry: 1909564425
- Sigstore integration time:
-
Permalink:
rinoshiyo/apple-health-mcp-server@adee68d8fd81e9aeecfb7cbe76623b5a38bac869 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rinoshiyo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@adee68d8fd81e9aeecfb7cbe76623b5a38bac869 -
Trigger Event:
push
-
Statement type: