mcp-server-strava

by rbctmz
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Allows analysis of Strava workouts and provides training recommendations based on Strava data using the Model Context Protocol SDK

Strava API と Model Context Protocol (MCP) SDK の統合

Model Context Protocol SDK を使用して、Strava データに基づくトレーニング分析と推奨事項を統合します。

🚀 機能

  • Stravaからのワークアウトの分析
  • トレーニングの推奨事項
  • 自動トークン更新
  • APIリクエストのレート制限

📋 要件

⚙️ インストール

# Клонируем репозиторий 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の設定

  1. API設定ページへ移動
  2. アプリケーションを作成します。
    • アプリケーション名: MCP Strava 統合
    • カテゴリー: トレーニング分析
    • ウェブサイト: http://localhost
    • 承認コールバックドメイン: localhost

環境の設定

  1. 環境変数を含むファイルを作成します。
    cp .env-template .env
  2. アクセス トークンを取得します。
    python scripts/auth.py
  3. 設定を確認してください:
    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でのチェック

タイプ道具説明
リンティングラフコードのフォーマットと分析
テストpytestユニットテストと統合テスト
コーティングpytest-covコードカバレッジレポート

セキュリティと秘密

  1. トークン保護:
    • .envから.gitignore
    • CI/CD のための GitHub Secrets
    • レート制限: 100 リクエスト/15 分
  2. シークレットの設定:
    # В GitHub: Settings → Secrets → Actions STRAVA_CLIENT_ID=<client_id> STRAVA_CLIENT_SECRET=<client_secret> STRAVA_REFRESH_TOKEN=<refresh_token>

貢献

  1. リポジトリをフォークする
  2. 依存関係をインストールします: uv pip install -e ".[dev]"
  3. ブランチを作成する: git checkout -b feature/name
  4. 変更を確認します。
    ruff format . ruff check . pytest --cov=src
  5. プルリクエストを作成する

📫 サポート

📄 ライセンス

マサチューセッツ工科大学

ID: 35t2pc2ntw