{"slug": "one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere", "title": "One MCP server, eight AI clients: Apple Health setup that works everywhere", "summary": "A developer has released an MCP server for Apple Health that works across eight AI clients, including Claude, Cursor, and ChatGPT, using a single server command. The server provides eight read-only tools for querying 190 health metrics locally, with no network calls, and the configuration only varies by file path and JSON shape per client.", "body_md": "Most Apple Health MCP guides are per-client. Claude today, Cursor tomorrow, ChatGPT next week. That's the wrong abstraction. MCP is a protocol. The server command is identical across every client. Only the config file path and JSON shape change.\n\nEight read-only tools, all local:\n\n| Tool | What it returns |\n|---|---|\n`get_mcp_status` |\nHealth check: data source, metric count, most recent data date |\n`list_metrics` |\nEvery available metric with unit, day count, date range |\n`get_health_metrics` |\nValues for a metric over a date range with aggregation |\n`get_trends` |\nCompare recent N-day window against prior N |\n`compare_periods` |\nA/B two arbitrary date windows for a single metric |\n`get_structured_export` |\nClean structured JSON, paginated |\n`get_intraday` |\nHour-by-hour window, live within-day view |\n`query_health_data` |\nNatural-language convenience query |\n\n190 Apple Health metrics. 84 kB npm package. Zero dependencies. Zero network calls.\n\nClaude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`\n\n):\n\n```\n{\n  \"mcpServers\": {\n    \"health-export\": {\n      \"command\": \"node\",\n      \"args\": [\"/Users/you/.health-export-mcp/server.mjs\"],\n      \"env\": {\n        \"HEALTH_DATA_DIR\": \"/Users/you/Library/Mobile Documents/iCloud~ai~healthexport~app/Documents\"\n      }\n    }\n  }\n}\n```\n\nCursor uses the same shape at `~/.cursor/mcp.json`\n\n. Windsurf uses it at `~/.codeium/windsurf/mcp_config.json`\n\n. ChatGPT Desktop takes the inner block in Settings > MCP Servers. Codex CLI reads `.mcp.json`\n\n. opencode uses `mcp`\n\n+ `environment`\n\n+ array `command`\n\ninstead of `mcpServers`\n\n+ `env`\n\n.\n\nThe server command never changes. Only the file path does.\n\n```\nYou: What is my HRV trend over the last 14 days?\nAgent: [calls get_trends] Your HRV averaged 58 ms, up 5.5% vs prior 14 days.\n\nYou: Compare my sleep this week to last week.\nAgent: [calls compare_periods] Deep sleep up 17%, total sleep up 6%.\n\nYou: How does my RHR change on days I sleep less than 6 hours?\nAgent: [calls query_health_data] RHR averages 58 bpm after &lt;6h sleep, 53 bpm after &gt;7h.\n```\n\nNo CSV, no copy-paste, no screenshots. Live data from your iPhone, answered locally.\n\nFull config blocks for all eight clients, troubleshooting, and FAQ: [complete guide on healthexport.dev](https://www.healthexport.dev/blog/query-apple-health-with-any-ai-agent?utm_source=devto&utm_medium=social&utm_campaign=exp-20260818-hea80-multiclient)", "url": "https://wpnews.pro/news/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere", "canonical_source": "https://dev.to/philipad/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere-4lcp", "published_at": "2026-08-18 13:25:01+00:00", "updated_at": "2026-08-18 13:44:35.772695+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["Apple Health", "MCP", "Claude", "Cursor", "ChatGPT", "Windsurf", "Codex CLI", "opencode"], "alternates": {"html": "https://wpnews.pro/news/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere", "markdown": "https://wpnews.pro/news/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere.md", "text": "https://wpnews.pro/news/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere.txt", "jsonld": "https://wpnews.pro/news/one-mcp-server-eight-ai-clients-apple-health-setup-that-works-everywhere.jsonld"}}