MCP Hub
Back to servers

Garmin Health MCP Server

Enables querying Garmin health data stored in Supabase through natural language, providing access to VO2 max trends, activity breakdowns, sleep statistics, and training load metrics.

Tools
7
Updated
Jan 2, 2026

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

ToolDescription
get_health_summaryOverview of all health data
get_vo2maxVO2 max history and trends
get_activitiesActivity breakdown by type
get_sleepSleep statistics
get_race_predictionsPredicted race times
get_heart_rate_zonesPersonalized HR training zones
get_training_loadAcute/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

ProblemFix
Connector doesn't appearCheck JSON syntax, use absolute path, fully restart Claude
Connection errorsVerify Supabase credentials

License

MIT

Reviews

No reviews yet

Sign in to write a review