MCP Server for Garmin Connect — read activities, health data, and push training plans from any AI assistant
Server has 5 tools with basic naming (verb_noun pattern) and descriptions present. However, descriptions are generic and lack LLM-optimization guidance. Parameter schemas are present but descriptions are minimal (10-30 chars, well below the 72-char baseline). No output schemas documented. Error handling is absent, no recovery guidance, categorization, or actionable error messages. Tool descriptions do not explain WHEN to use each tool vs. alternatives (e.g., get_activities vs. get_health_data distinction unclear). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing parameter constraints (e.g., days/limit ranges, date format validation). Composition is reasonable (single responsibility per tool), but chaining support unclear, responses don't document which IDs downstream tools need.
Fetch recent activities from Garmin Connect
Fetch body composition data (weight, body fat, etc.) from Garmin Connect
Fetch device information and settings from Garmin Connect
Fetch health metrics (steps, heart rate, sleep, etc.) from Garmin Connect
Push a structured training plan/workout to Garmin Connect
Parameter descriptions are too brief (10-30 chars vs. 72-char baseline). 'Number of days to look back' lacks format constraints, valid range, or default behavior clarity.
No output schemas documented. LLMs cannot infer what fields get_activities returns (activity_id, date, distance, duration, etc.), forcing guesswork on downstream tool chaining.
No error handling guidance. Code has retry logic (garmin_retry decorator) but tools do not document what errors are retryable, what user-fixable errors look like, or recovery steps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Tool descriptions lack WHEN-to-use guidance. get_activities and get_health_data both fetch Garmin data but distinction is unclear, does get_activities include steps/HR, or only structured workouts?
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). push_workout is marked WRITE but LLM has no machine-readable signal; get_* tools are READ_ONLY but not annotated.