MCP server connecting Claude Code to Garmin Connect for fitness and health data
garmin-connect-mcp demonstrates solid naming conventions and comprehensive parameter schemas across 16 tools, but falls short of production quality due to inconsistent description depth, missing output schema documentation, and inadequate error guidance. Tool names follow verb-noun patterns well (get-*, create-*, delete-*, log-*, update-*), and most parameters include type and description. However, descriptions vary from adequate to minimal, and the response structures are not formally documented for LLM planning. No tool annotations (readOnlyHint/destructiveHint) are visible, and error handling relies on generic JSON responses without recovery guidance.
Import and confirm a strength training session from Garmin (converts exercise names from Garmin's taxonomy, drops unmapped exercises, preserves per-set reps/weight/rest)
Create and schedule a Garmin strength training workout with exercises
Delete a logged lift session by ID
Delete a Garmin Connect workout
Get a list of recent activities (runs, rides, swims, etc.)
Get detailed information about a specific activity
No output schema documentation. While parameters are well-defined, the response structures for each tool are not formally documented (field names, types, availability). LLMs cannot plan downstream tool calls without knowing what fields to extract.
Missing tool annotations. No readOnlyHint, destructiveHint, or idempotentHint visible in tool definitions. Risk categories (READ_ONLY, WRITE, DESTRUCTIVE) are present in metadata but not exposed via standard MCP tool annotations. Per spec 2026-07-28, tools should declare their safety profile explicitly.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 54 | - | v1 |
Get daily summary statistics (calories, steps, heart rate, sleep, etc.) for a specific date
Get all logged sessions for a specific exercise (paginated, sorted newest-first)
Get progression analytics for an exercise: current working weight, due-to-add flag, and full progression trend
Get sleep data including total duration and sleep stage breakdown for a specific date
Get per-set strength training data for a specific session by activity ID or most recent strength activity
Get VO2 max and training load data for a specific date
Get the user's Garmin Connect profile information
Get the user's Garmin Connect settings (units, display preferences, etc.)
Log a strength training session to the local lift database with exercise name, sets (weight/reps/rest), optional note, and optional date
Update a logged lift session's weight, reps, rest duration, and/or note by session ID
Inconsistent and shallow descriptions. Many tool descriptions lack depth on WHEN to use them vs similar tools, and what they return. E.g. 'Get VO2 max and training load data for a specific date' (get-training-status) does not explain dependencies or frequency (is this once per day? updatable?).
No error recovery guidance. Tool descriptions and parameters do not indicate what happens on failure (e.g. 'If date is invalid, returns 400. Call get-daily-summary with a valid YYYY-MM-DD date.'). Handlers return formatResult() which serializes JSON but provides no recovery hints.
Confirmability gap for destructive operations. delete-workout and delete-lift accept an ID and perform deletion immediately. No dry-run, no explicit confirmation step shown. Per pattern:confirmation-request, agents should verify before irreversible changes.
Pagination not fully exposed. get-activities accepts 'start' and 'limit' but response does not return a total count or next_cursor. Agents cannot determine if more results exist, forcing either assumption-based pagination or repeated calls.
Opaque exercise/category taxonomy in create-workout. Parameter 'exercises' accepts 'both known keys and raw category/exerciseName pairs' but does not provide an enum, discovery tool, or parsing documentation. LLMs will hallucinate category names and exercise names, causing failures.