Garmin Connect MCP Server
Provides read-only access to Garmin Connect data including daily health metrics (sleep, HRV, body battery, stress, heart rate, SpO2, respiration, steps, hydration), training and fitness insights (training readiness, status, VO2 max, lactate threshold, race predictions, endurance/hill/performance scores, personal records), activity details and splits, and trends over time.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Garmin Connect MCP ServerWhat was my sleep score last night?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Garmin Connect MCP Server
A local stdio MCP server that gives Claude direct access to your Garmin Connect data. Built on the garminconnect library (garth-backed OAuth). Read-only — no data is written back to Garmin.
Tools (32)
Daily Health
Tool | Data |
| Sleep stages (deep/light/REM/awake), score, duration, respiration, SpO2 |
| Overnight HRV, 5-min readings, baseline, status (Balanced/Unbalanced/Low) |
| Charge/drain events, start/end levels throughout the day |
| Average stress, max stress, time in each stress band |
| Resting HR, min/max, timestamped HR timeline |
| Blood oxygen average, min, max, overnight continuous readings |
| Breathing rate average, min, max throughout day and overnight |
| Steps, floors, distance, calories, intensity minutes |
| Fluid intake vs daily goal |
| All-in-one snapshot: steps, calories, HR, stress, Body Battery, intensity |
Training & Fitness
Tool | Data |
| Readiness score (0–100) with component breakdown (sleep, HRV, load, recovery) |
| Status label, acute/chronic load, load focus, VO2 max trend |
| VO2 max estimate, fitness age |
| Threshold HR and pace |
| Predicted finish times: 5K / 10K / half marathon / marathon |
| Garmin's aerobic capacity score over a date range |
| Elevation handling ability over a date range |
| Acute/chronic load ratio and injury risk signals over a date range |
| PRs across all activity types |
| Training volume trends between two dates, grouped by activity type |
Activities
Tool | Data |
| List of recent activities: type, date, distance, duration, avg HR, calories, Training Effect, load |
| Most recent activity with full summary stats |
| Full detail for a single activity by ID: Training Effect, aerobic/anaerobic load, pace, cadence |
| Per-km splits with pace, HR, and elevation |
| Time spent in each HR zone for an activity |
| Time-series chart data (up to 2000 points): cadence, HR, speed, power, elevation |
| Time in each power zone (meaningful once real power data is available) |
Trends & History
Tool | Data |
| Sleep scores and stage breakdown over past N days (default 14, max 28) |
| Overnight HRV values over past N days |
| End-of-day Body Battery levels over past N days |
| 7-day rollup: steps, calories, intensity minutes, stress, sleep averages |
Body
Tool | Data |
| Weight and body composition over a date range |
Related MCP server: Garmin Connect MCP Server
Setup
1. Clone and create a virtual environment
git clone <repo-url>
cd Garmin-MCP
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt2. Authenticate (first time only)
python setup_auth.pyEnter your Garmin Connect email and password when prompted. If you have MFA enabled you'll be asked for your authenticator code. OAuth tokens are saved to ~/.garminconnect/ — your password is never stored.
Tokens auto-refresh indefinitely. Re-run only if you revoke the session or change your password.
Note on rate limiting: Garmin aggressively rate-limits login attempts from non-mobile IPs. If you see 429 errors, wait 5–10 minutes before retrying. Logging into Garmin Connect in your browser immediately beforehand can help.
3. Add to Claude Desktop config
Open your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.jsonAdd the garmin entry under mcpServers:
{
"mcpServers": {
"garmin": {
"command": "/absolute/path/to/Garmin-MCP/.venv/bin/python",
"args": ["/absolute/path/to/Garmin-MCP/garmin_server.py"]
}
}
}Use absolute paths. Find them by running echo $(pwd)/.venv/bin/python from inside the project folder.
Fully quit Claude Desktop (Cmd+Q) and reopen it.
4. Verify
Ask Claude: "What was my sleep score last night?" or "Show me my training status."
Notes
No credentials in the config — authentication is handled entirely via the saved token file in ~/.garminconnect/. Nothing sensitive lives in the Claude Desktop config.
Race predictions and training status context — Garmin's algorithm needs sustained threshold efforts to calibrate well. During injury recovery or low-volume phases, labels like "Unproductive" and inflated race predictions are common artefacts of limited signal, not accurate assessments of fitness. Use these numbers alongside context rather than at face value.
Power data — get_activity_power_zones and power fields in get_activity_streams are only meaningful for activities with real power data recorded (e.g. BikeErg sessions via ERG Logbook). Garmin's estimated FTP is extrapolated from VO2 max and is unreliable without actual power measurements.
Activity streams and cadence — get_activity_streams returns Garmin's raw chart data. Note that Garmin records running cadence as single-foot steps per minute; multiply by 2 for total cadence (steps/min).
Troubleshooting
Token expired errors — run python setup_auth.py again to re-authenticate.
429 Too Many Requests — Garmin rate-limits login attempts heavily. Wait 5–10 minutes and try again.
MFA prompt not appearing — try logging out of all active Garmin Connect sessions in your browser first, then re-run setup_auth.py.
Tools not showing in Claude — make sure you fully quit Claude Desktop (Cmd+Q, not just closing the window) before restarting. Check that the paths in the config are absolute and correct.
Empty results from some tools — some endpoints (endurance score, hill score, running tolerance) require a minimum activity history to return data. If you've recently set up your device, these may return empty until Garmin has enough data to compute them.
Dependencies
garminconnect>= 0.2.22mcp>= 1.0.0
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/tls54/Garmin-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server