strava-mcp-server

groundcobra009/strava-mcp-server

3.2

If you are the rightful owner of strava-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

Strava MCP Server integrates Strava API with Model Context Protocol to provide enhanced functionalities for managing athlete data.

Tools
4
Resources
0
Prompts
0

Strava MCP Server

Strava APIとMCP(Model Context Protocol)を統合するサーバーです。

このMCPサーバーを使用することで、ClaudeなどのAIアシスタントから直接Stravaのアクティビティデータを取得・分析できます。ランニングやサイクリングの記録を会話形式で確認したり、統計情報を簡単に照会できます。

📦 対応クライアント

このMCPサーバーは以下のクライアントで使用できます:

  • Claude Desktop - Anthropic公式デスクトップアプリ
  • Cursor - AI統合コードエディタ
  • Manus - AIアシスタントプラットフォーム
  • Dify - ノーコードAIアプリケーションプラットフォーム
  • ⚠️ ChatGPT(開発モード) - Custom GPT Actions 経由(HTTPラッパーが必要)

インストール

npmからインストール

npm install -g @keitaro_aigc/strava-mcp-server

またはプロジェクトローカルに:

npm install @keitaro_aigc/strava-mcp-server

ソースからビルド

git clone https://github.com/yourusername/strava-mcp-server.git
cd strava-mcp-server
npm install
npm run build

主な機能

このMCPサーバーは以下のツールを提供します:

1. get_activities - アクティビティ一覧の取得

最近のランニング、サイクリング、水泳などのアクティビティ一覧を取得します。

  • パラメータ:
    • page (オプション): ページ番号(デフォルト: 1)
    • per_page (オプション): 1ページあたりの件数(デフォルト: 30、最大: 200)
  • 取得できる情報: アクティビティ名、距離、時間、平均速度、獲得標高など

2. get_activity - 特定アクティビティの詳細取得

指定したアクティビティIDの詳細情報を取得します。

  • パラメータ:
    • activity_id (必須): アクティビティのID
  • 取得できる情報: 詳細な統計、ラップタイム、心拍数、パワーデータなど

3. get_athlete - アスリートプロフィールの取得

認証されたアスリート(自分自身)のプロフィール情報を取得します。

  • 取得できる情報: 名前、体重、所在地、性別など

4. get_athlete_stats - 統計情報の取得

アスリートの累計統計や最近の統計を取得します。

  • パラメータ:
    • athlete_id (必須): アスリートのID
  • 取得できる情報: 累計距離、累計時間、最近4週間の統計、今年の統計など

セットアップ

前提条件

  • Node.js 18以上がインストールされていること
  • Stravaアカウントを持っていること
  • Claude DesktopまたはMCP対応クライアントがインストールされていること

ステップ1: Strava APIの認証情報を取得

Strava APIを使用するには、アプリケーションを作成してAPI認証情報を取得する必要があります。

