The builder tools are what make it more than a data reader — describe an interval session in plain terms, get a workout id, schedule it, and it shows up on the watch after the next sync.
A server over Garmin Connect built on the python-garminconnect library, covering roughly 90% of it across more than 110 tools, with editing and workout-authoring alongside the reads.
- Activities: listing with pagination, detailed records, and write tools for name, type, description, event type, perceived effort and feel
- Health and wellness: steps, heart rate, sleep, stress and respiration, weekly aggregates, and body composition
- Training and performance: training status and readiness, cycling FTP and lactate threshold, and trends for training load (CTL/ATL/TSB), HRV, VO2 max and respiration rate
- Advanced cycling analysis: power zones, FIT file parsing, Power Duration Curve, climb detection with VAM, cardiac drift and W/kg, plus Di2 electronic shift intelligence
- Workout builders that skip the raw Garmin JSON: `create_walk_run_workout` with an optional heart-rate zone, `create_z2_walk_workout`, `create_strength_workout` from a list of exercises, and `schedule_week` for scheduling several at once
- `download_activity_file` for a raw activity in `fit`, `gpx`, `tcx` or `csv`, with `set_fit_download_dir` persisting where they land
- Gear, devices, weight tracking, challenges and badges, nutrition and food logs, women's health, courses, and user profile
- Tool filtering with `GARMIN_ENABLED_TOOLS` as an allowlist or `GARMIN_DISABLED_TOOLS` as a denylist, since 110+ registered tools is a lot of context to carry every session
Python 3.12+ and a Garmin Connect account; MFA is supported if you have it enabled. Authenticate once before adding the server: `uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp-auth`, which saves OAuth tokens to `~/.garminconnect` and lasts roughly 6 months. After that the client config needs no credentials at all, which is the safer arrangement. `GARMIN_EMAIL` and `GARMIN_PASSWORD` can be passed directly instead if you have no MFA, and file-based variants exist for containers. `GARMIN_IS_CN=true` switches to Garmin Connect China. Claude Desktop users can install the `.dxt` extension by dragging it into the window. The HTTP transports serve `/mcp` and a `GET /healthz`, and perform no authentication of their own — put them behind a reverse proxy if reachable beyond localhost. Activity analysis needs a compatible power meter or electronic shifting to have anything to read.
One command plus a key — uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp, then supply credentials
