使用说明
培训口语mcp
用于访问TrainingPeaks训练数据的MCP(模型上下文协议)服务器。适用于Claude Desktop、ChatGPT和其他MCP兼容客户端。
特性
- 20工具 用于访问锻炼、力量锻炼、健身指标、峰值/PR、功率分析、有氧解耦、锻炼计划合规性、ZWO锻炼生成、文件、缓存管理和日期解析
- FIT文件缓存:下载的FIT文件被缓存到磁盘(
~/.trainingpeaks-mcp/cache/fit/)--消除了会话之间的冗余下载 - 双重运输:stdio用于克劳德桌面,HTTP用于ChatGPT
- FIT文件解析:从下载的FIT文件中提取结构化数据
- 也可用作独立的TypeScript库
快速开始
一键安装(克劳德桌面版)
- 下载最新
.mcpb文件来自 发布 - 双击
.mcpbfile--Claude Desktop将打开并提示您安装 - 在提示时输入您的TrainingPeaks凭据
就是这样——不需要安装Node.js。Claude Desktop捆绑了自己的运行时。
手动配置(克劳德桌面)
需要 Node.js 20+。添加到您的Claude Desktop配置中(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"trainingpeaks": {
"command": "npx",
"args": ["trainingpeaks-mcp"],
"env": {
"TP_USERNAME": "your-email@example.com",
"TP_PASSWORD": "your-password"
}
}
}
}
重新启动克劳德桌面。现在,您可以向Claude询问您的训练数据!
ChatGPT(通过HTTP)
需要 Node.js 20+.
-
克隆并安装:
git clone https://github.com/robertgregorywest/trainingpeaks-mcp.git cd trainingpeaks-mcp npm install -
创建
.env使用您的凭据文件:cp .env.example .env # Edit .env with your TrainingPeaks credentials -
构建并启动HTTP服务器:
npm run build npm run start:http您应该看到:
TrainingPeaks MCP HTTP server running on port 3000 -
安装ngrok(如果尚未安装):
macOS(Homebrew):
brew install ngrok窗户(巧克力):
choco install ngrok或直接从以下网址下载: https://ngrok.com/download
-
创建一个免费的ngrok帐户并获取您的身份验证令牌:
- 注册地址:https://dashboard.ngrok.com/signup
- 从以下位置复制您的身份验证令牌https://dashboard.ngrok.com/get-started/your-authtoken
- 使用您的令牌配置ngrok:
ngrok config add-authtoken YOUR_AUTH_TOKEN
-
启动ngrok以暴露您的本地服务器(在新终端中):
ngrok http 3000ngrok将显示如下输出:
Forwarding https://abc123.ngrok-free.app -> http://localhost:3000复制
https://...ngrok-free.appURL。 -
在ChatGPT中添加MCP连接器:
- 转到ChatGPT设置→ 连接器→ 添加连接器
- 输入您的ngrok URL
/mcp路径:https://abc123.ngrok-free.app/mcp - 保存连接器
-
通过向ChatGPT询问您的TrainingPeaks数据进行测试!
可用工具
| 工具 | 说明 |
|---|---|
get_user |
获取包含运动员ID的用户资料 |
get_athlete_id |
获取运动员ID |
get_workouts |
按日期范围列出锻炼计划 |
get_workout |
获取单次锻炼总结 |
get_workout_details |
使用完整的指标、间隔、圈数、区域进行锻炼 |
search_workouts |
按标题搜索几天内的训练(不区分大小写) |
compare_intervals |
使用功率/持续时间过滤器在训练中并排比较圈数/间隔 |
get_strength_workouts |
在指定日期范围内进行力量训练(训练、分组、锻炼、依从性) |
parse_fit_file |
解析FIT文件并提取结构化数据 |
get_fitness_data |
获取日期范围的CTL/ATL/TSB |
get_current_fitness |
获取今天的健身指标 |
get_peaks |
获得特定运动和类型的峰值 |
get_workout_peaks |
从特定训练中获取PR |
get_best_power |
根据原始FIT文件计算任意持续时间(例如3分钟、8分钟、45分钟)的最佳功率 |
get_power_duration_curve |
在一个日期范围内构建自行车训练的功率持续时间曲线 |
get_aerobic_decoupling |
计算有氧运动与运动的脱钩(Pw:Hr)——测量心脏漂移 |
assess_compliance |
评估锻炼计划的合规性——将规定的计划与实际活动、每一步和总结指标进行比较 |
build_zwo_workout |
从结构化分段(热身、间歇、稳定、斜坡、冷却、自由骑行)构建Zwift.zwo锻炼文件 |
clear_fit_cache |
清除从TrainingPeaks下载的所有缓存FIT文件 |
get_current_date |
获取ISO、美国、欧盟或自定义格式的当前日期 |
示例提示
- “我上周做了什么锻炼?”
- “显示我当前的健康状况(CTL、ATL、TSB)”
- “我最好的5分钟力量是什么?”
- “获取我最近骑行的详细信息,包括心率区域”
- “下载并解析昨天骑行的FIT文件”
- “搜索我过去30天的所有节奏训练”
- “比较我最近3次阈值骑行的间隔”
- “从昨天的骑行中,我最好的3分钟和8分钟力量是什么?”
- “构建过去6周的功率持续时间曲线”
- “我上次长途骑行的有氧脱钩是什么?”
- “我昨天的骑行计划执行得怎么样了?”
- “为Zwift创建300W的5x5 VO2max训练,FTP恢复率为50%”
- “以220W的功率为我打造一个3x10分钟的最佳时段”
- “今天几号?”
环境变量
创建一个 .env 示例中的文件:
cp .env.example .env
然后编辑 .env 使用您的TrainingPeaks证书:
TP_USERNAME=your-email@example.com
TP_PASSWORD=your-password
| 变量 | 描述 | 可选 |
|---|---|---|
TP_USERNAME |
TrainingPeaks电子邮件地址 | 否 |
TP_PASSWORD |
TrainingPeaks密码 | 否 |
PORT |
HTTP服务器端口(默认值:3000) | 是 |
TP_TEST_BIKE_WORKOUT_ID |
自行车训练ID,包含FIT文件、功率和HR数据(用于集成测试) | 是 |
图书馆使用情况
您还可以将此包用作独立的TypeScript库:
import { createClient } from "trainingpeaks-mcp";
const client = createClient();
// Get workouts for a date range
const workouts = await client.getWorkouts("2024-01-01", "2024-12-31");
// Get workout details with metrics
const details = await client.getWorkoutDetails(workouts[0].workoutId);
console.log(details.metrics);
// Get current fitness
const fitness = await client.getCurrentFitness();
console.log(`CTL: ${fitness.ctl}, ATL: ${fitness.atl}, TSB: ${fitness.tsb}`);
// Build a power-duration curve from the last 6 weeks of rides
const curve = await client.getPowerDurationCurve({
startDate: "2024-11-01",
endDate: "2024-12-15",
});
console.log(curve.curve.map((p) => `${p.durationLabel}: ${p.bestPowerWatts}W`));
// Aerobic decoupling analysis
const decoupling = await client.getAerobicDecoupling(workouts[0].workoutId);
console.log(
`Decoupling: ${decoupling.decouplingPercent}% — ${decoupling.interpretation}`,
);
// Workout plan compliance assessment
const compliance = await client.assessCompliance(workouts[0].workoutId);
console.log(
`Plan compliance: ${compliance.overallCompliance.powerComplianceAvg}%`,
);
// Clean up when done
await client.close();
发展
npm run build # Compile TypeScript
npm run lint # Run ESLint
npm run test # Run unit tests
npm run typecheck # Type-check without emitting
集成测试
集成测试对TrainingPeaks进行真正的API调用,以验证所有端点是否正常工作。
先决条件:
- 创建
.env将您的TrainingPeaks凭据归档(请参阅 环境变量)
运行集成测试:
npm run test:integration
测试内容:
- 用户API:
getUser,getAthleteId - API训练:
getWorkouts,getWorkout,getWorkoutDetails - 健身API:
getCurrentFitness,getFitnessData - 峰值API:
getPeaks,getWorkoutPeaks - 文件API:
downloadActivityFile
如果凭据不可用,则会自动跳过测试。
运作原理
该库使用Playwright自动将浏览器登录到TrainingPeaks,从API请求中捕获身份验证令牌。然后将该令牌用于后续的API调用。
许可证
麻省理工学院