Strava API代理服务

StravaMCP是一个生产级的MCP服务器,通过单一Go二进制文件使代理框架完全访问Strava API,无需基础设施支持。

  • by Stealinglight
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 Stealinglight/StravaMCP

使用说明

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凭据

  1. 在创建Strava API应用程序 https://www.strava.com/settings/api
  2. 设置 授权回调域 到 localhost
  3. 导出您的凭据:
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 &middot; 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.

链接