GarminCAUTION
MCP server to access Garmin data
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://mseep.ai/app/taxuspt-garmin-mcp)
This Model Context Protocol (MCP) server connects to Garmin Connect and exposes your fitness and health data to Claude and other MCP-compatible clients.
Garmin's API is accessed via the awesome python-garminconnect library.
Features
- List recent activities with pagination support
- Get detailed activity information
- Edit activities: name, type, description/notes, event type, perceived effort (RPE), and feel
- Access health metrics (steps, heart rate, sleep, stress, respiration)
- View body composition data
- Track training status and readiness
- Access cycling FTP and lactate threshold metrics
- Manage gear and equipment, including free-text notes returned by
get_gear - Access workouts and training plans
- Inspect detailed workout step structures, including repeat groups and swim pace targets
- Weekly health aggregates (steps, stress, intensity minutes)
- Advanced cycling analytics: power zones, FIT file analysis, DI2 electronic shift intelligence
- Training load trend (CTL/ATL/TSB), HRV trend, VO2 max trend, respiration rate trend
- Power Duration Curve, climb detection with VAM, cardiac drift (aerobic decoupling), W/kg calculations
Tool Coverage
This MCP server implements 110+ tools covering ~90% of the python-garminconnect library (v0.3.2):
- ✅ Activity Management (20 tools) - includes write tools for type, description, event type, perceived effort, and feel
- ✅ Health & Wellness (34 tools) - includes custom lightweight summary tools
- ✅ Training & Performance (13 tools) - includes CTL/ATL/TSB, HRV, VO2 max, and respiration trends
- ✅ Workouts (8 tools)
- ✅ Devices (7 tools)
- ✅ Gear Management (5 tools)
- ✅ Weight Tracking (5 tools)
- ✅ Challenges & Badges (10 tools)
- ✅ Nutrition (9
834c5b9b2c16OBSERVED · 2026-09-26Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add garmin-mcp --env GARMINTOKENS=${GARMINTOKENS} --env GARMINTOKENS_BASE64=${GARMINTOKENS_BASE64} --env GARMIN_PASSWORD=${GARMIN_PASSWORD} --env GARMIN_PASSWORD_FILE=${GARMIN_PASSWORD_FILE} -- uvx garmin-mcp{
"mcpServers": {
"garmin-mcp": {
"command": "uvx",
"args": [
"garmin-mcp"
],
"env": {
"GARMINTOKENS": "${GARMINTOKENS}",
"GARMINTOKENS_BASE64": "${GARMINTOKENS_BASE64}",
"GARMIN_PASSWORD": "${GARMIN_PASSWORD}",
"GARMIN_PASSWORD_FILE": "${GARMIN_PASSWORD_FILE}"
}
}
}
}Exposed tools (153)
112 read · 32 write · 9 destructive. Blast radius: 9 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
add_body_composition | write | Add body composition data |
add_gear_to_activity | write | Associate gear with an activity |
add_hydration_data | write | Add hydration data |
add_weigh_in | write | Add a new weight measurement |
add_weigh_in_with_timestamps | write | Add a new weight measurement with specific timestamps |
count_activities | read | Get total count of activities in the user |
create_custom_food | write | Create a custom food in the user |
create_manual_activity | write | Log a manual activity in Garmin Connect — useful for activities done without a watch. |
create_run_interval_workout | write | Create a repeat-based interval run workout and upload it to Garmin Connect. |
create_run_workout | write | Create a continuous run workout and upload it to Garmin Connect. |
create_strength_workout | write | Create a strength workout and upload it to Garmin Connect. |
create_walk_run_workout | write | Create a walk/run interval workout and upload it to Garmin Connect. |
create_z2_walk_workout | write | Create a steady Z2 walking workout and upload it to Garmin Connect. |
delete_course | destructive | Delete a course from Garmin Connect. |
delete_custom_food | destructive | Delete a custom food from the user |
delete_food_log | destructive | Delete a food log entry |
delete_weigh_ins | destructive | Delete weight measurements for a specific date |
delete_workout | destructive | Delete a workout from Garmin Connect |
delete_workouts | destructive | Delete multiple workouts from Garmin Connect in a single call |
download_activity_file | write | Download an activity and save it to disk as a file. |
download_course_gpx | read | Download the exact official GPX file for a Garmin Connect course. |
download_workout | read | Download a workout as a FIT file |
get_acclimation | read | Get heat and altitude acclimation status for a given date. |
get_activities | read | Get activities with pagination support. |
get_activities_by_date | read | Get activities between specified dates with pagination support. |
get_activities_fordate | read | Get activities for a specific date |
get_activity | read | Get detailed information for a single activity. |
get_activity_exercise_sets | read | Get exercise sets for strength training activities |
get_activity_fit_data | read | Download and parse FIT file for an activity to expose advanced cycling data. |
get_activity_fit_messages | read | Retrieve and generically parse an activity |
get_activity_gear | read | Get gear data used for an activity |
get_activity_hr_in_timezones | read | Get heart rate data in different time zones for an activity |
get_activity_power_in_timezones | read | Get power distribution across training zones for an activity. |
get_activity_split_summaries | read | Get split summaries for an activity |
get_activity_splits | read | Get splits for an activity |
get_activity_typed_splits | read | Get typed splits for an activity |
get_activity_types | read | Get all available activity types |
get_activity_weather | read | Get weather data for an activity. |
get_adhoc_challenges | read | Get user-created social/group challenges (e.g., step competitions with friends) |
get_all_day_events | read | Get daily wellness events data |
get_all_day_stress | read | Get all-day stress data |
get_available_badge_challenges | read | Get official Garmin badge challenges available to join |
get_badge_challenges | read | Get all badge challenges the user has joined (completed and in-progress) |
get_blood_pressure | read | Get blood pressure data |
get_body_battery | read | Get body battery data with events |
get_body_battery_events | read | Get body battery events data |
get_body_composition | read | Get body composition data for a single date or date range |
get_calendar_events | read | Get races and events on the Garmin Connect calendar between two dates |
get_course_details | read | Get full details of a Garmin Connect course by ID. |
get_courses | read | List all courses saved on Garmin Connect. |
get_custom_food_serving_units | read | Get available serving units for custom foods |
get_custom_foods | read | Search or list user |
get_cycling_ftp | read | Get the latest cycling Functional Threshold Power (FTP) data. |
get_daily_steps | read | Get steps data for a date range |
get_daily_weigh_ins | read | Get weight measurements for a specific date |
get_device_alarms | read | Get alarms from all Garmin devices |
get_device_last_used | read | Get information about the last used Garmin device |
get_device_settings | read | Get settings for a specific Garmin device |
get_device_solar_data | read | Get solar data for a specific device |
get_devices | read | Get all Garmin devices associated with the user account |
get_earned_badges | read | Get earned badges for user |
get_endurance_score | read | Get endurance score data between dates |
get_energy_balance | read | Estimate a composition-derived TDEE from logged intake, Garmin |
get_fitnessage_data | read | Get fitness age data |
get_floors | read | Get floors climbed data |
get_full_name | read | Get user |
get_garmin_coach_workouts | read | Get Garmin Coach workouts around the given date |
get_gear | read | Get all gear registered with the user account |
get_goals | read | Get Garmin Connect goals (active, future, or past). |
get_heart_rate_zones | read | Get the user |
get_heart_rates | read | Get full heart rate time-series data |
get_heart_rates_summary | read | Get heart rate summary with essential metrics (lightweight version) |
get_hill_score | read | Get hill score data between dates |
get_hrv_data | read | Get Heart Rate Variability (HRV) data |
get_hrv_trend | read | Get HRV (Heart Rate Variability) trend over a date range. |
get_hydration_data | read | Get hydration data |
get_inprogress_virtual_challenges | read | Get in-progress virtual challenges/expeditions |
get_lactate_threshold | read | Get lactate threshold data |
get_lifestyle_logging_data | read | Get lifestyle logging data for a specific date |
get_menstrual_calendar_data | read | Get menstrual calendar data between specified dates |
get_menstrual_data_for_date | read | Get menstrual data for a specific date |
get_morning_training_readiness | read | Get morning training readiness score |
get_non_completed_badge_challenges | read | Get badge challenges currently in progress (not yet completed) |
get_nutrition_daily_food_log | read | Get daily food consumption records for a date |
get_nutrition_daily_meals | read | Get daily meal summaries for a date |
get_nutrition_daily_settings | read | Get nutrition plan/settings for a date |
get_nutrition_summary_between_dates | read | Get per-day nutrition totals for every day in a date range. |
get_personal_record | read | Get personal records for user |
get_power_duration_curve | read | Get season-best Power Duration Curve across recent activities. |
get_pregnancy_summary | read | Get pregnancy summary data |
get_primary_training_device | read | Get information about the primary training device |
get_progress_summary_between_dates | read | Get progress summary for a metric between dates |
get_race_predictions | read | Get predicted race times based on current fitness level |
get_recovery_time_remaining | read | Get remaining recovery time in hours for a day. |
get_respiration_data | read | Get full respiration time-series data |
get_respiration_summary | read | Get respiration summary with essential metrics (lightweight version) |
get_respiration_trend | read | Get overnight respiration rate trend over a date range. |
get_rhr_day | read | Get resting heart rate data |
get_running_tolerance | read | Get Running Tolerance for a single day. |
get_running_tolerance_trend | read | Get Running Tolerance trend over a date range. |
get_scheduled_workouts | read | Get scheduled workouts between two dates with curated summary list |
get_sleep_data | read | Get full sleep data with all details |
get_sleep_summary | read | Get sleep summary with only essential metrics (lightweight version) |
get_sleep_summary_range | read | Get lightweight sleep summaries for every night in a date range. |
get_spo2_data | read | Get SpO2 (blood oxygen) data |
get_stats | read | Get daily activity stats with curated essential metrics |
get_stats_and_body | read | Get stats and body composition data |
get_stats_range | read | Get lightweight per-day calorie and step totals for a date range. |
get_steps_data | read | Get detailed steps data with 15-minute intervals |
get_stress_data | read | Get full stress time-series data |
get_stress_summary | read | Get stress summary with essential metrics (lightweight version) |
get_training_effect | read | Get training effect data for a specific activity. |
get_training_load_balance | read | Get Garmin |
get_training_load_trend | read | Get the Performance Management Chart (CTL/ATL/TSB) over a date range. |
get_training_plan_workouts | read | Compatibility alias for get_garmin_coach_workouts |
get_training_readiness | read | Get training readiness data with curated metrics |
get_training_status | read | Get training status with curated metrics |
get_unit_system | read | Get user |
get_user_profile | read | Get user profile information |
get_user_summary | read | Get user summary data (compatible with garminconnect-ha) |
get_userprofile_settings | read | Get user profile settings |
get_vo2max_trend | read | Get VO2 max trend over a date range. |
get_weekly_intensity_minutes | read | Get weekly intensity minutes data aggregates |
get_weekly_steps | read | Get weekly step data aggregates |
get_weekly_stress | read | Get weekly stress data aggregates |
get_weigh_ins | read | Get weight measurements between specified dates |
get_workout_by_id | read | Get detailed information for a specific workout |
get_workouts | read | Get all workouts with curated summary list |
log_custom_food | read | Log a food item to a meal on a date |
log_food | write | Quick-add a food entry with macro values to the nutrition log |
remove_gear_from_activity | destructive | Remove gear association from an activity |
request_reload | read | Request reload of epoch data |
schedule_week | write | Schedule a list of workouts for the week in a single call. |
schedule_workout | write | Schedule a workout to a specific calendar date |
schedule_workouts | write | Schedule multiple workouts to specific calendar dates |
search_foods | read | Search Garmin |
set_activity_description | write | Set or update the free-text description (notes) of an activity. |
set_activity_event_type | write | Set the event type of an activity. |
set_activity_feel | write | Set how an activity felt ( |
set_activity_name | write | Set or update the name of an activity. |
set_activity_type | write | Change the activity type (sport) of an activity. |
set_blood_pressure | write | Set blood pressure values |
set_fit_download_dir | write | Set and persist the default directory for downloaded activity files. |
set_heart_rate_zones | write | Set an account-level heart-rate training-zone configuration for one sport. |
set_nutrition_daily_settings | write | Update daily nutrition goals (calorie target and macronutrient targets). |
set_perceived_effort | write | Set the perceived effort (RPE) for an activity. |
unschedule_workout | destructive | Remove a scheduled workout from the Garmin Connect calendar |
unschedule_workouts | destructive | Remove multiple scheduled workouts from the Garmin Connect calendar |
update_custom_food | write | Update an existing custom food in the user |
upload_course | write | Upload a GPX file as a Garmin Connect Course. |
upload_workout | write | Upload a workout from JSON data |
upload_workouts | write | Upload multiple workouts from JSON data in a single call |
upsert_and_log | write | Find-or-create a custom food then log it in one step |
Trust audit
CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (3 observation(s))
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (6)
garmin-mcp.dxt
.dockerignore
delete_course, delete_custom_food, delete_food_log, delete_weigh_ins, delete_workout, delete_workouts, remove_gear_from_activity, unschedule_workout, unschedule_workouts
Your Garmin Connect credentials are read from environment variables:
[email protected] GARMIN_PASSWORD=secret garmin-mcp-auth
Install the Garmin MCP server from https://github.com/Taxuspt/garmin_mcp, authenticate with garmin-mcp-auth, and add it to my MCP configuration without storing my Garmin email or password.
Gates applied: no_behavioural_pass.
834c5b9b2c16full audit observations/trust-audit/mcp-server/taxuspt__garmin.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-26 | 834c5b9b2c16 | CAUTION | B | 89 | first audit |
Questions
What is the Garmin MCP server?
MCP server to access Garmin data
What tools does Garmin expose?
153 in total: 112 read-only, 32 that write, and 9 that can delete or overwrite (delete_course, delete_custom_food, delete_food_log, delete_weigh_ins, delete_workout). Every one is listed on this page with its risk.
Is Garmin safe to connect to an agent?
With care. The audit graded it B (89/100) and found 6 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 9 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Garmin need?
It reads GARMINTOKENS, GARMINTOKENS_BASE64, GARMIN_PASSWORD, GARMIN_PASSWORD_FILE and PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Garmin run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on PyPI as garmin-mcp.
How current is this page?
The grade is for one exact copy of the source (834c5b9b2c16), read on 2026-09-26. The repository is watched and re-audited when it changes.