Garmin Health MCP Server
Query your Garmin health data in plain English through Claude Desktop.
Quick Start
Prerequisites
- Node.js 18+
- Claude Desktop
- Garmin data in Supabase
Install
git clone https://github.com/willc121/garmin-health-mcp-server.git
cd garmin-health-mcp-server
npm install
npm run build
Configure Claude Desktop
Add to your Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"garmin": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"SUPABASE_URL": "your-supabase-url",
"SUPABASE_ANON_KEY": "your-supabase-anon-key"
}
}
}
}
Restart Claude Desktop. The Garmin connector should appear in your connectors menu.
Available Tools
| Tool | Description |
|---|---|
get_health_summary | Overview of all health data |
get_vo2max | VO2 max history and trends |
get_activities | Activity breakdown by type |
get_sleep | Sleep statistics |
get_race_predictions | Predicted race times |
get_heart_rate_zones | Personalized HR training zones |
get_training_load | Acute/chronic workload ratio |
Example Queries
What's my VO2 max?
Am I overtraining?
Compare my running vs cycling this year
Getting Your Garmin Data
1. Request your data export
- Go to Garmin Account Management
- Navigate to Account Settings → Data Management
- Click "Export Your Data" and request all data
- Full instructions →
2. Wait for the email
Garmin sends a download link within 48 hours. The export can be several GB depending on how long you've been tracking.
3. Download and extract
You'll get a zip with JSON files for activities, sleep, VO2 max, heart rate, and more.
4. Load into a database
The raw export is too large to query directly (mine was 9 years of data), so I loaded it into Supabase (free tier works fine).
You'll need these tables:
vo2_max— VO2 max readings by date and sportactivities— Activity records with type, duration, distance, HRsleep_summary— Aggregated sleep statsrace_predictions— Garmin's predicted race timesheart_rate_zones— HR zone boundariestraining_load— Daily training load metrics
I wrote Python scripts to parse the Garmin JSON and insert into Supabase. Happy to share if there's interest — open an issue.
Troubleshooting
| Problem | Fix |
|---|---|
| Connector doesn't appear | Check JSON syntax, use absolute path, fully restart Claude |
| Connection errors | Verify Supabase credentials |
License
MIT
