strava-mcp について
strava-mcp は Strava API にアクセスするための MCP サーバーで、LLM が利用者の Strava データを読み取れるようにします。AI クライアントからアクティビティ記録を照会したい Strava ユーザー向けです。
主な機能
- 01Strava のアクティビティとワークアウトデータへのアクセス
- 02OAuth による利用者アカウントの接続
- 03セグメント、ルート、クラブに関する照会
- 04ルートの GPX および TCX 形式でのエクスポート
活用シーン
- 01最近のトレーニング記録を自然言語で照会
- 02単一アクティビティのラップと心拍データの確認
- 03ルートの GPS デバイスへのエクスポート
MCP 対応
本プロジェクトは MCP サーバーであり、Strava のアクティビティ、セグメント、ルートなどのツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y strava-mcp-serverSTRAVA_CLIENT_IDYour Strava API client IDSTRAVA_CLIENT_SECRETシークレットYour Strava API client secretSTRAVA_ACCESS_TOKENシークレットYour Strava API access tokenローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Strava MCP サーバー
AI を使って Strava のデータと会話しましょう。
Claude を Strava アカウントに接続すると、自然な英語で質問できます。「今月は何キロ走った?」「最後のライドを分析して」「最速のセグメントを表示して」など。
何ができますか?
接続したら、Strava の全データにアクセスできる友人と話すように、Claude に話しかけるだけです。
🏃 進捗を追跡する
「今月は何キロ走りましたか?」
「1月から12月までのランニング統計を比較して」
「これまでで最長のライドは何ですか?」
📊 ワークアウトを分析する
「最後のサイクリングワークアウトを詳しく分析して。パワー、心拍数、ケイデンスを表示して」
「昨日のランニング中、心拍数ゾーンはどのような状態でしたか?」
「インターバルトレーニングの各ラップの平均ペースは?」
🗺️ ルートとセグメントを探索する
「セントラルパーク付近で最も人気のあるサイクリングセグメントはどれですか?」
「スター付きのセグメントを表示して」
「日曜朝のルートを GPX ファイルとしてエクスポートして」
🏆 コーチングの分析情報を得る
「今週のトレーニング負荷を分析して」
「現在のフィットネスを先月と比較するとどうですか?」
「今年のサイクリングのパフォーマンスをまとめて」
クイックスタート(3 ステップ)
ステップ 1:Claude Desktop に追加する
Claude Desktop の設定ファイルを開きます。
- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
ファイルに以下を追加します。
{
"mcpServers": {
"strava": {
"command": "npx",
"args": ["-y", "@r-huijts/strava-mcp-server"]
}
}
}
ステップ 1(別の方法):Claude Code に追加する
次のコマンドで、この MCP サーバーを Claude Code に追加できます。
claude mcp add --transport stdio strava -- npx @r-huijts/strava-mcp-server
次のようにして、インストールが成功したことを確認できます。
% claude mcp list
Checking MCP server health...
strava: npx @r-huijts/strava-mcp-server - ✓ Connected
ステップ 2:Claude Desktop を再起動する
Claude Desktop を終了して再度開き、新しい設定を読み込みます。
ステップ 3:Strava に接続する
Claude に次のように話しかけます。
「Strava アカウントに接続して」
ブラウザーウィンドウが開きます。Strava API の認証情報を入力してアプリを認証すれば完了です。
これだけです! アクティビティについて質問してみましょう。
Strava アカウントへの接続
初回セットアップ
「Strava アカウントに接続して」と言うと、次のことが行われます。
- ブラウザーウィンドウが開き、セットアップページが表示されます
- Strava API の認証情報(Client ID と Client Secret)を入力します
- 「Continue to Strava」をクリックすると、Strava にリダイレクトされます
- Strava のウェブサイトでアプリを認証します
- 成功メッセージが表示されたら、ブラウザーを閉じて構いません
- 完了です! Claude が接続完了を確認します
認証情報は ~/.config/strava-mcp/config.json にローカル保存され、セッションをまたいで保持されます。
Strava API の認証情報を取得する
無料の Strava API アプリケーションを作成する必要があります(初回のみ)。
- strava.com/settings/api にアクセスします
- 「Create an App」をクリックします(または既存のアプリを表示します)
- フォームに入力します。
- Application Name:任意の名前(例:「My Claude Assistant」)
- Category:任意の項目を選択
- Website:任意の内容(例:
http://localhost) - Authorization Callback Domain:
localhostにする必要があります
- Client ID と Client Secret をコピーします
これで完了です。この手順は一度だけ行えばよいです。
接続を管理する
- 状態を確認する:「Strava に接続されていますか?」
- 再接続する:「Strava アカウントに接続して」(再接続するには
force: trueを使用します) - 接続を解除する:「Strava アカウントの接続を解除して」
インストール方法
オプション A:そのまま使う(推奨)
インストールは不要です。クイックスタートの npx コマンドが、最新バージョンを自動的にダウンロードして実行します。
オプション B:グローバルにインストールする
一度だけインストールしたい場合は、次のようにします。
npm install -g @r-huijts/strava-mcp-server
次に、Claude の設定を更新して、以下を使用します。
{
"mcpServers": {
"strava": {
"command": "strava-mcp-server"
}
}
}
注: パッケージ名は @r-huijts/strava-mcp-server ですが、後方互換性のため、実行ファイル名は引き続き strava-mcp-server です。
オプション C:ソースからビルドする
コードを変更したい開発者向けです。
git clone https://github.com/r-huijts/strava-mcp.git
cd strava-mcp
npm install
npm run build
次に、ローカルのビルドを Claude に指定します。
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/path/to/strava-mcp/dist/server.js"]
}
}
}
会話例
朝のチェックイン
あなた:今週はどんな運動をしましたか?
Claude:今週の Strava のアクティビティを見ると、次の運動を完了しています。
- 月曜日:5.2km のランニング(28:15)
- 水曜日:45km のサイクリング(1:32:00)
- 土曜日:10km のランニング(52:30)
合計:3 件のアクティビティで 60.2km です。継続できていますね!
ワークアウトの分析
あなた:直近のサイクリングのワークアウトを詳しく分析してください
Claude:昨日の「Evening Loop」のライドを分析すると、次のとおりです。
概要
- 距離:42.3 km
- 時間:1:28:45
- 平均速度:28.6 km/h
パワー分析
- 平均パワー:185W
- 標準化パワー:198W
- 最大パワー:520W
心拍数
- 平均:142 bpm
- 最大:175 bpm
- ゾーン 4 以上の時間:23 分
パワーと心拍数の比率から、優れた有酸素効率がうかがえます……
新しいルートを探す
あなた:コロラド州ボルダー近郊で、挑戦しがいのあるサイクリングの登坂ルートを探してください
Claude:ボルダー近郊で人気の登坂セグメントをご紹介します。
- Flagstaff Road - 5.2km、平均勾配 6.8%
- Sunshine Canyon - 3.8km、平均勾配 7.2%
- Left Hand Canyon - 8.1km、平均勾配 4.5%
後で簡単に見つけられるように、いずれかをお気に入りに登録しますか?
利用可能なツール
アカウントとプロフィール
| 質問できること | 実行されること |
|---|---|
| 「Strava アカウントを接続して」 | Strava を Claude に接続します |
| 「Strava の接続状況を確認して」 | 接続状況を表示します |
| 「Strava アカウントを切断して」 | Strava の接続を解除し、保存されているトークンを消去します |
| 「持っているシューズは?」 | シューズと使用距離を一覧表示します |
| 「トレーニングゾーンは?」 | 心拍数とパワーのゾーンを表示します |
アクティビティ
| 質問できること | 実行されること |
|---|---|
| 「最近のアクティビティを見せて」 | 最新のワークアウトを一覧表示します |
| 「1 月のランニングをすべて取得して」 | フィルターを適用してアクティビティを取得します |
| 「アクティビティ 12345 を分析して」 | 1 件のアクティビティの詳細情報を表示します |
| 「直近のランニングのラップを見せて」 | ラップごとの内訳を表示します |
| 「ライドの心拍数データを取得して」 | 時系列のワークアウトデータを取得します(最適化されたコンパクト形式) |
| 「ハイキングの写真を見せて」 | アクティビティの写真を表示します |
統計と進捗
| 質問できること | 実行されること |
|---|---|
| 「ランニングの統計は?」 | 年初来および全期間の合計を表示します |
| 「今年はどれくらいサイクリングした?」 | 種類別のアクティビティ合計を表示します |
| 「最長のライドは?」 | 自己記録を表示します |
セグメント
| 質問できること | 実行されること |
|---|---|
| 「お気に入りのセグメントを見せて」 | お気に入りのセグメントを表示します |
| 「[location] 近郊のセグメントを探して」 | 人気のセグメントを見つけます |
| 「セグメント 12345 の詳細を取得して」 | セグメント情報とリーダーボードを表示します |
| 「このセグメントをお気に入りに登録して」 | お気に入りに保存します |
| 「[segment] での自分の記録を見せて」 | そのセグメントでの挑戦記録を表示します |
ルート
| 質問できること | 実行されること |
|---|---|
| 「保存したルートを一覧表示して」 | 作成したルートを表示します |
| 「自分の [route name] の詳細を取得して」 | ルート情報を表示します |
| 「[route] を GPX 形式でエクスポートして」 | GPS デバイス用にダウンロードします |
| 「[route] を TCX 形式でエクスポートして」 | GPS デバイス用にダウンロードします |
クラブ
| 質問できること | 実行されること |
|---|---|
| 「どのクラブに所属している?」 | Strava の所属クラブを一覧表示します |
ワークアウト
| 質問できること | 実行されること |
|---|---|
| 「このワークアウトを Zwift ファイルに変換して」 | ワークアウトプランを構造化ファイル(現在は Zwift .zwo)に変換します |
サーバー
| 質問できること | 動作 |
|---|---|
| 「Strava サーバーのバージョンは何ですか?」 | MCP サーバーのバージョンとメタデータを表示します |
トラブルシューティング
「Strava アカウントを接続して」がブラウザーを開かない
- Claude Desktop が MCP サーバーを実行していることを確認してください(Claude でエラーを確認してください)
- Claude Desktop を再起動してみてください
- ポート 8111 がファイアウォールでブロックされていないか確認してください
「認証に失敗しました」または「無効なトークン」
- トークンの有効期限が切れている可能性があります。「Strava アカウントを接続して」と伝えて再接続してください
- strava.com/settings/api で Strava API アプリケーションがまだ有効であることを確認してください
「認証情報がありません」というエラー
- OAuth フローを完了する必要があります。「Strava アカウントを接続して」と伝えてください
- 環境変数を使用している場合は、4 つすべてが設定されていることを確認してください(「開発者向け」セクションを参照)
Claude に Strava のツールが表示されない
claude_desktop_config.jsonが有効な JSON であることを確認してください(末尾にカンマを付けないでください!)- 設定を変更した後、Claude Desktop を再起動してください
- Claude の開発者コンソールでエラーメッセージを確認してください
パッケージ名を変更した後に JSONRPC.ProtocolTransportError が発生する
@r-huijts/strava-mcp-server に更新した後に JSONRPC エラーが発生する場合:
- npx キャッシュをクリアする:ターミナルで
rm -rf ~/.npm/_npxを実行します - 設定を確認する:古い
strava-mcp-serverではなく、@r-huijts/strava-mcp-serverが使われていることを確認します - Claude Desktop を完全に再起動する(終了して再度開きます)
- 手動でテストする:
npx -y @r-huijts/strava-mcp-serverを実行します。「Starting Strava MCP Server v1.2.1...」と表示されるはずです
開発者向け
クリックして技術的な詳細を表示
環境変数
ブラウザベースの認証の代わりに、環境変数を設定できます。
| 変数 | 説明 |
|---|---|
STRAVA_CLIENT_ID | Strava アプリケーションのクライアント ID |
STRAVA_CLIENT_SECRET | Strava アプリケーションのクライアントシークレット |
STRAVA_ACCESS_TOKEN | OAuth アクセストークン |
STRAVA_REFRESH_TOKEN | OAuth リフレッシュトークン |
ROUTE_EXPORT_PATH | GPX/TCX エクスポート用ディレクトリ |
トークンの更新
サーバーは期限切れのトークンを自動的に更新します。新しいトークンは process.env と ~/.config/strava-mcp/config.json の両方に保存されます。
設定の優先順位
- 環境変数(最優先)
~/.config/strava-mcp/config.json- ローカルの
.envファイル
ビルドとテスト
npm install
npm run build
npm test
アクティビティストリームの最適化
get-activity-streams ツールはデフォルトでコンパクト形式を使用します。すべてのデータを保持しながら、ペイロードサイズを約 70~80%削減します。
- コンパクト形式(デフォルト):メタデータ付きの生配列で、サイズを約 70~80%削減します。LLM での処理に最適です
- 詳細形式:値を整形した、人が読みやすいオブジェクトです(後方互換性あり)
- スマートなチャンク分割:大きなアクティビティは自動的に約 50KB のチャンクに分割されます
- 任意のダウンサンプリング:重要な特徴を保持しながら、非常に大きなデータセットを縮小できます
コンパクト形式には、包括的なメタデータ(単位、説明、統計情報)が含まれているため、LLM は生の数値データを理解できます。
API リファレンス
このサーバーは Model Context Protocol(MCP)を実装し、Strava API v3 用の 25 個のツールを公開しています。実装の詳細については、src/tools/ のソースコードを参照してください。
コントリビューション
コントリビューションを歓迎します!Pull Request を送信してください。
ライセンス
MIT License。詳細については LICENSE ファイルを参照してください。
質問がありますか? GitHub で issue を作成してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
