Local-first Apple Health MCP server. Lets AI assistants answer questions about your sleep, workouts, activity and heart data from a local export.
Apple Health MCP has three well-defined tools with clear schemas and reasonable descriptions. All tools are READ_ONLY and have proper input schema validation via AJV. Tool names follow verb_object conventions (health_query, health_report, health_schema). Descriptions are present and informative (94-162 chars), exceeding the 10-char minimum. However, there are notable gaps: (1) no output schema documentation, LLMs cannot infer the structure of results, only that query returns 'json', 'csv', or 'summary' format, (2) no detailed parameter descriptions explaining constraints (e.g., what constitutes a valid DuckDB query, what metrics are available for include_metrics array), (3) no error handling guidance, if a malformed query is passed, the tool provides no recovery hints, (4) no per-parameter validation messages, (5) tool composition lacks reference IDs in responses that downstream tools might need. The health_schema tool is well-positioned as a discovery mechanism but lacks explicit guidance ('Call this first to understand available tables'). Parameter schemas are properly typed (string enums for format/report_type) but lack minLength/maxLength or pattern constraints on free-form inputs like 'query'. Error reporting is enabled but no evidence of custom recovery messages.
Run one analytical query on Apple Health data.
Generate structured health reports for a specific period
Get information about available health data tables, their structure, and sample data to help write SQL queries
No output schema documentation. LLMs cannot infer the structure of results returned by health_query or health_report. For example, what fields does a 'json' format result contain? What does 'summary' format look like?
health_query 'query' parameter lacks constraints. Accepts arbitrary DuckDB SQL but provides no guidance on scope (which tables are available?), performance limits, or error recovery. LLMs may pass invalid queries with no hint how to fix them.
health_report 'include_metrics' parameter lacks enum or description of valid metric names. The description says 'Metrics to include (default: all)' but provides no list. Agents must guess or call health_schema first.
No error handling guidance. If a malformed DuckDB query is passed, or if an invalid date range is provided, the tool provides no actionable recovery message (e.g., 'Invalid query syntax at line 2. Check available tables via health_schema.').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
health_schema tool description does not indicate it is a discovery tool meant to be called before querying. Should explicitly state: 'Call this first to understand available tables and columns before writing health_query calls.'