Back to Browse

Garmin MCP Server

Developer ToolsLow Risk10.0Local
Free

Privacy-first unofficial Garmin Connect MCP for AI health, sleep, activity & recovery agents.

About

Privacy-first unofficial Garmin Connect MCP for AI health, sleep, activity & recovery agents.

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.

4 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

file_system

Check that this permission is expected for this type of plugin.

database

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Optional local path for Garmin Connect tokens. Defaults to ~/.garmin-mcp/garmin_tokens.json. Create it with garmin-mcp-server auth (self-contained Node login, no Python).Optional

Environment variable: GARMIN_TOKEN_PATH

Optional payload mode: summary, structured, or raw. Defaults to structured. raw means full supported Garmin Connect payloads, not unrestricted raw sensor telemetry.Optional

Environment variable: GARMIN_PRIVACY_MODE

Optional SQLite cache toggle. Set to true or sqlite to enable.Optional

Environment variable: GARMIN_CACHE

Optional local SQLite cache path. Defaults to ~/.garmin-mcp/cache.sqlite.Optional

Environment variable: GARMIN_CACHE_PATH

Optional Garmin domain override. Use garmin.cn only for China accounts; default is garmin.com.Optional

Environment variable: GARMIN_DOMAIN

Set to true to bypass the in-memory HTTP response cache (60s TTL for GET only). POST/PUT/DELETE and 4xx/5xx responses are never cached regardless.Optional

