create_walk_run_workoutLABSCO SUMMARY
Both directions: read the training data, then write the workout back.
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.
What it is
A server over Garmin Connect built on the python-garminconnect library — the README counts 110+ tools covering about 90% of that library, and the project's docs name 12 of them — with editing and workout-authoring alongside the reads.
What you get
- 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_workoutwith an optional heart-rate zone,create_z2_walk_workout,create_strength_workoutfrom a list of exercises, andschedule_weekfor scheduling several at once download_activity_filefor a raw activity infit,gpx,tcxorcsv, withset_fit_download_dirpersisting 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_TOOLSas an allowlist orGARMIN_DISABLED_TOOLSas a denylist, since registering every tool by default is a lot of context to carry every session
Requirements
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.
Setup effort
One command — uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp
USE CASES
Understanding a bad week
Sleep, stress and respiration alongside training load, HRV and VO2 max trends, so fatigue is read against what you actually did rather than against how you feel.
Planning next week's sessions
Build a walk/run interval workout or a Z2 walk from a description, then schedule several at once by date.
Analysing a ride properly
Parse the FIT file for power zones and the Power Duration Curve, detect climbs with VAM, and check cardiac drift — needs a power meter to have data worth reading.
Tidying up activity records
Rename an activity, correct its type, add a description, and set perceived effort and feel — the fields you would otherwise fix one at a time in the app.
Keeping the tool surface manageable
Set an allowlist to a handful of names such as sleep, stress and recent activities; the rest are not registered, which keeps the session's context free for the conversation.
Setting it up without putting a password in a config file
Authenticate once in a terminal, tokens land in your home directory, and the client config carries no credentials at all.
12 tools
Listed in project docs. Your client may show a different list.
create_z2_walk_workoutcreate_strength_workoutschedule_weekschedule_workoutupload_workoutupload_workoutsdownload_activity_fileset_fit_download_dirget_sleep_dataget_stress_summaryget_activitiesBEFORE YOU INSTALL
What to know first
Tools you get
12 tools named in the project's documentation.
Requires
- uvx on PATH
- Python 3.12+
Optional
- GARMIN_EMAIL in your environment
- GARMIN_PASSWORD in your environment
Where it runs
Both documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
Before adding the server to your MCP client, authenticate once in your terminal (OAuth tokens will be saved to ~/.garminconnect):
uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp-authMCP Clients
Codex
[mcp_servers.garmin]
command = "uvx"
args = [
"--python",
"3.12",
"--from",
"git+https://github.com/Taxuspt/garmin_mcp",
"garmin-mcp"
]OpenCode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"garmin": {
"type": "local",
"command": [
"uvx",
"--python",
"3.12",
"--from",
"git+https://github.com/Taxuspt/garmin_mcp",
"garmin-mcp"
],
"enabled": true,
"timeout": 30000
}
}
}