1.1 Stravaアプリケーションの作成
  1. Strava API設定ページにアクセス
  2. 「Create App」または「My API Application」をクリック
  3. 以下の情報を入力:
    • Application Name: 任意の名前(例:「My MCP Server」)
    • Category: 適切なカテゴリを選択
    • Club: 空欄でOK
    • Website: 任意のURL(例:http://localhost
    • Authorization Callback Domain: localhost
    • Application Description: 任意の説明
  4. 利用規約に同意して「Create」をクリック
1.2 Client IDとClient Secretの確認

アプリケーションを作成すると、以下の情報が表示されます:

  • Client ID: 数字の羅列(例:123456)
  • Client Secret: 英数字の文字列(例:abc123def456)

これらをメモしておいてください。

1.3 Refresh Tokenの取得
  1. 以下のURLをブラウザで開いてください(YOUR_CLIENT_IDを実際のClient IDに置き換える):
https://www.strava.com/oauth/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=http://localhost&approval_prompt=force&scope=activity:read_all
  1. Stravaにログインして「Authorize」をクリック

  2. リダイレクト後のURL(http://localhost/?...)のアドレスバーからcodeパラメータの値をコピー

    • 例:http://localhost/?code=abc123xyz789の場合、abc123xyz789をコピー
  3. ターミナルで以下のコマンドを実行(各値を実際の値に置き換える):

curl -X POST https://www.strava.com/oauth/token \
  -d client_id=YOUR_CLIENT_ID \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d code=YOUR_CODE \
  -d grant_type=authorization_code
  1. レスポンスに含まれるrefresh_tokenの値をメモ:
{
  "access_token": "...",
  "refresh_token": "abc123...",  ← この値をメモ
  "expires_at": 1234567890
}

ステップ2: Claude Desktopでの設定

Claude Desktopの設定ファイル(claude_desktop_config.json)に以下を追加:

macOS
  1. Claude Desktopの設定ファイルを開く:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. 以下の内容を追加(既存の設定がある場合はmcpServersセクションに追加):
{
  "mcpServers": {
    "strava": {
      "command": "npx",
      "args": ["-y", "@keitaro_aigc/strava-mcp-server"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}
  1. Claude Desktopを再起動

  2. Claude Desktopの右下に🔨マークが表示され、「strava」が利用可能になっていることを確認

Windows
  1. Claude Desktopの設定ファイルを開く:
notepad %APPDATA%\Claude\claude_desktop_config.json
  1. macOSと同じJSON設定を追加

  2. 各値を実際の値に置き換え

  3. Claude Desktopを再起動

  4. 🔨マークで「strava」が利用可能になっていることを確認

ステップ2-B: Cursor での設定

Cursor エディタで使用する場合:

設定ファイルの場所
  • macOS/Linux: ~/.cursor/mcp.json
  • Windows: %APPDATA%\Cursor\User\mcp.json
設定手順
  1. 設定ファイルを作成または編集:
# macOS/Linux
mkdir -p ~/.cursor
nano ~/.cursor/mcp.json

# Windows
mkdir %APPDATA%\Cursor\User
notepad %APPDATA%\Cursor\User\mcp.json
  1. 以下の内容を追加:
{
  "mcpServers": {
    "strava": {
      "command": "npx",
      "args": ["-y", "@keitaro_aigc/strava-mcp-server"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}
  1. 各値を実際の認証情報に置き換え

  2. Cursor を再起動

  3. Cursor の AI チャットで MCP ツールが利用可能になっていることを確認

ステップ2-C: Manus での設定

Manus で使用する場合:

設定手順
  1. Manus の設定画面を開く

  2. MCP サーバー設定セクションに移動

  3. 新しいサーバーを追加:

{
  "name": "strava",
  "command": "npx",
  "args": ["-y", "@keitaro_aigc/strava-mcp-server"],
  "env": {
    "STRAVA_CLIENT_ID": "your_client_id",
    "STRAVA_CLIENT_SECRET": "your_client_secret",
    "STRAVA_REFRESH_TOKEN": "your_refresh_token"
  }
}
  1. 設定を保存

  2. Manus を再起動してツールを有効化

ステップ2-D: Dify での設定

Dify プラットフォームで使用する場合:

セルフホスト版の場合
  1. Dify の docker-compose.yml に環境変数を追加:
services:
  api:
    environment:
      # 既存の環境変数...
      STRAVA_CLIENT_ID: "your_client_id"
      STRAVA_CLIENT_SECRET: "your_client_secret"
      STRAVA_REFRESH_TOKEN: "your_refresh_token"
  1. MCP サーバーをカスタムツールとして登録:
{
  "tool_name": "strava_mcp",
  "command": "npx -y @keitaro_aigc/strava-mcp-server",
  "type": "mcp"
}
  1. Docker コンテナを再起動:
docker-compose down
docker-compose up -d
クラウド版の場合
  1. Dify のワークスペース設定を開く

  2. 「カスタムツール」セクションに移動

  3. 新しい MCP ツールを追加し、エンドポイント情報を設定

注意: クラウド版では MCP サーバーを別途ホスティングする必要がある場合があります。

ステップ2-E: ChatGPT(開発モード)での設定

ChatGPT の開発モード(Actions/Functions)で使用する場合:

前提条件
  • ChatGPT Plus または Enterprise アカウント
  • カスタム GPT の作成権限
設定手順
  1. ChatGPT で「GPTs」→「Create a GPT」を選択

  2. 「Configure」タブで Actions を追加

  3. MCP サーバーを API エンドポイントとしてホスティング(例:Vercel、AWS Lambda など)

  4. OpenAPI スキーマを定義:

openapi: 3.0.0
info:
  title: Strava MCP Server
  version: 1.0.0
servers:
  - url: https://your-deployment-url.com
paths:
  /get_activities:
    post:
      summary: Get athlete activities
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                per_page:
                  type: integer
      responses:
        '200':
          description: Success
  /get_activity:
    post:
      summary: Get specific activity
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                activity_id:
                  type: integer
              required:
                - activity_id
      responses:
        '200':
          description: Success
  1. 環境変数を Actions の設定で追加

注意: ChatGPT での使用には MCP サーバーの HTTP ラッパーが必要です。直接的な STDIO 接続はサポートされていません。

ステップ3: 動作確認

各クライアントで以下のように質問してみてください:

Claude Desktop / Cursor / Manus
最近のアクティビティを5件教えて
Dify

ワークフロー内で Strava MCP ツールを呼び出し、パラメータを指定して実行。

ChatGPT

カスタム GPT 内でアクションが利用可能になっていることを確認。

Stravaのデータが表示されれば、セットアップ完了です!🎉

トラブルシューティング

エラー: "Failed to refresh access token"
  • Client ID、Client Secret、Refresh Tokenが正しいか確認
  • Stravaアプリケーションのステータスが「Active」になっているか確認
ツールが表示されない
  • Claude Desktopを完全に再起動(メニューから終了して再度起動)
  • 設定ファイルのJSON形式が正しいか確認(カンマの位置、閉じ括弧など)
"command not found" エラー
  • Node.js 18以上がインストールされているか確認:node -v
  • npmが正しくインストールされているか確認:npm -v

ローカル開発・ビルドからの使用

npm経由ではなく、ソースコードからビルドして使用する場合:

1. リポジトリのクローンとビルド

git clone https://github.com/groundcobra009/strava-mcp-server.git
cd strava-mcp-server
npm install
npm run build

2. Claude Desktop設定(ローカルビルド版)

macOS
{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["/Users/keitaro/🏀|TRAE/20251028strava-mcp/dist/index.js"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}
Windows(ローカルビルド版)
{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["C:\\path\\to\\strava-mcp-server\\dist\\index.js"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

注意: C:\\path\\to\\strava-mcp-server\\の部分は実際のクローンしたディレクトリパスに置き換えてください。

3. 環境変数の設定(ローカル開発用)

ローカル開発では.envファイルを使用することもできます:

cp .env.example .env
# .envファイルを編集して認証情報を設定

npm公開手順(開発者向け)

このパッケージをnpmに公開するには以下の手順を実行します:

1. npmアカウントの作成とログイン

# npmアカウントがない場合は作成
npm adduser

# すでにアカウントがある場合はログイン
npm login

2. package.jsonの設定を確認

  • name: パッケージ名(スコープ付きの場合は @username/package-name
  • version: バージョン番号(セマンティックバージョニング)
  • repository: GitHubリポジトリURL
  • author: 作者情報

3. ビルドとテスト

# ビルド
npm run build

# パッケージ内容を確認
npm pack --dry-run

4. npm公開

# スコープ付きパッケージの場合は公開アクセスを設定
npm publish --access public

# 通常のパッケージの場合
npm publish

5. バージョン更新(次回以降)

# パッチバージョンアップ(1.0.0 -> 1.0.1)
npm version patch

# マイナーバージョンアップ(1.0.0 -> 1.1.0)
npm version minor

# メジャーバージョンアップ(1.0.0 -> 2.0.0)
npm version major

# 再公開
npm publish --access public

注意事項

  • package.jsonnameを自分のnpmユーザー名でスコープ化してください(例:@yourusername/strava-mcp-server
  • repositoryのURLを実際のGitHubリポジトリURLに変更してください
  • 一度公開したバージョンは削除できません(24時間以内のみ可能)
  • .npmignoreでソースコードや不要なファイルを除外済みです

使用例

基本的な使い方

Claude Desktopや他のMCP対応クライアントで、以下のような自然な会話でStravaデータにアクセスできます:

例1: 最近のアクティビティを確認
あなた: 「最近のランニング記録を10件見せて」

Claude: get_activitiesツールを使用して、最近のアクティビティ10件を取得します...
        
        1. 朝ラン - 5.2km, 26分15秒, 平均ペース 5:03/km
        2. 夜ラン - 10.5km, 52分30秒, 平均ペース 5:00/km
        ...
例2: 特定のアクティビティを詳しく分析
あなた: 「昨日のランニング(ID: 12345678)の詳細を教えて」

Claude: get_activityツールで詳細を取得します...
        
        アクティビティ: モーニングラン
        距離: 10.5km
        タイム: 52分30秒
        平均ペース: 5:00/km
        獲得標高: 85m
        平均心拍数: 152bpm
        最大心拍数: 172bpm
例3: 統計情報の確認
あなた: 「今月の走行距離の合計は?」

Claude: get_athlete_statsツールで統計情報を取得します...
        
        今年の累計:
        - 総距離: 245.8km
        - 総時間: 20時間35分
        - アクティビティ数: 28回
        
        最近4週間:
        - 総距離: 82.3km
        - 総時間: 6時間52分
例4: プロフィール情報の確認
あなた: 「私のStravaプロフィールを見せて」

Claude: get_athleteツールでプロフィール情報を取得します...
        
        名前: Taro Yamada
        所在地: Tokyo, Japan
        体重: 65kg
        登録日: 2020年1月15日

応用的な使い方

データ分析
あなた: 「先月と今月のランニング距離を比較して、改善点を教えて」

Claude: 統計データを取得して分析します...
トレーニング計画
あなた: 「最近のペースの傾向から、来週のトレーニングメニューを提案して」

Claude: アクティビティデータを分析してトレーニングプランを提案します...
モチベーション管理
あなた: 「今年の目標1000kmに対して、現在の進捗率と達成見込みは?」

Claude: 累計統計から進捗を計算します...

開発者向け情報

ローカル開発

開発モード(ウォッチモード)でコードを編集する場合:

# ウォッチモードで自動ビルド
npm run dev

# 別ターミナルでテスト実行
node dist/index.js

プロジェクト構造

.
├── src/
│   └── index.ts          # メインのMCPサーバー実装
├── dist/                  # TypeScriptビルド出力(自動生成)
├── package.json          # npmパッケージ設定
├── tsconfig.json         # TypeScript設定
├── .env.example          # 環境変数テンプレート
├── .gitignore           # Git除外ファイル
├── .npmignore           # npm公開除外ファイル
├── LICENSE              # MITライセンス
└── README.md            # ドキュメント

使用技術

  • TypeScript 5.3+: 型安全なコード
  • MCP SDK 0.5+: Model Context Protocolの公式 SDK
  • Axios: HTTPリクエストライブラリ
  • dotenv: 環境変数管理
  • Node.js 18+: 実行環境

貪献

プルリクエストやイシューの報告を歓迎します!

  1. このリポジトリをFork
  2. 新しいブランチを作成 (git checkout -b feature/amazing-feature)
  3. 変更をコミット (git commit -m 'Add amazing feature')
  4. ブランチをPush (git push origin feature/amazing-feature)
  5. Pull Requestを作成

リンク

ライセンス

MIT