garmin-watch-mcp
Provides read-only access to Garmin Connect health and activity data, including daily summaries, sleep, heart rate, stress, Body Battery, HRV, training readiness, activities, and devices.
Click on "Deploy 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-watch-mcpHow was my sleep and HRV 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-watch-mcp
An MCP server that gives Claude (or any MCP client) read-only access to the health and
activity data your Garmin watch syncs to Garmin Connect: daily summaries, sleep, heart
rate, stress, Body Battery, HRV, training readiness, activities and devices. It talks to
Garmin Connect through python-garminconnect,
wrapped in a small async client (garmin_watch_mcp.core).
Tools
Tool | Returns |
| Steps, distance, calories, floors, heart rate, stress, Body Battery, intensity minutes, SpO2 |
| Sleep stages, score, start/end, overnight HRV and resting heart rate |
| Resting/min/max heart rate and hourly min/avg/max |
| Average/max stress and hourly min/avg/max |
| Charged, drained, highest, lowest and latest level per day (up to 31 days) |
| Last-night and weekly HRV, baseline and status |
| Latest readiness score and its factors |
| Recent activities, or those in a date range, newest first |
| One activity's duration, distance, pace, heart rate, elevation, training effect |
| Garmin devices on the account |
Day-based tools take an optional date (YYYY-MM-DD, today or yesterday), which
defaults to today in the server's local time zone. Durations are seconds, distances
metres and speeds m/s. Garmin's raw responses are large, so each tool keeps a curated set
of fields and summarises intraday samples by hour (UTC).
Related MCP server: garmin-mcp
Setup
For a step-by-step guide, including MFA and troubleshooting, see the installation guide. Full documentation is at https://garmin-watch-mcp.readthedocs.io.
You need a Garmin Connect account that your watch syncs to.
git clone https://github.com/osjayaprakash/garmin-watch-mcp.git && cd garmin-watch-mcp
uv sync
uv run garmin-watch-mcp login # once: asks for email, password and MFA code, saves tokenslogin saves OAuth tokens to ~/.garminconnect; the server reuses and refreshes them, so
it needs no password afterwards. Without MFA you can skip login and set
GARMIN_EMAIL/GARMIN_PASSWORD instead.
Variable | Required | Default | Meaning |
| without saved tokens | Garmin Connect account email | |
| without saved tokens | Garmin Connect account password | |
| no |
| Token directory, or the token JSON itself |
| no |
|
|
Run from PyPI
No clone needed; uv fetches and runs the published package:
uvx garmin-watch-mcp login # once
uvx garmin-watch-mcpIn a client config, use "command": "uvx", "args": ["garmin-watch-mcp"].
Run with Docker
The server speaks MCP over stdio, so keep -i. Pass the tokens from
garmin-watch-mcp login --print-tokens as GARMINTOKENS:
docker run -i --rm -e GARMINTOKENS ghcr.io/osjayaprakash/garmin-watch-mcp:latestOr mount a token directory:
-v ~/.garminconnect:/home/app/.garminconnect. In a client config, use
"command": "docker" with those arguments, and pass the variables through the client's
env block.
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"garmin": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/garmin-watch-mcp", "run", "garmin-watch-mcp"]
}
}
}Add an env block with GARMIN_EMAIL/GARMIN_PASSWORD if you didn't run login.
Claude Code
claude mcp add garmin -- uv --directory /absolute/path/to/garmin-watch-mcp run garmin-watch-mcpLangfuse tracing (optional)
Each tool call becomes a Langfuse trace, with a child span for the Garmin Connect call. Install the extra and set the keys:
uv sync --extra langfuseIn the server command, use run --extra langfuse garmin-watch-mcp instead of
run garmin-watch-mcp.
Variable | Meaning |
| Tracing is on only when both are set |
| Langfuse URL for self-hosted or regional instances (default: Langfuse Cloud) |
|
|
Privacy: sleep, heart rate and activity data are health data. By default, traces hold
only tool names, timings and error class names. Setting LANGFUSE_CAPTURE_DATA=true sends
the data itself to your Langfuse instance; only do that with an instance you trust, such
as a self-hosted one.
Development
uv sync
uv run pytest # offline suite
uv run pytest -m live # hits the real API; needs saved tokens or GARMIN_EMAIL/PASSWORD
uv run ruff check src tests && uv run ruff format --check src testsReleasing
Bump version in pyproject.toml and server.json, then push a matching tag
(git tag v0.1.0 && git push --tags). That publishes:
Channel | Workflow | Needs |
PyPI |
|
|
Docker image on ghcr.io |
| nothing (uses |
Official MCP Registry |
| nothing (GitHub OIDC); waits for PyPI and ghcr.io |
Read the Docs |
| import the repo once at readthedocs.org |
License
Not affiliated with or endorsed by Garmin. Garmin Connect has no public personal-data API; this uses the same unofficial endpoints as the Garmin Connect app and may break when Garmin changes them.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect your Oura Ring account securely in minutes. Enable authorized access to your sleep, activi…
Read-only access to Genie accounts, transactions, investments, and financial summaries.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Garmin Connect fitness and health data, including activities, heart rate, sleep, and device information.MIT
- FlicenseNot gradedqualityBmaintenanceProvides read access to Garmin Connect health and training data (sleep, heart rate, stress, HRV, activities) and supports writes like creating workouts, editing activities, and exporting files.-
- AlicenseNot gradedqualityCmaintenanceEnables LLMs and MCP clients to securely access your Garmin Connect health and running data, including daily wellness metrics, activity details, training status, and race predictions, for personalized coaching and analysis.MIT
- FlicenseNot gradedqualityBmaintenanceEnables read-only access to Garmin Connect data through OAuth, including activities, sleep, HRV, body battery, training status, and scheduled TrainingPeaks workouts.-