Strava数据连接服务

一个连接Claude与Strava API的MCP服务器,提供对用户训练数据的直接访问。

  • by KerkhofMe
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 KerkhofMe/StravaMCP

使用说明

Strava MCP服务器

MCP(模型上下文协议)服务器,将Claude连接到Strava API,让Claude直接访问您的训练数据。

特性

  • 运动员简介 --获取您的Strava个人资料信息
  • 运动员统计 --一生和最近的总数(跑步、骑行、游泳)
  • 活动 --列出最近的活动或按日期范围筛选
  • 活动详情 --深入任何一项活动
  • 活动流 --时间序列数据:GPS、心率、功率、节奏、高度
  • 片段 --星级细分市场和细分市场详细信息

设置

1.创建Strava API应用程序

  1. 首选 strava.com/settings/api
  2. 创建应用程序--设置 授权回调域 到 localhost
  3. 注意你的 客户端ID 和 客户端密钥

2.安装并授权

npm install
npm run setup

安装向导将:

  • 询问您的客户ID和客户密码
  • 打开浏览器,使用Strava进行授权
  • 自动捕获回调并交换令牌
  • 写你的 .env 文件

3.建造

npm run build
Manual setup (alternative)

在浏览器中打开此URL(替换 CLIENT_ID):

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

授权后,您将被重定向到 http://localhost?code=AUTHORIZATION_CODE.复制代码并交换:

curl -s -X POST 'https://www.strava.com/oauth/token' \
  -F 'client_id=CLIENT_ID' \
  -F 'client_secret=CLIENT_SECRET' \
  -F 'code=AUTHORIZATION_CODE' \
  -F 'grant_type=authorization_code'

保存 refresh_token 从响应中创建 .env 文件:

STRAVA_CLIENT_ID=your_client_id
STRAVA_CLIENT_SECRET=your_client_secret
STRAVA_REFRESH_TOKEN=your_refresh_token

4.配置克劳德桌面

选项A:Docker(推荐)

构建Docker镜像:

docker build -t strava-mcp-server .

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "strava": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--env-file", "/absolute/path/to/your/.env",
        "strava-mcp-server"
      ]
    }
  }
}

替换 /absolute/path/to/your/.env 与您的完整路径 .env 文件。

选项B:Node.js(本地)

{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["/Users/USERNAME/Apps/StravaMCP/dist/index.js"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

重新启动克劳德桌面。您应该在工具菜单(锤子图标)中看到可用的Strava工具。

可用工具

工具 说明
get_athlete 获取您的Strava个人资料
get_athlete_stats 获取生命周期和最近的统计数据
get_activities 列出最近的活动(分页)
get_activities_between 获取日期范围内的所有活动(自动分页)
get_activity 获取一项活动的详细信息
get_activity_laps 获取活动的圈速/分段数据
get_activity_zones 获取人力资源和权力区域分布
get_activity_streams 获取时间序列数据(GPS、HR、功率等)
get_starred_segments 获取您的星级片段
get_segment 获取特定细分市场的详细信息
get_segment_efforts 在细分市场上获得你的努力(使用可选的日期过滤器)

示例提示

连接后,试着问克劳德:

  • “我这周的活动是什么?”
  • “分析我过去一个月的跑步表现”
  • “比较我一月和二月的骑行时间”
  • “显示我上次跑步的心率数据”
  • “我的历史数据是什么?”

发展

# Run in dev mode (no build step)
npm run dev

# Build for production
npm run build
npm start

许可证

麻省理工学院