Public log

health-export-mcp

Query your Apple Health data from any AI agent. An MCP server for Apple Health / HealthKit — 190 metrics, read-only, local-first, zero dependencies. npx -y health-export-mcp.

npm · fingerprint 3beb162a8d062e2f7f5809ae · repository · RSS

16tools
2recorded versions
11dtracked
last checked 26 Oct

What changed

Changed 2026-10-25 11:33 UTC

2 descriptions rewritten.

--- pinned/get_mcp_status
+++ observed/get_mcp_status
  {
    "annotations": {
      "idempotentHint": true,
-   "description": "Health check: data source, how many metrics/workouts are available, which optional context files exist, the most recent data date, and a `recompute` summary of past days rebuilt after late-arriving samples (with any days too old to rebuild). Call this first to confirm the bridge is connected. When there is no usable export (none found, a stale one, or demo data), the result also includes `app.unlockUrl` and `app.appStoreUrl`, the website and App Store page of the companion iOS app that writes the export; both links carry fixed campaign attribution labels.",
+   "description": "Health check: data source, how many metrics/workouts are available, which optional context files exist, the most recent data date, and a `recompute` summary of past days rebuilt after late-arriving samples (with any days too old to rebuild). Call this first to confirm the bridge is connected. The result also includes `app.unlockUrl` and `app.appStoreUrl`, the website and App Store page of the companion iOS app that writes the export; both links carry fixed campaign attribution labels.",
    "inputSchema": {
      "properties": {},
      "type": "object"
--- pinned/resolve_metric
+++ observed/resolve_metric
  {
    "annotations": {
      "idempotentHint": true,
-   "description": "Look a metric name up in the canonical naming and unit table. Accepts the export's own name (step_count), a HealthKit identifier (StepCount, HKQuantityTypeIdentifierStepCount), a display title (Step Count) or a common alias (steps, hrv, spo2, weight) and returns the canonical metric, its unit (percentages are 0 to 1 fractions), the unit variants other apps use with the exact formula into the canonical unit, and whether this export holds it. Pass {value, unit} to convert one value, e.g. 180 lb to kg. A word naming several metrics (distance, calories) comes back ambiguous with candidates, and a different measure (RMSSD vs the SDNN that Apple Health stores) is refused with the reason: nothing is guessed. get_health_metrics, get_trends, compare_periods, get_structured_export and correlate_metrics accept the same aliases and report `resolvedFrom` when they used one; other tools take the export's own names. The export holds one value per metric per day, already merged across sources by Apple Health, so this tool states that per-source disagreement cannot be seen in the file rather than inventing it.",
+   "description": "Look a metric name up in the canonical naming and unit table. Accepts the export's own name (step_count), a HealthKit identifier (StepCount, HKQuantityTypeIdentifierStepCount), a display title (Step Count) or a common alias (steps, hrv, spo2, weight) and returns the canonical metric, its unit (percentages are 0 to 1 fractions), the unit variants other apps use with the exact formula into the canonical unit, and whether this export holds it. Pass {value, unit} to convert one value, e.g. 180 lb to kg. A word naming several metrics (distance, calories) comes back ambiguous with candidates, and a different measure (RMSSD vs the SDNN that Apple Health stores) is refused with the reason: nothing is guessed. get_health_metrics, get_trends, compare_periods, get_structured_export and correlate_metrics accept the same aliases and report `resolvedFrom` when they used one; other tools take the export's own names. The export holds one value per metric per day, merged across sources by Apple Health, so this tool states honestly whether per-source disagreement can be seen in the file (exports that record per-source attribution carry `src`/`by` and a `sources` block; others report it as not available) rather than inventing it.",
    "inputSchema": {
      "properties": {
        "name": {

Current tools

Show all 16 tool fingerprints
compare_periods
cca5116f3a358167
correlate_metrics
c1d981ac032a845f
get_cycle_context
7791246034f3bc7a
get_freshness
9e9fb510bd2fdb7b
get_health_metrics
c10563e921d96b0b
get_intraday
d92d927310a9b888
get_mcp_status
c13b01fc645c5093
get_profile
dd9717c5e46e8e18
get_sleep_sessions
0b74c39c53f9c7e2
get_structured_export
0a2356444a388eda
get_trends
2f5d9e9d6a1a376d
get_workouts
70f2742edf74c16e
list_events
03afc9d28579d349
list_metrics
563aabd1bf6cd65f
query_health_data
7a6e77f53dd32a1b
resolve_metric
ad4427f63fb44198

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your health-export-mcp command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for health-export-mcp

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/27748ad32cfe30cd.svg)](https://mcp-pin.gautamkhosla.com/servers/27748ad32cfe30cd.html)