Strava MCP 服务器

一个用于Strava集成的模型上下文协议(MCP)服务器,可通过Claude、ChatGPT等大型语言模型访问活动、运动员统计、分段和路线。

  • by eddmann
  • Python
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 eddmann/strava-mcp

使用说明

Strava MCP服务器

用于Strava集成的模型上下文协议(MCP)服务器。通过Claude、ChatGPT和其他LLM访问您的活动、运动员统计数据、分段和路线。

概述

此MCP服务器提供11个工具与您的Strava帐户进行交互,分为5类:

  • 活动(2个工具)-查询和分析您的Strava活动
  • 运动员(1个工具)-访问个人资料、统计数据和训练区
  • 细分市场(3个工具)-探索和跟踪细分市场的努力
  • 路线(2个工具)-管理和导出路线
  • 分析(3个工具)-培训见解、比较和相似性搜索

此外,服务器还提供:

  • 1 MCP资源-运动员个人资料,包括持续背景的统计数据和区域
  • 6 MCP提示-常见查询模板(训练分析、分段表现、活动分析、跑步比较、训练总结、比赛表现)

部署选项:

  • 标准模式:单用户本地部署(例如,Claude Desktop、Cursor)
  • HTTP模式:多用户部署(例如,ChatGPT、远程MCP部署)

先决条件

  • 紫外线 (该包需要Python 3.11+,uv可以管理),或者
  • 码头工人

Strava API应用程序设置

在安装之前,您需要创建一个Strava API应用程序:

  1. 首选https://www.strava.com/settings/api
  2. 使用以下设置创建新应用程序:
    • 应用程序名称:您的选择(例如,“My Strava MCP”)
    • 类别:您的选择(例如,“数据导入器”)
    • 俱乐部:留空(可选)
    • 网站:可以是任何东西(例如。, http://localhost)
    • 授权回调域:必须是 localhost
  3. 创建后,记下您的客户端ID和客户端密码
  4. 您将在下面的安装过程中使用这些凭据

安装和设置

身份验证的工作原理

标准模式(单用户,预配置)

  1. OAuth Flow-通过浏览器进行一次性授权
  2. 令牌存储-OAuth令牌保存到 ~/.strava-mcp.env 默认情况下,或本地 .env 文件存在时
  3. 自动刷新-令牌过期时自动刷新
  4. 持久性-后续运行重用存储的令牌

HTTP模式(多用户、按需)

  1. OAuth流-首次连接时的每个用户授权(MCP OAuth→ 斯特拉瓦OAuth)
  2. 令牌存储-存储在会话存储(内存或DynamoDB)中的OAuth令牌
  3. 自动刷新-每个会话自动刷新令牌
  4. 持久性-会话在12小时后过期(可配置)

选项1:使用uvx

uvx mcp-strava auth

此交互式向导将指导您完成stdio或 http传输模式。它将配置写入 ~/.strava-mcp.env 默认情况下。

如果您更喜欢源代码签出开发,请参阅下面的“使用本地源代码”。

对于手动stdio配置,请创建 ~/.strava-mcp.env 使用您的Strava OAuth应用程序 凭证和令牌。

选项2:使用Docker

# Pull the image
docker pull ghcr.io/eddmann/strava-mcp:latest

然后配置凭据:

# Create the env file first (Docker will create it as a directory if it doesn't exist)
touch strava-mcp.env

# Run the setup script
docker run -it --rm \
  -v "/ABSOLUTE/PATH/TO/strava-mcp.env:/app/.env" \
  ghcr.io/eddmann/strava-mcp:latest \
  auth

此交互式向导将指导您完成stdio或http传输模式的身份验证配置。

所需OAuth范围

身份验证过程请求这些作用域:

  • profile:read_all -阅读运动员简介和区域
  • activity:read_all -读取所有活动数据
  • activity:read -阅读活动摘要
  • profile:write -星/星段

运输方式

服务器支持通过以下方式选择的两种传输模式 --transport 标志(stdio是默认值,不需要标志):

标准模式(默认)

使用标准输入/输出与单个预配置的Strava帐户进行通信。

  • 身份验证:在中预配置OAuth令牌 ~/.strava-mcp.env 或当地 .env 文件
  • 用户:每次部署一个用户
  • 设置:运行 strava-mcp auth 授权一次
  • 令牌存储: ~/.strava-mcp.env 默认情况下,使用本地 .env 开发和Docker的重写

HTTP模式(流式HTTP)

使用每个用户OAuth流的HTTP传输。

  • 身份验证:每个用户的OAuth流(MCP OAuth→ 斯特拉瓦OAuth)
  • 用户:具有单独会话的多用户支持
  • 设置:基于环境的配置
  • 令牌存储:内存或DynamoDB会话存储

Claude桌面配置

添加到配置文件中:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json

使用uvx

运行后 uvx mcp-strava auth,配置Claude Desktop以启动已发布的 包裹:

{
  "mcpServers": {
    "strava": {
      "command": "uvx",
      "args": ["mcp-strava"]
    }
  }
}

使用本地来源

对于开发,请从本地结账运行:

cd strava-mcp
make deps
uv run strava-mcp auth
{
  "mcpServers": {
    "strava": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/ABSOLUTE/PATH/TO/strava-mcp",
        "strava-mcp",
        "--transport",
        "stdio"
      ]
    }
  }
}

