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

Integración de la API de Strava con el SDK del Protocolo de Contexto de Modelo (MCP)

Integración para análisis de entrenamiento y recomendaciones basadas en datos de Strava utilizando el SDK Model Context Protocol.

🚀 Características

  • Análisis de entrenamientos de Strava
  • Recomendaciones de formación
  • Actualización automática de tokens
  • Limitación de velocidad para solicitudes de API

📋 Requisitos

⚙️ Instalación

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

Instalación del SDK de MCP

uv add "mcp[cli]"

🔧 Configuración

Configuración de la API de Strava

  1. Vaya a la página de configuración de la API
  2. Crear una aplicación:
    • Nombre de la aplicación: Integración de MCP Strava
    • Categoría: Análisis de entrenamiento
    • Sitio web: http://localhost
    • Dominio de devolución de llamada de autorización: localhost

Configuración del entorno

  1. Crea un archivo con variables de entorno:
    cp .env-template .env
  2. Obtener tokens de acceso:
    python scripts/auth.py
  3. Compruebe la configuración:
    mcp dev src/server.py curl -X GET "http://localhost:8000/activities"

📚 API y ejemplos

Recursos y herramientas

TipoNombreDescripción
Recursostrava://activitiesLista de actividades
Recursostrava://activities/{id}Detalles de la actividad
Recursostrava://athlete/zonesZonas de entrenamiento
Recursostrava://athlete/clubsClubes de atletas
Recursostrava://gear/{gear_id}Información del equipo
Herramientaanalyze_activity(activity_id)Análisis de entrenamiento
Herramientaanalyze_training_load(activities)Análisis de carga
Herramientaget_activity_recommendations()Recomendaciones

Ejemplos de uso

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} ] } } """

🛠 Desarrollo

CI/CD y seguridad

Comprobaciones en acciones de GitHub

TipoHerramientaDescripción
PelusafallarFormato y análisis de código
Pruebasprueba de pythonPruebas unitarias y de integración
Revestimientopytest-covInforme de cobertura de código

Seguridad y secretos

  1. Protección de token:
    • .env a .gitignore
    • Secretos de GitHub para CI/CD
    • Limitación de velocidad: 100 solicitudes/15 min
  2. Configuración de secretos:
    # В GitHub: Settings → Secrets → Actions STRAVA_CLIENT_ID=<client_id> STRAVA_CLIENT_SECRET=<client_secret> STRAVA_REFRESH_TOKEN=<refresh_token>

Contribuyendo

  1. Bifurcar el repositorio
  2. Instalar dependencias: uv pip install -e ".[dev]"
  3. Crear una rama: git checkout -b feature/name
  4. Comprueba los cambios:
    ruff format . ruff check . pytest --cov=src
  5. Crear una solicitud de extracción

📫 Soporte

📄 Licencia

Instituto Tecnológico de Massachusetts (MIT)

ID: 35t2pc2ntw