TrainingPeaks MCP服务器
通过模型上下文协议(MCP)将TrainingPeaks连接到Claude和其他AI助手。查询训练,建立结构化的时间间隔,管理你的日历,跟踪健身趋势,并通过自然对话控制你的训练。
无需API批准。 官方的Training Peaks API已通过审批,但此服务器使用任何用户都可以在几分钟内设置的安全cookie身份验证。您的cookie存储在您的系统密钥环中,除了传输到TrainingPeaks之外,从不传输到任何地方。
你能做什么
Example conversation with Claude using TrainingPeaks MCP
问你的AI助手一些事情,比如:
- “为我打造一个4x8分钟的周二门槛训练,包括热身和放松”
- “将我的移动会话安排在2026年4月14日16:45”
- “比较我今年和去年的FTP进度”
- “把上周的长途旅行复制到本周六”
- “记录我的体重为74.5公斤,睡7.5小时”
- “到目前为止,我的每周TSS是多少?我是否在实现ATP目标的轨道上?”
- “显示我的比赛日历以及距离我的A比赛还有多少周”
- “将我的FTP设置为310并更新我的电源区域”
- 为下周一添加日历备注:休息日、旅行
工具(62)
锻炼
| 工具 | 说明 |
|---|---|
tp_get_workouts | 列出日期范围内的锻炼(最多90天) |
tp_get_workout | 获取单次训练的完整细节 |
tp_create_workout | 使用可选的间歇结构、自动计算的IF/TSS和可选的计划开始时间创建锻炼 |
tp_update_workout | 更新现有锻炼的任何字段,包括结构化间隔和计划开始时间 |
tp_delete_workout | 删除训练 |
tp_copy_workout | 将训练复制到新日期(保留结构和计划字段) |
tp_reorder_workouts | 在指定日期重新安排训练 |
tp_pair_workout | 将已完成的锻炼与计划中的锻炼配对(合并为一项) |
tp_unpair_workout | 取消训练计划(分为单独的已完成和计划中的训练) |
tp_validate_structure | 在不创建训练的情况下验证间隔结构 |
tp_get_workout_comments | 获取对锻炼的评论 |
tp_add_workout_comment | 在训练中添加评论 |
tp_upload_workout_file | 将FIT/TCX/GPX文件上传到训练中 |
tp_download_workout_file | 下载锻炼的设备文件 |
tp_delete_workout_file | 从训练中删除附件 |
分析与性能
| 工具 | 说明 |
|---|---|
tp_analyze_workout | 使用时间序列数据、区域和圈数进行详细分析 |
tp_get_peaks | 力量PR(5秒-90分钟)和跑步PR(400米马拉松) |
tp_get_workout_prs | 在特定会话期间设置的PR |
tp_get_fitness | CTL、ATL和TSB趋势(健康、疲劳、形态) |
tp_get_weekly_summary | 综合锻炼+一周健身,总计 |
tp_get_atp | 年度训练计划-每周TSS目标、周期、比赛 |
运动员设置
| 工具 | 说明 |
|---|---|
tp_get_athlete_settings | 获取FTP、阈值、区域、配置文件 |
tp_update_ftp | 更新FTP并重新计算默认电源区域 |
tp_update_hr_zones | 更新心率区域 |
tp_update_speed_zones | 更新跑步/游泳配速区 |
tp_update_nutrition | 更新每日计划卡路里 |
tp_get_pool_length_settings | 获取池长度选项 |
健康指标
| 工具 | 说明 |
|---|---|
tp_log_metrics | 记录体重、心率变异性、睡眠、步数、血氧饱和度、脉搏、RMR、受伤情况 |
tp_get_metrics | 获取日期范围的健康指标 |
tp_get_nutrition | 获取日期范围内的营养数据 |
设备
| 工具 | 说明 |
|---|---|
tp_get_equipment | 列出自行车和鞋子的距离 |
tp_create_equipment | 添加自行车或鞋子 |
tp_update_equipment | 更新设备详细信息,退役 |
tp_delete_equipment | 删除设备 |
活动和日历
| 工具 | 说明 |
|---|---|
tp_get_focus_event | 获得具有目标的A级重点活动 |
tp_get_next_event | 获取最近的未来活动 |
tp_get_events | 列出日期范围内的事件 |
tp_create_event | 添加具有优先级(a/B/C)和CTL目标的比赛/赛事 |
tp_update_event | 更新事件详细信息 |
tp_delete_event | 删除事件 |
tp_create_note | 创建日历备注 |
tp_get_note | 按ID获取日历备忘 |
tp_update_note | 更新注释的标题、描述、日期或可见性 |
tp_delete_note | 删除日历备忘 |
tp_get_note_comments | 在注释中列出所有评论 |
tp_add_note_comment | 在备注中添加评论 |
tp_get_availability | 列表不可用/时间有限 |
tp_create_availability | 将日期标记为不可用或有限 |
tp_delete_availability | 删除可用性条目 |
锻炼库
| 工具 | 说明 |
|---|---|
tp_get_libraries | 列出锻炼库文件夹 |
tp_get_library_items | 列出库中的模板 |
tp_get_library_item | 获取完整的模板详细信息,包括结构 |
tp_create_library | 创建库文件夹 |
tp_delete_library | 删除库文件夹 |
tp_create_library_item | 保存锻炼模板 |
tp_update_library_item | 编辑模板 |
tp_schedule_library_workout | 将模板安排到日历日期 |
参考与认证
| 工具 | 说明 |
|---|---|
tp_get_workout_types | 列出所有带有ID的运动类型和子类型 |
tp_get_profile | 获取运动员资料 |
tp_auth_status | 检查身份验证状态 |
tp_list_athletes | 列出运动员(教练账户) |
tp_refresh_auth | 通过浏览器cookie重新进行身份验证 |
______________________________________________________________________
设置选项
选项A:使用Claude代码自动设置
如果你有 克劳德代码,粘贴此提示:
Set up the TrainingPeaks MCP server from https://github.com/JamsusMaximus/trainingpeaks-mcp - clone it, create a venv, install it, then walk me through getting my TrainingPeaks cookie from my browser and run tp-mcp auth. Finally, add it to my Claude Desktop config.Claude将负责安装,并逐步指导您完成身份验证。
选项B:手动设置
步骤1:安装
git clone https://github.com/JamsusMaximus/trainingpeaks-mcp.git
cd trainingpeaks-mcp
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .第二步:身份验证
选项A:从浏览器自动提取(最简单)
如果您在浏览器中登录了TrainingPeaks:
pip install tp-mcp[browser] # One-time: install browser support
tp-mcp auth --from-browser chrome # Or: firefox, safari, edge, automacOS注意事项: 您可能会看到钥匙串或全磁盘访问的安全提示。这是正常的——浏览器Cookie是加密的,需要权限才能读取。
选项B:手动输入cookie
- 登录 app.trainingpeaks.com
- 打开DevTools(
F12) -> 应用 选项卡-> Cookie - 找到
Production_tpAuth并复制其值 - 跑
tp-mcp auth并在提示时粘贴
其他身份验证命令:
tp-mcp auth-status # Check if authenticated
tp-mcp auth-clear # Remove stored cookie步骤3:添加到Claude桌面
运行此命令以获取配置代码段:
tp-mcp config编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows)并将其粘贴到里面 mcpServers。具有多个服务器的示例:
{
"mcpServers": {
"some-other-server": {
"command": "npx",
"args": ["some-other-mcp"]
},
"trainingpeaks": {
"command": "/Users/you/trainingpeaks-mcp/.venv/bin/tp-mcp",
"args": ["serve"]
}
}
}重新启动克劳德桌面。你准备好了!
______________________________________________________________________
结构化锻炼
创建具有完整间歇结构的训练。服务器根据结构自动计算持续时间、IF和TSS:
{
"date": "2026-03-01",
"sport": "Bike",
"title": "Sweet Spot Intervals",
"structure": {
"primaryIntensityMetric": "percentOfFtp",
"steps": [
{"name": "Warm Up", "duration_seconds": 600, "intensity_min": 40, "intensity_max": 55, "intensityClass": "warmUp"},
{"type": "repetition", "reps": 4, "steps": [
{"name": "Sweet Spot", "duration_seconds": 480, "intensity_min": 88, "intensity_max": 93, "intensityClass": "active"},
{"name": "Recovery", "duration_seconds": 120, "intensity_min": 50, "intensity_max": 60, "intensityClass": "rest"}
]},
{"name": "Cool Down", "duration_seconds": 600, "intensity_min": 40, "intensity_max": 55, "intensityClass": "coolDown"}
]
}
}LLM通过对话自然地构建这个JSON——只需说“为我构建4x8分钟的最佳休息点,休息2分钟”。
你可以使用同样的简化 structure 对象与 tp_update_workout:
{
"workout_id": "3658666303",
"duration_minutes": 57,
"tss_planned": 62.3,
"structure": {
"primaryIntensityMetric": "percentOfThresholdHr",
"steps": [
{"name": "Warm-up", "duration_seconds": 900, "intensity_min": 65, "intensity_max": 80, "intensityClass": "warmUp"},
{"type": "repetition", "name": "4x5min controlled tempo", "reps": 4, "steps": [
{"name": "Interval", "duration_seconds": 300, "intensity_min": 89, "intensity_max": 94, "intensityClass": "active"},
{"name": "Jog recovery", "duration_seconds": 180, "intensity_min": 65, "intensity_max": 83, "intensityClass": "rest"}
]},
{"name": "Cool-down", "duration_seconds": 600, "intensity_min": 65, "intensity_max": 80, "intensityClass": "coolDown"}
]
}
}如果 duration_minutes 和 tss_planned 它们是从结构中推导出来的。如果显式传递它们,它们将覆盖派生值。
对于高级往返用例, tp_create_workout 和 tp_update_workout 也接受本地人 structured_workout TrainingPeaks构建器格式的有效载荷。当锻炼已经具有原生结构时, tp_get_workout 返回为 structured_workout.
{
"workout_id": "3658666303",
"structured_workout": {
"structure": [],
"polyline": [],
"primaryLengthMetric": "duration",
"primaryIntensityMetric": "percentOfFtp",
"primaryIntensityTargetOrRange": "range"
}
}使用其中之一 structure 或 structured_workout 在一次创建/更新调用中,而不是同时进行。
对于计划的锻炼计划, tp_create_workout 和 tp_update_workout 接受:
YYYY-MM-DD用于日历日期的全天计划YYYY-MM-DDTHH:MM:SS在该日期的计划开始时间
TrainingPeaks将计划的锻炼时间与日历日分开存储。在内部,这意味着:
workoutDay在选定日期的午夜停留startTimePlanned存储计划开始时间- 计划结束时间来自
startTimePlanned + totalTimePlanned
计划开始时间示例:
{
"date": "2026-04-14T16:45:00",
"sport": "Strength",
"title": "Core & Mobility",
"duration_minutes": 60,
"description": "Core stabilisation and stretching."
}什么是MCP?
模型上下文协议 是将AI助手连接到外部数据源的开放标准。MCP服务器公开了人工智能模型可以调用的工具来获取实时数据,使克劳德等助手能够通过自然语言访问您的Training Peaks帐户。
安全
TL;DR:您的cookie在磁盘上加密,用短期OAuth令牌交换,从未显示给Claude,只发送给TrainingPeaks。服务器没有网络端口。
该服务器设计有深度防御。您的TrainingPeaks会话cookie是敏感的,它允许访问您的训练数据,因此我们会相应地处理它。
写入权限: v2.0添加了完整的日历管理(创建、更新、删除训练、事件、笔记、设备、设置)。所有突变都要经过Pydantic验证。服务器无法访问账单或付款信息。
Cookie存储
| 平台 | 主存储 | 后备 |
|---|---|---|
| macOS | 系统钥匙链 | 加密文件 |
| Windows | Windows凭据管理器 | 加密文件 |
| Linux | 特勤局(GNOME/KDE) | 加密文件 |
你的饼干是 从不 以明文形式存储。加密文件回退使用AES-256-GCM身份验证加密,使用PBKDF2派生密钥(600000次迭代)和特定于机器的盐。
Cookie永远不会泄露给AI
人工智能助理(克劳德) 永远看不到您的cookie值多层结构确保了这一点:
- 返回值净化:对于包含以下内容的任何键,工具结果都会被清除
cookie,token,auth,credential,password,或secret在被送往克劳德之前 - 戴口罩的代表():The
BrowserCookieResult和CredentialResult类重写__repr__展示 `cookie=
` 而不是实际值
- 消毒异常:错误消息仅使用异常类型名称,从不使用可能包含数据的完整消息
- 无日志:Cookie值永远不会写入任何日志
域硬编码(无法更改)
浏览器cookie提取 仅 访问 .trainingpeaks.com:
# From src/tp_mcp/auth/browser.py - HARDCODED, not a parameter
cj = func(domain_name=".trainingpeaks.com")Claude无法通过工具参数修改此设置。唯一的参数是 browser (chrome/firefox/etc),而不是域名。要更改域,需要修改源代码。
无网络曝光
MCP服务器使用 仅限stdio传输 -它通过stdin/stdout与Claude Desktop通信,而不是通过网络。没有HTTP服务器,没有开放端口,没有远程访问。
开源
此服务器是完全开源的。您可以在运行之前审核每一行代码。关键安全文件:
src/tp_mcp/auth/browser.py-使用硬编码域提取Cookiesrc/tp_mcp/auth/encrypted.py-AES-256-GCM凭证加密src/tp_mcp/tools/_validation.py-Pydantic输入验证src/tp_mcp/tools/refresh_auth.py-结果消毒tests/test_tools/test_refresh_auth_security.py-安全测试
身份验证流程
服务器使用两步身份验证过程:
- Cookie到OAuth令牌:您存储的cookie将被替换为短期OAuth访问令牌(1小时后过期)
- 自动刷新:令牌缓存在内存中,并在到期前自动刷新
这意味着:
- 您只需通过以下方式进行一次身份验证
tp-mcp auth - API调用使用正确的承载令牌身份验证,而不是cookie
- 如果您的会话cookie过期(通常在几周后),请使用
tp_refresh_auth克劳德或逃跑tp-mcp auth再次
发展
pip install -e ".[dev]"
pytest tests/ -v
mypy src/
ruff check src/许可证
麻省理工学院
