Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

MCP server that connects AI assistants to Garmin Connect health and fitness data, enabling natural language queries about workouts, sleep, heart rate, and more.

README.md

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 |

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 sync

2. Authenticate with Garmin

Run the one-time setup to save your OAuth tokens:

uv run garmin-mcp-setup

You'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-server

Example 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 | |---|---| | get_daily_summary | Steps, distance, calories, floors climbed, active minutes for a date | | get_heart_rate | Resting HR, min/max, heart rate zone breakdown | | get_sleep | Sleep duration, stages (deep/light/REM/awake), sleep score | | get_stress | All-day stress levels, average, duration by category | | get_body_battery | Energy reserve levels throughout the day |

Activities

| Tool | Description | |---|---| | get_recent_activities | Most recent workouts with key metrics | | get_activities_by_date | Activities in a date range, filterable by type (running, cycling, etc.) | | get_activity_details | Full detail for a specific activity: pace, HR zones, elevation, training effect | | get_activity_splits | Per-split/lap breakdown: pace, distance, HR, elevation |

Body Composition

| Tool | Description | |---|---| | get_weight | Weight measurements, BMI, body fat % | | get_body_composition | Weight, body fat, muscle mass, bone mass, body water | | get_hydration | Daily water intake and progress toward goal |

Fitness Metrics

| Tool | Description | |---|---| | get_training_readiness | Readiness score, HRV status, sleep quality, recovery time | | get_vo2max | Estimated VO2 Max for running and cycling | | get_training_status | Training load and status classification | | get_race_predictions | Predicted times for 5K, 10K, half marathon, and marathon | | get_hrv | Heart Rate Variability: status, weekly average, baseline | | get_endurance_score | Aerobic fitness score over time |

Export & Download

| Tool | Description | |---|---| | download_activity_fit | Original FIT file (as ZIP) -- raw sensor data | | download_activity_gpx | GPX track -- GPS coordinates for mapping | | download_activity_tcx | TCX file -- GPS + HR + cadence | | download_activity_kml | KML file -- for Google Earth | | download_activity_csv | CSV file -- tabular data for spreadsheets |

Additional Tools

| Tool | Description | |---|---| | get_devices | Connected devices: model, firmware, battery, last sync | | get_daily_steps | Step counts per day over a date range | | get_personal_records | Personal bests across all activities | | get_respiration | Breathing rate: waking, sleeping, high, low | | get_spo2 | Blood oxygen saturation readings | | get_goals | Active fitness goals and current progress |

Configuration

| Environment Variable | Default | Description | |---|---|---| | GARMIN_TOKEN_STORE | ~/.garminconnect | Directory where OAuth tokens are stored | | GARMIN_EXPORT_DIR | ~/garmin-exports | Directory for downloaded activity files |

Development

Testing with MCP Inspector

uv run mcp dev src/garmin_mcp/server.py

This 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 downloads

Important 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 garth library 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-setup separately to authenticate.

License

MIT

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use AI & ML servers.