Интеграция Strava API с Model Context Protocol (MCP) SDK について
Stravaのトレーニングデータを分析や提案の機能につなぐMCPサーバーです。MCPのリソースとツールを通じて、アクティビティやトレーニング負荷、アスリート関連データを確認したいユーザー向けです。
主な機能
- 01Stravaのアクティビティ一覧と詳細の取得
- 02アスリートのゾーンとクラブへのアクセス
- 03ギア情報の取得
- 04アクティビティとトレーニング負荷の分析
- 05トレーニングの提案生成
- 06トークンの自動更新
活用シーン
- 01Stravaのアクティビティの確認
- 02複数アクティビティのトレーニング負荷の確認
- 03トレーニングデータに基づく提案の取得
MCP 対応
StravaのデータをMCPリソースとして公開し、アクティビティ分析、トレーニング負荷分析、提案のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
インストール方法は未掲載です
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ツール一覧はまだ取得されていません
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Model Context Protocol(MCP)SDKによるStrava APIの統合
Model Context Protocol SDKを使用して、Stravaのデータに基づくトレーニング分析とアドバイスの取得を行う統合です。
🚀 機能
- Stravaのトレーニングを分析
- トレーニングに関するアドバイス
- トークンの自動更新
- APIリクエストのレート制限
📋 要件
- Python 3.10+
- Claude Desktop
- Strava アカウント
- uv(推奨)
⚙️ インストール
# Клонируем репозиторий
git clone https://github.com/rbctmz/mcp-server-strava.git
cd mcp-server-strava
# Установка через uv (рекомендуется)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv pip install .
# Установка в режиме разработки
uv pip install -e ".[dev]"
MCP SDKのインストール
uv add "mcp[cli]"
🔧 設定
Strava APIの設定
- API設定ページにアクセスします
- アプリケーションを作成します:
- Application Name: MCP Strava Integration
- Category: Training Analysis
- Website: http://localhost
- Authorization Callback Domain: localhost
環境の設定
-
環境変数を記述したファイルを作成します:
cp .env-template .env -
アクセストークンを取得します:
python scripts/auth.py -
設定を確認します:
mcp dev src/server.py curl -X GET "http://localhost:8000/activities"
📚 APIと使用例
リソースとツール
| 種類 | 名前 | 説明 |
|---|---|---|
| リソース | strava://activities | アクティビティの一覧 |
| リソース | strava://activities/{id} | アクティビティの詳細 |
| リソース | strava://athlete/zones | トレーニングゾーン |
| リソース | strava://athlete/clubs | アスリートのクラブ |
| リソース | strava://gear/{gear_id} | ギアの情報 |
| ツール | analyze_activity(activity_id) | トレーニングの分析 |
| ツール | analyze_training_load(activities) | トレーニング負荷の分析 |
| ツール | get_activity_recommendations() | アドバイス |
使用例
from mcp import ClientSession
# Получение активностей
async with ClientSession() as session:
activities = await session.read_resource("strava://activities")
activity = await session.read_resource("strava://activities/12345678")
# Анализ тренировки
result = analyze_activity(activity_id="12345678")
"""
{
"type": "Run",
"distance": 5000,
"moving_time": 1800,
"analysis": {
"pace": 5.5, # мин/км
"effort": "Средняя"
}
}
"""
# Анализ нагрузки
summary = analyze_training_load(activities)
"""
{
"activities_count": 10,
"total_distance": 50.5, # км
"total_time": 5.2, # часы
"heart_rate_zones": {
"easy": 4, # ЧСС < 120
"medium": 4, # ЧСС 120-150
"hard": 2 # ЧСС > 150
}
}
"""
# Получение тренировочных зон
async with ClientSession() as session:
zones = await session.read_resource("strava://athlete/zones")
"""
{
"heart_rate": {
"custom_zones": true,
"zones": [
{"min": 0, "max": 120, "name": "Z1 - Recovery"},
{"min": 120, "max": 150, "name": "Z2 - Endurance"},
{"min": 150, "max": 170, "name": "Z3 - Tempo"},
{"min": 170, "max": 185, "name": "Z4 - Threshold"},
{"min": 185, "max": -1, "name": "Z5 - Anaerobic"}
]
},
"power": {
"zones": [
{"min": 0, "max": 180},
{"min": 181, "max": 250},
{"min": 251, "max": 300},
{"min": 301, "max": 350},
{"min": 351, "max": -1}
]
}
}
"""
🛠 開発
CI/CDとセキュリティ
GitHub Actionsでのチェック
| 種類 | ツール | 説明 |
|---|---|---|
| リンティング | ruff | コードのフォーマットと分析 |
| テスト | pytest | 単体テストと統合テスト |
| カバレッジ | pytest-cov | コードカバレッジのレポート |
セキュリティとシークレット
-
トークンの保護:
.envを.gitignoreに追加- CI/CDにはGitHub Secretsを使用
- レート制限:100リクエスト/15分
-
シークレットの設定:
# В GitHub: Settings → Secrets → Actions STRAVA_CLIENT_ID=<client_id> STRAVA_CLIENT_SECRET=<client_secret> STRAVA_REFRESH_TOKEN=<refresh_token>
コントリビューション
-
リポジトリをフォークします
-
依存関係をインストールします:
uv pip install -e ".[dev]" -
ブランチを作成します:
git checkout -b feature/name -
変更を確認します:
ruff format . ruff check . pytest --cov=src -
Pull Requestを作成します
📫 サポート
- GitHub Issues:issueを作成
- Telegram:@greg_kisel
📄 ライセンス
コメント
Markdown 対応
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。