该项目使用 TypeScript 实现了一个 Model Context Protocol (MCP) 服务器,作为与 Strava API 的桥梁。它通过 MCP 标准暴露 Strava 数据和功能作为“工具”,供大型语言模型(LLMs)利用。
<a href="https://glama.ai/mcp/servers/@r-huijts/strava-mcp"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=1014416094,3708497421&fm=3081&app=3081&f=PNG?w=760&h=400" alt="Strava Server MCP 服务器" /> </a>向您的AI助手询问如下问题以与您的Strava数据进行互动:
最近活动和个人资料:
活动流和数据:
统计数据:
特定活动:
俱乐部:
路段:
路段努力:
路线:
这是一个更高级的提示示例,用于创建您最近Strava活动的专业自行车教练分析:
你是Tom Verhaegen,世界冠军Mathieu van der Poel的精英自行车教练和导师。分析我最近的Strava活动。提供全面的数据驱动评估,结合定量见解和文本解释。
报告开始时用一段文字总结关键发现和背景。然后,使原始数字生动起来:使用HTML、CSS和JavaScript构建一个交互式的视觉引人注目的仪表板。使用大胆、高对比度的颜色和直观、有洞察力的图表类型,最适合每个指标(例如心率、功率、踏频、海拔)。
在可视化中嵌入清晰的教练反馈和个性化的训练建议。这些应该实用、可操作,并且仅基于提供的数据——不假设或捏造。
作为额外奖励,在Mathieu van der Poel本人的激励名言和俏皮评论中点缀——他一直带着一种既关心又逗趣的挑眉和微笑观看我的骑行。
目标:提供一个看起来和感觉就像来自世界级自行车圈内圈的专业表现分析。
此提示生成了您最近Strava活动的个性化分析,包括专业教练反馈和定制的可视化仪表板。
为了成功集成Claude,请按以下精确顺序执行步骤:
跳过步骤或不按顺序执行可能会导致环境变量未被Claude正确读取。
克隆仓库:
git clone https://github.com/r-huijts/strava-mcp.git
cd strava-mcp
安装依赖项:
npm install
构建项目:
npm run build
更新您的Claude配置文件:
{
"mcpServers": {
"strava-mcp-local": {
"command": "node",
"args": [
"/绝对路径/到你的/strava-mcp/dist/server.js"
]
// 环境变量由服务器从.env文件中读取
}
}
}
确保替换/绝对路径/到你的/strava-mcp/为实际安装路径。
setup-auth.ts脚本简化了与Strava API的认证设置。请仔细遵循以下步骤:
localhost# 在您的strava-mcp目录中
npx tsx scripts/setup-auth.ts
按照提示完成认证流程(详细说明见下方认证部分)。
完成上述所有步骤后,重启Claude桌面以使更改生效。这确保:
| 变量 | 描述 |
|---|---|
| STRAVA_CLIENT_ID | 您的Strava应用程序客户端ID(必需) |
| STRAVA_CLIENT_SECRET | 您的Strava应用程序客户端密钥(必需) |
| STRAVA_ACCESS_TOKEN | 您的Strava API访问令牌(在设置期间生成) |
| STRAVA_REFRESH_TOKEN | 您的Strava API刷新令牌(在设置期间生成) |
| ROUTE_EXPORT_PATH | 导出路线文件的绝对路径(可选) |
该服务器实现了自动令牌刷新。当初始访问令牌过期(通常6小时后),服务器将自动使用存储在.env中的刷新令牌来获取新的访问令牌和刷新令牌。这些新令牌将更新到运行进程和.env文件中,确保持续运行。
您只需运行一次scripts/setup-auth.ts脚本进行初始设置。
如果您打算使用export-route-gpx或export-route-tcx工具,需要指定一个目录来保存导出的文件。
编辑您的.env文件并添加/更新ROUTE_EXPORT_PATH变量:
# 可选:定义一个*绝对*路径以保存导出的路线文件(GPX/TCX)
# 确保该目录存在并且服务器进程具有写权限。
# 示例:ROUTE_EXPORT_PATH=/Users/your_username/strava-exports
ROUTE_EXPORT_PATH=
用您想要的导出目录的绝对路径替换占位符。确保该目录存在并且服务器具有写入权限。
服务器公开了以下MCP工具:
get-recent-activities获取认证用户最近的活动。
perPage(可选):
numberget-athlete-profile获取认证运动员的个人资料信息。
get-athlete-stats获取认证运动员的活动统计数据(最近、YTD、全部时间)。
get-activity-details使用其ID获取特定活动的详细信息。
activityId(必需):
numberactivityId,Strava API错误。list-athlete-clubs列出认证运动员所属的俱乐部。
list-starred-segments列出认证运动员收藏的路段。
get-segment使用其ID获取特定路段的详细信息。
segmentId(必需):
numbersegmentId,Strava API错误。explore-segments搜索给定地理区域(边界框)内的流行路段。
bounds(必需):
stringsouth_west_lat,south_west_lng,north_east_lat,north_east_lng。activityType(可选):
string("running"或"riding")minCat(可选):
number(0-5)activityType: 'riding'。maxCat(可选):
number(0-5)activityType: 'riding'。bounds格式,无效的过滤组合,Strava API错误。star-segment为认证运动员收藏或取消收藏特定路段。
何时使用: 当用户明确要求收藏、喜欢、取消收藏或不喜欢特定路段,该路段通过其ID识别。
参数:
segmentId(必需):
numberstarred(必需):
booleantrue表示收藏,false表示取消收藏。输出: 成功消息确认操作和路段的新收藏状态。
错误: 缺失/无效的令牌,无效的segmentId,Strava API错误(例如,路段未找到,速率限制)。
备注:
profile:write范围才能收藏和取消收藏路段get-segment-effort使用其ID获取特定路段努力的详细信息。
effortId(必需):
numbereffortId,Strava API错误。list-segment-efforts列出认证运动员在给定路段上的努力,可选地按日期过滤。
segmentId(必需):
numberstartDateLocal(可选):
string(ISO 8601格式)endDateLocal(可选):
string(ISO 8601格式)perPage(可选):
numbersegmentId,无效的日期格式,Strava API错误。list-athlete-routes列出认证运动员创建的路线。
page(可选):
numberperPage(可选):
numberget-route使用其ID获取特定路线的详细信息。
routeId(必需):
numberrouteId,Strava API错误。export-route-gpx将特定路线导出为GPX格式并保存到本地。
ROUTE_EXPORT_PATH环境变量必须正确配置。routeId(必需):
number