garmin-personal-mcp
Provides read-only access to Garmin Connect training and recovery data through Garmin's official Personal API, including training summaries, activities, daily wellness metrics, sleep data, and HRV trends.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
garmin-personal-mcp
A small, read-only Model Context Protocol server that lets Claude read my own Garmin training and recovery data through Garmin's official Connect Personal API, so it can run a weekly training review with me.
No scraping, no unofficial libraries, no stored passwords. One API key, kept in a local file the code never prints.
Why this exists
I train with a Garmin watch and wanted an assistant that reviews the week from real numbers (load, heart-rate zones, sleep, HRV), not from what I remember. Garmin opened a Personal API to individual users in 2026. This project turns it into tools an LLM can call safely.
Related MCP server: garmin-mcp
What it shows (for reviewers)
Skill | Where to look |
Working from a primary spec, not guesswork |
|
Secure credential handling |
|
Data shaping for LLMs |
|
Analytics |
|
Testing | 21 pytest tests on spec-shaped sample responses with mocked HTTP ( |
Honest scoping | Metrics the API does not expose are listed below rather than faked. |
Tools
Tool | Garmin endpoint | Returns |
| activity search (paged) + | Per ISO week: activities by type, training load, run km, pace, longest run, HR zone minutes, easy (z1-z2) vs hard (z4-z5) share, resting HR, stress, sleep, HRV, week-on-week change |
|
| Distance, time, pace, HR, training effect, load, VO2 max, minutes in each HR zone |
|
| Summary, HR (avg, max, min, recovery, zones with bpm floors), split summaries |
|
| Steps, resting HR and 7-day average, stress, Body Battery, intensity minutes |
|
| Duration, stages, sleep score, overnight HR, stress, respiration, SpO2 |
|
| Last-night and weekly HRV, baseline range, status |
|
| Daily HRV summaries for trend review |
Not available from the Personal API (as of Nov 2026)
Training readiness: no endpoint in the published spec.
Per-km laps and second-by-second HR: activity detail gives split summaries grouped by type (run, walk, interval), not laps. Raw streams are only in the FIT file (
/download-service/files/activity/{id}), which this server does not parse yet.
Architecture
Claude Desktop ──stdio/JSON-RPC──▶ server.py (MCPServer, 7 tools)
│ validate dates, cap ranges (92 days)
▼
client.py ── GET, Bearer token, 401 → re-exchange once
│
auth.py ── POST ApiKey → JWT, cache ~/.garmin-mcp/token.json (0600)
│
trim.py ── raw JSON → compact, unit-labelled JSONSetup
Free. Needs Python 3.12+, uv and a Garmin Connect account.
In Garmin Connect web, open Settings → Personal API Key and create a key. It is shown once.
Put it in
~/.garmin-mcp/.env(permissions600):GARMIN_PERSONAL_API_KEY=your-keyInstall and test:
uv sync && uv run pytest -qAdd to
~/Library/Application Support/Claude/claude_desktop_config.jsonundermcpServers:"garmin-personal": { "command": "/absolute/path/to/uv", "args": ["--directory", "/absolute/path/to/garmin-personal-mcp", "run", "--quiet", "--frozen", "garmin-personal-mcp"] }Quit Claude Desktop fully (Cmd+Q) and reopen it.
Design decisions
Key in a file, not in the Claude config
envblock: that file is synced and backed up by other tools; a0600file in the home directory is not.Token renewal by re-exchange: the FAQ states refresh tokens are not supported and access tokens last 24 h, so the server re-posts the key when under an hour remains.
Token response as raw JWT: the token endpoint is not in the OpenAPI spec. Its format follows Garmin's own Apache-2.0 client (garmin/connect-personal-api-python); a 23 h fallback covers a non-JWT body.
stdout is protocol only: all logging goes to stderr and
httpxis held at WARNING, since it logs full URLs at INFO.Chunked range calls: the sleep range endpoint returned HTTP 400 for a 34-day window in live testing (the spec states no limit), so range endpoints are fetched in 28-day chunks.
--frozenlaunch: Claude Desktop starts the server with no network resolution step, so a lockfile change cannot stall the handshake.
Licence
MIT. Garmin and Garmin Connect are trademarks of Garmin Ltd. This project is not affiliated with Garmin.
This server cannot be deployed
Maintenance
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
tri-train is a training platform for triathletes that syncs activities from Strava and Garmin and exposes them to Claude through a remote MCP server. Ask Claude how your last block went, why your run pace dropped, or whether you are fresh enough for Sunday's race, and it answers from your real data: activities with laps and grade-adjusted pace, weekly load and the performance management chart (CTL/ATL/TSB), sleep, HRV and resting heart rate, and your race calendar with predictions. Claude can also act: create and adjust planned workouts with structured intervals, push them to your Garmin watch, add races and write notes. Every change is journaled and can be undone. Read and write access are separate OAuth scopes, and the server enforces them on every call. Built and hosted in Switzerland by a triathlete; data stays on our own servers (Swiss revDSG / GDPR).
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude Desktop to access and analyze Garmin wearable health data including sleep, HRV, Body Battery, and activity metrics. Users can query their health trends, track recovery, and generate interactive HTML dashboards using natural language.97MIT
- AlicenseAqualityBmaintenanceEnables Claude to access and query your Garmin Connect data, including sleep, activities, training load, and health metrics, through a set of read-only MCP tools.28165 PyPI5MIT
- FlicenseNot gradedqualityDmaintenanceProvides Claude with read-only access to Garmin Connect data including daily health metrics, training status, activity details, and trends through 32 tools.-
- AlicenseBqualityBmaintenanceEnables users to analyze their own Garmin Connect data—activities, sleep, HRV, Body Battery, training readiness—directly inside Claude Desktop.132MIT