MCP Servers

模型上下文协议服务器、框架、SDK 和模板的综合目录。

MCP server exposing Garmin Connect data (steps, sleep, HR, HRV, stress, activities, training readiness) to Claude and other MCP clients. Built with FastMCP, HTTP transport, ready to deploy on Render.

创建于 5/21/2026
更新于 about 4 hours ago
Repository documentation and setup instructions

Garmin MCP

A Model Context Protocol server that exposes your Garmin Connect data (steps, sleep, HR, HRV, stress, body battery, activities, training readiness, body composition) to MCP-compatible clients like Claude.

Built with FastMCP and python-garminconnect. Runs over HTTP with bearer-token auth — ready to deploy to Render.

Tools

| Tool | What it returns | | --- | --- | | get_user_profile | Display name, full name, unit system | | get_daily_stats | Steps, calories, resting HR, stress, body battery, intensity minutes | | get_steps_intraday | Per-bucket step samples for one day | | get_daily_steps | Daily totals across a date range | | get_heart_rates | HR samples + resting HR | | get_sleep_data | Stages, scores, SpO2, HRV, respiration | | get_stress_data | Stress levels, rest vs. active durations | | get_body_battery | Body battery values | | get_body_composition | Weight, BMI, body fat, muscle mass | | get_floors | Floors ascended / descended | | get_hrv_data | Overnight HRV | | get_training_readiness | Training readiness scores | | get_recent_activities | Most recent activities | | get_activities_by_date | Activities in a date range, optional type filter | | get_last_n_days_summary | Daily stats for the last N days |

Local dev

pip install -r requirements.txt
cp .env.example .env
# fill in GARMIN_EMAIL, GARMIN_PASSWORD, MCP_BEARER_TOKEN
set -a && source .env && set +a
python server.py

Hit http://localhost:8000/mcp to confirm the server is responding (you'll get a 4xx from a plain GET — that's expected; MCP clients do POST/SSE).

Deploy to Render

Deploy to Render

One click deploys the render.yaml blueprint — Render then prompts you for the environment variables below. Or do it manually:

  1. Push this repo to GitHub.
  2. On render.com: New → Web Service → Connect GitHub → pick this repo. Render auto-detects render.yaml.
  3. In the Environment tab, fill in:
    • GARMIN_EMAIL
    • GARMIN_PASSWORD
    • GARMINTOKENS_BASE64 (only if your account has MFA — see below)
    • MCP_BEARER_TOKEN is auto-generated; copy it from the dashboard.
  4. Deploy. When the build is green, your URL is https://<service>.onrender.com/mcp.

Handling MFA

The server runs non-interactively, so it can't prompt for an MFA code. Bootstrap the tokens once locally:

pip install garminconnect
python bootstrap_tokens.py
# enter email + password + MFA code when asked
# copy the printed GARMINTOKENS_BASE64 blob into Render

The Garmin OAuth refresh token is good for ~1 year — set it once and forget.

Connect to Claude

Desktop / web (claude.ai) → Settings → Connectors → Add custom connector:

  • URL: https://<service>.onrender.com/mcp
  • Name: Garmin
  • Authentication: Bearer token → paste MCP_BEARER_TOKEN

Toggle the connector on inside a chat to use the tools.

Security notes

  • MCP_BEARER_TOKEN is the only thing between the internet and your Garmin data — generate a long random value and rotate if leaked.
  • Garmin credentials are kept in env vars, never written to the repo.
  • Token cache lives under /tmp/.garminconnect on the server; Render's filesystem is ephemeral, so the server re-uses cached tokens within an instance lifetime and re-bootstraps from GARMINTOKENS_BASE64 on cold starts.
快速设置
此服务器的安装指南

安装包 (如果需要)

uvx garmin-mcp

Cursor 配置 (mcp.json)

{ "mcpServers": { "nmldias-garmin-mcp": { "command": "uvx", "args": [ "garmin-mcp" ] } } }