strava-mcp について
strava-mcpは、Stravaデータにアクティビティ編集、セグメントやルートの管理、分析機能を加えるリモートMCPサーバーです。StravaをMCPクライアントで扱う人向けで、トレーニング分析とインタラクティブな可視化も提供します。
主な機能
- 01アクティビティの作成と更新
- 02セグメントの検索と管理
- 03ルートの表示とエクスポート
- 04インターバルとトレーニング負荷の分析
- 05写真、ゾーン、ランニング概要の表示
- 069種類のインタラクティブな可視化
活用シーン
- 01アクティビティの編集や手動ワークアウトの追加
- 02セグメントの記録と進捗の確認
- 03ルートのGPXまたはTCXエクスポート
- 04トレーニング傾向の比較とレースコンディションの評価
MCP 対応
Streamable HTTP経由で、Stravaのアクティビティ、セグメント、ルート、分析、可視化のツールをMCPクライアントに提供します。リモートデプロイとトークンの自動更新に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e STRAVA_CLIENT_ID -e STRAVA_CLIENT_SECRET -e PUBLIC_URL -e STRAVA_ACCESS_TOKEN -e STRAVA_REFRESH_TOKEN -e MCP_AUTH_TOKEN -e PORT -e TOKEN_DATA_DIR -e ROUTE_EXPORT_PATH ghcr.io/ljcl/strava-mcp:3.0.0STRAVA_CLIENT_IDStrava API client IDSTRAVA_CLIENT_SECRETシークレットStrava API client secretPUBLIC_URLPublic HTTPS URL used for the Strava OAuth callbackSTRAVA_ACCESS_TOKENシークレットOptional initial access token from setup-authSTRAVA_REFRESH_TOKENシークレットOptional initial refresh token from setup-authMCP_AUTH_TOKENシークレットShared secret gating /mcp and the OAuth web routes (recommended when internet-facing)PORTServer port (default 3000)TOKEN_DATA_DIRシークレットOverride token storage directory (default ./data)ROUTE_EXPORT_PATHAbsolute directory for exported route filesローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/ljcl/strava-mcp:3.0.0Streamable HTTPツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Strava MCP
公式の Strava MCP コネクターを補完する Model Context Protocol(MCP)サーバーです。公式コネクターにはない書き込みアクセス、セグメント、ルート、写真、派生分析、インタラクティブな視覚化を追加します。
機能
- アクティビティの書き込みと更新(タイトル、説明、スポーツの種類、ギア、フラグ)
- デバイスで記録していないセッション(筋力トレーニング、ヨガ、トレッドミル)の手動アクティビティを作成
- セグメントの探索、表示、お気に入り登録、管理
- アクティビティごとの写真、ゾーンの内訳、ランニングの概要を取得
- 保存済みルートの一覧表示と詳細表示
- ルートのエクスポート(GPX/TCX)とアクティビティのトラックのエクスポート(ストリームからGPXを生成)
- Strava が公開していない派生分析:インターバル検出、登り/下りの内訳、有酸素デカップリング、トレーニング負荷、フィットネス/疲労/フォーム(CTL/ATL/TSB)、目標レース当日のフォームに向けたテーパリングの最適化
- MCP を介した AI に適した JSON レスポンス
- MCP 互換ホストで表示される9種類のインタラクティブな視覚化 — アクティビティチャート、ケイデンストレンド、ルートマップ、アクティビティセグメント、トレーニング負荷、アクティビティ比較、アクティビティゾーン、セグメントの進捗、フィットネストレンド
- 週次レビュー、ランニングの注釈付け、セグメント探しのガイド付きプロンプト(docs/tools.md)
- トークンの自動更新
- リモートデプロイ向けの Streamable HTTP トランスポート
ライブ Storybookで UI コンポーネントをご覧いただけます。
ツールカタログ、プロンプト、権限の動作、リクエスト例については、docs/tools.mdをご覧ください。
クイックスタート(Docker)
1. Strava API アプリケーションを作成する
- strava.com/settings/apiにアクセスします
- 新しいアプリケーションを作成します:
- アプリケーションの詳細(名前、ウェブサイト、説明)を入力します
- 「Authorization Callback Domain」に公開 URL のホスト名(例:
strava-mcp.example.com)を設定します - Client IDとClient Secretを控えます
2. 環境を設定する
cp .env.example .env
.envを編集して値を設定します:
STRAVA_CLIENT_ID=your_client_id
STRAVA_CLIENT_SECRET=your_client_secret
PUBLIC_URL=https://your-public-url.example.com
すべての変数はdocs/operations.mdに記載されています。ビルド済みイメージを使いますか?ghcr.io/ljcl/strava-mcp:latest(MCP registryではio.github.ljcl/strava-mcpとしても公開)をプルし、ビルドする代わりに compose のimage:をそのイメージに指定してください。Strava の認証情報は引き続きご自身で用意する必要があります。公開イメージには SBOM/来歴のアテステーションが付属しており、検証できます。詳しくはoperations.mdをご覧ください。
**./dataのバインドマウントに関する注意:**トークンはここに保存されます。また、distroless イメージは非 root の UID 65534 で実行されるため、この UID がディレクトリに書き込める必要があります。そうでない場合、初回起動時にトークンの永続化に失敗します:
mkdir -p data
sudo chown -R 65534:65534 data
代わりに、docker-compose.ymlで名前付きボリューム(例:strava-data:/app/data)を使用すると、Docker が適切な所有権で初期化します。詳しくはoperations.mdをご覧ください。
3. サーバーを起動する
docker compose up -d
GET /healthは Strava API のリクエストを消費せずに稼働状況を報告します。MCP_AUTH_TOKENを設定している場合は、認証とレート制限の状態も報告します。レスポンス形式と監視方法については、operations.mdをご覧ください。
4. Strava で認証する
ブラウザーでhttps://your-public-url/auth/startにアクセスします。認証後、トークンは自動的に保存され、以降は自動で更新されます。ステータスはいつでも/auth/statusで確認できます。
MCP_AUTH_TOKENを設定している場合は、両方の URL に?token=<MCP_AUTH_TOKEN>を追加してください。
5. Claude Desktop に接続する
Claude の設定(macOS の場合は ~/Library/Application Support/Claude/claude_desktop_config.json)に追加します。
{
"mcpServers": {
"strava": {
"type": "url",
"url": "https://your-public-url/mcp",
"headers": { "Authorization": "Bearer your-mcp-auth-token" }
}
}
}
headers エントリーが必要なのは、MCP_AUTH_TOKEN が設定されている場合のみです(トンネル経由で公開するサーバーでは設定を推奨します。エンドポイントの保護を参照してください)。
新しい設定を読み込むため、Claude Desktop を再起動します。
AI ツールへの接続
ほとんどの AI ツール(Claude Desktop、Claude Code など)が MCP サーバーに接続するには、HTTPS URL が必要です。サーバーはローカルネットワーク上で動作するため、公開するにはトンネルが必要です。
Tailscale Funnel(推奨)
Tailscale Funnel を使うと、設定なしでローカルポートを HTTPS 経由でインターネットに公開できます。
tailscale funnel --bg 3000
# → https://your-machine.tail1234.ts.net
.env の PUBLIC_URL に、生成された URL を設定します。
Cloudflare Tunnel
cloudflared tunnel --url http://localhost:3000
エンドポイントの保護
トンネルを使うと、URL を知っている人なら誰でも /mcp にアクセスできるようになります。これには update-activity 書き込みツールも含まれます。MCP_AUTH_TOKEN に長くランダムなシークレット(openssl rand -hex 32)を設定してください。これにより、すべての /mcp リクエストで Authorization: Bearer <token> が必要になります。各クライアントの設定例では、ヘッダーを指定する場所を示しています。このシークレットは /auth/start と /auth/status も保護します。詳細(OAuth コールバックの安全性を保つ方法を含む)については、operations.mdを参照してください。
Strava の認証情報とともに .env に設定します。docker-compose.yml によって自動的に転送されます。
AI Tool (Claude Desktop, Claude Code, etc.)
│ HTTPS
HTTPS Tunnel (Tailscale / Cloudflare)
│ HTTP (localhost:3000)
Strava MCP Server (Docker / Bun)
│ HTTPS
Strava API
クライアントの設定
このサーバーは、Streamable HTTP トランスポートをサポートするあらゆる MCP クライアントで動作します。以下の各設定例では、https://your-public-url をトンネルの URL に置き換えてください(ローカル開発の場合は http://localhost:3000 を使用します)。MCP_AUTH_TOKEN を設定した場合のみ、Authorization ヘッダーを含めてください。
Claude Code
claude mcp add --transport http strava https://your-public-url/mcp \
--header "Authorization: Bearer your-mcp-auth-token"
Cursor
プロジェクトの .cursor/mcp.json に追加します(すべてのプロジェクトに適用する場合は ~/.cursor/mcp.json に追加します)。
{
"mcpServers": {
"strava": {
"url": "https://your-public-url/mcp",
"headers": { "Authorization": "Bearer your-mcp-auth-token" }
}
}
}
VS Code
ワークスペースの .vscode/mcp.json に追加します(または、コマンドパレットから MCP: Add Server を実行します)。
{
"servers": {
"strava": {
"type": "http",
"url": "https://your-public-url/mcp",
"headers": { "Authorization": "Bearer your-mcp-auth-token" }
}
}
}
その他のクライアント(汎用 Streamable HTTP)
Streamable HTTP に対応したクライアントなら、/mcp エンドポイントに直接接続できます。1 つの URL で、どちらのプロトコル世代にも対応します。2026-07-28 のクライアントは、io.modelcontextprotocol/* エンベロープキーを含むステートレスリクエストを送信し(server/discover で機能を通知します)、2025 年世代のクライアントは通常の initialize ハンドシェイクを使用します。Accept: application/json, text/event-stream ヘッダーを付けて JSON-RPC メッセージを POST します。プロトコルの詳細については、docs/architecture.mdを参照してください。
公式 Strava MCP と併用する
Strava の公式 MCP コネクターは、アクティビティの検索と基本的な読み取りに対応します。このサーバーは、公式コネクターが提供していない機能、つまりアクティビティ、セグメント、ルートへの書き込み、GPX/TCX エクスポート、写真、派生分析、インタラクティブな可視化を補います。
両方をインストールする
- 公式:
claude mcp add --transport http strava-mcp https://mcp.strava.com/mcp(または claude.ai Connectors/Claude Desktop から)。 - このサーバー:上記のインストール手順を参照してください。
それぞれの役割
| 機能 | 公式 | このサーバー |
|---|---|---|
| アクティビティ、ストリーム、プロフィール、ゾーン、ギア、クラブ、トレーニングプランの一覧表示/読み取り | はい | いいえ(公式を使用) |
| アクティビティの更新、セグメントへのスター付け | いいえ | はい |
| セグメントの詳細/検索/走行記録 | いいえ | はい |
| ルートおよび GPX/TCX エクスポート | いいえ | はい |
| アクティビティの GPX エクスポート(ストリームから合成) | いいえ | はい |
| アクティビティの写真 | いいえ | はい |
| アスリートの統計、アクティビティごとのゾーン、ベスト記録、ランニング概要、トレーニング負荷、比較 | いいえ | はい |
| インターバル、登坂、有酸素運動の分析、フィットネス/疲労/フォーム(CTL/ATL/TSB) | いいえ | はい |
| インタラクティブアプリ:アクティビティのグラフ、ケイデンスの傾向、ルートマップ、アクティビティのセグメント、トレーニング負荷、アクティビティの比較、アクティビティのゾーン、セグメントの進捗、フィットネスの推移 | いいえ | はい |
注意事項
- 公式コネクターの利用には Strava のサブスクリプションが必要で、現在は Anthropic のクライアントでのみ動作します。
- 重複する読み取りをなくしたため、このサーバーでアクティビティを検索するには、公式コネクターがインストールされていることが実質的に前提となります。集計分析ツール(
get-best-efforts、get-training-load)は独自にアクティビティ一覧を取得しますが、アクティビティ単位のツール(get-running-summary、compare-activities、get-activity-zonesなど)には、公式のlist_activitiesから取得したアクティビティ ID が必要です。 - 2つのツールは異なるレート制限枠を使用するため、両方を実行すると API の負荷を分散できます。
推奨ワークフロー
公式コネクターでアクティビティを検索して読み取り、その後、このサーバーを使って書き込み、セグメントの探索、ルートの管理とエクスポート、可視化を行います。モデルは公式の list_activities から取得したアクティビティ ID を、このサーバーのツールに直接渡せます。
リクエスト例
次のような質問を AI アシスタントにしてみてください(公式の Strava MCP を使ってアクティビティ ID を検索し、その後、これらのツールに渡します)。
- 「アクティビティ 12345678 のタイトルを『Morning Threshold』に変更して」
- 「アクティビティ 12345678 の心拍ゾーンの内訳を表示して」
- 「アクティビティ 12345678 のインターバルを分析して。各反復でペースが落ちている?」
- 「日曜日のロングランは前半より後半のペースが落ちていた?それとも、坂のせいだった?」
- 「レースは9月13日です。TSB +10 で当日を迎えるには、次の3週間をどう過ごせばよい?」
- 「セグメント 8109834 で速くなっている?これまでの記録を見せて」
- 「10k、21k、32k 地点に補給ポイントを設けたレースルートを地図に表示して、28k 地点の上り坂に目印を付けて」
詳細は docs/tools.md を参照してください。
ローカル開発
前提条件:Bun と Strava アカウント。
bun install
# Guided OAuth flow using localhost as redirect URI
cd apps/server && bun run setup-auth && cd ../..
# Start dev server (server + MCP App watchers)
bun run dev
任意のクライアントから http://localhost:3000/mcp に接続してください。リポジトリの構成、タスクランナー、テスト、カバレッジゲート、Storybook のワークフローについては、docs/development.md を参照してください。エージェントの規約は AGENTS.md に記載されています。
ドキュメント
| ドキュメント | 内容 |
|---|---|
| docs/tools.md | ツールの全カタログ、プロンプト、権限の動作、リクエスト例 |
| docs/operations.md | 環境変数、認証/トークンの取り扱い、ヘルスエンドポイント、レート制限、エンドポイントのセキュリティ |
| docs/architecture.md | サーバーアーキテクチャ:トランスポート、HTTP レイヤー、キャッシュ、エラー分類、分析の計算 |
| docs/mcp-apps.md | MCP App パッケージ:共有シェル、モバイル、テーマ設定、アプリごとの詳細 |
| docs/development.md | モノレポの仕組み:Turborepo、カバレッジゲート、Storybook ゲート、Docker ビルド |
| docs/releasing.md | リリースの自動化:Conventional Commit 形式の PR タイトル、release-please、公開 |
| docs/project.md | Issue の追跡とプロジェクトボード |
PR は squash merge され、PR タイトルが main 上のコミットになります。そのため、Conventional Commit の形式で記述してください(feat: はマイナー、fix: はパッチ、feat!: はメジャー、chore:/docs:/refactor:/ci: はリリースなし)。CI チェックにより、形式に準拠していないタイトルは拒否されます。詳細は docs/releasing.md を参照してください。
トラブルシューティング
AI ツールがサーバーに接続できない — MCP では HTTPS URL が必要です。トンネル(Tailscale Funnel または Cloudflare Tunnel)を使って、ローカルサーバーを公開してください。AI ツールへの接続を参照してください。
OAuth コールバックが失敗する — .env の PUBLIC_URL がトンネルの URL と完全に一致していること、また同じホスト名がStrava API の設定で「Authorization Callback Domain」として設定されていることを確認してください。
トークンエラーまたはトークンの期限切れ — まず /health を確認してください。authenticated と token_expires_at から、サーバーが使用可能なトークンを保持しているかどうかがわかり、認証の問題と接続可能性の問題を区別できます。次に /auth/start にアクセスして、再認証してください。トークンは自動的に更新されますが、リフレッシュトークンが取り消された場合や、新しいリリースでスコープが追加された場合は、完全な再認証が必要です。operations.mdを参照してください。
サーバーは起動していて、接続可能ですか? — curl https://your-public-url/health を実行してください。Strava API にアクセスせずに応答するため、レート制限を使い切った場合でも動作します。
コンテナーを再起動するとトークンが保持されない(Docker) — コンテナーは非 root の UID 65534 で実行されるため、./data のバインドマウントはその UID で書き込み可能である必要があります(sudo chown -R 65534:65534 data)。または、代わりに名前付きボリュームを使用してください。クイックスタートの手順 2とoperations.mdを参照してください。
許可したのに、クライアントが読み取りツールの使用許可を再度求める — リリースでツール名が変更されたか、入力スキーマが変更された可能性があります。許可はツールの識別情報ごとに保存されるため、変更によって許可が失われます。該当する場合は、リリースの変更履歴に記載されています。それ以外の場合、設定の保持はクライアント側で行われるため、コネクター単位とツール単位の両方の設定を確認してください。docs/tools.mdを参照してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。