使用说明
Garmin健身MCP服务器
Garmin锻炼模型上下文协议(MCP)服务器连接到Garmin Connect API,并将您的健身和健康数据暴露给支持MCP标准的AI代理。用户可以使用此服务器从Claude Desktop或VS Code Copilot等人工智能客户端访问您的Garmin活动、锻炼和锻炼模板,使用户能够查询他们的活动数据,获得见解并获得人工智能生成的锻炼计划。
此项目处于早期开发阶段(v0.1),目前支持对活动、锻炼和锻炼模板的只读访问。
源代码是原始Garmin MCP服务器的简化和重构版本,可在 garmin_mcp.最初的mcp解决方案仍然可用并得到维护,但该分叉版本旨在减少人工智能代理的数据访问表面积,并专注于创建训练计划的核心功能,而不是暴露Garmin Connect API的所有数据和功能。
Garmin的API可通过 python garminconnect 图书馆和garth
特性
- 列出支持分页的最近活动
- 获取详细的活动信息
- 访问锻炼和训练计划
- 浏览锻炼模板
用法示例
一旦连接到Claude Desktop/VS Code Copilot,您可以提出以下问题:
基本查询:
- “显示我最近跑步的详细信息”
- “根据我最近的活动制定下周的锻炼计划”
- “我下一次计划锻炼是什么时候?”
- “制定一个以对话速度轻松跑30分钟的锻炼计划”
- “制定一个以5:15分钟/公里的速度跑5公里的锻炼计划”
- “制定一个有间隔的锻炼计划:6×400米@4:10-4:20/km,90秒恢复(包括15分钟的热身/冷却)”
AI Coach辅助查询:
- “我可以使用哪些锻炼模板来提高我的5公里时间?”
- “根据我最近的活动,本周我应该做什么锻炼来为半程马拉松做准备?”
- “根据我最近的活动,为下一次哈克尼半程马拉松制定一个锻炼计划,目标是在1小时45分内跑完。”
- “上传一个结构化的45分钟阈值跑步训练,并安排在下周二进行”
- “看看我最近4周的跑步,告诉我是训练过度还是准备增加里程”
- “上周日跑步时,我在每个心率区花了多少时间?”
- “比较我最近5次跑步的速度和心率——我是否变得更健康了?”
- “我6周后有一场比赛——为我制定一个渐进的每周锻炼计划,并将每节课添加到我的日历中”
工具覆盖范围
此MCP服务器为以下域实现了工具:
-
✅ 活动管理 --13个只读工具🏃
- 📋
get_activities--列出支持分页的活动(最新活动优先) - 📅
get_activities_by_date--列出两个日期之间的活动,可选择按类型筛选 - 📅
get_activities_fordate--列出在特定日期记录的活动 - 🔍
get_activity--获取单个活动的详细信息 - 📊
get_activity_splits--获取活动的圈数/分割数据 - 📊
get_activity_typed_splits--为活动键入分割(跑步/步行等) - 📊
get_activity_split_summaries--获取活动的拆分摘要统计信息 - 🌤️
get_activity_weather--记录活动期间的天气状况 - ❤️
get_activity_hr_in_timezones--获取某项活动在HR区域的心率分布 - 👟
get_activity_gear--获得用于活动的装备(鞋子、自行车等) - 🏋️
get_activity_exercise_sets--为力量训练活动准备运动套装 - 🏷️
get_activity_types--列出Garmin Connect支持的所有活动类型 - 🔢
count_activities--获取帐户中的活动总数
- 📋
-
✅ 锻炼 --11个读/写工具💪
- 📋
get_workouts--列出Garmin Connect训练库中的所有训练 - 🔍
get_workout_by_id--通过数字ID或UUID获取锻炼的完整细节 - ⬆️
upload_workout--从结构化JSON数据创建新的训练 - ⬆️
upload_workouts--在一次调用中从结构化JSON数据创建多个训练 - 🗑️
delete_workout--从库中永久删除训练 - 🗑️
delete_workouts--在一次通话中从库中永久删除多个训练 - 📅
schedule_workout--将锻炼安排在特定的日历日期 - 📅
schedule_workouts--在一次通话中安排多项锻炼(或上传并在线安排) - 📅
get_scheduled_workouts--列出日历上两个日期之间安排的锻炼 - 🗓️
get_training_plan_workouts--获取Garmin教练/训练计划中给定一周的训练 - ⬇️
download_workout--下载FIT文件格式的训练
- 📋
-
✅ 锻炼模板 --5 MCP资源📂
- 🏃
workout://templates/simple-run--基本预热/运行/冷却结构 - ⚡
workout://templates/interval-running--重复组间歇训练(6×400m) - 🎯
workout://templates/tempo-run--以心率区为目标的速度跑 - 🏋️
workout://templates/strength-circuit--重复组力量训练回路 - 📖
workout://reference/structure--用于构建训练的完整JSON结构参考
- 🏃
OAuth作用域注释
此服务器使用 garminconnect 和 加思 用于身份验证的库,它依赖于Garmin的SSO OAuth令牌。访问令牌授予对Garmin Connect API的读写权限。令牌作用域在身份验证库中不可由用户配置(garth).出于这个原因,MCP工具级别的设计应用了最低权限访问,如下所示:
- 活动管理 --列出和检索活动的只读操作。对活动(例如创建、更新或删除活动)不执行写入操作。无法访问用户资料或其他敏感数据,如GPS坐标。
- 锻炼 --所需的读写操作(列出、上传、安排、删除锻炼)
设置
安全注意事项
[!注意] Garmin的官方API程序 仅供企业使用,个人开发人员无法访问。我试图访问官方的API,但被拒绝了,因为我是作为一个开源个人项目来做这件事的。因此,我转向其他现有的开源库。这
garminconnect库使用反向工程的API端点,并依赖于通过Garmin Connect web/移动登录流获得的OAuth令牌。这garmin-mcp-auth该工具是获取这些令牌以供MCP服务器使用的一种变通方法,但它不是官方或长期的解决方案。
Garmin锻炼MCP取决于 Garmin连接库 并且使用 Garth图书馆 用于身份验证,这依赖于长期使用的OAuth令牌。
Garth库使用Garmin Connect的mobile-app SSO流来获取和持久化长期(一年)会话令牌,然后python-arminconnect(API Wrapper)使用这些令牌来调用Garmin Connect API端点。
这 garmin-mcp-auth 该工具是一个一次性设置实用程序,提示您输入Garmin Connect凭据和MFA代码(如果启用)以获取这些令牌。然后将令牌保存在本地,并由MCP服务器在向Garmin Connect发出API请求时用于身份验证。
此解决方案中的秘密管理可能被认为是不安全的,特别是使用长期使用的OAuth访问令牌。我们正在研究替代方案,例如具有自动刷新或与外部秘密管理器或密钥库集成的短期令牌。与此同时,您必须进行预身份验证,以获得服务器运行所需的令牌。请自行决定使用此工具,并注意在计算机上存储凭据和令牌的安全影响。然而,MCP工具的范围仅限于活动的只读访问和锻炼的读写访问,从而最大限度地降低了潜在风险。
先决条件
- Python 3.12+
- Garmin Connect帐户
- 如果您的帐户启用了MFA,则可能需要MFA
步骤1:预认证(一次)
在添加到Claude Desktop或VS Code Copilot之前,请在终端中进行一次身份验证:
# Install and run authentication tool
uvx --python 3.12 --from git+https://github.com/brunosantos/garmin-workouts-mcp garmin-mcp-auth
# You'll be prompted for:
# - Email (or set GARMIN_EMAIL env var)
# - Password (or set GARMIN_PASSWORD env var)
# - MFA code (if enabled on your account)
# OAuth tokens will be saved to ~/.garminconnect
您可以随时通过以下方式验证您的凭据
uv run garmin-mcp-auth --verify
注: 这将在以下位置创建一个本地文件 ~/.garminconnect 使用您的Garmin Connect长期代币(一年)。MCP服务器将读取此文件以验证API请求。这些代币的有效期为一年。
[!警告]
这里有龙🐉. 长寿命令牌是一种安全风险,违背了OAuth的最佳实践,但它是底层的一种限制garminconnect图书馆。请谨慎使用,并注意安全影响。 出于这个原因,我将MCP服务器的范围限制为仅必要的API端点(活动和锻炼模板为只读,锻炼为读写),以最大限度地减少潜在风险。 我正在研究一种使用具有自动刷新功能的短期代币的替代方案。
使用Claude Desktop
步骤2:配置Claude桌面
先决条件: 完成 步骤1:预认证 在配置Claude Desktop之前。
添加到您的Claude Desktop MCP设置 没有 资格证书:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"garmin-workouts": {
"command": "uvx",
"args": [
"--python",
"3.12",
"--from",
"git+https://github.com/brunosantos/garmin-workouts-mcp",
"garmin-workouts-mcp"
]
}
}
}
重要提示: 不 GARMIN_EMAIL 或 GARMIN_PASSWORD 配置中需要!服务器使用您保存的令牌。
步骤3:重新启动克劳德桌面
您的Garmin数据现在可以在Claude Desktop中使用!
使用VS代码
先决条件: 完成 步骤1:预认证 在配置VS代码之前。
为了快速安装,请使用下面的一键安装按钮之一:
对于手动安装,您可以使用以下方法之一配置MCP服务器:
方法1:用户配置(推荐) 将配置添加到用户级MCP配置文件中。打开命令选项板(Ctrl + Shift + P)然后跑 MCP: Open User Configuration。这将打开您的用户 mcp.json 您可以在其中添加服务器配置的文件。
方法2:工作空间配置 或者,您可以将配置添加到名为的文件中 .vscode/mcp.json 在您的工作空间中。这将允许您与他人共享配置。
有关VS Code中MCP配置的更多详细信息,请参阅 官方VS Code MCP文档.
{
"servers": {
"garmin-workouts": {
"command": "uvx",
"args": [
"--python",
"3.12",
"--from",
"git+https://github.com/brunosantos/garmin-workouts-mcp",
"garmin-workouts-mcp"
]
}
}
}
重要提示: 不 GARMIN_EMAIL 或 GARMIN_PASSWORD 配置中需要!服务器使用您在预身份验证步骤中保存的令牌。
开发设置
直接从存储库的本地副本:
- 添加此服务器配置:
{
"mcpServers": {
"garmin-workouts-local": {
"command": "uv",
"args": [
"--directory",
"<full path to your local repository>/garmin-workouts-mcp",
"run",
"garmin-workouts-mcp"
]
}
}
}
运行服务器
使用MCP Inspector在本地测试服务器
Inspector直接通过npx运行,无需安装。从项目根目录运行:
npx @modelcontextprotocol/inspector uv run garmin--workouts-mcp
您将能够检查和测试这些工具。
登录问题
如果您遇到登录问题:
- 验证您的凭据是否正确
- 检查Garmin Connect是否需要额外验证
- 确保garminconnect包是最新的
测试
该项目包括对所有MCP工具的全面测试。 目前所有测试均通过(100%).
运行测试
# Run all integration tests (default - uses mocked Garmin API)
uv run pytest tests/integration/
# Run tests with verbose output
uv run pytest tests/integration/ -v
# Run a specific test module
uv run pytest tests/integration/test_activity_management_tools.py -v
# Run end-to-end tests (requires real Garmin credentials)
uv run pytest tests/e2e/ -m e2e -v
测试结构
- 集成测试 (49次测试):使用FastMCP集成和模拟Garmin API响应测试所有MCP工具
- 端到端测试 (9项测试):使用真实的MCP服务器和Garmin API进行测试(需要有效的证书)