mcpField
G
garmin-connect-workouts-mcp

garmin-connect-workouts-mcp

本地服务
github.com/slaat健康医疗08 周前更新

关于 garmin-connect-workouts-mcp

面向在 Garmin Connect 管理训练的跑者、骑行者和游泳者的 MCP 服务。它将结构化训练步骤、目标和重复组转换为 Garmin 训练,并可将训练安排到日历中。

主要功能

  1. 01创建和管理 Garmin 训练
  2. 02设置配速、心率、功率和步频目标
  3. 03将重复段编码为重复组
  4. 04设置泳姿和器材等游泳训练内容
  5. 05将训练安排到日历
  6. 06通过浏览器会话进行身份验证

适用场景

  1. 01创建带恢复段的间歇训练
  2. 02设置跑步或骑行的目标区间
  3. 03配置包含泳姿和器材的泳池训练
  4. 04在 Garmin Connect 中安排训练

MCP 相关

通过 MCP 工具连接 Garmin Connect,支持身份验证,以及创建、列出、读取、更新、删除和安排训练。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"slaat-garmin-connect-workouts": {
"command": "npx",
"args": [
"-y",
"garmin-connect-workouts-mcp"
]
}
}
}
启动命令npx -y garmin-connect-workouts-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmgarmin-connect-workouts-mcp1.1.3

工具

8

收录的工具列表 · 更新于 2 周前

参数类型必填说明
namestring是训练名称,显示在 Garmin Connect 和设备上。
sportenum否此训练的运动类型:running、cycling 或 swimming。决定适用的目标类型,以及是否使用 stroke/equipment/poolLength。默认值为 running。running | cycling | swimming
stepsarray是构成训练的步骤和重复区块的有序列表,顺序即执行顺序。
poolLengthnumber否仅限游泳——此训练的泳池长度,例如 25。仅当 sport 为 'swimming' 时有效。
poolLengthUnitenum否仅限游泳——poolLength 的单位。指定 poolLength 但未指定单位时,默认为 'm'。m | yd

详细介绍

Garmin Connect 训练 MCP

garmin-connect-workouts-mcp MCP server

garmin-connect-workouts-mcp MCP server

一个 MCP(Model Context Protocol)服务,可将自然语言训练描述转换为 Garmin Connect 中的结构化训练。用通俗英语描述训练计划,调用模型就会构建一个带类型的分步训练计划,由此服务将其编码为 Garmin 的训练 API 格式,并直接创建到你的账户中。

功能

  • 配速、心率、功率和步频目标 - 配速范围、1-5 区心率区间、明确的 bpm 范围、骑行功率和步频,全部依据 Garmin 的真实 workoutTargetType 表进行编码。
  • 真实重复组 - 5x1km 会变成一个重复组,而不是五个重复步骤,因此手表会显示实际的重复次数计数器。
  • 游泳训练 - 每个步骤可设置泳姿(自由泳、仰泳、蛙泳、蝶泳、打腿练习、个人混合泳或任意泳姿)和装备(脚蹼、打水板、划水掌、浮漂、呼吸管),并可设置以米或码为单位的训练泳池长度。
  • 完整的训练生命周期 - 创建、列出、获取、更新、删除训练,并将训练安排到 Garmin Connect 日历中。
  • 结构化输入,而非文本解析 - 服务本身不会解析自由文本;每个时长和目标都是带有明确单位的字段,因此不会出现像“10 min”这样的字符串被误读的情况。

快速开始

Claude Code
claude mcp add garmin-workouts npx garmin-connect-workouts-mcp
Claude Desktop

将以下内容添加到配置文件中:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "garmin-workouts": {
      "command": "npx",
      "args": ["-y", "garmin-connect-workouts-mcp"]
    }
  }
}

然后重启 Claude Desktop。

身份验证

Garmin Connect 的 Web 客户端使用会话 Cookie 和 CSRF 令牌进行身份验证,而非此服务可以保存的密码授权。因此,首次创建训练时(或会话过期时):

  1. 服务会通过一个轻量级的身份验证请求检查已存储的会话。
  2. 如果会话缺失或被拒绝,请运行 authenticate_garmin 工具。它会在 connect.garmin.com 打开一个真实的浏览器窗口,供你正常登录。
  3. 登录完成后,会话会被捕获并存储到 ~/.config/garmin-connect-workouts-mcp/auth.json,权限为 600(仅所有者可读写)。

服务绝不会存储密码,只保存由此产生的会话 Cookie 和 CSRF 令牌。Garmin 会话会过期,因此你可能需要在不同会话之间重新进行身份验证;服务会自动检测到这一点,并告知你再次运行 authenticate_garmin。登录浏览器使用位于 ~/.config/garmin-connect-workouts-mcp/browser-profile/ 下持久且隔离的配置文件,以便 Garmin 在多次登录之间记住设备;它绝不会接触你的个人浏览器配置文件。

工具

工具描述
create_garmin_workout创建包含步骤、目标和重复组的结构化训练。
list_garmin_workouts列出 Garmin Connect 账户中的训练。
get_garmin_workout获取一项训练的完整结构。
update_garmin_workout替换现有训练的内容,同时保留其 ID。
delete_garmin_workout删除一项训练。
schedule_garmin_workout将一项训练安排到 Garmin Connect 日历的指定日期。
check_garmin_auth检查已存储的 Garmin 会话是否仍然有效。
authenticate_garmin使用 Garmin Connect 进行身份验证(会打开浏览器)。

使用示例

  • “创建一场 30 分钟的轻松跑,保持在 2 区”
  • “热身 10 分钟,保持在 3 区;然后进行 5 组 1 公里阈值间歇跑,配速为 4:00/km,组间休息 2 分钟;最后在 2 区冷身 10 分钟”
  • “以 5 公里比赛配速跑 8 组 400 米,每组间恢复 60 秒;然后查看我本周已经安排的训练”
  • “更新训练 123456,加入 5 分钟冷身,然后安排在下周一”
  • “创建一场 25 米泳池游泳训练:任意泳姿热身 200 米;使用浮板进行 4 组 100 米自由泳,组间休息 30 秒;最后蛙泳冷身 100 米”

目标的工作方式

指定的配速会被视为范围的快侧:Garmin 将配速存储为一个范围,而非单个数值,因此单独指定 4:00/km 会转换为 4:00-4:10/km 的范围,放宽 10 秒。若要设置更窄或不同的范围,请明确指定 fast 和 slow。

开发

pnpm install
pnpm test          # vitest: encoders + golden-file tests against real captured payloads
pnpm run build      # compile TypeScript to dist/
pnpm run dev        # run the server directly with tsx

测试会根据从 Garmin 自有网页客户端捕获的样本,验证训练编码器(目标、时长、重复嵌套),以便在载荷格式回归问题影响真实账户之前发现它们。

免责声明

这是一个非官方的第三方项目,与 Garmin Ltd. 及其任何关联公司均无关联,也未获得其认可或赞助。本项目通过逆向工程官方网页客户端发出的相同请求,与 Garmin Connect 的 Web API 通信。如果 Garmin 更改该 API,本项目可能会停止工作。使用风险自负,并自行承担发送到自己账户的训练和数据所带来的责任。

致谢

感谢 Charles Frisbee 编写的 garmin-workouts-mcp,最初提出了通过 MCP 操作 Garmin Connect 训练的想法。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。