garmin-mcp
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 中。
设置
安装依赖:
cd garmin_mcp uv sync运行一次性的交互式登录:
uv run python scripts/setup_auth.py输入你的 Garmin Connect 邮箱和密码(密码随后会存储在钥匙串中,供下次使用)。出现提示时输入 MFA 代码。成功后你会看到确认信息和令牌缓存路径。
通过编辑
~/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"] } } }完全退出 Claude Desktop(Cmd+Q,而不仅仅是关闭窗口),然后重新打开。工具/锤子图标应列出
garmin工具。
工具
工具 | 描述 |
| 最近的活动,最新的在前(分页,可按类型筛选) |
| 单个活动的完整详情:摘要 + 按指标的时间序列 |
| 单个活动的圈/分段数据 |
| 每日静息心率 + 日内心率时间线 |
| 步数、卡路里、静息心率、距离、楼层、强度分钟数 |
| 睡眠阶段、时长、睡眠评分 |
| 心率变异性 |
| 指定日期范围内的 Body Battery 能量储备 |
| 全天压力水平 |
| Training Readiness 评分和影响因素 |
| 身份、单位偏好、个人设置(最大心率、静息心率、体重、身高、VO2max)、各运动的心率区间和功率区间 |
| 跑步乳酸阈值:心率、功率和速度 |
| 最新的骑行功能阈值功率 |
| 指定日期范围内某项运动的历史 FTP |
| 指定日期范围内的最大指标数据(例如 VO2max) |
| 指定日期范围内的每日静息心率趋势 |
| 指定日期的 Garmin Fitness Age |
| 个人纪录 |
| 已保存的训练模板,最新的在前(分页) |
| 单个训练的完整结构:段、目标、间歇 |
| 指定月份已计划训练的日历 |
| 单个已计划训练实例的详情 |
| 训练计划 |
| 特定训练计划的详情 |
| 特定自适应训练计划的详情 |
所有日期参数均接受 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 loginThis server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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