Интеграция Strava API с Model Context Protocol (MCP) SDK

Интеграция Strava API с Model Context Protocol (MCP) SDK

By rbctmz GitHub

Интеграция Strava API с Model Context Protocol SDK

Overview

What is MCP Server Strava?

MCP Server Strava is an integration project that connects the Strava API with the Model Context Protocol (MCP) SDK to analyze workouts and provide training recommendations based on Strava data.

How to use MCP Server Strava?

To use MCP Server Strava, clone the repository from GitHub, install the required dependencies, and set up your Strava API credentials. You can then run the server and access the API to analyze your activities.

Key features of MCP Server Strava?

  • Analyzes workouts from Strava
  • Provides training recommendations
  • Automatically updates tokens
  • Implements rate limiting for API requests

Use cases of MCP Server Strava?

  1. Analyzing running or cycling workouts to improve performance.
  2. Generating personalized training plans based on past activities.
  3. Integrating with other applications that utilize Strava data for fitness tracking.

FAQ from MCP Server Strava?

  • What programming language is used?

The project is developed in Python 3.10 and above.

  • Is there a license for this project?

Yes, the project is licensed under the MIT License.

  • How can I contribute to the project?

You can fork the repository, make changes, and submit a pull request.

Content

Интеграция Strava API с Model Context Protocol (MCP) SDK

CI Codecov Python License: MIT Ruff

Интеграция для анализа тренировок и получения рекомендаций на основе данных Strava с использованием Model Context Protocol SDK.

🚀 Возможности

  • Анализ тренировок из Strava
  • Рекомендации по тренировкам
  • Автоматическое обновление токенов
  • Rate limiting для 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. Создайте приложение:
    • Application Name: MCP Strava Integration
    • Category: Training Analysis
    • Website: http://localhost
    • Authorization Callback Domain: 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 и безопасность

  • Coverage
  • Tests
  • Ruff

Проверки в GitHub Actions

ТипИнструментОписание
ЛинтингruffФорматирование и анализ кода
ТестыpytestUnit и интеграционные тесты
Покрытиеpytest-covОтчет о покрытии кода

Безопасность и секреты

  1. Защита токенов:

    • .env в .gitignore
    • GitHub Secrets для CI/CD
    • Rate limiting: 100 запросов/15 мин
  2. Настройка секретов:

    # В GitHub: Settings → Secrets → Actions
    STRAVA_CLIENT_ID=<client_id>
    STRAVA_CLIENT_SECRET=<client_secret>
    STRAVA_REFRESH_TOKEN=<refresh_token>
    

Contributing

  1. Форкните репозиторий

  2. Установите зависимости: uv pip install -e ".[dev]"

  3. Создайте ветку: git checkout -b feature/name

  4. Проверьте изменения:

    ruff format .
    ruff check .
    pytest --cov=src
    
  5. Создайте Pull Request

📫 Поддержка

📄 Лицензия

MIT

No tools information available.
No content found.