Strava API integration with Model Context Protocol SDK

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

CICodecovPythonLicense: MITRuff

Интеграция для анализа тренировок и получения рекомендаций на основе данных 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 Форматирование и анализ кода
Тесты pytest Unit и интеграционные тесты
Покрытие 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

MCP Server · Populars

MCP Server · New

    anysiteio

    AnySite MCP Server

    A Model Context Protocol (MCP) server that provides comprehensive access to LinkedIn data and functionalities using the AnySite API, enabling not only data retrieval but also robust management of user accounts.

    Community anysiteio
    kontext-dev

    browser-use-mcp-server

    Browse the web, directly from Cursor etc.

    Community kontext-dev
    WordPress

    MCP Adapter

    An MCP adapter that bridges the Abilities API to the Model Context Protocol, enabling MCP clients to discover and invoke WordPress plugin, theme, and core abilities programmatically.

    Community WordPress
    HzaCode

    OneCite

    📚 An intelligent toolkit to automatically parse, complete, and format academic references, with Model Context Protocol (MCP) support.

    Community HzaCode
    cexll

    Codex MCP Tool

    Codex Mcp Server

    Community cexll