Apple Health Chat MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple Health Chat MCPHow active was I yesterday?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Health Chat MCP
Ask Claude natural language questions about your Apple Health data! This MCP server enables conversational analysis of your health metrics from iOS Health Export CSV files.
Example questions you can ask:
"How active was I yesterday?"
"Did I get enough sleep this week?"
"What's my step count trend?"
"Was my heart rate higher than usual today?"
Quick Start
Install & Build:
npm install && npm run buildSet up your health data:
export HEALTH_EXPORT_DIR="/path/to/your/health/export/files"Configure Claude Desktop:
{ "mcpServers": { "apple-health-chat": { "command": "node", "args": ["/path/to/apple-health-chat-mcp/dist/index.js"], "env": { "HEALTH_EXPORT_DIR": "/path/to/your/health/files" } } } }Start asking questions! Restart Claude Desktop and chat about your health data.
Related MCP server: Apple Health MCP
Features
Natural Language Queries: Ask questions in plain English
Comprehensive Metrics: Steps, heart rate, sleep, energy, and more
Flexible Time Periods: Today, yesterday, last week, custom ranges
Local Processing: CSV files stay on your device
Privacy Transparent: Query results sent to Claude (not raw data)
Supported Health Metrics
Automatically detects metrics from your Health Export files:
Step Count, Heart Rate (Min/Max/Avg)
Sleep Analysis, Active Energy
And many more from your iOS Health app
Privacy & Data Flow
Your CSV files: Stored and processed locally on your device
When you ask Claude: Query results (like "8,500 steps") are sent to Claude for analysis
Raw health data: Never leaves your device
Get Your Health Data
Use the iOS Health Export app to export your data
Set
HEALTH_EXPORT_DIRto point to your CSV filesKeep personal data out of version control (see
.gitignore)
Development
npm run dev # Development mode
npm test # Run tests
npm run lint # Lint codeLicense
MIT
Support
Issues - Report bugs or request features
Made with ❤️ for health-conscious people who want to chat with their data
Available Tools
6 toolshealth_export_askA
Ask any natural language question about your health data. The LLM will interpret the question and query the appropriate metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Specific date to query (YYYY-MM-DD format). If not provided, uses today or yesterday based on context. | |
| question | Yes | Any natural language question about your health data (e.g., "How active was I?", "Did I get enough sleep?", "What was my fitness like?") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It discloses the LLM interpretation behavior but does not state whether the operation is read-only, potential limitations, or response format. The 'query' wording suggests read-only but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but adequate for a simple NL tool. However, without output schema or guidance on when to use alternatives, there are gaps in contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both 'question' and 'date' having descriptions in the schema. The tool description adds no additional parameter semantics beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool allows asking natural language questions about health data and clarifies the LLM interprets the question to query metrics. This distinguishes it from sibling tools like health_export_query, which likely handle structured queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for natural language questions but does not explicitly contrast with sibling tools or provide exclusions. It mentions 'any natural language question' giving context but no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_export_get_metricsA
Get raw health metrics data for a specific date range. Use this when you need to analyze specific metrics or perform custom calculations.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | Specific metrics to retrieve (optional). If not provided, returns all available metrics. | |
| end_date | Yes | End date (YYYY-MM-DD format) | |
| start_date | Yes | Start date (YYYY-MM-DD format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds context like 'raw' and 'custom calculations' but does not mention potential rate limits, pagination, output format, or error handling. Given it is a read-only get operation, the lack of such detail is acceptable but still not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and the second sentence provides usage guidance. There is no redundant or irrelevant information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read-only tool with no output schema and no annotations, the description is largely sufficient. It explains what the tool does and when to use it. However, it could be more complete by clarifying the distinction from the sibling 'health_export_metrics', which might otherwise cause confusion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all three parameters with 100% coverage. The description only echoes 'date range' and 'specific metrics' without adding new meaning or syntax details beyond what the schema already states. This aligns with the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get raw health metrics data for a specific date range.' It identifies a specific verb (Get) and resource (raw health metrics data), and distinguishes itself from sibling tools like 'health_export_report' or 'health_export_ask' by emphasizing raw data and custom calculations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use this when you need to analyze specific metrics or perform custom calculations.' This clearly indicates when to use the tool, but it does not mention alternatives or when not to use it, such as using 'health_export_report' for pre-built reports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_export_metricsC
Get specific metric data with optional filtering and aggregation
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date for the data (YYYY-MM-DD format) | |
| start_date | No | Start date for the data (YYYY-MM-DD format) | |
| aggregation | No | Aggregation function to apply to the metric data | |
| metric_name | Yes | Name of the metric to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Get' and does not describe return format, pagination, authentication needs, or any side effects, which is insufficient for a data retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the primary action and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and the existence of a similarly named sibling tool, the description is incomplete. It doesn't explain what the returned data looks like or when this tool should be preferred over get_metrics, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for all four parameters, so the description does not need to add much. It does hint at 'optional filtering and aggregation' which maps to start_date/end_date and aggregation parameters, but adds no syntax or detailed semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves metric data with filtering and aggregation options. However, it does not differentiate from the sibling 'health_export_get_metrics', which appears to serve a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the alternatives such as health_export_query, health_export_report, or health_export_get_metrics. There is no mention of use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_export_queryB
Execute SQL-like queries on health data from Health Export CSV files
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL-like query to execute on health data. Supports SELECT, WHERE, GROUP BY, ORDER BY, LIMIT clauses. | |
| format | No | Output format for the query results | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the tool is read-only, what side effects exist, or any limitations. The schema mentions SELECT clauses, but the description itself adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly conveys the tool's purpose. It is appropriately concise with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 2 well-documented parameters, so the description plus schema is mostly sufficient. However, there is no output schema, and the description does not mention output formats or any constraints, leaving some ambiguity for an agent deciding whether this tool fits the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds no extra meaning beyond 'SQL-like queries', which is already captured in the query parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Execute' and the resource 'health data from Health Export CSV files', which is specific. It distinguishes from sibling tools like health_export_report and health_export_metrics by emphasizing SQL-like queries, though it could be more precise about being SELECT-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: if you need to run custom SQL-like queries, use this tool. However, it does not explicitly mention when to prefer this over alternatives like health_export_ask or health_export_metrics, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_export_reportC
Generate structured health reports for specific time periods
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date for the report (YYYY-MM-DD format) | |
| start_date | No | Start date for the report (YYYY-MM-DD format) | |
| report_type | Yes | Type of report to generate | |
| include_metrics | No | List of metrics to include in the report |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavior. It only states the action 'Generate structured health reports' without mentioning read-only nature, permissions, return format, or side effects. It is not misleading, but it is severely under-informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the primary verb and resource, containing no redundant words. However, it is terse and could benefit from a brief note about report types or alternatives, but as pure conciseness it is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits critical context: the nature of the returned report, how report_type affects output, how include_metrics interacts with dates, and the distinction from sibling tools. Since there is no output schema, the description must explain return behavior, and it fails to do so.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds little beyond the schema; 'specific time periods' loosely maps to start_date/end_date but does not clarify relationships between parameters or report_type enum values. The schema already provides detailed parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') with a resource ('structured health reports') and scoping ('for specific time periods'), clearly indicating the tool's function. It distinguishes from sibling tools like health_export_query or health_export_get_metrics by emphasizing report generation, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings. It does not mention alternatives, exclusions, or prerequisites. The only implied usage is for generating reports over time periods, but no explicit comparison with query or metrics tools is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_export_schemaA
Get available metrics, date ranges, and sample data from health export files
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of disclosure. It indicates the return content (metrics, date ranges, sample data) but does not state whether the operation is read-only, how files are accessed, or potential costs/limits. The verb 'Get' implies a safe read, but this is not explicit, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action ('Get') and the resource ('available metrics, date ranges, and sample data'). It is concise with no wasted words, fully matching the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema), the description covers the main return content. However, it lacks contextual cues such as when to call this tool before making queries or reports, and the description alone does not fully explain how the returned sample data relates to actual query operations. This leaves the tool's place in the workflow somewhat vague.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, the baseline is 4. The description adds meaning by specifying what information the tool exposes (metrics, date ranges, sample data), which helps the agent understand the tool's utility beyond the empty schema. However, it does not need to describe parameters since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves available metrics, date ranges, and sample data from health export files. This specific verb+resource combination distinguishes it from sibling tools like health_export_query or health_export_report, which likely focus on querying or reporting actual data rather than schema metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention exclusions perior alternatives, despite there being several sibling tools with overlapping names like health_export_metrics and health_export_get_metrics. An agent would not know whether to call this first for discovery or for something else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
health_export_ask - First observed
health_export_get_metrics - First observed
health_export_metrics - First observed
health_export_query - First observed
health_export_report - First observed
health_export_schema
TDQS
Scored across 6 tools
Multiple tools have overlapping purposes: health_export_metrics and health_export_get_metrics both retrieve metric data with filtering, and health_export_query can also be used for similar queries. health_export_ask is a catch-all natural language interface that may subsume the others, creating confusion about which tool to select.
All tools share the 'health_export_' prefix, but the suffixes mix verb forms (query, report, ask, get_metrics) with noun forms (schema, metrics). The similar names 'health_export_metrics' and 'health_export_get_metrics' further reduce consistency.
With 6 tools, the server is well-scoped for querying and analyzing Apple Health export data. Each tool has a place in the workflow, and the count is within the ideal range for a domain-specific server.
The server covers schema discovery, raw data retrieval, aggregated metrics, reports, and natural language queries, providing a solid read-only query surface. Minor gaps exist, such as no explicit way to list all available export files, but these are not critical for the core purpose.
Maintenance
Related MCP Connectors
- SomviaOAuthapp.somvia
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude Desktop to access and analyze Garmin wearable health data including sleep, HRV, Body Battery, and activity metrics. Users can query their health trends, track recovery, and generate interactive HTML dashboards using natural language.96MIT
- AlicenseBqualityCmaintenanceEnables users to query Apple Health metrics, workouts, and trends from CSV files exported via the Health Auto Export app. It allows MCP clients to analyze health data such as heart rate, sleep stages, and activity levels directly from local iCloud Drive storage.3211MIT
- FlicenseBqualityDmaintenanceEnables Claude to directly access, query, and analyze local CSV files using natural language, keeping data private and local.41-
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read your Whoop recovery, sleep, cycle, and workout data through natural language queries.370MIT