MCP server for Garmin Connect integration, providing tools to access activities, health data, workouts, and training plans
23 tools with consistent verb-noun naming (get_, schedule_, delete_, etc.). All tools have descriptions (10-200 chars, within baseline 34-392 range). Input schemas present with type definitions for all parameters. However, output schemas are undocumented, LLMs cannot predict response structure for chaining. Parameter descriptions are minimal (often 1-2 sentences); many lack format constraints, ranges, or examples. Error handling is absent, no recovery guidance, no actionable error messages. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Date parameters (YYYY-MM-DD) lack regex patterns or format declarations. No pagination support despite tools returning lists (get_activities, get_workouts, get_scheduled_workouts). Missing dependency hints (e.g., 'Call get_activities first to get activity_id before calling export_activity'). Strengths: clear naming, consistent parameter typing, no secrets exposed.
Delete a workout from Garmin Connect by its ID.
Export a summary CSV of activities between start_date and end_date.
Export a single activity file. fmt options: gpx, tcx, fit, csv. Returns the file path where the export was saved.
Return the most recent activities. activity_type (optional): filter by sport. Common values: running, strength_training, swimming, cycling, walking. Note: filtering happens client-side, so limit applies before filtering. Use a higher limit when filtering to avoid missing results.
Return activities between start_date and end_date (YYYY-MM-DD). End defaults to today. activity_type (optional): filter by sport. Common values: running, strength_training, swimming, cycling, walking.
No output schemas documented. LLMs cannot predict response structure, breaking tool chaining. E.g., get_activities returns a list but structure is unknown, downstream tools cannot extract activity_id reliably.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are risk-stratified (READ_ONLY, WRITE, DESTRUCTIVE) but LLMs cannot see this. delete_workout and unschedule_workout lack destructive warnings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Return full details for a single activity by its ID.
Return Body Battery data for target_date (YYYY-MM-DD).
Return body composition (weight, BMI, etc.) for target_date (YYYY-MM-DD).
Return the list of devices linked to the Garmin account.
Return the gear (shoes, bikes, etc.) associated with the account.
Return heart-rate data for target_date (YYYY-MM-DD).
Return HRV (Heart Rate Variability) data for target_date (YYYY-MM-DD).
Return workouts scheduled on the Garmin calendar between start_date and end_date (inclusive). Dates in YYYY-MM-DD format. Returns a list of {date, workoutId, workoutName, sportType} sorted by date.
Return sleep data for the night ending on target_date (YYYY-MM-DD).
Return SpO2 (blood oxygen) data for target_date (YYYY-MM-DD).
Return daily stats (steps, calories, floors, etc.) for target_date (YYYY-MM-DD).
Return stress data for target_date (YYYY-MM-DD).
Return the user's Garmin profile information.
Return the most recent workouts saved in Garmin Connect.
Rename an existing workout in Garmin Connect (any sport type). Preserves all steps.
Save a training plan JSON to ~/devel/garmin/data/ for later reference. filename : file name including extension, e.g. "running_plan.json" plan_json : valid JSON string with the plan content Overwrites any existing file with the same name. Returns the absolute path where the file was saved. Convention: running_plan.json — weekly running plan swimming_plan.json — weekly swimming plan strength_plan.json — weekly strength plan coach_plan.json — unified weekly plan (all sports)
Schedule an existing workout on the Garmin calendar (YYYY-MM-DD).
Remove a workout from the Garmin calendar without deleting the workout definition. Use the workoutScheduleId returned by schedule_workout or get_scheduled_workouts.
No error handling or recovery guidance. Tools lack actionable error messages. E.g., if export_activity fails, LLM has no guidance on retry strategy or alternatives.
Date parameters (target_date, start_date, end_date) lack format constraints. Descriptions say 'YYYY-MM-DD' but no regex pattern or JSON Schema format declaration. LLMs may pass invalid dates.
No pagination support. get_activities, get_workouts, get_scheduled_workouts return lists but lack limit/offset/cursor parameters and total_count. Large result sets will exhaust context.