garmin-mcp-server
Provides tools to access health and fitness data from Garmin Connect, including workouts, sleep, heart rate, body composition, fitness metrics, and activity file downloads.
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-mcp-serverWhat's my training readiness today?"
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 Model Context Protocol (MCP) server that connects AI assistants to your Garmin Connect health and fitness data. Ask Claude, ChatGPT, OpenCode, or any MCP-compatible client about your workouts, sleep, heart rate, and more -- using natural language.
Built on python-garminconnect and the MCP Python SDK.
Features
29 tools across 6 categories, giving your AI assistant access to:
Category | Tools | Examples |
Health | 5 | Daily summary, heart rate, sleep stages, stress, body battery |
Activities | 4 | Recent workouts, search by date/type, detailed splits |
Body | 3 | Weight trends, body composition, hydration tracking |
Fitness | 6 | Training readiness, VO2 Max, HRV, race predictions, endurance score |
Devices | 6 | Device info, step trends, personal records, SpO2, respiration, goals |
Export | 5 | Download FIT, GPX, TCX, KML, and CSV files |
Related MCP server: Garmin MCP
Quick Start
Prerequisites
Python 3.10+
uv package manager
A Garmin Connect account with a paired device
1. Clone and install
git clone https://github.com/JohanBellander/garmin-mcp-server.git
cd garmin-mcp-server
uv sync2. Authenticate with Garmin
Run the one-time setup to save your OAuth tokens:
uv run garmin-mcp-setupYou'll be prompted for your email, password, and MFA code (if enabled). Tokens are saved to ~/.garminconnect/ and last approximately one year -- you won't need to re-authenticate until they expire.
3. Connect to your AI assistant
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"garmin": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/garmin-mcp-server",
"run",
"garmin-mcp-server"
]
}
}
}OpenCode
Add to your .opencode.json MCP config:
{
"mcp": {
"garmin": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/garmin-mcp-server",
"run",
"garmin-mcp-server"
]
}
}
}Any MCP Client
The server uses STDIO transport. Point your client at:
uv --directory /path/to/garmin-mcp-server run garmin-mcp-serverExample Conversations
Once connected, you can ask your AI assistant things like:
"How did I sleep last night?"
"Show me my runs from the past two weeks"
"What's my training readiness today?"
"Compare my resting heart rate over the last 7 days"
"Download the GPX file for my last bike ride"
"What are my race predictions for a half marathon?"
"How many steps have I averaged this month?"
Available Tools
Health Data
Tool | Description |
| Steps, distance, calories, floors climbed, active minutes for a date |
| Resting HR, min/max, heart rate zone breakdown |
| Sleep duration, stages (deep/light/REM/awake), sleep score |
| All-day stress levels, average, duration by category |
| Energy reserve levels throughout the day |
Activities
Tool | Description |
| Most recent workouts with key metrics |
| Activities in a date range, filterable by type (running, cycling, etc.) |
| Full detail for a specific activity: pace, HR zones, elevation, training effect |
| Per-split/lap breakdown: pace, distance, HR, elevation |
Body Composition
Tool | Description |
| Weight measurements, BMI, body fat % |
| Weight, body fat, muscle mass, bone mass, body water |
| Daily water intake and progress toward goal |
Fitness Metrics
Tool | Description |
| Readiness score, HRV status, sleep quality, recovery time |
| Estimated VO2 Max for running and cycling |
| Training load and status classification |
| Predicted times for 5K, 10K, half marathon, and marathon |
| Heart Rate Variability: status, weekly average, baseline |
| Aerobic fitness score over time |
Export & Download
Tool | Description |
| Original FIT file (as ZIP) -- raw sensor data |
| GPX track -- GPS coordinates for mapping |
| TCX file -- GPS + HR + cadence |
| KML file -- for Google Earth |
| CSV file -- tabular data for spreadsheets |
Additional Tools
Tool | Description |
| Connected devices: model, firmware, battery, last sync |
| Step counts per day over a date range |
| Personal bests across all activities |
| Breathing rate: waking, sleeping, high, low |
| Blood oxygen saturation readings |
| Active fitness goals and current progress |
Configuration
Environment Variable | Default | Description |
|
| Directory where OAuth tokens are stored |
|
| Directory for downloaded activity files |
Development
Testing with MCP Inspector
uv run mcp dev src/garmin_mcp/server.pyThis opens a web UI where you can invoke tools individually and inspect responses.
Project Structure
src/garmin_mcp/
├── server.py # FastMCP server entry point
├── auth.py # OAuth token management + garmin-mcp-setup CLI
└── tools/
├── health.py # Daily health metrics
├── activities.py # Workout listing and details
├── body.py # Weight, body composition, hydration
├── fitness.py # Training metrics, HRV, race predictions
├── devices.py # Devices, steps, records, SpO2, goals
└── export.py # Activity file downloadsImportant Notes
Unofficial API -- This uses undocumented Garmin Connect endpoints via
python-garminconnect. Endpoints may change without warning.Rate Limits -- Garmin enforces rate limits. Avoid rapid-fire requests; the AI assistant handles this gracefully with error messages.
Token Refresh -- The underlying
garthlibrary handles token refresh automatically. Tokens typically last ~1 year.STDIO Safety -- The server never writes to stdout (which would corrupt the MCP transport). All logging goes to stderr.
No Interactive Auth -- The MCP server only uses pre-saved tokens. Run
garmin-mcp-setupseparately to authenticate.
License
MIT
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/JohanBellander/GarminMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server