关于 strava-mcp
strava-mcp 是一个用于访问 Strava API 的 MCP 服务,让 LLM 能够读取用户的 Strava 数据。适合希望在 AI 客户端中查询运动记录的 Strava 用户。
主要功能
- 01访问 Strava 活动与运动数据
- 02通过 OAuth 连接用户账户
- 03支持路段、路线与俱乐部相关查询
- 04提供 GPX 与 TCX 路线导出
适用场景
- 01用自然语言查询近期训练记录
- 02查看单次活动的圈速与心率数据
- 03导出路线到 GPS 设备
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 Strava 的活动、路段、路线等相关工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Strava MCP 服务
通过 AI 与你的 Strava 数据对话。
将 Claude 连接到你的 Strava 账号,并用日常语言提问:“我这个月跑了多远?”,“分析我最近一次骑行”,或“显示我速度最快的路段。”
你可以用它做什么?
连接后,只需像和一位能够访问你所有 Strava 数据的朋友聊天一样与 Claude 对话:
🏃 跟踪进度
“我这个月跑了多少公里?”
“比较我从 1 月到 12 月的跑步数据”
“我有史以来最长的一次骑行是什么?”
📊 分析训练
“详细分析我最近一次骑行训练——显示功率、心率和踏频”
“我昨天跑步时的心率区间怎么样?”
“我间歇训练每一圈的平均配速是多少?”
🗺️ 探索路线和路段
“中央公园附近最受欢迎的骑行路段有哪些?”
“显示我收藏的路段”
“将我的周日早晨路线导出为 GPX 文件”
🏆 获取训练建议
“分析我本周的训练负荷”
“我目前的体能状况与上个月相比如何?”
“总结我今年的骑行表现”
快速开始(3 步)
第 1 步:添加到 Claude Desktop
打开你的 Claude Desktop 配置文件:
- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
将以下内容添加到文件中:
{
"mcpServers": {
"strava": {
"command": "npx",
"args": ["-y", "@r-huijts/strava-mcp-server"]
}
}
}
第 1 步(替代方案):添加到 Claude Code
你可以使用以下命令将此 MCP 服务添加到 Claude Code:
claude mcp add --transport stdio strava -- npx @r-huijts/strava-mcp-server
你可以按如下方式确认安装成功:
% claude mcp list
Checking MCP server health...
strava: npx @r-huijts/strava-mcp-server - ✓ Connected
第 2 步:重启 Claude Desktop
关闭并重新打开 Claude Desktop,以加载新配置。
第 3 步:连接你的 Strava
只需对 Claude 说:
“连接我的 Strava 账号”
浏览器窗口将会打开。输入你的 Strava API 凭据,授权此应用,即可完成!
就是这么简单! 开始询问你的活动情况吧。
连接你的 Strava 账号
首次设置
当你说“连接我的 Strava 账号”时,会发生以下情况:
- 浏览器窗口打开,显示设置页面
- 输入你的 Strava API 凭据(Client ID 和 Client Secret)
- 点击“Continue to Strava”——你将被重定向到 Strava
- 在 Strava 网站上授权此应用
- 看到成功消息——你可以关闭浏览器
- 完成! Claude 会确认你已连接
你的凭据会保存在本地的 ~/.config/strava-mcp/config.json 中,并在不同会话间保留。
获取 Strava API 凭据
你需要创建一个免费的 Strava API 应用(只需设置一次):
- 前往 strava.com/settings/api
- 点击“Create an App”(或查看你现有的应用)
- 填写表单:
- 应用名称:任意填写(例如,“My Claude Assistant”)
- 类别:任选
- 网站:可填写任意内容(例如,
http://localhost) - 授权回调域名:必须是
localhost
- 复制你的 Client ID 和 Client Secret
就是这么简单!你只需要设置一次。
管理连接
- 检查状态:“我已连接到 Strava 吗?”
- 重新连接:“连接我的 Strava 账号”(使用
force: true重新连接) - 断开连接:“断开我的 Strava 账号连接”
安装选项
选项 A:直接使用(推荐)
无需安装!快速开始中的 npx 命令会自动下载并运行最新版本。
选项 B:全局安装
如果你更喜欢只安装一次:
npm install -g @r-huijts/strava-mcp-server
然后更新 Claude 配置以使用:
{
"mcpServers": {
"strava": {
"command": "strava-mcp-server"
}
}
}
注意: 虽然包名是 @r-huijts/strava-mcp-server,但为保持向后兼容,可执行文件名称仍为 strava-mcp-server。
选项 C:从源代码构建
适合希望修改代码的开发者:
git clone https://github.com/r-huijts/strava-mcp.git
cd strava-mcp
npm install
npm run build
然后将 Claude 指向你的本地构建:
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/path/to/strava-mcp/dist/server.js"]
}
}
}
对话示例
早间签到
你:我这周做了哪些运动?
Claude:查看你本周的 Strava 活动,你完成了:
- 周一:5.2km 跑步(28:15)
- 周三:45km 骑行(1:32:00)
- 周六:10km 跑步(52:30)
总计:3 项活动,共 60.2km。坚持得不错!
训练分析
你:详细分析我最近一次骑行训练
Claude:以下是你昨天「晚间环线」骑行的详细分析:
概览
- 距离:42.3 km
- 时间:1:28:45
- 平均速度:28.6 km/h
功率分析
- 平均功率:185W
- 标准化功率:198W
- 最大功率:520W
心率
- 平均:142 bpm
- 最大:175 bpm
- 4 区及以上时长:23 分钟
你的功率与心率比值表明有不错的有氧效率……
查找新路线
你:帮我找一些科罗拉多州博尔德附近有挑战性的骑行爬坡路线
Claude:以下是博尔德附近热门的爬坡路段:
- Flagstaff Road - 5.2km,平均坡度 6.8%
- Sunshine Canyon - 3.8km,平均坡度 7.2%
- Left Hand Canyon - 8.1km,平均坡度 4.5%
需要我把其中哪些标为星标,方便你以后查找吗?
可用工具
账户与个人资料
| 你可以询问什么 | 功能 |
|---|---|
| “连接我的 Strava 账户” | 将你的 Strava 账户连接到 Claude |
| “检查我的 Strava 连接” | 显示连接状态 |
| “断开我的 Strava 账户” | 解除 Strava 连接并清除已存储的令牌 |
| “获取我的 Strava 个人资料” | 显示你的个人资料信息 |
| “我有哪些鞋子?” | 列出你的鞋子及其使用距离 |
| “我的训练区间是什么?” | 显示心率和功率区间 |
活动
| 你可以询问什么 | 功能 |
|---|---|
| “显示我最近的活动” | 列出你最近的训练 |
| “获取我一月份的所有跑步记录” | 按筛选条件获取活动 |
| “分析活动 12345” | 查看某项活动的详细信息 |
| “显示我上次跑步的分段记录” | 逐圈分析 |
| “获取我这次骑行的心率数据” | 训练时间序列数据(优化的紧凑格式) |
| “显示我徒步的照片” | 活动照片 |
统计与进度
| 你可以询问什么 | 功能 |
|---|---|
| “我的跑步数据统计是什么?” | 年初至今及历史总计 |
| “我今年骑行了多远?” | 按活动类型统计总量 |
| “我最长的一次骑行有多远?” | 个人纪录 |
路段
| 你可以询问什么 | 功能 |
|---|---|
| “显示我标为星标的路段” | 你收藏的路段 |
| “查找 [location] 附近的路段” | 查找热门路段 |
| “获取路段 12345 的详细信息” | 路段信息和排行榜 |
| “将此路段标为星标” | 保存到收藏夹 |
| “显示我在 [segment] 上的成绩” | 你在某个路段上的尝试记录 |
路线
| 你可以询问什么 | 功能 |
|---|---|
| “列出我保存的路线” | 你创建的路线 |
| “获取我的 [route name] 的详细信息” | 路线信息 |
| “将 [route] 导出为 GPX” | 下载到 GPS 设备使用 |
| “将 [route] 导出为 TCX” | 下载到 GPS 设备使用 |
俱乐部
| 你可以询问什么 | 功能 |
|---|---|
| “我加入了哪些俱乐部?” | 列出你的 Strava 俱乐部 |
训练
| 你可以询问什么 | 功能 |
|---|---|
| “将这个训练转换为 Zwift 文件” | 将训练计划整理为结构化文件(目前支持 Zwift .zwo) |
服务
| 你可以询问的内容 | 功能 |
|---|---|
| “Strava 服务的版本是什么?” | 显示 MCP 服务版本和元数据 |
故障排除
“连接我的 Strava 账户”没有打开浏览器
- 确保 Claude Desktop 正在运行 MCP 服务(检查 Claude 中是否有错误)
- 尝试重启 Claude Desktop
- 检查端口 8111 是否被防火墙阻止
“身份验证失败”或“令牌无效”
- 你的令牌可能已过期——说“连接我的 Strava 账户”以重新连接
- 确保你的 Strava API 应用仍在 strava.com/settings/api 上处于活动状态
“缺少凭据”错误
- 你需要完成 OAuth 流程——说“连接我的 Strava 账户”
- 如果你使用环境变量,请确保 4 个变量都已设置(参见“开发者”部分)
Claude 看不到 Strava 工具
- 确保你的
claude_desktop_config.json是有效的 JSON(末尾不能有逗号!) - 修改配置后重启 Claude Desktop
- 检查 Claude 的开发者控制台中是否有错误消息
更改包名后出现 JSONRPC.ProtocolTransportError
如果更新到 @r-huijts/strava-mcp-server 后出现 JSONRPC 错误:
- 清除 npx 缓存:在终端中运行
rm -rf ~/.npm/_npx - 验证配置是否使用
@r-huijts/strava-mcp-server(而不是旧的strava-mcp-server) - 彻底重启 Claude Desktop(退出并重新打开)
- 手动测试:运行
npx -y @r-huijts/strava-mcp-server——你应该会看到“Starting Strava MCP Server v1.2.1...”
开发者
点击展开技术详情
环境变量
你可以设置环境变量,而不是使用基于浏览器的身份验证:
| 变量 | 描述 |
|---|---|
STRAVA_CLIENT_ID | 你的 Strava 应用客户端 ID |
STRAVA_CLIENT_SECRET | 你的 Strava 应用客户端密钥 |
STRAVA_ACCESS_TOKEN | OAuth 访问令牌 |
STRAVA_REFRESH_TOKEN | OAuth 刷新令牌 |
ROUTE_EXPORT_PATH | GPX/TCX 导出的目录 |
令牌刷新
服务会自动刷新过期的令牌。新令牌会同时保存到 process.env 和 ~/.config/strava-mcp/config.json。
配置优先级
- 环境变量(优先级最高)
~/.config/strava-mcp/config.json- 本地
.env文件
构建与测试
npm install
npm run build
npm test
活动数据流优化
get-activity-streams 工具默认使用紧凑格式,在保留全部数据的同时将负载大小减少约 70-80%:
- 紧凑格式(默认):包含元数据的原始数组,体积缩小约 70-80%,适合大模型处理
- 详细格式:带格式化值的易读对象(向后兼容)
- 智能分块:大型活动会自动拆分为约 50KB 的数据块
- 可选降采样:可缩减超大型数据集,同时保留关键特征
紧凑格式包含全面的元数据(单位、描述、统计数据),便于大模型理解原始数值数据。
API 参考
该服务实现了 Model Context Protocol(MCP),并为 Strava API v3 提供 25 个工具。实现详情请参阅 src/tools/ 中的源代码。
贡献
欢迎贡献!请提交 Pull Request。
许可证
MIT 许可证——详情请参阅 LICENSE 文件。
有问题? 请在 GitHub 上提交 issue。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
