
这是一个用于Strava集成的模型上下文协议(MCP)服务器。通过Claude、ChatGPT和其他大型语言模型访问您的活动、运动员统计数据、分段和路线。
此MCP服务器提供了11个工具来与您的Strava账户进行交互,这些工具被组织成5个类别:
此外,该服务器还提供:
部署选项:
在安装之前,您需要创建一个Strava API应用程序:
http://localhost)localhost.env文件中# 安装依赖项
cd strava-mcp
uv sync
然后配置凭证:
uv run strava-mcp-auth
这个交互式向导将引导您完成为标准I/O或HTTP传输模式配置认证的过程。
# 拉取镜像
docker pull ghcr.io/eddmann/strava-mcp:latest
然后配置凭证:
# 首先创建env文件(如果不存在,Docker会将其创建为目录)
touch strava-mcp.env
# 运行设置脚本
docker run -it --rm \
-v "/ABSOLUTE/PATH/TO/strava-mcp.env:/app/.env" \
--entrypoint= \
ghcr.io/eddmann/strava-mcp:latest \
python -m strava_mcp.scripts.setup_auth
这个交互式向导将引导您完成为标准I/O或HTTP传输模式配置认证的过程。
认证过程请求以下范围:
profile:read_all - 读取运动员个人资料和区间activity:read_all - 读取所有活动数据activity:read - 读取活动摘要profile:write - 对分段进行点赞/取消点赞服务器支持两种传输模式,通过--transport标志选择(默认为stdio,无需标志):
使用标准输入/输出与预先配置的单个Strava账户进行通信。
.env文件中的预配置OAuth令牌strava-mcp-auth进行一次授权.env文件使用HTTP传输和每个用户的OAuth流程。
添加到您的配置文件中:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"strava": {
"command": "uv",
"args": [
"run",
"--directory",
"/ABSOLUTE/PATH/TO/strava-mcp",
"strava-mcp",
"--transport",
"stdio"
]
}
}
}
{
"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"
]
}
}
}
以HTTP模式启动服务器以进行远程部署:
# 使用UV
uv run --directory /ABSOLUTE/PATH/TO/strava-mcp strava-mcp --transport http
# 使用Docker
docker run -p 8000:8000 --rm \
-v "/ABSOLUTE/PATH/TO/strava-mcp.env:/app/.env" \
ghcr.io/eddmann/strava-mcp:latest \
--transport http
环境变量可以通过strava-mcp-auth设置向导进行配置(参见安装与设置部分)。
要测试ChatGPT集成:
以HTTP模式启动服务器:
uv run strava-mcp --transport http
在另一个终端中通过ngrok暴露:
ngrok http 8000
更新环境:将STRAVA_MCP_BASE_URL设置为您的ngrok URL:
export STRAVA_MCP_BASE_URL=https://abc123.ngrok.io
或者添加到您的.env文件中:
STRAVA_MCP_BASE_URL=https://abc123.ngrok.io
重启服务器以获取新的基础URL
配置ChatGPT:使用ngrok URL(带有/mcp路径)作为您的MCP服务器端点
让Claude使用自然语言与您的Strava数据进行交互。服务器提供了工具、资源和提示模板来帮助您开始。
使用内置提示模板进行常见查询(可通过Claude中的提示建议获得):
analyze-recent-training - 分析我过去30天的训练segment-performance - 分析我在特定分段上的表现activity-deep-dive - 对特定活动进行深入分析compare-recent-runs - 比较我的最近几次跑步以追踪进步training-summary - 显示全面的训练概要"显示我过去30天的跑步"
"获取我最后一次长跑的分段和心率区间"
"显示我对半程马拉松比赛的评论和点赞"
"查找今年的所有马拉松比赛"
"显示过去90天内的所有10公里跑步"
"显示包含今年至今统计和训练区间的运动员个人资料"
注意:运动员个人资料资源(strava://athlete/profile)自动提供持续上下文。
"显示Box Hill分段及其历史努力情况"
"查找Hyde Park附近的跑步分段"
"显示我最喜欢的爬坡分段的排行榜"
"列出我的路线"
"将我的Richmond Park路线导出为GPX格式"
"分析我过去30天的训练"
"分析我今年的马拉松比赛表现"
"比较我最后三次10公里跑步"
"查找与我上次间歇训练相似的跑步"
"显示我过去一年内的所有5公里比赛"
注意:返回列表的工具使用基于游标的分页,默认限制(活动/分段/路线10项,排行榜50项)。
| 工具 | 描述 |
|---|---|
query-activities | 统一查询活动,包括过滤(距离、标题、比赛状态)和可选丰富信息(分段、区间、流) |
get-activity-social | 获取活动的评论和点赞 |
| 工具 | 描述 |
|---|---|
get-athlete-profile | 获取运动员个人资料,包括可选统计(近期、今年至今、所有时间)和训练区间 |
| 工具 | 描述 |
|---|---|
query-segments | 统一分段查询(通过ID、收藏或地理边界探索) |
star-segment | 收藏或取消收藏分段 |
get-segment-leaderboard | 获取分段排行榜,包括过滤选项 |
| 工具 | 描述 |
|---|---|
query-routes | 获取路线详情(通过ID获取单个路线或列出所有路线) |
export-route | 将路线导出为GPX或TCX格式 |
| 工具 | 描述 |
|---|---|
analyze-training | 分析一段时间内的训练,包括过滤(距离、标题、比赛状态)和聚合指标 |
compare-activities | 并排比较2-5个活动 |
find-similar-活动 | 查找与参考活动相似的活动,并进行预筛选以追踪进度 |
资源为LLM提供持续上下文,而无需显式调用工具:
| 资源 | 描述 |
|---|---|
strava://athlete/profile | 包含近期统计、区间和装备的完整运动员个人资料 |
常见查询的提示模板(可通过Claude中的提示建议获得):
| 提示 | 描述 |
|---|---|
analyze-recent-training | 对指定时间段进行全面的训练分析 |
race-performance-analysis | 分析特定距离的比赛表现 |
segment-performance | 详细的分段表现分析 |
activity-deep-dive | 对特定活动进行深入分析,包括所有指标 |
compare-recent-runs | 比较最近几次跑步以识别趋势和改进 |
training-summary | 全面的训练概述,附带建议 |
MIT许可证 - 详情请参阅LICENSE文件
本项目未得到Strava, Inc.的认可、赞助或关联。所有产品名称、徽标和品牌均为其各自所有者的财产。