Apple Health export to a deduplicated SQLite vault, deterministic analysis in Python, and an MCP tool surface an LLM can ask questions of.
Single tool 'mark_workout_not_a_session' has a clear, well-written description (186 chars) that explains WHAT it does, WHEN to use it, and its idempotent semantics. Naming is verb-noun and specific. Input schema is present with all parameters typed (string). However, the schema lacks descriptions for 3 of 4 parameters (reason, source, marked_at have no descriptions visible in the schema definition), violating the critical rule that every parameter needs a description. Output schema is not documented. The tool is write-capable but lacks error handling guidance or recovery instructions. No tool annotations (destructiveHint, idempotentHint) despite the description claiming idempotency.
Mark one stored workout as not a real session. This is explicit user correction only: it never deletes or edits the device-recorded workout. The stable ``workout_key`` comes from ``list_workouts``; ``source`` and ``marked_at`` make the correction attributable and durable. Repeating the call is idempotent.
Parameter descriptions missing in schema. 'reason', 'source', and 'marked_at' parameters have no descriptions in the input schema, violating the critical rule that every parameter needs a description for LLM disambiguation.
Output schema not documented. Tool description does not specify what the tool returns (success confirmation, error details, etc.), forcing LLMs to guess the response structure.
No error handling guidance. Tool description does not explain what happens on failure (e.g., invalid workout_key, database errors) or how the LLM should recover.
Tool annotations missing. Despite the description claiming idempotency, the tool lacks idempotentHint annotation. The write operation lacks destructiveHint annotation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Single tool server. Only one tool exposed limits agent capability. Consider adding complementary read tools (list_workouts, get_workout_details) to enable richer health analysis workflows.