使用说明
StravaMCP
一个生产级MCP服务器,为代理框架提供对Strava API的完全访问--单Go二进制,零基础设施。
StravaMCP是一个 模型上下文协议 Go内置的服务器 OpenClaw/零爪 agent框架生态系统。它通过机器上运行的单个静态二进制文件将人工智能代理连接到Strava API。通过stdio进行通信,与任何兼容MCP的客户端一起工作,通过自动浏览器流处理OAuth身份验证,并在本地存储令牌。没有云服务,没有容器,没有运行时依赖关系——只需下载并运行即可。
运作原理
graph LR
A["MCP Client<br/>(Claude Desktop, Cursor, etc.)"] -- stdio --> B["strava-mcp<br/>Go Binary"]
B -- HTTPS --> C["Strava API v3"]
B -- read/write --> D["~/.strava/tokens.json"]
特性
- 单一二进制,零运行时依赖关系 --没有Docker,没有云,没有数据库
- 11个MCP工具 涵盖活动、运动员统计、流媒体、俱乐部和上传
- 自动OAuth浏览器流 --一个验证命令
- 通过单次飞行同时刷新代币 --过期代币上没有雷鸣般的羊群
- 原子写入然后重命名令牌存储 --碰撞安全凭据持久性
- 零CGO静态二进制 --无C库依赖,可在任何地方运行
- 跨平台 --macOS(英特尔+苹果硅)和Linux(amd64+arm64)
为什么去?
StravaMCP是用Go编写的,原因与RustyClaw生态系统存在的原因相同: 对于代理在每个会话中调用数百次的工具服务器来说,性能和简单性很重要。
| Go(StravaMCP) | Python | Node.js | |
|---|---|---|---|
| 启动时间 | ~10ms | ~500ms | ~200ms |
| 内存占用 | ~8MB | ~30MB | ~40MB |
| 二进制大小 | 7MB(单个文件) | ~50MB+(运行时+数据库) | ~60MB+ |
| 依赖项 | 3直接 | 变化(pip) | 变化(npm) |
| 需要运行时间 | 无 | Python解释器 | Node.js运行时 |
基于可比MCP服务器的已知Go/Python/Node.js运行时特征的估计。不是正式的基准。
快速开始
安装
选择您喜欢的安装方法:
选项A:去安装
go install github.com/Stealinglight/StravaMCP@latest
选项B:自制
brew install Stealinglight/tap/strava-mcp
选项C:下载二进制文件
从以下网址下载适用于您平台的最新二进制文件 GitHub 发布.
macOS网守注意事项: 如果您直接下载二进制文件,macOS可能会对其进行隔离。在运行之前删除隔离属性:
xattr -d com.apple.quarantine strava-mcp
设置Strava API凭据
- 在创建Strava API应用程序 https://www.strava.com/settings/api
- 设置 授权回调域 到
localhost - 导出您的凭据:
export STRAVA_CLIENT_ID=your_client_id
export STRAVA_CLIENT_SECRET=your_client_secret
验证
运行内置的OAuth流。这将打开您的浏览器,完成授权,并在本地保存令牌:
strava-mcp auth
您应该看到: Authenticated as [Your Name]!
配置您的MCP客户端
将StravaMCP添加到客户的配置中。对于 克劳德桌面,编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"strava": {
"command": "strava-mcp",
"env": {
"STRAVA_CLIENT_ID": "your_client_id",
"STRAVA_CLIENT_SECRET": "your_client_secret"
}
}
}
}
重新启动MCP客户端,Strava工具将可用。
代理框架集成
StravaMCP是 OpenClaw/零爪 代理框架生态系统——一组高性能MCP服务器,使AI代理能够通过stdio传输访问外部服务。
graph TD
AF["Agent Framework<br/>(OpenClaw / ZeroClaw)"]
AF -- stdio --> SM["StravaMCP<br/>Go · 7MB"]
AF -- stdio --> SK["SlackMCP<br/>Rust"]
AF -- stdio --> WR["WebResearchMCP<br/>Rust"]
AF -- stdio --> VM["VideoMCP<br/>Rust"]
SM -- HTTPS --> SA["Strava API v3"]
SK -- HTTPS --> SKA["Slack API"]
WR -- HTTPS --> WRA["Web Search APIs"]
VM -- HTTPS --> VMA["Video APIs"]
要将StravaMCP作为工具提供者连接到代理框架中,请将其添加到MCP服务器配置中:
{
"mcpServers": {
"strava": {
"command": "strava-mcp",
"env": {
"STRAVA_CLIENT_ID": "your_client_id",
"STRAVA_CLIENT_SECRET": "your_client_secret"
}
}
}
}
代理框架将StravaMCP作为子进程启动,使用MCP协议通过stdio进行通信,并将工具调用路由到Strava。没有HTTP服务器,没有端口配置——stdio传输处理一切。
Tool Reference (11 tools)
| 工具 | 类别 | 描述 |
|---|---|---|
strava_get_activities |
活动 | 列出最近的活动,并进行日期过滤和分页 |
strava_get_activity_by_id |
活动 | 获取详细的活动信息,包括圈数、分段和分段成绩 |
strava_create_activity |
活动 | 创建新的手动活动 |
strava_update_activity |
活动 | 更新现有活动(名称、描述、运动类型、装备) |
strava_get_activity_zones |
活动 | 获取心率和功率区分布 |
strava_get_athlete |
运动员 | 获取经过认证的运动员资料 |
strava_get_athlete_stats |
运动员 | 获取汇总统计数据(最近/年初至今/历史总数) |
strava_get_activity_streams |
流 | 获取时间序列遥测数据(HR、GPS、功率、节奏、高度) |
strava_get_club_activities |
俱乐部 | 列出俱乐部成员最近的活动 |
strava_create_upload |
上传 | 上传活动文件(GPX、TCX、FIT) |
strava_get_upload |
上传 | 检查上传处理状态 |
Architecture
graph TD
M["main.go"] --> AUTH["auth subcommand"]
M --> MCP["MCP Server (default)"]
AUTH --> OAUTH["OAuth Browser Flow"]
OAUTH --> TS["Token Store<br/>~/.strava/tokens.json"]
MCP --> TH["Tool Handlers<br/>(11 tools)"]
TH --> SC["Strava Client"]
SC --> AR["Auto Token Refresh<br/>+ singleflight"]
AR --> TS
SC --> API["Strava API v3"]
关键设计决策:
- 仅记录stderr --所有日志记录通过
slog到stderr;stdout专用于MCP JSON-RPC协议消息 - 单次飞行。群组 --并发的令牌刷新请求被合并为一个Strava API调用,以防止群情激愤
- 原子写入然后重命名令牌存储 --令牌文件更新是安全的;部分写入永远不会损坏保存的凭据
- 零CGO静态二进制 --编译成一个没有C依赖的静态二进制文件,实现了简单的跨平台分发
配置
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
STRAVA_CLIENT_ID |
是的 | (无) | Strava API应用程序客户端ID |
STRAVA_CLIENT_SECRET |
是的 | (无) | Strava API应用程序客户端机密 |
STRAVA_TOKEN_PATH |
没有 | ~/.strava/tokens.json |
令牌存储文件的路径 |
CLI标志
| 标志 | 描述 |
|---|---|
strava-mcp auth |
运行OAuth浏览器流进行身份验证 |
strava-mcp --version |
打印版本、提交和构建日期 |
strava-mcp --debug |
启用调试级别日志记录 |
strava-mcp |
在stdio上启动MCP服务器(默认) |
发展
# Build
go build .
# Run tests
go test ./...
# Run with debug logging
STRAVA_CLIENT_ID=xxx STRAVA_CLIENT_SECRET=xxx ./strava-mcp --debug
看 贡献.md 发展指南。
许可证
贡献
发现bug还是有想法?看 贡献.md 用于开发设置和指南。安全问题应通过以下方式私下报告 安全.md.