mcp-garmin-connect
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Your Garmin Connect email address. | |
| OPENAI_API_KEY | No | API key for OpenAI provider demo (optional). | |
| GARMIN_PASSWORD | Yes | Your Garmin Connect password. | |
| DEEPSEEK_API_KEY | No | API key for DeepSeek provider demo (optional). | |
| ANTHROPIC_API_KEY | No | API key for Anthropic Claude provider demo (optional). |
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 | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_recoveryB | Current recovery state: readiness, HRV, sleep, body battery, and status. |
| get_sleepB | Sleep duration and sleep scores for the last N days. |
| get_resting_heart_rateB | Daily resting heart rate with 7-day and 30-day trend summaries, up to 30 days. |
| get_stressB | Daily all-day stress levels and stress duration buckets. |
| get_recent_activitiesA | Recent Garmin activities with normalized sport-aware summary fields. Pass start_date/end_date for a specific historical window (both inclusive);
otherwise the |
| get_activity_detailC | Detailed summary for one activity by Garmin activity ID. |
| get_activity_splitsB | Per-lap splits for one activity: pace, HR, cadence, elevation and HR drift. |
| get_recent_loadB | Training volume aggregated by sport over the last N days. |
| get_training_loadB | Garmin training load status, acute/chronic load, and load focus. |
| get_fitnessB | VO2 max, cycling FTP, and race predictions. |
| get_zonesB | Heart-rate zones and thresholds from Garmin user settings when available. |
| get_personal_recordsC | Personal records returned by Garmin Connect. |
| get_running_summaryC | Running summary: sessions, distance, pace, HR, longest run, fastest run, monthly split. |
| get_monthly_running_statsC | Monthly running stats for the last N calendar-ish months based on recent activities. |
| get_health_summaryB | Compact health snapshot combining recovery, sleep, and stress. |
| get_hrv_historyA | Daily HRV (last-night and weekly average) plus a baseline. get_recovery carries only a 7-day HRV window, which is fine for "how am I today"
but useless for trend questions. This is the same data over a longer range.
|
| get_body_battery_rangeA | Daily body battery (charged, drained, highest, lowest, end of day). get_recovery only exposes today's levels; this walks the range endpoint so the
history is available for trends. The raw per-timestamp arrays are summarised away
because they are large and rarely useful. |
| get_body_compositionA | Weight (and body fat/muscle when the scale reports it) from Garmin Connect. Personal API only. Weight is what most fitness decisions here hinge on, and the unofficial flow never exposed it as a tool. |
| get_spo2C | Blood oxygen (SpO2) acclimation per day. Personal API only. |
| get_hydrationB | Logged daily fluid intake in millilitres. Personal API only. |
| get_steps_historyC | Daily step totals and goals. Personal API only. |
| get_fitness_ageB | Garmin's fitness age for today. Personal API only. |
| download_activity_fileA | Download the original activity file (ZIP containing the .FIT) for one activity. Personal API only. This is the raw recording — GPS track, HR, cadence, laps, sample by sample — which the unofficial flow cannot fetch. Garmin strips some fields it computes (VO2 Max, recovery time, performance condition) from files delivered through its API, so this is not identical to a manual download. |
| get_full_snapshotC | Comprehensive Garmin data snapshot for holistic analysis. Every section carries a |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| recovery_check | Use Garmin recovery data to decide whether today should be easy or hard. |
| weekly_training_review | Review recent training volume, sport balance, recovery, and risk. |
| activity_analysis | Analyze one recent workout using its activity details. |
| race_plan_context | Gather Garmin context before creating a race or training plan. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Most tools target distinct metrics, but there is meaningful overlap among the health/recovery/snapshot tools: get_recovery, get_health_summary, get_full_snapshot, get_body_battery_range, get_hrv_history, get_sleep, and get_stress all overlap in scope. The descriptions clarify ranges versus snapshots, but an agent could still hesitate about which tool to call for broad questions like "how am I doing?"
All tool names use snake_case and a consistent verb_noun pattern, overwhelmingly with the get_ prefix. download_activity_file is a deliberate action-specific deviation rather than an inconsistency.
At 24 tools, this server sits in the heavy range for a single MCP server, even though the Garmin domain is broad. Most tools are purposeful, but the count is large enough that selection and maintenance become harder.
The surface covers activities, recovery, sleep, HRV, stress, body battery, body composition, SpO2, hydration, steps, fitness metrics, zones, records, and raw activity download. Minor gaps remain, such as structured workouts, device/gear data, and direct access to per-sample activity streams outside the FIT download, but core workflows are well covered.