garmin-mcp
Provides tools to access and query Garmin Connect data, including activities, sleep, heart rate variability, body battery, training load, HR zones, weight/hydration, and gear, with a live dashboard.
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-mcpshow my last 5 runs"
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 β Claude Β· Self-Hosted MCP Server + Live Dashboard
Put your Garmin Connect data inside Claude β and run your own private health & triathlon dashboard β on a small server that's entirely yours.
π£οΈ Ask your body data in plain English in Claude (web, desktop, mobile): "How did I sleep?", "Show my last 5 runs", "Am I recovered for a hard session?"
π A live dashboard at
/dashboardβ body battery, sleep, heart rate, stress, VOβ max, training load, HR zones, weight/hydration, and a Swim / Bike / Run view that fills in as you train.π Private by design β runs on your Railway account, locked with your bearer token. Your Garmin password never leaves your own computer.
Built for the community by Sudhakar Reddy Gade Β· π Full step-by-step guide (no coding needed): https://www.nirvedha.com/garmin-dashboard/
Quick start
The easy way β let Claude Code do it
Install Claude Code, open it in an empty folder, and paste the ready-made prompt from the guide. It clones this repo, mints your Garmin token, deploys to Railway, and hands you your connector + dashboard URLs. You only approve the Railway login and type your Garmin password into your own terminal.
The hands-on way
Fork this repo and follow the guide
(8 clicks-and-copy steps, ~20 minutes) or the concise SETUP.md.
In short: fork β deploy on Railway β add a volume at /root/.garminconnect β
set four variables β generate a domain β add to Claude.
Related MCP server: Garmin MCP Server
What you get
MCP tools | 90+ Garmin tools (activities, sleep, HRV, body battery, training, gear, β¦) usable from Claude |
Transport | Streamable HTTP at |
Auth | Bearer token on every request (header or |
Dashboard | Server-rendered, live-on-refresh single page at |
Persistence | Garmin OAuth tokens on a mounted volume, auto-refreshing |
Cost | ~$5/month on Railway's Hobby plan |
Environment variables
Variable | Required | Purpose |
| Yes | Bearer token guarding |
| Recommended | Pre-minted Garmin OAuth blob β avoids logging in from a cloud IP (Garmin blocks those) |
| Yes |
|
| Yes |
|
| Fallback | Full login if no token blob; may trigger MFA |
| Auto | Injected by Railway; the server binds it |
| Optional | Local-day offset for the dashboard (default |
See SETUP.md for the full list, token rotation, and re-auth.
Security model
Fail-closed: the server refuses to start without a strong
MCP_ACCESS_TOKEN, so the endpoint is never exposed unprotected β not even briefly.The bearer check runs before the MCP app, so unauthorized callers get
401and never reach your data.Your Garmin password is only ever used locally to mint a token blob; the deployed server uses the blob (read-scoped OAuth tokens), never the password.
.gitignorekeeps.env, tokens, and caches out of git.
Architecture
Claude (web / desktop / mobile) ββHTTPS + bearer tokenβββΊ Railway service
β
BearerAuthMiddleware βββΊ /healthz (open) Β· /mcp Β· /dashboard
β
FastMCP (90+ tools) + dashboard API
β
garminconnect + garth βββΊ Garmin API
(OAuth tokens on a persistent volume)Local development
uv sync
# stdio (for Claude Desktop config):
GARMIN_MCP_TRANSPORT=stdio uv run garmin-mcp
# streamable HTTP + dashboard:
MCP_ACCESS_TOKEN=$(python3 -c "import secrets;print(secrets.token_urlsafe(32))") \
GARMIN_MCP_TRANSPORT=streamable-http uv run garmin-mcp-http
# mint a Garmin token blob (interactive):
uv run garmin-mcp-mintCredits
Stands on the shoulders of the open-source
garmin_mcp by Taxuspt and the
Docker + streamable-HTTP fork by k8sautom8. This repo adds a bearer-token
security layer, $PORT/proxy fixes, and the live triathlon dashboard.
License
MIT β free to use, change, and share. See LICENSE.
Shared as a community resource by Nirvedha Executive Coaching Solutions, Hyderabad Β· https://nirvedha.com
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sumal009/garmin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server