garmin-connect-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| garmin-loginA | Returns step-by-step instructions for authenticating with Garmin Connect. Requires the Playwright MCP server to be installed. After following these steps, ALWAYS call the check-session tool to verify the login worked. |
| check-sessionA | Check if the saved Garmin Connect session is still valid. MUST be called after garmin-login to verify authentication worked. |
| list-activitiesA | List your Garmin Connect activities with pagination |
| get-activityB | Get full activity summary (name, type, distance, duration, HR, calories, etc.) |
| get-activity-detailsA | Get time-series metrics for an activity (HR, cadence, elevation, pace over time) |
| get-activity-splitsB | Get lap/split data for an activity |
| get-activity-hr-zonesB | Get heart rate time-in-zone breakdown for an activity |
| get-activity-polylineA | Get full-resolution GPS track/polyline for an activity |
| get-activity-weatherB | Get weather conditions during an activity |
| get-user-profileA | Get your Garmin Connect user profile and settings |
| download-fitB | Download the original FIT file for an activity. Returns the file path. |
| get-daily-summaryB | Get daily summary: steps, calories, distance, intensity minutes, floors, etc. |
| get-daily-heart-rateB | Get heart rate data throughout the day (resting HR, HR timeline) |
| get-daily-stressB | Get stress level data throughout the day |
| get-daily-summary-chartB | Get daily wellness summary chart data (combined health metrics) |
| get-daily-intensity-minutesB | Get intensity minutes earned for a date |
| get-daily-movementB | Get daily movement/activity data |
| get-daily-respirationC | Get respiration rate data for a date |
| get-sleepC | Get sleep data: score, duration, stages, SpO2, HRV during sleep |
| get-body-batteryA | Get today's body battery charged/drained values |
| get-hrvB | Get heart rate variability (HRV) data for a date |
| get-weightB | Get weight measurements over a date range |
| get-personal-recordsA | Get all personal records with history (fastest mile, longest run, etc.) |
| get-fitness-statsB | Get aggregated fitness stats by activity type over a date range |
| get-vo2maxB | Get latest VO2 Max / fitness level estimate |
| get-hr-zones-configB | Get your configured heart rate zone boundaries |
| get-training-readinessA | Get training readiness score for a date (based on sleep, recovery, training load) |
| get-sleep-statsB | Get sleep statistics over a date range (averages, trends) |
| get-calendarB | Get monthly calendar with activities, workouts, and events |
| get-goalsC | Get fitness goals |
| get-badgesA | Get all earned badges/achievements |
| get-badge-leaderboardB | Get badge leaderboard among your connections |
| get-hydrationB | Get daily hydration/water intake data |
| get-power-zonesA | Get power zone configuration for all sports |
| list-workoutsB | List your saved workouts |
| get-workoutA | Get a single workout by ID with full step/segment details |
| download-workout-fitC | Download a workout as a FIT file |
| create-workoutA | Upload a workout from JSON data. Creates a new workout in Garmin Connect from structured workout data. IMPORTANT: Step types must use Garmin's DTO format:
IMPORTANT: For heart rate zone targets, use "zoneNumber" (1-5), NOT targetValueOne/targetValueTwo. targetValueOne/targetValueTwo are only for absolute value ranges (e.g. pace in m/s, power in watts). Sport type IDs: 1=running, 2=cycling, 3=swimming, 4=walking, 5=strength_training, 6=fitness_equipment, 7=hiking. Step type IDs: warmup (1), cooldown (2), interval (3), recovery (4), rest (5). End condition IDs: time (2, value in seconds), distance (3, value in meters), lap.button (7, no value), reps (10, value = rep count — use for strength exercises). Target type IDs: no.target (1), speed (2, m/s range via targetValueOne/targetValueTwo), heart.rate.zone (4, use zoneNumber 1-5), power.zone (11, use zoneNumber). Available Templates: Instead of building workout JSON from scratch, use these MCP resources as starting points:
Access these resources using your MCP client's resource reading capability, modify the template as needed, and pass the resulting JSON as the workout parameter. Example workout structure with HR zone target: { "workoutName": "My Workout", "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSegments": [{ "segmentOrder": 1, "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSteps": [{ "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 1200.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 3 }] }] } Example with RepeatGroupDTO for intervals: { "workoutName": "Interval Run", "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSegments": [{ "segmentOrder": 1, "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSteps": [ { "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 1, "stepTypeKey": "warmup"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 600.0, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"} }, { "type": "RepeatGroupDTO", "stepOrder": 2, "numberOfIterations": 6, "workoutSteps": [ { "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 60.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 5 }, { "type": "ExecutableStepDTO", "stepOrder": 2, "stepType": {"stepTypeId": 4, "stepTypeKey": "recovery"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 90.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 2 } ] }, { "type": "ExecutableStepDTO", "stepOrder": 3, "stepType": {"stepTypeId": 2, "stepTypeKey": "cooldown"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 600.0, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"} } ] }] } |
| schedule-workoutA | Schedule an existing workout to a date on your calendar. The workout will sync to your device. |
| delete-workoutB | Delete a workout from Garmin Connect |
| run-testsA | Returns a test plan for verifying all garmin-connect-mcp tools work. Call each tool listed and report results. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| simple-run | |
| interval-running | |
| tempo-run | |
| strength-circuit | |
| workout-structure-reference |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/etweisberg/garmin-connect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server