← Back to search

io.github.davidmosiah/apple-health-mcp

davidmosiah Scanned 21d ago

Unofficial local-first MCP server for Apple Health export data.

B
79.9 / 100

Versions

0.5.0latest
May 29, 2026
0.4.3
May 20, 2026
0.4.2
May 20, 2026
0.4.1
May 11, 2026
0.4.0
May 11, 2026
+ show 4 moreshow less
0.3.0
May 11, 2026
0.2.1
May 6, 2026
0.2.0
May 4, 2026
0.1.0
May 4, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 18

apple_health_agent_manifest
annotations: verified low

Machine-readable install, runtime and privacy guidance for AI agents operating Apple Health export data.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_capabilities
annotations: verified low

Explain supported Apple Health export data, unavailable live HealthKit access, privacy modes and recommended agent workflow.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_connection_status
annotations: verified low

Check local Apple Health export path, Node version, privacy mode and Hermes client posture without reading full export data.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_quickstart
annotations: verified low

Personalized 3-step setup walkthrough for the human user. Adapts to current state (is APPLE_HEALTH_EXPORT_PATH set? does the export file exist and parse?). Call this first when the user asks 'how do I connect Apple Health?'. This connector is local-first and never touches Apple servers or cloud APIs.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_demo
annotations: verified low

Returns realistic example payloads of apple_health_daily_summary, apple_health_weekly_summary, and apple_health_wellness_context with Apple-Watch-style values, so agents see the contract before parsing a real export.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_privacy_audit
annotations: verified low

Return the local privacy and export-file posture without revealing health data.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_list_records
annotations: verified low

List bounded records from a local Apple Health export.xml. Use type/start/end filters to keep output small. `limit` caps the returned LIST only: in summary privacy mode (the default) the `aggregate` block (`count_by_type`, `units`, `date_range`, `numeric`) is computed over every record matching the filter, and `truncated`/`limit_applied`/`matched_count` say whether the list itself was cut. The statistics are nested under `numeric` (numeric.count/sum/average/min/max), not at the top of `aggregate`. COST: because the aggregate must cover every match, summary mode reads the whole export file on each new query — roughly 33 ms per MB of export.xml (~3 s for 84 MB, ~11 s for 336 MB), and type/start/end do not shorten it. Repeating an identical query is served from an in-memory cache and returns instantly. For a cheap bounded page with no full-file scan, pass privacy_mode 'structured' or 'raw', which stop at `limit`.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_list_workouts
annotations: verified low

List bounded workouts from a local Apple Health export.xml. `limit` caps the returned LIST only: in summary privacy mode (the default) the `aggregate` block (`count_by_activity`, `date_range`, `total_duration_minutes`, `total_distance`, `distance_units`, `total_energy_kcal`, `workout_count`) is computed over every workout matching the filter, and `truncated`/`limit_applied`/`matched_count` say whether the list itself was cut. COST: this call reads the whole export file on each new query — roughly 33 ms per MB of export.xml (~3 s for 84 MB, ~11 s for 336 MB) — and start/end do not shorten it. Workouts are sparse in an export, so even non-summary modes usually reach the end of the file. Repeating an identical query is served from an in-memory cache and returns instantly.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_export_freshness
annotations: verified low

