Skip to main content
Glama
mcp-server-strava

mcp-server-strava

by rbctmz

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

CICódecsPitónLicencia: MITFallar

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

Related MCP server: Strava MCP Server

📋 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

Tipo

Nombre

Descripción

Recurso

strava://activities

Lista de actividades

Recurso

strava://activities/{id}

Detalles de la actividad

Recurso

strava://athlete/zones

Zonas de entrenamiento

Recurso

strava://athlete/clubs

Clubes de atletas

Recurso

strava://gear/{gear_id}

Información del equipo

Herramienta

analyze_activity(activity_id)

Análisis de entrenamiento

Herramienta

analyze_training_load(activities)

Análisis de carga

Herramienta

get_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

  • Cobertura

  • Pruebas

  • Fallar

Comprobaciones en acciones de GitHub

Tipo

Herramienta

Descripción

Pelusa

fallar

Formato y análisis de código

Pruebas

prueba de python

Pruebas unitarias y de integración

Revestimiento

pytest-cov

Informe 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)

Available Tools

4 tools
analyze_activityC

Анализ активности из Strava

Args:
    activity_id: ID активности (строка или число)
Returns:
    dict: Результаты анализа активности

Inputs: activity_id (required).

analyze_training_loadD

Анализ тренировочной нагрузки

Inputs: activities (required).

get_activity_by_idC

Get activity details from Strava

Args:
    activity_id (Union[str, int]): Activity ID to fetch
    
Returns:
    Dict: Activity details including type, distance, time and other metrics

Inputs: activity_id (required).

get_activity_recommendationsB

Получить рекомендации по тренировкам на основе анализа последних активностей

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.2/5.0

    Scored across 4 tools

    Disambiguation2/5

    There is significant overlap between analyze_activity and get_activity_by_id, as both appear to retrieve and process activity data based on activity_id, making them easily confused. analyze_training_load and get_activity_recommendations are more distinct but still related to activity analysis, creating some ambiguity in the set.

    Naming Consistency3/5

    The naming is mixed with both English and Russian terms (e.g., analyze_activity vs. analyze_training_load in English, but get_activity_recommendations in Russian description), and the verb patterns vary (analyze_ vs. get_). While readable, this inconsistency reduces predictability and coherence.

    Tool Count3/5

    With 4 tools, the count is borderline thin for a Strava server, as it might lack broader functionality like user management, activity creation, or social features. However, it covers core analysis aspects, so it's not severely mismatched but feels slightly under-scoped.

    Completeness2/5

    The tool set is focused on activity analysis and recommendations, but there are significant gaps: no CRUD operations for activities (e.g., create, update, delete), no user profile or authentication tools, and no social or leaderboard features typical of Strava's domain. This will likely cause agent failures for common workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers