Skip to main content
Glama

garmin-mcp

一个本地 MCP 服务器,将你的 Garmin Connect 活动、健康和训练数据(活动、HRV、睡眠、心率、压力、Body Battery、训练准备状态、心率/功率区间、乳酸阈值、FTP、VO2max、个人纪录、训练课、已计划训练课和训练计划)以工具的形式提供给 Claude Desktop。

它通过 garminconnect 库直接与实时 Garmin Connect API 通信。数据是只读的——不会向 Garmin 写回任何内容。

身份验证工作原理

Garmin 登录有意在两个独立位置进行:

  • scripts/setup_auth.py — 一个交互式脚本,由你自己在终端中运行。它使用你的邮箱/密码登录,如果 Garmin 要求,会提示你输入 MFA 代码,并将生成的会话令牌保存到 ~/.garmin_mcp/tokens

  • MCP 服务器src/garmin_mcp/server.py)由 Claude Desktop 无头启动,只会加载并静默刷新缓存令牌。它从不提示输入 MFA——Claude Desktop 没有给它可提示的终端,在那里阻塞 stdin 会导致工具调用挂起。如果缓存的会话缺失或已过期,工具调用会失败并返回错误,提示你重新运行 setup_auth.py

你的 Garmin 密码存储在 macOS 钥匙串中(条目/服务 garmin-mcp,可在 Keychain Access 中查看),绝不会写入文件。只有你的 Garmin 登录邮箱(非机密信息)会保存在 ~/.garmin_mcp/config.json 中。

设置

  1. 安装依赖:

    cd garmin_mcp
    uv sync
  2. 运行一次性的交互式登录:

    uv run python scripts/setup_auth.py

    输入你的 Garmin Connect 邮箱和密码(密码随后会存储在钥匙串中,供下次使用)。出现提示时输入 MFA 代码。成功后你会看到确认信息和令牌缓存路径。

  3. 通过编辑 ~/Library/Application Support/Claude/claude_desktop_config.json 并向其中添加(与任何其他 mcpServers 条目并列)来向 Claude Desktop 注册服务器:

    {
      "mcpServers": {
        "garmin": {
          "command": "uv",
          "args": ["run", "--project", "/Users/felix.guiony/Code/Perso/garmin_mcp", "garmin-mcp"]
        }
      }
    }
  4. 完全退出 Claude Desktop(Cmd+Q,而不仅仅是关闭窗口),然后重新打开。工具/锤子图标应列出 garmin 工具。

工具

工具

描述

list_activities

最近的活动,最新的在前(分页,可按类型筛选)

get_activity

单个活动的完整详情:摘要 + 按指标的时间序列

get_activity_splits

单个活动的圈/分段数据

get_heart_rate

每日静息心率 + 日内心率时间线

get_daily_stats

步数、卡路里、静息心率、距离、楼层、强度分钟数

get_sleep

睡眠阶段、时长、睡眠评分

get_hrv

心率变异性

get_body_battery

指定日期范围内的 Body Battery 能量储备

get_stress

全天压力水平

get_training_readiness

Training Readiness 评分和影响因素

get_profile

身份、单位偏好、个人设置(最大心率、静息心率、体重、身高、VO2max)、各运动的心率区间和功率区间

get_lactate_threshold

跑步乳酸阈值:心率、功率和速度

get_cycling_ftp

最新的骑行功能阈值功率

get_ftp_history

指定日期范围内某项运动的历史 FTP

get_max_metrics

指定日期范围内的最大指标数据(例如 VO2max)

get_resting_heart_rate

指定日期范围内的每日静息心率趋势

get_fitness_age

指定日期的 Garmin Fitness Age

get_personal_records

个人纪录

list_workouts

已保存的训练模板,最新的在前(分页)

get_workout

单个训练的完整结构:段、目标、间歇

get_scheduled_workouts

指定月份已计划训练的日历

get_scheduled_workout

单个已计划训练实例的详情

list_training_plans

训练计划

get_training_plan

特定训练计划的详情

get_adaptive_training_plan

特定自适应训练计划的详情

所有日期参数均接受 YYYY-MM-DD 格式,且默认值为今天。

故障排除

工具调用返回 "Garmin session error" / "run setup_auth.py" 消息。 你缓存的刷新令牌已过期或被撤销(这种情况偶尔会发生,例如在修改密码或长时间不活动后)。重新运行:

uv run python scripts/setup_auth.py

请求受限。 Garmin Connect 偶尔会限制快速请求;底层库会自动重试瞬时故障,但如果你看到速率限制错误,请稍等片刻再试。

在 Claude Desktop 之外直接验证服务器:

uv run mcp dev src/garmin_mcp/server.py

打开 MCP Inspector,以便你手动调用每个工具并检查其输出/模式。

项目结构

garmin_mcp/
  pyproject.toml
  src/garmin_mcp/
    auth.py      # keychain + token-cache helpers
    server.py    # FastMCP server and tool definitions
  scripts/
    setup_auth.py  # interactive one-time/occasional login
-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.

  • Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.

  • MCP server for Withings health data — sleep, activity, heart, and body metrics.

View all MCP Connectors

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

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