Check how recently the local Apple Health export file/directory was written. Returns mtime, days_since_export, an is_stale flag, and a recommendation. Considered stale if the export is older than 30 days, or older than 7 days with no recent records (the inventory's latest-record date is also older than 7 days). Use before relying on apple_health_daily_summary or apple_health_wellness_context to confirm the export is fresh.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_data_inventory
annotations: verified low

Scan the local Apple Health export once and report available record types, workouts, date coverage, freshness and safe next calls.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_daily_summary
annotations: verified low

Build a daily wellness summary from local Apple Health export data. It is not live HealthKit and not medical advice.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_wellness_context
annotations: verified low

Normalize local Apple Health export sleep, workout and activity data into the shared wellness_context shape for recommendation engines.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_weekly_summary
annotations: verified low

Build a weekly wellness summary from local Apple Health export data. It is not live HealthKit and not medical advice.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
apple_health_profile_get
annotations: verified low

Read the shared Delx Wellness profile from ~/.delx-wellness/profile.json. Returns preferred name, goals, devices, training/nutrition/exercise/agent preferences and safety flags. NEVER contains OAuth tokens or API secrets — this connector is local-export and has no cloud auth, but the profile contract is the same across every Delx Wellness MCP. Read-only.

patch record response_format enum explicit_user_intent boolean
readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
apple_health_profile_update
annotations: verified low

Persist a partial patch to ~/.delx-wellness/profile.json. Requires explicit_user_intent=true (otherwise returns USER_ACTION_REQUIRED). Rejects secret-like fields (oauth, token, secret, password, cookie, refresh, api_key, session) at write time. Use to record preferred name, goals, devices, training context, nutrition context, exercise preferences, agent preferences, and safety flags.

patch record response_format enum explicit_user_intent boolean
readOnlyHint false openWorldHint false idempotentHint false destructiveHint false
apple_health_clear_incremental_cache
annotations: verified low

Manually clear the incremental import cache at ~/.apple-health-mcp/incremental-cache.json. The cache tracks the latest parsed timestamp per HealthKit category so subsequent `apple_health_list_records` calls (with `incremental_cache: true`) skip already-seen records. Use this when you want to force a full re-parse without changing the export file. The cache also auto-invalidates when the export file mtime changes. Gated by explicit_user_intent: true (requires explicit user intent to wipe local cache).

force boolean check_only boolean response_format enum
readOnlyHint false openWorldHint false idempotentHint true destructiveHint true
apple_health_reimport
annotations: verified low

Re-scan the configured watch folder (APPLE_HEALTH_WATCH_PATH or `setup --watch-path <dir>`) for a newer Apple Health export. If a newer export.xml/export.zip/apple_health_export directory is found, it is promoted to the active export, the in-memory snapshot cache and incremental cache are cleared, and subsequent summaries reflect the new data. With check_only=true, only report what would happen without promoting. This is the cross-platform recurring-refresh path — the native HealthKit bridge needs macOS and is separate. Requires explicit user intent when promoting a new export (force or non-check_only); check_only is read-only inspection.

force boolean check_only boolean response_format enum
readOnlyHint false openWorldHint true idempotentHint true destructiveHint false
apple_health_onboarding
annotations: verified low

Return the 11-question onboarding flow plus the current profile state and missing fields. Read-only — does NOT persist anything. Pair with apple_health_profile_update once the user answers. Cross-connector: the same profile is shared by every Delx Wellness MCP (whoop, garmin, oura, fitbit, strava, polar, withings, apple-health, samsung-health, google-health, nourish, cycle-coach, cgm, air).

locale enum response_format enum
readOnlyHint true openWorldHint false idempotentHint true destructiveHint false

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 50

info
Tool 'apple_health_clear_incremental_cache' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_reimport' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_onboarding' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
Tool 'apple_health_quickstart' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_demo' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_privacy_audit' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_list_records' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_list_workouts' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_export_freshness' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_data_inventory' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_daily_summary' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_wellness_context' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_weekly_summary' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_profile_get' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_profile_update' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_agent_manifest' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_capabilities' annotations are consistent annotation_checker · 80%
info
Tool 'apple_health_connection_status' annotations are consistent annotation_checker · 80%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.21.0 (GHSA-345p-7cg4-v4c7) dependency_analyzer · 95%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.21.0 (GHSA-8r9q-7v3j-jr4g) dependency_analyzer · 95%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.21.0 (GHSA-w48q-cv73-mx4w) dependency_analyzer · 95%
medium
Vulnerable dependency: yauzl@3.2.0 (GHSA-gmq8-994r-jv83) dependency_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
Tool: apple_health_agent_manifest manifest_parser · 85%
info
Tool: apple_health_capabilities manifest_parser · 85%
info
Tool: apple_health_connection_status manifest_parser · 85%
info
Tool: apple_health_quickstart manifest_parser · 85%
info
Tool: apple_health_demo manifest_parser · 85%
info
Tool: apple_health_privacy_audit manifest_parser · 85%
info
Tool: apple_health_list_records manifest_parser · 85%
info
Tool: apple_health_list_workouts manifest_parser · 85%
info
Tool: apple_health_export_freshness manifest_parser · 85%
info
Tool: apple_health_data_inventory manifest_parser · 85%
info
Tool: apple_health_daily_summary manifest_parser · 85%
info
Tool: apple_health_wellness_context manifest_parser · 85%
info
Tool: apple_health_weekly_summary manifest_parser · 85%
info
Tool: apple_health_profile_get manifest_parser · 85%
info
Tool: apple_health_profile_update manifest_parser · 85%
info
Tool: apple_health_clear_incremental_cache manifest_parser · 85%
info
Tool: apple_health_reimport manifest_parser · 85%
info
Tool: apple_health_onboarding manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (5) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 115 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%