Garmin Connect MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Your Garmin Connect email address | |
| GARMIN_PASSWORD | Yes | Your Garmin Connect password |
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 |
|---|---|
| setup_credentialsA | Store Garmin Connect credentials encrypted in the OS native vault and log in immediately. Use this when the server reports that credentials are missing or invalid. The password is encrypted at rest and never written to a plain text file. |
| check_credentialsA | Report whether Garmin credentials are configured, which source they come from, where the encrypted data is stored and whether the session is authenticated. Never returns the password. |
| clear_credentialsA | Delete the encrypted credentials and OAuth tokens from secure storage and end the current session. Credentials supplied through the extension settings are not affected and must be cleared there. |
| list_recent_activitiesA | Get a list of recent activities from Garmin Connect. Each one is summarised: name, type, date, distance, duration, speed, heart rate, calories, elevation, steps and training effect. Use get_activity_details for one activity in full. |
| get_activity_detailsA | Get detailed information about a specific activity including splits, heart rate zones, and GPS data. |
| get_health_metricsA | Get daily health metrics including heart rate data and step count for a specific date. |
| get_sleep_dataA | Get a night of sleep: duration, sleep stages, quality score and the nightly summary. The per-minute series behind it (movement, heart rate, stress, body battery, HRV, respiration) are reported as counts only; set includeTimeSeries to inline them, or use the dedicated tool for the one series you need. |
| get_body_compositionA | Get body composition measurements (weight, BMI, body fat, muscle and bone mass) over a period, plus the average across the period. |
| get_devicesA | List the Garmin devices registered on the account with their id, model, serial and firmware version. Use get_device_settings for the configuration of a single device. |
| get_user_profileA | Get user profile information: display name, user name, full name and both account ids. profileId is the one other Garmin data is keyed by (the ownerId on an activity, the userProfilePK on wellness records); id is a separate internal identifier. |
| get_training_statusA | Get the training status for a date: status and feedback phrase, VO2 max, fitness trend, acute and chronic training load and the acute/chronic workload ratio. |
| get_stepsB | Get step count for a specific date. Returns the total number of steps recorded. |
| get_heart_rateA | Get detailed heart rate data for a specific date including resting HR, max HR, and HR zones. |
| get_hydrationA | Get daily hydration/water intake data for a specific date. |
| get_workoutsA | Get list of scheduled/planned workouts from Garmin Connect. |
| get_activity_splitsA | Get split/lap data for a specific activity including pace, distance, and time for each split. |
| get_stress_dataA | Get stress for a date on the 0-100 scale (0-25 resting, 26-50 low, 51-75 medium, 76-100 high). Returns average/max/min and the seconds spent in each band; set includeValues to also get the ~460 three-minute samples. The average and maximum are the day figures Garmin itself reports, so they match the Connect app; the minimum and the band seconds are derived from the samples. Use get_all_day_stress for the same day broken down hour by hour. |
| get_body_batteryA | Get Body Battery energy level data for a date range. Body Battery tracks energy levels (0-100) throughout the day based on sleep, stress, and activity. Shows charged/drained periods and sleep quality impact. |
| get_hrv_dataA | Get Heart Rate Variability (HRV) data for a specific date. HRV measures the variation in time between heartbeats, indicating recovery and stress levels. |
| get_respiration_dataA | Get respiration/breathing rate data for a specific date. Shows breaths per minute throughout the day and during sleep. |
| get_spo2_dataA | Get SpO2 (blood oxygen saturation) data for a specific date. Shows pulse oximetry readings as percentage (typically 95-100% is normal). |
| get_workout_by_idA | Get detailed information about a specific workout by its ID. |
| download_workoutA | Download a workout in FIT format for syncing to a Garmin device. |
| create_workoutA | Create a new structured workout in Garmin Connect. Supports complex interval workouts with warmup, cooldown, and repeat blocks. Example for interval running workout: { "workoutName": "5x3min Intervals", "sportType": "running", "description": "Interval training", "workoutSegments": [{ "segmentOrder": 1, "sportType": "running", "workoutSteps": [ { "stepOrder": 1, "stepType": "warmup", "endCondition": "time", "endConditionValue": 600 }, { "stepOrder": 2, "stepType": "interval", "endCondition": "time", "endConditionValue": 180, "targetType": "pace" }, { "stepOrder": 3, "stepType": "recovery", "endCondition": "time", "endConditionValue": 120 }, { "stepOrder": 4, "stepType": "cooldown", "endCondition": "time", "endConditionValue": 600 } ] }] } |
| update_workoutA | Update an existing workout (name, description, or structure). |
| delete_workoutB | Delete a workout from Garmin Connect. |
| schedule_workoutA | Schedule an existing workout on a specific date. Returns a workoutScheduleId that can be used to unschedule. |
| unschedule_workoutA | Remove a scheduled workout from the calendar. IMPORTANT: Always unschedule before deleting a workout to avoid ghost entries. |
| upload_activityA | Upload an activity file (FIT, GPX, TCX format) to Garmin Connect. |
| create_manual_activityC | Create a manual activity entry in Garmin Connect. |
| set_activity_nameA | Change the name of an existing activity. |
| set_activity_typeB | Change the type/category of an existing activity. |
| delete_activityA | Delete an activity from Garmin Connect. WARNING: This action cannot be undone. |
| download_activityA | Download an activity in various formats (FIT, TCX, GPX, KML, CSV). |
| get_device_last_usedA | Get the Garmin device that uploaded data most recently, with its id, name and upload time. |
| get_device_settingsA | Get settings for a specific Garmin device. |
| get_all_day_stressA | Get the stress of a day hour by hour: average, maximum and stress band for each hour, plus the totals for the day. Use this to see when stress rose or fell; use get_stress_data for the day as a whole, and its includeValues for the individual three-minute samples. |
| get_floorsA | Get the floors climbed and descended on a date. Returns the daily totals; set includeBreakdown to also get the 96 quarter-hour intervals behind them. |
| get_intensity_minutesA | Get intensity minutes (moderate and vigorous) for a date, or for a date range when endDate is given, together with the weekly totals and goal. |
| get_max_metricsC | Get max metrics including VO2 max and related fitness data. |
| get_training_readinessB | Get training readiness score indicating how prepared your body is for training. |
| get_endurance_scoreB | Get endurance score based on recent training load. |
| get_fitness_ageA | Get fitness age estimation based on VO2 max and other metrics. |
| get_weigh_insA | Get weigh-in records for a date range. |
| add_weigh_inA | Add a new weigh-in record. Weight and body fat are stored; the water, muscle and bone percentages are accepted but Garmin discards them on a manual entry, keeping them only for measurements a smart scale uploads. |
| delete_weigh_inA | Permanently delete a single weigh-in record, identified by its weigh-in ID (the samplePk from get_weigh_ins or get_body_composition). The measurement cannot be recovered afterwards. Pass date when the weigh-in was back-dated to a day other than the one it was entered on. |
| get_blood_pressureA | Get blood pressure readings for a date range. |
| set_blood_pressureB | Record a blood pressure reading. |
| delete_blood_pressureA | Delete a blood pressure reading. Use get_blood_pressure with the /all endpoint to find the version ID. |
| get_activity_weatherC | Get weather conditions during an activity. |
| get_activity_hr_zonesA | Get time spent in each heart rate zone during an activity. |
| get_activity_exercise_setsA | Get exercise sets from a strength training activity. |
| get_goalsA | Get user goals. Without a status every status is queried in turn and the results are merged, each goal carrying the status it was found under. |
| get_adhoc_challengesC | Get ad-hoc challenges history. |
| get_badge_challengesB | Get available badge challenges. |
| get_earned_badgesA | Get all badges earned by the user, as id, key, name, category, difficulty, points and the date earned. Set includeDetails for the full badge records. |
| get_personal_recordsA | Get all personal records (PRs). Each record carries a typeId identifying its category, its value, the date it was set and, for records set during an activity, that activity. |
| get_race_predictionsA | Get predicted race times for 5K, 10K, half marathon, and marathon based on current fitness. |
| get_gear_statsA | Get usage statistics for a specific piece of gear. Note: Requires the gear UUID which can be found in Garmin Connect web interface URL. |
| link_gear_to_activityA | Link a piece of gear to an activity. Note: Requires the gear UUID which can be found in Garmin Connect web interface URL. |
| get_progress_summaryB | Get aggregated progress summary between two dates. |
| get_daily_summaryA | Get a compact daily summary: steps and goal, calories, distance, floors, intensity minutes, resting/min/max heart rate, stress, body battery and time breakdown. Use get_heart_rate for the full heart rate series. |
| get_user_summaryB | Get comprehensive user activity summary for a specific date including steps, calories, distance, active minutes, and more. |
| get_steps_dataA | Get detailed step data chart for a specific date with timestamps. |
| get_daily_stepsA | Get daily step counts for a date range (max 28 days per request, auto-chunked for longer ranges). |
| get_activities_by_dateA | Get all activities within a date range, optionally filtered by type. Each one is summarised the same way list_recent_activities summarises them. |
| get_activity_typed_splitsA | Get typed splits for an activity (more detailed than regular splits, useful for bouldering, strength training, etc.). |
| get_rhr_dayC | Get resting heart rate for a specific day. |
| get_hill_scoreB | Get hill score data indicating climbing/vertical performance. |
| get_all_day_eventsA | Get all daily events including auto-detected activities that may not have been recorded. |
| get_body_battery_eventsA | Get Body Battery events for a date (sleep, activities, naps that affected energy levels). |
| add_hydration_dataB | Add hydration/water intake data in milliliters. |
| get_available_badgesA | Get all badges available to earn, as id, key, name, category, difficulty, points and, where set, the active window and progress. Set includeDetails for the full badge records. |
| get_in_progress_badgesA | Get badges that are currently in progress (started but not completed). |
| get_available_badge_challengesB | Get available badge challenges to join. |
| get_non_completed_badge_challengesA | Get badge challenges that have not been completed yet. |
| get_in_progress_virtual_challengesA | Get virtual challenges that are currently in progress. |
| remove_gear_from_activityA | Remove/unlink a piece of gear from an activity. Note: Requires the gear UUID from Garmin Connect web interface. |
| get_gear_activitiesB | Get activities where a specific piece of gear was used. Note: Requires the gear UUID from Garmin Connect web interface. |
| get_training_plansB | Get all available training plans. |
| get_training_plan_by_idB | Get detailed information about a specific training plan. |
| get_menstrual_dataA | Get menstrual cycle data for a specific date. |
| get_pregnancy_summaryB | Get pregnancy tracking summary/snapshot data. |
| request_reloadA | Request reload of data for a specific date (useful for older data that was offloaded by Garmin). |
| get_activity_typesA | Get all activity types available in Garmin Connect. |
| get_primary_training_deviceB | Get information about the primary training device and device priorities. |
| count_activitiesA | Count the activities in Garmin Connect, over the whole history or over a date range. |
| get_fitness_statsA | Get aggregated fitness statistics between two dates. |
| get_all_gearA | Get complete list of all gear/equipment with their UUIDs. This solves the UUID problem - you can now discover all gear without needing to manually find UUIDs in the web interface. |
| update_gearC | Update existing gear/equipment details. |
| delete_gearA | Delete a piece of gear/equipment. WARNING: This cannot be undone. |
| get_gear_typesA | Get all available gear/equipment types (e.g., Shoes, Bike, Golf Clubs, Other). Returns type names and primary keys used when creating gear. |
| get_gear_makesA | Get all available gear brands/makes (e.g., Nike, Adidas, ASICS, Brooks). Returns make names and primary keys. |
| get_gear_collectionsA | Get all gear collections. Collections group gear items that are used together (e.g., running kit, bike components). |
| get_gear_collectionA | Get detailed information about a specific gear collection, including the gear items in the collection and associated activity types. |
| create_gear_collectionB | Create a new gear collection to group equipment used together (e.g., running kit, bike components). Requires a name and first use date. |
| update_gear_collectionA | Update an existing gear collection. Can change name, add/remove gear items, or change associated activity types. |
| delete_gear_collectionA | Delete a gear collection. WARNING: This cannot be undone. The gear items in the collection will NOT be deleted. |
| get_activity_commentsB | Get all comments on an activity. |
| set_activity_privacyA | Change the privacy of an activity. "subscribers" is what Garmin Connect shows as "connections only". Read the current level from accessControlRuleDTO in get_activity_details before changing it. |
| get_training_loadA | Get the monthly training load balance (low aerobic, high aerobic, anaerobic) against its target ranges. This is a snapshot taken on endDate, not an aggregate over the range. |
| get_load_ratioB | Get acute/chronic workload ratio indicating training balance and injury risk. |
| get_performance_conditionA | Get the performance condition score for a date. Garmin records this per activity rather than daily, so it is usually only available through get_activity_details. |
| get_sleep_movementB | Get movement data during sleep including restless moments. |
| get_device_alarmsA | Get the alarms configured on a Garmin device, with time, repeat days and whether each one is on. Without a deviceId every registered device is reported. |
| get_coursesA | Get saved routes/courses from Garmin Connect. |
| compare_activitiesA | Compare 2-5 activities side by side: distance, duration, speed, heart rate, calories, elevation, steps and training effect. |
| find_similar_activitiesA | Find activities similar to a reference activity by type, distance and duration (within 20% tolerance). Returns the closest matches first, each with its full metrics and a similarity score. |
| analyze_training_periodA | Comprehensive analysis of training trends, volume, and patterns over a date range. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sedoglia/garmin-mcp-ts'
If you have feedback or need assistance with the MCP directory API, please join our Discord server