Skip to main content
Glama
willc121

Garmin Health MCP Server

by willc121

Garmin Health MCP Server

Query your Garmin health data in plain English through Claude Desktop.

Live Demo & Full Writeup →

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

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 sport

  • activities — Activity records with type, duration, distance, HR

  • sleep_summary — Aggregated sleep stats

  • race_predictions — Garmin's predicted race times

  • heart_rate_zones — HR zone boundaries

  • training_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

Latest Blog Posts

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/willc121/garmin-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server