健身教练MCP

通过Cloudflare Workers和Durable Objects将Claude连接到Strava,实现健身数据的读取和写入。

  • by jeganathpv
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 jeganathpv/strava-mcp

使用说明

健身教练MCP——Cloudflare员工

通过MCP协议将Claude连接到Strava。部署为具有持久对象的Cloudflare Worker。


先决条件

  • 已安装Node.js 20+
  • Cloudflare帐户→ https://dash.cloudflare.com/sign-up
  • Strava API应用程序→ https://www.strava.com/settings/api

步骤1——安装依赖项

npm install

步骤2——登录Cloudflare

npx wrangler login

打开浏览器→ 登录→ 授权牧马人。只有一次。


步骤3--获取Strava OAuth刷新令牌

必须使用正确的作用域获取刷新令牌: read, activity:read_all, activity:write.

1.在浏览器中打开此URL (替换 YOUR_CLIENT_ID):

https://www.strava.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost&response_type=code&scope=read,activity:read_all,activity:write

2. 单击“授权”后,浏览器重定向到 localhost (将无法加载——没关系)。 复制 code= URL栏中的值:

http://localhost/?state=&code=COPY_THIS&scope=read,activity:read_all,activity:write

3.将代码兑换成代币:

curl -X POST https://www.strava.com/oauth/token \
  -d client_id=YOUR_CLIENT_ID \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d code=YOUR_CODE \
  -d grant_type=authorization_code

复制 refresh_token 从回应中。

注: Strava应用程序设置中的回调URL可以保持为 http://localhost --Worker从不处理OAuth重定向。刷新令牌流在运行时使用,而不是回调。


步骤4——将Strava secrets添加到Cloudflare

运行每个命令,并在提示时粘贴值:

npx wrangler secret put STRAVA_CLIENT_ID
npx wrangler secret put STRAVA_CLIENT_SECRET
npx wrangler secret put STRAVA_REFRESH_TOKEN

秘密以加密方式存储在Cloudflare中,永远不会存储在您的代码中。

更新机密: 如果您的刷新令牌过期或需要重新授权,只需运行 npx wrangler secret put STRAVA_REFRESH_TOKEN 再一次。无需重新部署。


步骤5——部署

npm run deploy

您将获得一个永久URL:

https://fitness-coach-mcp.YOUR-NAME.workers.dev

第6步——添加到Claude.ai

  1. 首选 claude.ai→ 设置→ 连接器
  2. 点击 添加自定义连接器
  3. 姓名: Strava Fitness Coach
  4. 网址: https://fitness-coach-mcp.YOUR-NAME.workers.dev/sse
  5. 点击 添加

使用 /sse endpoint——Claude.ai网络需要SSE传输。 这 /mcp 端点(流式HTTP)可用于Claude Desktop/Claude Code。


健康检查

https://fitness-coach-mcp.YOUR-NAME.workers.dev/health

退货: {"status":"ok"}


MCP工具

工具 所需范围 它的作用
get_latest_activity activity:read_all 获取今天的活动,按类型筛选
get_activity_detail activity:read_all 按ID划分的完整分段、圈数、HR、功率
get_week_activities activity:read_all 周一至周日的所有课程
update_activity_description activity:write 将描述写回Strava
get_athlete_stats read 年初至今总计和最新统计数据

正在更新服务器

任何代码更改后:

npm run deploy