Strava MCP Server
README.md
# 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からインストール
```bash
npm install -g @keitaro_aigc/strava-mcp-server
```
またはプロジェクトローカルに:
```bash
npm install @keitaro_aigc/strava-mcp-server
```
### ソースからビルド
```bash
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設定ページ](https://www.strava.com/settings/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
```
2. Stravaにログインして「Authorize」をクリック
3. リダイレクト後のURL(`http://localhost/?...`)のアドレスバーから`code`パラメータの値をコピー
- 例:`http://localhost/?code=abc123xyz789`の場合、`abc123xyz789`をコピー
4. ターミナルで以下のコマンドを実行(各値を実際の値に置き換える):
```bash
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
```
5. レスポンスに含まれる`refresh_token`の値をメモ:
```json
{
"access_token": "...",
"refresh_token": "abc123...", ← この値をメモ
"expires_at": 1234567890
}
```
### ステップ2: Claude Desktopでの設定
Claude Desktopの設定ファイル(`claude_desktop_config.json`)に以下を追加:
#### macOS
1. Claude Desktopの設定ファイルを開く:
```bash
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
2. 以下の内容を追加(既存の設定がある場合は`mcpServers`セクションに追加):
```json
{
"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"
}
}
}
}
```
4. Claude Desktopを再起動
5. Claude Desktopの右下に🔨マークが表示され、「strava」が利用可能になっていることを確認
##### Windows
1. Claude Desktopの設定ファイルを開く:
```bash
notepad %APPDATA%\Claude\claude_desktop_config.json
```
2. macOSと同じJSON設定を追加
3. 各値を実際の値に置き換え
4. Claude Desktopを再起動
5. 🔨マークで「strava」が利用可能になっていることを確認
### ステップ2-B: Cursor での設定
Cursor エディタで使用する場合:
#### 設定ファイルの場所
- **macOS/Linux**: `~/.cursor/mcp.json`
- **Windows**: `%APPDATA%\Cursor\User\mcp.json`
#### 設定手順
1. 設定ファイルを作成または編集:
```bash
# macOS/Linux
mkdir -p ~/.cursor
nano ~/.cursor/mcp.json
# Windows
mkdir %APPDATA%\Cursor\User
notepad %APPDATA%\Cursor\User\mcp.json
```
2. 以下の内容を追加:
```json
{
"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"
}
}
}
}
```
3. 各値を実際の認証情報に置き換え
4. Cursor を再起動
5. Cursor の AI チャットで MCP ツールが利用可能になっていることを確認
### ステップ2-C: Manus での設定
Manus で使用する場合:
#### 設定手順
1. Manus の設定画面を開く
2. MCP サーバー設定セクションに移動
3. 新しいサーバーを追加:
```json
{
"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"
}
}
```
4. 設定を保存
5. Manus を再起動してツールを有効化
### ステップ2-D: Dify での設定
Dify プラットフォームで使用する場合:
#### セルフホスト版の場合
1. Dify の `docker-compose.yml` に環境変数を追加:
```yaml
services:
api:
environment:
# 既存の環境変数...
STRAVA_CLIENT_ID: "your_client_id"
STRAVA_CLIENT_SECRET: "your_client_secret"
STRAVA_REFRESH_TOKEN: "your_refresh_token"
```
2. MCP サーバーをカスタムツールとして登録:
```json
{
"tool_name": "strava_mcp",
"command": "npx -y @keitaro_aigc/strava-mcp-server",
"type": "mcp"
}
```
3. Docker コンテナを再起動:
```bash
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 スキーマを定義:
```yaml
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
```
5. 環境変数を 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. リポジトリのクローンとビルド
```bash
git clone https://github.com/groundcobra009/strava-mcp-server.git
cd strava-mcp-server
npm install
npm run build
```
### 2. Claude Desktop設定(ローカルビルド版)
#### macOS
```json
{
"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(ローカルビルド版)
```json
{
"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`ファイルを使用することもできます:
```bash
cp .env.example .env
# .envファイルを編集して認証情報を設定
```
---
## npm公開手順(開発者向け)
このパッケージをnpmに公開するには以下の手順を実行します:
### 1. npmアカウントの作成とログイン
```bash
# npmアカウントがない場合は作成
npm adduser
# すでにアカウントがある場合はログイン
npm login
```
### 2. package.jsonの設定を確認
- `name`: パッケージ名(スコープ付きの場合は `@username/package-name`)
- `version`: バージョン番号(セマンティックバージョニング)
- `repository`: GitHubリポジトリURL
- `author`: 作者情報
### 3. ビルドとテスト
```bash
# ビルド
npm run build
# パッケージ内容を確認
npm pack --dry-run
```
### 4. npm公開
```bash
# スコープ付きパッケージの場合は公開アクセスを設定
npm publish --access public
# 通常のパッケージの場合
npm publish
```
### 5. バージョン更新(次回以降)
```bash
# パッチバージョンアップ(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.json`の`name`を自分の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: 累計統計から進捗を計算します...
```
## 開発者向け情報
### ローカル開発
開発モード(ウォッチモード)でコードを編集する場合:
```bash
# ウォッチモードで自動ビルド
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を作成
### リンク
- **npmパッケージ**: https://www.npmjs.com/package/@keitaro_aigc/strava-mcp-server
- **GitHubリポジトリ**: https://github.com/groundcobra009/strava-mcp-server
- **Strava APIドキュメント**: https://developers.strava.com/
- **MCP公式ドキュメント**: https://modelcontextprotocol.io/
## ライセンス
MIT
TDQS
A3.7/5.0
Scored across 4 tools
Disambiguation5/5
The four tools are clearly distinct: one lists activities, one gets activity details, one gets athlete profile, and one gets athlete stats. No overlap or confusion between them.
Naming Consistency5/5
All tool names follow a consistent get_noun pattern using snake_case. The naming is predictable and uniform across the entire set.
Tool Count4/5
With 4 tools, the count is well-scoped for a read-only Strava integration. It covers the core data retrieval endpoints without unnecessary bloat.
Completeness4/5
The set covers primary needs: listing activities, retrieving activity details, and getting athlete profile and stats. However, it lacks advanced read endpoints like activity streams or club/route data, which are minor gaps for a comprehensive Strava API surface.
Maintenance
ActivityInactive
ResponsivenessNo issues