使用Docker

{
  "mcpServers": {
    "strava": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/ABSOLUTE/PATH/TO/strava-mcp.env:/app/.env",
        "ghcr.io/eddmann/strava-mcp:latest",
        "--transport",
        "stdio"
      ]
    }
  }
}

ChatGPT集成和HTTP模式

在HTTP模式下运行

以HTTP模式启动服务器以进行远程部署:

# Using uvx
uvx --from "mcp-strava[http]" mcp-strava --transport http

# Using local source
cd /ABSOLUTE/PATH/TO/strava-mcp
make deps
uv run strava-mcp --transport http

# Using Docker
docker run -p 8000:8000 --rm \
  -v "/ABSOLUTE/PATH/TO/strava-mcp.env:/app/.env" \
  ghcr.io/eddmann/strava-mcp:latest \
  --transport http

环境变量可以使用配置 uvx mcp-strava auth,或 strava-mcp auth 从本地结账或Docker镜像。

与ngrok的地方发展

要在本地测试ChatGPT集成:

  1. 以HTTP模式启动服务器:

    uv run strava-mcp --transport http
    
  2. 在单独的终端中,通过ngrok进行曝光:

    ngrok http 8000
    
  3. 更新环境:设置 STRAVA_MCP_BASE_URL 到您的ngrok网址:

    export STRAVA_MCP_BASE_URL=https://abc123.ngrok.io
    

    或添加到您的 .env 文件:

    STRAVA_MCP_BASE_URL=https://abc123.ngrok.io
    
  4. 重新启动服务器 获取新的基本URL

  5. 配置ChatGPT:使用ngrok URL(带 /mcp 路径)作为您的MCP服务器端点

用法

请Claude使用自然语言与您的Strava数据进行交互。服务器提供工具、资源和提示模板来帮助您入门。

MCP提示快速入门

使用内置提示模板进行常见查询(可通过Claude中的提示建议获得):

  • analyze_recent_training -分析我过去30天的训练
  • segment_performance -分析我在特定细分市场的表现
  • activity_deep_dive -深入某一特定活动
  • compare_recent_runs -比较我最近的跑步记录以跟踪进度
  • training_summary -给我看一份全面的培训总结
  • race_performance_analysis -分析特定距离的比赛表现

活动

"Show me my runs from the last 30 days"
"Get my last long run with lap splits and heart rate zones"
"Show me the comments and kudos on my half marathon race"
"Find all my marathon races from this year"
"Show me all 10km runs from the last 90 days"

运动员简介和统计数据

"Show my athlete profile with year-to-date stats and training zones"

注:运动员简介资源(strava://athlete/profile)自动提供持续的上下文。

片段

"Show me the Box Hill segment with my effort history"
"Find running segments near Hyde Park"
"Show the leaderboard for my favorite climb segment"

路线

"List my routes"
"Export my Richmond Park route to GPX"

训练分析

"Analyze my training over the past 30 days"
"Analyze my marathon race performance this year"
"Compare my last three 10K runs"
"Find runs similar to my last tempo workout"
"Show me all my 5k races from the last year"

注意:列表返回工具使用基于光标的分页,默认限制为(活动/分段/路线10个项目,排行榜50个项目)。

可用工具

活动(2个工具)

工具 说明
query_activities 通过过滤(距离、头衔、比赛状态)和可选的丰富功能(圈数、区域、流)对活动进行统一查询
get_activity_social 获得活动的评论和赞誉

运动员(1个工具)

工具 说明
get_athlete_profile 通过可选统计数据(最近、年初至今、历史)和训练区域获取运动员档案

分段(3个工具)

工具 说明
query_segments 统一分段查询(按ID、星号或按地理边界浏览)
star_segment 对某个片段加星或取消加星
get_segment_leaderboard 获取具有筛选选项的细分市场排行榜

路线(2个工具)

工具 说明
query_routes 获取路线详细信息(按ID列出单个路线或列出所有路线)
export_route 将路线导出为GPX或TCX格式

分析(3个工具)

工具 说明
analyze_training 通过过滤(距离、头衔、比赛状态)和汇总指标分析一段时间内的训练
compare_activities 并排比较2-5个活动
find_similar_activities 查找与具有进度跟踪预过滤选项的参考活动类似的活动

MCP资源

资源为LLM提供持续的上下文,而不需要明确的工具调用:

资源 描述
strava://athlete/profile 完整的运动员档案,包括最近的统计数据、区域和装备

MCP提示

常见查询的提示模板(可通过Claude中的提示建议访问):

提示 描述
analyze_recent_training 特定时期的全面培训分析
race_performance_analysis 分析特定距离的比赛表现
segment_performance 详细的细分市场性能分析
activity_deep_dive 使用所有指标深入了解特定活动
compare_recent_runs 比较最近的运行情况,以确定趋势和改进
training_summary 全面的培训概述及建议

许可证

MIT许可证-请参阅 许可证 详细信息文件

免责声明

本项目不隶属于Strava,股份有限公司,也不由Strava,Inc.背书或赞助。所有产品名称、徽标和品牌均为其各自所有者的财产。