Garmin Connect MCP server specialized for running data
Garmin MCP server has 23 tools with consistent naming conventions (all start with action verbs: get_, create_) and clear descriptions. However, the server exhibits significant gaps: most parameter descriptions are minimal or missing entirely, input schemas lack proper type information for array/object parameters, and output schemas are completely undocumented. The tool descriptions are generally adequate (averaging ~120 chars, within the 10-1024 range), but lack actionable recovery hints and WHEN-to-use context. Tool composition is clean (each tool does one thing), but critical parameters like the 'steps' array in create_running_workout are defined as generic objects without field documentation. Error handling is present in the client wrapper (retry logic, rate-limit handling) but tool responses don't include error recovery guidance. Security is reasonably sound (no secrets in params, auth handled server-side), but no tool annotations (readOnlyHint, destructiveHint) are present despite having clear read/write semantics.
Create a structured running workout and upload it to Garmin Connect. The workout will be synced to your Garmin watch. Each step has a 'type' (warmup, interval, recovery, rest, cooldown, repeat) and either 'duration_seconds' (time-based), 'distance_meters' (distance-based), or neither (lap button - press lap to advance to next step). Repeat steps have 'count' and nested 'steps'. Optionally set a 'target' with type (pace, heart_rate, cadence, power) and min/max values. Each step can have a 'description' for notes. Repeat steps can have 'skip_last_rest': true to skip the last recovery step.
Get running activities within a date range.
Get full details of a specific running activity including pace, heart rate, cadence, elevation, training effect, and more.
Get heart rate zone distribution for a specific activity. Shows time spent in each HR zone. Essential for 80/20 training analysis and intensity distribution monitoring.
Get split summary information for a specific running activity.
Array and object parameters lack field documentation. 'steps' parameter in create_running_workout is defined as array of objects but provides no schema for the nested structure (e.g., what fields are required? what are valid 'type' values?).
Output schemas are completely undocumented across all 23 tools. LLMs cannot know what fields to expect in responses, making downstream tool chaining error-prone and forcing agents to guess at field names.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
Get split information for a specific running activity.
Get weather data for a specific running activity.
Get comprehensive daily wellness data: stress level, Body Battery, SpO2 (blood oxygen), and respiration rate. Helps assess recovery and readiness for training.
Get fitness goals and their progress.
Get daily heart rate data including resting HR, max HR, and average HR. Useful for tracking fitness trends and recovery.
Get Heart Rate Variability (HRV) data. Higher HRV indicates better recovery status. Important for training load management.
Get lactate threshold data. Critical for Norwegian double threshold training and zone-based training methods.
Get monthly running summary with total distance, runs, avg pace, weekly breakdown, and comparison with previous month.
Get all personal records (PRs) including best times for various distances (1K, 1 mile, 5K, 10K, half marathon, marathon). Essential for Jack Daniels VDOT calculation.
Get predicted race times for 5K, 10K, half marathon, and marathon based on current fitness level.
Get recent running activities. Returns a list of running activities with key metrics like distance, pace, heart rate, cadence, and elevation.
Get running gear (shoes) list with cumulative distance and activity count. Useful for tracking shoe mileage and knowing when to replace shoes (typically every 500-800 km).
Get sleep data including duration, sleep stages (deep, light, REM), and sleep score. Sleep quality impacts training readiness.
Get training readiness score indicating how prepared you are for training today. Considers sleep, recovery, training load, and HRV.
Get current training status (Productive, Maintaining, Overreaching, Detraining, Recovery, Peaking, Unproductive).
Get VO2max estimate and fitness age data. Essential for Jack Daniels VDOT calculation and training pace zones.
Get weekly running summary with total distance, runs, avg pace, elevation, heart rate, and longest run info.
Get weekly wellness trends: daily stress, Body Battery, sleep scores. Useful for correlating recovery patterns with training load.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. All 22 read-only tools should declare readOnlyHint=true; the single write tool (create_running_workout) should declare destructiveHint=true. This enables client-side safety features and prevents accidental misuse.
Error recovery guidance is absent. Tools like get_activities_by_date and get_activity_detail should document 'If activity not found, try get_recent_activities() first' or similar recovery paths. Current error messages (via client._call retry logic) handle rate limits but don't guide LLM recovery for common failures (404, 403, invalid date format).
Pagination not fully specified. Tools returning lists (e.g., get_recent_activities with count=20) cap results but don't return total_count or next_cursor, making it unclear to the agent whether more results exist.
Parameter descriptions are minimal or generic. For example, 'count' in get_recent_activities says 'Number of activities to return (default: 20, max: 100)' but doesn't explain WHEN to use larger counts or what happens if you exceed 100. Similar issues across all tools with optional parameters.
create_running_workout description mentions 'Repeat steps have skip_last_rest' and nested structure but does not provide example JSON or detailed field reference for the complex 'steps' array. LLM users will struggle to construct valid workouts without explicit schema documentation.