Strava API 服务器

为Strava API v3提供MCP服务器,将Strava数据(活动、段、路线、俱乐部、装备和流)暴露为工具,供任何MCP客户端调用。

  • by zurfyx
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 zurfyx/strava-mcp

使用说明

斯特拉瓦mcp

MCP服务器 Strava API v3.将Strava数据(活动、分段、路线、俱乐部、装备和流)公开为任何MCP客户端(Claude Desktop、Claude Code等)都可以调用的工具。

默认情况下为只读。 通过 --write 启用变异工具(创建/更新活动、星段)。

OpenClaw特定的入职培训和sidecar设置: OPENCLAW.md.

入门

1.创建Strava API应用程序

首选 https://www.strava.com/settings/api 并创建应用程序。注意你的 客户端ID 和 客户端密钥.

2.设置凭据

cp .env.example .env

添加您的 STRAVA_CLIENT_ID 和 STRAVA_CLIENT_SECRET 到 .env.

3.建造

pnpm install
pnpm build

4.身份验证

pnpm auth

这将打开您的浏览器以使用Strava进行授权。批准后,它会自动将代码转换为令牌并保存 STRAVA_ACCESS_TOKEN 和 STRAVA_REFRESH_TOKEN 致你的 .env 文件。请求所有范围(read_all, profile:read_all, activity:read_all, activity:write).

5.本地测试

pnpm inspect

打开MCP Inspector web UI,您可以在其中浏览工具并以交互方式调用它们。凭据从加载 .env 自动。

您也可以直接运行服务器:

pnpm start

6.配置您的MCP客户端

克劳德桌面

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["/absolute/path/to/strava-mcp/build/index.js"],
      "env": {
        "STRAVA_ACCESS_TOKEN": "your-access-token"
      }
    }
  }
}

要启用写入工具(创建/更新活动、星型分段),请添加 "--write" 到 args:

{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["/absolute/path/to/strava-mcp/build/index.js", "--write"],
      "env": {
        "STRAVA_ACCESS_TOKEN": "your-access-token"
      }
    }
  }
}

克劳德代码

claude mcp add strava node /absolute/path/to/strava-mcp/build/index.js

自动令牌刷新

Strava访问令牌过期。要启用自动刷新,请提供所有四个环境变量:

{
  "env": {
    "STRAVA_ACCESS_TOKEN": "your-access-token",
    "STRAVA_REFRESH_TOKEN": "your-refresh-token",
    "STRAVA_CLIENT_ID": "your-client-id",
    "STRAVA_CLIENT_SECRET": "your-client-secret"
  }
}

当请求返回401并且刷新凭据可用时,服务器将自动从Strava的OAuth端点请求新的访问令牌,并重试该请求。

环境变量

变量 必填 描述
STRAVA_ACCESS_TOKEN 是 Strava OAuth2无记名代币
STRAVA_REFRESH_TOKEN 否 启用401上的自动令牌刷新
STRAVA_CLIENT_ID 否 刷新令牌旁边需要
STRAVA_CLIENT_SECRET 否 刷新令牌旁边需要

工具

读取工具(始终可用)

运动员

工具 说明
get_athlete 获取经过认证的运动员的个人资料
get_athlete_stats 获取运动员统计数据(总数、最近、年初至今、历史)
get_athlete_zones 获取心率和功率区

活动

工具 说明
list_activities 列出运动员的活动(可按以下条件过滤 before/after 时间戳)
get_activity 获取特定活动的完整详细信息
list_activity_comments 列出活动的评论
list_activity_kudoers 列出赞扬某项活动的运动员
list_activity_laps 列出活动的圈数
get_activity_zones 获取活动的心率/功率区
get_activity_streams 获取时间序列数据(心率、功率、节奏、GPS等)

片段

工具 说明
get_segment 获取特定细分市场的详细信息
explore_segments 在边界框内查找热门片段
list_starred_segments 列出运动员的明星片段
get_segment_effort 获取细分工作的详细信息
list_segment_efforts 列出某个细分市场上的努力,可选择按日期筛选
get_segment_streams 获取分段的数据流
get_segment_effort_streams 获取分段工作的数据流

路线

工具 说明
get_route 获取特定路线的详细信息
list_athlete_routes 列出运动员创建的路线
get_route_streams 获取路线的数据流

俱乐部

工具 说明
get_club 获取特定俱乐部的详细信息
list_athlete_clubs 列出运动员的俱乐部
list_club_members 列出俱乐部成员
list_club_activities 列出俱乐部最近的活动

齿轮

工具 说明
get_gear 获取设备的详细信息

编写工具(必需 --write 旗帜)

工具 说明
create_activity 创建手动活动
update_activity 更新现有活动(名称、描述、运动类型、装备等)
star_segment 对某个片段加星或取消加星

文档

  • 用例 --示例提示以及如何使用服务器
  • 建筑 --文件结构、数据流和组件职责
  • 设计决策 --读/写拆分、令牌刷新策略、瘦客户端方法和其他权衡背后的基本原理