Environment variable: GARMIN_NO_CACHE

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-davidmosiah-garminmcp": {
      "env": {
        "GARMIN_CACHE": "your-garmin-cache-here",
        "GARMIN_DOMAIN": "your-garmin-domain-here",
        "GARMIN_CACHE_PATH": "your-garmin-cache-path-here",
        "GARMIN_TOKEN_PATH": "your-garmin-token-path-here",
        "GARMIN_PRIVACY_MODE": "your-garmin-privacy-mode-here"
      },
      "args": [
        "-y",
        "garmin-mcp-unofficial"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Upgrading to 0.8.0: read the migration guide for local-only HTTP, disabled authenticated-response caching, and stricter input/profile limits.

⚡ One-command install with Delx Wellness for Hermes: npx -y delx-wellness-hermes setup — preconfigures this connector and the full Delx Wellness stack in a dedicated Hermes profile.

Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop — see the install section below. Runnable examples live in the Delx Wellness hub.

Public proof: Garmin MCP is tracked in the Delx Open Source Growth Snapshot alongside downloads, stars and next-action priorities. If it saves you Garmin Connect and MCP setup time, star this repo so other training-focused agent builders can find it faster.

First useful prompt: Use garmin_connection_status, then garmin_daily_summary, then give me a 5-line operating brief for today.


Garmin MCP

Give your AI agent your Garmin Body Battery, training readiness, sleep, HRV and activities — local-first, tokens never leave your machine.

Unofficial project. Not affiliated with, endorsed by or supported by Garmin. This is not official Garmin Health API partnership access — it uses the unofficial Garmin Connect personal-token mode.

Part of Delx Wellness, a registry of local-first wellness MCP connectors.

Quickstart in 60 seconds

No Garmin developer app is required. setup only writes local MCP configuration; it does not ask for your Garmin password.

npx -y garmin-mcp-unofficial setup            # writes local config
npx -y garmin-mcp-unofficial auth             # built-in login, prompts for credentials locally (no Python needed)
npx -y garmin-mcp-unofficial doctor           # verifies you're ready

HTTP (v2 stateless)

Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:

npx -y garmin-mcp-unofficial --http
# GET  http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp   (sessionless)

Env: GARMIN_MCP_HOST, GARMIN_MCP_PORT, GARMIN_MCP_TRANSPORT=http.

Or one shot: npx -y garmin-mcp-unofficial setup --auth

auth runs a self-contained Node login and prompts locally for Garmin email, password and MFA when needed. The MCP does not store your Garmin password — only Garmin Connect tokens, saved at ~/.garmin-mcp/garmin_tokens.json with user-only permissions. See the auth quickstart walkthrough for real terminal output, or docs/quickstart.md for the full flow.

If Garmin returns HTTP 429, a Cloudflare challenge, or an auth message that says Garmin SSO omitted responseStatus.type, stop retrying for a while. Repeated headless login attempts can make the private endpoint throttle harder. Use docs/auth.md for the safe recovery path.

Then add this to your MCP client config:

{
  "mcpServers": {
    "garmin": {
      "command": "npx",
      "args": ["-y", "garmin-mcp-unofficial"]
    }
  }
}

Try it with your agent

Use garmin_connection_status to check setup, then run garmin_daily_summary.
Give me a 5-line operating brief for today.
Call garmin_weekly_summary with response_format=json. Identify my biggest
recovery/sleep/stress bottleneck and give me a next-week plan.
Use the garmin_intraday_investigation prompt for date=today, focus=stress.
Don't claim Garmin can prove anything it can't.

Tools

Start with garmin_connection_status, then garmin_daily_summary (daily readiness, sleep, load) or garmin_weekly_summary (scorecard, bottlenecks, next-week plan). The server also exposes per-day signals (sleep, HRV, stress, Body Battery, training readiness, heart rate, SpO2, respiration, intensity minutes, hydration), activities, profile/devices and weight, plus prompts and resources.

See docs/tools.md for the full tool list, prompts, resources, data-availability matrix, configuration, Hermes setup and development notes.

Privacy & what runs offline

  • GARMIN_PRIVACY_MODE defaults to summary (more conservative than other Delx Wellness connectors) because the auth model is unofficial.
  • In structured mode, normalized aliases are additive: complete upstream Garmin fields and nested DTOs remain available after secret/GPS redaction.
  • Activity date ranges preserve the supplied calendar date and reject invalid values before contacting Garmin Connect.
  • Garmin Connect tokens are stored at ~/.garmin-mcp/garmin_tokens.json with user-only permissions and are never returned by tools. Your Garmin password is never stored — only short-lived tokens persist locally.
  • The MCP client never sees Garmin credentials or tokens. Authenticated Garmin responses are never cached; GARMIN_CACHE has no effect.
  • This is not medical advice. The server exposes user-authorized data for personal AI workflows, not diagnosis or treatment.

See docs/privacy.md for the full privacy model.

See the full agent demo →

Want to see a connector like this drive a real end-to-end decision? The shared, reproducible proof lives in delx-living-body:

npx -y delx-living-body demo

It answers the anchor question — "Should I train hard today?" — by combining recovery, sleep and training-load signals across the Delx Wellness connectors.

See also

The full Delx Wellness connector library:

One-command setup for Hermes — preconfigures every connector above plus wellness skills + onboarding: delx-wellness-hermes.

Related local-first health MCP

Peer (not a Delx package): mi-fitness-data-bridge by Kindred / @shkyyy18 — Xiaomi Mi Fitness, local-first, shares the agent-safe-series/v1 dense series envelope (duration-anchored coverage, hard max_points, full-res stats, no GPS in series tools). Design log: #19 · parity notes: docs/agent-safe-series-kindred.md.

📧 Contact & Support

License

MIT — see LICENSE. Code of Conduct.

Disclaimer

This software is provided as-is. It is not a medical device, does not provide medical advice, and should not be used for diagnosis or treatment. The unofficial Garmin Connect mode can break if Garmin changes private auth or endpoints. Always consult qualified professionals for medical concerns.

Daily brief demo: docs/daily-brief-demo.md

Skill or MCP

Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:

npx -y garmin-mcp-unofficial call garmin_connection_status --json '{}'

Copy skill/SKILL.md into your agent skills dir.

Reviews

No reviews yet

Be the first to review this server!