Garmin Coach MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_PASSWORD | Yes | Your Garmin Connect password | |
| GARMIN_USERNAME | Yes | Your Garmin Connect username |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_daily_overviewA | Get a comprehensive daily overview including sleep, activities, and health metrics |
| get_sleep_dataB | Get detailed sleep data for a specific date from Garmin Connect |
| get_health_metricsB | Get aggregated health metrics for a specific date |
| get_heart_rate_dataC | Get detailed heart rate data for a specific date |
| get_weight_dataA | Get weight and body composition data for a specific date |
| get_hydration_dataB | Get daily hydration (water intake) data for a specific date |
| get_activitiesA | Get list of recent activities with optional filtering and pagination |
| get_activity_detailsC | Get detailed information for a specific activity |
| get_weekly_volumeC | Get weekly training volume aggregation for a specific week |
| get_training_stress_balanceA | Get training stress balance (TSB), chronic training load (CTL), and acute training load (ATL) for a specific date. TSB = CTL - ATL indicates form/freshness. Uses HR-based TSS calculation when available, falls back to duration estimates. |
| get_vo2maxA | Get VO2max history with one-decimal precision. Garmin's UI rounds VO2max to a whole number, which can sit unchanged for months while the underlying value moves — use this to see the real trend. Defaults to the last 90 days. |
| get_activity_lapsA | Get per-lap splits for one activity — the individual interval reps with pace, HR and cadence, rather than the aggregated totals get_activity_details returns. Essential for analysing whether an interval session held pace or faded. |
| get_race_predictionsA | Get Garmin's own predicted race times for 5K, 10K, half marathon and marathon, based on current fitness. |
| get_hrvA | Get overnight heart rate variability: last night's average, weekly average, baseline range and status (BALANCED / UNBALANCED / LOW). A recovery and autonomic-load marker. |
| get_training_statusB | Get Garmin's aggregated training status for a date, including the most recent VO2max reading and load balance. |
| get_hr_zonesA | Get the heart rate zones configured on the account, per sport, and crucially which basis they are calculated from (max HR, heart rate reserve, or lactate threshold). The same percentage band maps to very different bpm depending on the basis, so check this before interpreting any zone the watch reports. |
| get_activity_hr_zonesA | Get time spent in each heart rate zone during one activity, with each zone's share of the session. Average HR hides distribution — use this to tell an evenly aerobic run from one that swung between too hard and too easy. |
| get_training_readinessA | Get training readiness for a date: the score the device derives from sleep, recovery time, HRV and recent load. A go / hold check before a hard session. |
| create_running_workoutA | Create a structured workout in Garmin Connect. Defaults to running; set |
| schedule_workoutA | Schedule a workout to a specific date in Garmin Connect calendar. Use the workoutId from create_running_workout response. |
| get_scheduled_workoutsA | Get scheduled workouts from Garmin Connect calendar for a date range. Defaults to the current week (Monday to Sunday) if dates not provided. Returns list of scheduled workouts with details including scheduleId for unscheduling. |
| delete_workoutA | Permanently delete a workout from Garmin Connect library. This also removes the workout from all calendar dates where it was scheduled. This operation cannot be undone. |
| unschedule_workoutA | Remove a workout from Garmin Connect calendar. The workout remains in your library for future scheduling. Use the scheduleId from get_scheduled_workouts response. |
| get_workout_detailsA | Get detailed information for a specific workout including steps, targets, and duration. Returns the complete workout structure with formatted step information. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Most tools target clearly distinct endpoints (sleep, HRV, VO2max, hydration, etc.) and descriptions do a good job clarifying boundaries. However, get_daily_overview overlaps with get_sleep_data, get_health_metrics, and get_activities, and the cluster of training metrics (status, readiness, TSB) could confuse without careful reading.
All tools follow a consistent snake_case verb_noun pattern: get_*, create_*, schedule_*, unschedule_*, delete_*. The only mild oddity is create_running_workout despite supporting other sports, but the style remains uniform.
24 tools sits in the heavy range and feels borderline for a coaching server. While most map to distinct Garmin endpoints, there is some redundancy (daily overview duplicates other getters) and potential to consolidate.
The surface covers activity data, health metrics, training analytics, and the full workout scheduling lifecycle (create, schedule, unschedule, delete, view details). Missing an update_workout operation and tools for courses/routes, but core coaching workflows are supported.