SportMCP
️ SportMCP — 为任意 AI 代理提供 Strava 支持
生产就绪的 MCP 服务器,适用于 Strava — 可与 Claude Desktop、Cursor、Windsurf、Cline、Continue.dev、Poke,以及任何兼容 MCP 的 AI 代理配合使用。
一个完整的 Model Context Protocol 服务端服务,让任何 AI 助手都能安全、只读地访问你的个人 Strava 健身数据。在 Cloudflare Workers 上部署一次,完成 Strava 身份验证,然后把你的个人 MCP URL 粘贴到任意 AI 工具中即可。
兼容 Strava。SportMCP 与 Strava 不存在从属关系,未获得其认可或背书。
✨️ 功能特点
🤖️ 兼容任何 MCP 客户端 — Claude Desktop、Cursor、Windsurf、Cline、Continue.dev、Poke 等
🔐️ 安全的 OAuth — 标准 Strava OAuth 2.0,按用户完全隔离 token
️ 21 种 MCP 工具 — 活动、计圈、点赞、评论、路段、路段成绩、路线、装备、俱乐部、运动员心率区间等
🔍️ 可选 Webhook — 完成训练后通过 Poke 实时推送通知(每个用户独立密钥)
🔄️ 自动续期 — Token 到期前自动刷新
📊️ 仪表面板 — 支持用一个页面,一键生成各类主流 AI 代理的配置片段
️ 边缘性能 — 依托 Cloudflare Workers 全球网络,响应不超过 20ms
💰 免费额度 — 每天 10 万次请求,适合零成本启动
🛡️ 合规保证 — 完整遵守 Strava API 协议,并在 48 小时内清理所有"取消授权"数据
Related MCP server: Strava MCP Server
🚀 快速上手
**提示:**部署到 Cloudflare 需要一些终端命令,但我们已经尽可能做了简化!
点击一个按钮,再运行一条命令
适合喜欢"单击按钮"而不喜欢"敲命令"的用户。
第 1 步:点击部署到 Cloudflare 的按钮
[
它会:
将项目部署到你的 Cloudflare 账户
返回给你的 worker URL
第 2 步:完成配置
部署完成后,你还需要配置密钥和 webhook:
打开终端(Mac:按 Cmd+Space,输入 "Terminal" | Windows:搜索 "PowerShell")
克隆你 fork 的仓库,并运行安装:
# Replace YOUR-USERNAME with your GitHub username
git clone https://github.com/YOUR-USERNAME/strava-mcp.git
cd strava-mcp
npm install
node scripts/setup.js按提示回答:
Strava 客户端 ID(可从 strava.com/settings/api 获取)
Strava 客户端密钥
Poke API(或其他 AI/聊天应用)的密钥,用于 webhook 通知(可选)
完成! 访问你的 worker URL 并完成 Strava 授权。
️ **提示:**如果你先 fork 仓库,而不是直接部署原仓库,后续可以直接使用你自己的 GitHub 版本。
复制粘贴这 5 条命令,回答几个问题,搞定!
适合熟悉终端命令的用户。
这个自动化脚本会处理一切:fork、创建数据库、配置、secret、webhook 以及部署。
第 1 步:打开终端
Mac:按 Cmd+Space,输入 "Terminal" ,回车
Windows:搜索 "Command Prompt" 或 "PowerShell"
第 2 步:复制并粘贴命令
请逐条粘贴这些命令(每条后按归车):
# Download the project
git clone https://github.com/gabeperez/strava-mcp.git
# Go into the folder
cd strava-mcp
# Install dependencies (takes ~30 seconds)
npm install
# Login to Cloudflare (opens browser - just click "Allow")
wrangler login
# Run automated setup (asks you a few questions, then does everything!)
node scripts/setup.js第 3 步:回答提示
脚本会问你:
Strava 客户端 ID — 从 strava.com/settings/api 获取
Strava 客户端 Secret — 同一个页面
是否配置 webhook? — 输入 "y" 开启推送通知(可选)
Poke API 密钥 — 若上一步选 是,可从 poke.com/settings/advanced 获取
第 4 步:完成!🎉
脚本会自动:
✅ 创建数据库(KV namespace)
✅ 更新所有配置文件
✅ 安全设置密钥
✅ 配置 webhook(如果你选择"是")
✅ 部署到 Cloudflare
✅ 返回给你的 worker URL
第 5 步:打开你的仪表面板
打开脚本给你的 URL(形如
https://sportmcp.yourname.workers.dev)点击 "使用 Strava 认证"
你会看到漂亮的仪表盘,里面包含:
️ 最近记录
📊 性能数据
🔗 提供给 AI 助手的个人 MCP URL
🔍 Webhook 状态(如果启用)
第 6 步:连接你的 AI 代理
从 dashboard 复制你的个人 MCP URL,然后把它添加到你的 AI 工具:
🤖 连接 AI 代理
SportMCP 使用标准的 Model Context Protocol,所以它与任何 MCP 兼容的客户端都能工作。你的个人 URL 看起来像:
https://your-worker.workers.dev/mcp?token=YOUR_TOKENClaude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"sportmcp": {
"url": "https://your-worker.workers.dev/mcp?token=YOUR_TOKEN"
}
}
}保存后重启 Claude Desktop 即可生效。
Cursor
打开 设置 → Cursor 设置 → MCP,然后添加:
{
"mcpServers": {
"sportmcp": {
"url": "https://your-worker.workers.dev/mcp?token=YOUR_TOKEN"
}
}
}Windsurf
打开 设置 → Cascade → MCP 服务器,把上面 Cursor 的同一个 JSON 配置条加进去。
Cline (VS Code)
打开 Cline → MCP 服务器 → 编辑配置,并添加同样的 JSON 配置。
Continue.dev
在 ~/.continue/config.json 中加入:
{
"mcpServers": [
{
"name": "sportmcp",
"transport": {
"type": "streamable-http",
"url": "https://your-worker.workers.dev/mcp?token=YOUR_TOKEN"
}
}
]
}Poke
打开 设置 → 集成 → 添加 MCP 服务器,把你的 MCP URL 直接粘贴进去。
其它 MCP 客户端
两种传输方式可用:
Streamable HTTP(推荐):
https://your-worker-url.workers.dev/mcpHTTP+SSE(较旧,兼容早期的 Claude Desktop):
GET /sse?token=YOUR_TOKEN+POST /messages?token=YOUR_TOKEN
就这样!直接问你的 AI:"Show me my recent Strava workouts" ️"
适合想完全自己控制的开发者
如果你不想用上面的自动化脚本,想手动一步步配置:
前置条件
已安装 Node.js 18+(点击下载)
注册 Cloudflare 账户(免费)—— 注册地址
创建一个 Strava API 应用 —— https://www.strava.com/settings/api
运行命令:
# 1. Download and install
git clone https://github.com/gabeperez/strava-mcp.git
cd strava-mcp
npm install
# 2. Login to Cloudflare (opens browser)
wrangler login
# 3. Create database (KV namespace)
wrangler kv:namespace create STRAVA_SESSIONS
# Copy the "id" from output and paste into wrangler.jsonc
# 4. Set your Strava API credentials
wrangler secret put STRAVA_CLIENT_ID
# Paste your Client ID when prompted
wrangler secret put STRAVA_CLIENT_SECRET
# Paste your Client Secret when prompted
# 5. Deploy to Cloudflare
npm run deploy
# 6. Visit your worker URL to authenticate
open https://your-worker-name.your-subdomain.workers.dev/auth可选:配置 webhook
wrangler secret put STRAVA_WEBHOOK_VERIFY_TOKEN
wrangler secret put POKE_API_KEY完整的手动部署说明,请参考 README_DEPLOY.md。
🔔️ 实时 Webhook(可选)
️ 仅限个人使用:目前 webhook 只向单个 Poke API 发送通知。仅当此部署只由你一个人使用时才开启。多用户 webhook 支持正在开发中。
当你完成某次训练时,实时通过 Poke 把通知推到手机上!
🏃 New Strava Workout!
**Morning Run**
Type: Run
Date: Oct 29, 2025 7:30 AM
Distance: 10.5 km
Duration: 52 minutes
Pace: 4:57 min/km
Elevation: 120m
Avg HR: 145 bpm
🏆 2 PRs!每当完成一个活动,通知会通过 iMessage/SMS 立刻发到你的手机!
快速配置 Webhook
# 1. Set Poke API key (get from https://poke.com/settings/advanced)
wrangler secret put POKE_API_KEY
# 2. Set webhook verification token
wrangler secret put STRAVA_WEBHOOK_VERIFY_TOKEN
# Enter: STRAVA_MCP_WEBHOOK
# 3. Test endpoint
node scripts/manage-webhook.js test
# 4. Create subscription
STRAVA_CLIENT_ID=xxx STRAVA_CLIENT_SECRET=xxx \
node scripts/manage-webhook.js create
# 5. Monitor events
wrangler tail📚️ 可用 MCP 工具(共 21 个)
用自然语言提问,你的 AI 助手会自动调用这些工具:
当前项目活动
Tool | Example Query |
| "我想看看最近5 次的训练" |
| "获取我最近骑行的详情" |
| "显示我最近跑步的心率数据" |
| "我在每圈的配速是?" |
| "谁给我的道——点赞了?" |
| "我收到了哪些评论?" |
运动员
| Tool | Example Query |
| get-athlete-profile | "查询我的 Strava 个人资料" |
| get-athlete-stats | "今年我的骑行数据如何?" |
| get-athlete-zones | "我训练心率区间是多少?" |
| get-athlete-clubs | "我加入了哪些 Strava 俱乐部?" |
| get-athlete-routes | "列出我的保存的路线" |
路段(Segments)
| Tool | Example |
| get-starred-segments | "我收藏了哪些欢乐路段?" |
| explore-segments | "找一下旧金山附近有坡的路段" |
| get-segment | "介绍一下路段" |
| get-segment-efforts| "这个路段我的最佳成绩怎么样?" |
| get-segment-effort | "获取路段成绩 5678 的详情" |
装备与社交
| Tool | Example |
| get-gear | —— "我的跑鞋穿了多少公里了?" |
| get-club | "介绍一下我的单车俱乐部" |
| get-route | "我周末骑的那条路线的详细信息" |
| authenticate-strava| "怎么连接我的 Strava 账号?" |
| welcome-strava-mc| "我怎么上手使用?" |
️ Endpoints
| Endpoint | 用途 |
| / | 首页与模板示例 |
| /auth | 开启 OAuth 授权流程 |
| /dashboard?token=TOKEN | 个人管理面板(包含数据统计) |
| /mc | MCP 服务端点(供 AI 助手使用)|
| /webhook | Strava webhook 接收端点(可选)|
| /test-poke| 测试 Poke 集成通知 |
🎯 使用示例
搭配 Poke
在 Poke 的集成设置中添加 MCP 服务器
使用 URL:
https://your-worker-url.workers.dev/mc随便问:"我昨晚跑步的配速是多少?"
搭配 Claude Desktop 使用
把下面加到 claude_esktop_config.json:
{
"mcpServers": {
"strava": {
"url": "https://your-worker-url.workers.dev/mcp"
}
}
}自然语言提问
直接对这些话:
🔍️ “我最近有户外骑行吗?”
问我“我上次跑步时心率保持在多少到多少?”
️ “查一下我昨晚骑车的功率数据”
"找出 April 附附近更有有趣的路段”
"我的总的这些年里骑行表现怎么样?"
🔒️ 安全特性
设备指纹 — 用浏览器自动识别身份,简化登录
自动刷 续期 token - 到期前自动续期
按用户隔离 — 用户数据互相完全隔离
安全存储 — 在 KV 中加密存储 token
CSRF 保护 — OAuth 流程中的 state 验证
访问频率限制 — 遵守 Strava API 配额
️ 技术架构
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────┐
│ AI Assistant │───▶│ Cloudflare Worker │───▶│ Strava API │
│ (Poke/Claude) │ │ │ │ │
│ │ │ • MCP Server │ │ • Activities │
│ Natural Language│ │ • OAuth Handler │ │ • Segments │
│ Queries │ │ • Device Auth │ │ • Routes │
│ │ │ • Token Manager │ │ • Stats │
│ │ │ • Webhook Handler │ │ │
└─────────────────┘ └──────────────────────┘ └─────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌─────────────────┐
│ Cloudflare KV │ │ Poke API │
│ • Sessions │ │ • Push Notify │
│ • OAuth Tokens │ │ • iMessage/SMS │
│ • Activity Data │ └─────────────────┘
└──────────────────┘📖 Documentation
WEBHOOK_QUICKSTART - Webhook 快速上手
WEB.md - 开发与架构细节
PUBLISHING_CHECKLIST.md - 模板发布检查清单
️ 技术栈
运行时:Cloudflare Workers(V8 隔离)
服务器框架:Hono(轻量 web 框架)
存储:Cloudflare KV(会话与 token)
协议:Model Context Protocol(MCP)
认证:Strava OAuth 2.0
通知:Poke API(可选)
💰️ 价格
**完全免费!**跑在 Cloudflare 的超高免费套餐上:
Workers: 每天 100,000 个请求
KV 存储: 每天 100,000 次读取、1,000 次写入
流量:无限
更别适合个人使用。完全不需要信用卡。
🔧 开发
本地测试
# Install dependencies
npm install
# Start local server
wrangler dev
# Visit http://localhost:8787运行测试
npm test环境变量
所有配置选项,请参阅 .环境示例。
🐛 故障排查
“需要身份验证”错误
访问
/auth重新进行身份验证确保你使用的是同一浏览器/设备
检查
/status端点,以验证会话状态
“无效回调域名”
确保 Strava 应用的回调域名与 worker URL 完全匹配
不要包含协议(
http\://)或路径(/callback)
未收到 webhook 事件
运行
node scripts/manage-webhook.js view检查订阅状态使用
wrangler tail监控日志确认运动员已认证(访问
/dashboard)检查 Strava 应用是否具有正确的 OAuth scopes
Poke 通知不生效
运行
wrangler secret list,确认POKE_API_KEY已设置手动测试:
curl -X POST https://your-worker-url.workers.dev/test-poke检查日志中是否有 Poke API 错误
“找不到 KV 命名空间”
创建命名空间:
wrangler kv:namespace create STRAVA_SESSIONS更新
wrangler.jsonc中的 ID
“部署失败”
确认已登录:
wrangler whoami检查
wrangler.jsonc的语法确保已设置所有 secrets
🗺️ 路线图
即将推出
多用户 Webhook 支持 -每个用户的通知密钥与路由
更多通知渠道 - Discord、Slack、电子邮件等
活动分析 - 趋势、洞察与训练负荷跟踪
自定义 Webhook 过滤器 - 选择哪些活动能触发通知
有兴趣为其中任何一项做贡献吗?发起讨论!
🤝 贡献
欢迎各位贡献!请按照以下步骤:
Fork 此仓库
创建功能分支(
git checkout -b feature/amazing-feature)提交你的更改(在 git commit -m 'Add special feature')
推送到分支(
git push origin feature/amazing- feavture)提交一个 Pull Request
📝 许可证
MIT License - 详细信息见 LICENSE 文件。
🙏 致谢
使用 Hono 构建
由 Cloudflare Workers 提供支持
MCP 由 [Anthropic](https:// www.anthropic.com/) 提供
通知通过 Poke 发送
灵感来自 Strava 社区 🏃 _________
受 Strava 社区启发 🏃🚚
⭐ Star 历史
如果这个项目对你有帮助,考虑给它一个 Star 吧!
用 ❤️ 为热爱数据的运动员打造
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Strava MCP tools for AI: athletes, activities, segments, clubs, routes. Powered by HAPI MCP server.
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Related MCP Servers
- AlicenseBqualityDmaintenanceIntegrates with the Strava API to allow AI assistants to access fitness data including athlete profiles, activity history, and segment statistics. It enables users to query detailed performance metrics and explore geographic segment data through natural language commands.861MIT
- AlicenseBqualityDmaintenanceEnables users to interact with their Strava data through natural language to analyze workouts, track fitness progress, and explore routes. It supports retrieving detailed activity stats, heart rate data, and segment insights directly within AI assistants.26445MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Strava running data, route planning, and weather information for intelligent running coaching.15MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to directly access and analyze Strava activity data, including runs, rides, and swims, through natural language queries.417MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vivekvy-run/strava-mcp-oauth'
If you have feedback or need assistance with the MCP directory API, please join our Discord server