AI Endurance

Entrenador de IA para running, ciclismo, triatlón

Documentación

Servidor MCP de AI Endurance

Conecta tu plataforma de entrenamiento AI Endurance a ChatGPT, Claude y otros asistentes de IA para acceder conversacionalmente a tus datos de entrenamiento, entrenamientos y análisis de rendimiento, y para gestionar tu plan de entrenamiento.

Descripción general

El servidor MCP de AI Endurance permite a los asistentes de IA acceder a tu plan de entrenamiento, historial de actividades, predicciones de rendimiento, métricas de recuperación y zonas de entrenamiento mediante conversación natural. Puedes ver, modificar y crear entrenamientos estructurados para ciclismo, carrera y natación, analizar datos detallados de actividad incluyendo curvas de potencia y tendencias de ritmo, realizar un seguimiento de tu recuperación mediante VFC y frecuencia cardíaca en reposo, y obtener predicciones de tiempo en carrera basadas en aprendizaje automático.

Características

  • Gestión del plan de entrenamiento - Ver, modificar y crear entrenamientos con intervalos estructurados
  • Análisis de actividad - Accede a métricas detalladas de actividades de ciclismo, carrera y natación
  • Predicciones de rendimiento - Predicciones de tiempo en carrera basadas en ML y pronóstico de condición física
  • Seguimiento de recuperación - Monitorea VFC, frecuencia cardíaca en reposo y disposición para entrenar
  • Gestión de zonas - Actualiza y visualiza zonas de entrenamiento (ritmo, potencia)
  • Programación de entrenamientos - Mueve entrenamientos, ajusta disponibilidad, sigue el progreso del plan
  • Objetivos de carrera - Gestiona objetivos de carrera primarios y secundarios
  • Marcadores de actividad - Corrige la detección de indoor/virtual/erg y excluye actividades con sensores defectuosos del análisis
  • Durabilidad - Observa cómo se mantuvo la potencia o el ritmo a medida que se acumulaba el trabajo dentro de una sesión, y cómo se compara con tu propia tendencia
  • Analítica de actividad calculada - Potencia normalizada, factor de intensidad, tiempo en zona, tablas de ritmo/decaimiento y división calculadas en el servidor para cualquier actividad, sin leer flujos de datos crudos
  • Otros deportes - Lista actividades de fuerza, esquí, yoga, senderismo y otras que no sean correr/montar/nadar

Plataformas compatibles

ChatGPT

AI Endurance está disponible en el directorio de plugins de ChatGPT: https://chatgpt.com/plugins/plugin_asdk_app_69456fbb59d081918bcb148a12380f92

Configuración:

  1. Abre el directorio de plugins en ChatGPT y busca "AI Endurance" (o usa el enlace anterior)
  2. Selecciona "Conectar"
  3. Autoriza con tu cuenta de AI Endurance
  4. Comienza a hacer preguntas sobre tu entrenamiento

ChatGPT además renderiza widgets interactivos para la mayoría de las herramientas, por lo que los entrenamientos, actividades, recuperación y predicciones se muestran como tarjetas enriquecidas en lugar de texto plano.

Ejemplo:

You: "Show me my workouts for this week"
ChatGPT: [Lists your upcoming workouts with interactive widgets]

Claude.ai

Configuración:

  1. Navega a la configuración de Claude.ai
  2. Ve a "Conectores"
  3. Selecciona "Añadir conector personalizado"
  4. Usa la siguiente configuración:
Name: AI Endurance
Remote MCP Server URL: https://aiendurance.com/mcp
  1. Haz clic en "Añadir"
  2. Autoriza con tu cuenta de AI Endurance
  3. Comienza a hacer preguntas sobre tu entrenamiento

Ejemplo:

You: "How was my ride yesterday?"
Claude: [Displays power distribution, External Stress Score, duration, and zone breakdown]

Otros clientes compatibles con MCP

Cualquier cliente compatible con MCP 2025-06-18 puede conectarse usando:

Configuración HTTP Streamable (Recomendada):

{
  "url": "https://aiendurance.com/mcp",
  "transport": {
    "type": "http"
  },
  "auth": {
    "type": "oauth",
    "authorizationUrl": "https://aiendurance.com/authorize/",
    "tokenUrl": "https://aiendurance.com/api/o/token/",
    "scopes": ["read", "write"]
  }
}

Configuración de transporte SSE (Legado):

{
  "url": "https://aiendurance.com/mcp",
  "transport": {
    "type": "sse"
  },
  "auth": {
    "type": "oauth",
    "authorizationUrl": "https://aiendurance.com/authorize/",
    "tokenUrl": "https://aiendurance.com/api/o/token/",
    "scopes": ["read", "write"]
  }
}

Clientes compatibles:

  • Claude Desktop (macOS, Windows)
  • Cursor (editor de código con IA)
  • Continue (extensión de VS Code)
  • Cline
  • Cualquier implementación personalizada de cliente MCP

Requisitos previos

  • Cuenta de AI Endurance (regístrate en https://aiendurance.com)
  • Suscripción activa de AI Endurance o prueba gratuita
  • ChatGPT, Claude o cualquier otro cliente compatible con MCP

Ejemplos de conversación

Análisis del plan de entrenamiento

You: "Show me my workouts for this week"
AI: [Lists 6 workouts with dates, types, durations, and training zones]

You: "What's my long run this weekend?"
AI: [Shows Saturday's 90-minute endurance run with pace zones]

You: "Move tomorrow's threshold workout to Friday"
AI: [Reschedules workout and confirms sync to Garmin/TrainingPeaks]

You: "Am I training enough at threshold?"
AI: [Analyzes plan progress showing actual vs prescribed threshold time]

Análisis detallado de actividades

You: "How was my ride yesterday?"
AI: [Displays power distribution, normalized power, stress scores, duration, and zone breakdown]

You: "What was my average pace on runs this month?"
AI: [Analyzes all January runs and calculates average pace, weekly volume]

You: "Show me the power curve from my last cycling activity"
AI: [Provides detailed time-series power data with peak power efforts]

You: "Compare my last 3 long runs"
AI: [Pulls detailed metrics and compares pace, heart rate, duration trends]

You: "Yesterday's ride was on Zwift, not outdoors"
AI: [Marks the activity indoor and virtual, and updates the stored weather]

You: "My HR strap was dead on this run - don't use its heart rate"
AI: [Flags the heart rate data as unreliable and rebuilds the HRV aggregates]

Recuperación y condición física

You: "Am I recovered enough for today's hard workout?"
AI: [Shows recovery score, HRV trend, resting HR, and training recommendation]

You: "What's my predicted half marathon time based on current fitness?"
AI: [Displays ML-based prediction with confidence intervals and improvement trajectory]

You: "How well am I following my training plan?"
AI: [Shows plan adherence by zone with actual vs prescribed training volume]

You: "What does my HRV trend say about my fitness?"
AI: [Analyzes recovery model data and provides insights on adaptation]

Creación de entrenamientos personalizados

You: "Create a threshold run for tomorrow: 15min warmup, 3x8min at threshold with 2min recovery, 10min cooldown"
AI: [Creates structured workout with proper zones, syncs to Garmin/TrainingPeaks/Zwift]

You: "Build me a 60min tempo ride at 85% FTP for Sunday"
AI: [Creates power-based cycling workout with appropriate structure]

You: "Design a swim workout: 200m warmup, 5x100m at threshold pace with 20sec rest, 200m cooldown"
AI: [Creates detailed swim workout with sets, strokes, and pace zones]

Planificación de carreras

You: "What are my upcoming race goals?"
AI: [Lists primary and secondary races with dates and target times]

You: "Based on my training, how realistic is my marathon goal?"
AI: [Analyzes predictions, current training load, and provides assessment]

You: "Show me my fitness trend over the last 8 weeks"
AI: [Displays prediction model history showing fitness progression]

Herramientas disponibles (27)

Perfil y configuración

getUser Visualiza tu perfil incluyendo zonas de entrenamiento, tipo de usuario (Corredor/Ciclista/Triatleta), unidades (Métrico/Imperial) y preferencias.

Devuelve:

  • Zonas de entrenamiento (potencia en ciclismo, ritmo/potencia en carrera)
  • Umbrales de frecuencia cardíaca
  • Métricas físicas (peso, altura, año de nacimiento)
  • Preferencias del usuario

setZones Actualiza las zonas de entrenamiento para ciclismo (potencia) o carrera (ritmo/potencia). Gestiona automáticamente tanto las zonas de ritmo como las de potencia para corredores que usan medidores de potencia.

Parámetros:

  • actType: "Run" o "Ride"
  • zones: Objeto con límites superiores de zona
    • Endurance: Límite superior (p. ej., "5:31 /km" o "200 W")
    • Tempo: Límite superior
    • Threshold: Límite superior
    • VO2Max: Límite superior

Nota: Debe incluir la unidad en cada valor. Para carrera, usa formato de ritmo "mm:ss /km" o "mm:ss /mi", o formato de potencia "XXX W". Para ciclismo, usa formato de potencia "XXX W".

getAvailability Visualiza las horas de entrenamiento semanales y el horario de disponibilidad diario para cada tipo de actividad.

Devuelve:

  • Desglose de horas semanales (total y por deporte para triatletas)
  • Horario diario con tiempos de entrenamiento disponibles

Gestión de entrenamientos

getPlannedWorkouts Recupera los entrenamientos planificados para un rango de fechas (predeterminado: próximos 14 días).

Parámetros:

  • startDate (opcional): Fecha de inicio en formato YYYY-MM-DD (predeterminado: hoy)
  • endDate (opcional): Fecha de fin en formato YYYY-MM-DD (predeterminado: hoy + 14 días)
  • summaryMode (opcional): Booleano - si es verdadero, devuelve una vista general ligera con campos mínimos, sin límite de 35 días
  • fullDetails (opcional): Booleano - si es verdadero, incluye la estructura de pasos legible por máquina (steps_general, swim_sections, distribución de zonas, datos de cumplimiento) e intervalos de natación sin truncar

Devuelve:

  • Matriz de entrenamientos con fecha, título, tipo, duración y descripciones legibles de calentamiento/intervalos/enfriamiento
  • has_steps_general por entrenamiento, que indica si existe una estructura legible por máquina (recupérala con fullDetails)
  • Métricas de densidad de entrenamiento (entrenamientos por semana)
  • Rango de fechas aplicado

changeWorkoutDate Mueve un entrenamiento a una fecha diferente. Actualiza el programa de entrenamiento y sincroniza con todas las plataformas conectadas (Garmin, TrainingPeaks, Zwift, etc.).

Parámetros:

  • workoutId: ID de base de datos del entrenamiento
  • newDate: Nueva fecha en formato YYYY-MM-DD
  • title (opcional): Título del entrenamiento para fines de visualización

Devuelve:

  • Confirmación de éxito
  • Fechas anterior y nueva

skipWorkout Elimina un entrenamiento del plan de entrenamiento. Marca el entrenamiento como omitido y sincroniza la eliminación con las plataformas conectadas.

Parámetros:

  • workoutId: ID de base de datos del entrenamiento
  • title (opcional): Título del entrenamiento para visualización

Devuelve:

  • Confirmación de éxito
  • Detalles del entrenamiento

changeWorkoutAdvice Añade o actualiza consejos de entrenamiento para un entrenamiento específico sin modificar la estructura del entrenamiento.

Parámetros:

  • workoutId: ID de base de datos del entrenamiento
  • advice: Instrucciones o consejos adicionales
  • title (opcional): Título del entrenamiento para visualización

Devuelve:

  • Confirmación de éxito
  • Texto de consejos actualizado

changeWorkoutIntensity Cambia la intensidad (carga) de un entrenamiento planificado existente de ciclismo o carrera en su lugar. La zona de intensidad del entrenamiento se conserva: las duraciones de los pasos se recalculan con la nueva carga.

Parámetros:

  • workoutId: ID de base de datos del entrenamiento (el campo workout_id de un resultado de getPlannedWorkouts)
  • ess: Nueva puntuación de estrés de entrenamiento (requerido si no se proporciona intensityTime)
  • intensityTime: Nuevo tiempo en intensidad en segundos (requerido si no se proporciona ess)
  • repeats (opcional): Nuevo número de repeticiones en la intensidad
  • title (opcional): Título del entrenamiento para visualización

Devuelve:

  • Confirmación de éxito con el título, fecha y estrés de entrenamiento actualizados

Nota: solo funciona con entrenamientos que tienen una estructura de pasos escalable (los entrenamientos generados por algoritmo del plan y los entrenamientos de createRideRunWorkoutByIntensity califican ambos: has_steps_general es falso en getPlannedWorkouts). En un entrenamiento estructurado falla limpiamente con WORKOUT_HAS_NO_STEPS; omite el entrenamiento y recréalo con createRideRunWorkout o createRideRunWorkoutByIntensity en su lugar.

createRideRunWorkout Crea un entrenamiento estructurado personalizado para ciclismo o carrera con intervalos, repeticiones y zonas.

Parámetros:

  • dateStr: Fecha en formato YYYY-MM-DD
  • title: Nombre del entrenamiento
  • actType: "Ride" o "Run"
  • stepsGeneral: Matriz de objetos de pasos (objetivos basados en zonas)
  • isTaper (opcional): Booleano, marca como entrenamiento de puesta a punto (predeterminado: falso)
  • advice (opcional): Notas de entrenamiento

Devuelve:

  • Confirmación de éxito
  • ID del entrenamiento creado

createRideRunWorkoutAdvanced Crea un entrenamiento de ciclismo o carrera con objetivos numéricos precisos de potencia o ritmo: pruebas de rampa, pruebas de FTP, intervalos sobre/bajo, sesiones de vatios exactos o ritmo exacto. Para entrenamientos simples basados en zonas usa createRideRunWorkout en su lugar.

Parámetros:

  • Igual que createRideRunWorkout, excepto que cada paso de stepsGeneral admite adicionalmente targetType (POWER para vatios, SPEED para ritmo en m/s, HEART_RATE para ppm, etc.), un targetValue numérico y límites explícitos de targetValueLow/targetValueHigh. Sin límites explícitos, el backend deriva un rango de +/-5% alrededor de targetValue.

Devuelve:

  • Confirmación de éxito
  • ID del entrenamiento creado

createRideRunWorkoutByIntensity Crea un entrenamiento simple de ciclismo o carrera a partir de una zona de intensidad más una carga objetivo: no se necesita estructura de pasos. Para entrenamientos estructurados con pasos personalizados de calentamiento/intervalo/enfriamiento usa createRideRunWorkout en su lugar.

Parámetros:

  • dateStr: Fecha en formato YYYY-MM-DD
  • actType: "Ride" o "Run" (debe coincidir con el deporte del usuario: los usuarios Corredores solo Run, los usuarios Ciclistas solo Ride, los usuarios Triatletas ambos)
  • intensityType: "Endurance", "Tempo", "Threshold", "VO2Max" o "Anaerobic"
  • ess: Puntuación de estrés de entrenamiento objetivo (requerido si no se proporciona intensityTime; más de aproximadamente 100 es un entrenamiento duro)
  • intensityTime: Tiempo objetivo en intensidad en segundos (requerido si no se proporciona ess)
  • repeats (opcional): Número de repeticiones en la intensidad, para Tempo y superiores
  • isTaper (opcional): Booleano, marca como entrenamiento de puesta a punto (predeterminado: falso)

Devuelve:

  • Confirmación de éxito
  • ID y título del entrenamiento creado

Nota: si ya existe un entrenamiento con la misma fecha, deporte y carga, se devuelve ese entrenamiento existente en lugar de un duplicado.

createSwimWorkout Crea un entrenamiento de natación personalizado con secciones estructuradas (calentamiento, preparación, parte principal, enfriamiento), series, intervalos, estilos y equipo.

Parámetros:

  • dateStr: Fecha en formato YYYY-MM-DD
  • title: Nombre del entrenamiento
  • swimSections: Matriz de objetos de secciones de natación
  • isTaper (opcional): Booleano, marca como entrenamiento de puesta a punto (predeterminado: falso)
  • advice (opcional): Notas de entrenamiento

Devuelve:

  • Confirmación de éxito
  • ID del entrenamiento creado

createStrengthOtherWorkout Crea un entrenamiento personalizado de fuerza u otro que no sea natación/bicicleta/carrera, p. ej., esquí de fondo, yoga, senderismo.

Parámetros:

  • dateStr: Fecha en formato YYYY-MM-DD
  • title: Nombre del entrenamiento
  • strengthOtherText: La descripción/instrucciones del entrenamiento en texto libre
  • isTaper (opcional): Booleano, marca como entrenamiento de puesta a punto (predeterminado: falso)

Devuelve:

  • Confirmación de éxito
  • ID del entrenamiento creado

Historial de actividades

getCyclingActivity Lista las actividades recientes de ciclismo. Devuelve las 20 salidas más recientes si no se especifica un rango de fechas, hasta 40 con un rango de fechas.

Parámetros:

  • startDate (opcional): Formato YYYY-MM-DD
  • endDate (opcional): Formato YYYY-MM-DD
  • with_dfa_alpha1 (opcional): Booleano - si es verdadero, incluye los campos de alfa 1 de DFA y umbral aeróbico/anaeróbico por actividad

Devuelve:

  • Matriz de actividades de ciclismo con métricas resumidas
  • id: el id de la actividad: pásalo como activityId a getCyclingActivityDetail o setActivityFlags
  • Nombre de la actividad, fecha, duración, distancia, potencia, frecuencia cardíaca, puntuación de estrés externo (ESS), clima

getRunningActivity Lista las actividades recientes de carrera. Devuelve las 20 carreras más recientes si no se especifica un rango de fechas, hasta 40 con un rango de fechas.

Parámetros:

  • startDate (opcional): Formato YYYY-MM-DD
  • endDate (opcional): Formato YYYY-MM-DD
  • with_dfa_alpha1 (opcional): Booleano - si es verdadero, incluye los campos de alfa 1 de DFA y umbral aeróbico/anaeróbico por actividad Devuelve:
  • Matriz de actividades en curso con métricas resumidas
  • id: el id de la actividad: pásalo como activityId a getRunningActivityDetail o setActivityFlags
  • Nombre de la actividad, fecha, duración, gradient_adjusted_pace (GAP: el único ritmo informado para carreras), frecuencia cardíaca, potencia de carrera, clima

getSwimmingActivity Lista las actividades de natación recientes. Devuelve hasta 40 nataciones más recientes si no se especifica un rango de fechas.

Parámetros:

  • startDate (opcional): formato AAAA-MM-DD
  • endDate (opcional): formato AAAA-MM-DD

Devuelve:

  • Matriz de actividades de natación con métricas resumidas
  • id: el id de la actividad: pásalo como activityId a getSwimmingActivityDetail
  • Nombre de la actividad, fecha, duración, distancia, ritmo, frecuencia de brazada

getCyclingActivityDetail Datos detallados de una actividad de ciclismo. La respuesta predeterminada es deliberadamente ligera; los datos de durabilidad, curva de potencia y muestras sin procesar son opcionales.

Parámetros:

  • activityId: el id de la actividad (el campo id de un resultado de getCyclingActivity)
  • with_dfa_alpha1 (opcional): booleano: agrega los valores umbral de DFA alpha 1 y durability_drift
  • with_power_curve (opcional): booleano: agrega la curva de potencia máxima, % del mejor reciente, estructura de esfuerzo y within_session_durability
  • with_time_series_metrics (opcional): booleano: agrega las matrices sin procesar por muestra. Valor predeterminado: falso
  • resolution (opcional): muestreo para las matrices sin procesar, por lo que no tiene efecto a menos que with_time_series_metrics sea verdadero
    • "low": ~200 puntos, ~5 KB, ~1250 tokens (predeterminado)
    • "medium": ~500 puntos, ~12 KB, ~3000 tokens
    • "high": ~1000 puntos, ~25 KB, ~6250 tokens
    • "full": todos los puntos de datos (18k-125k tokens: ¡úsalo con moderación!)

Devuelve por defecto:

  • id y los metadatos completos de la actividad (fecha, duración, distancia, potencia/FC promedio, puntuaciones de estrés, clima, indicadores de la actividad)
  • laps: los lapsos de dispositivo que registró la unidad de cabecera, con potencia, FC, cadencia y respiración por lapso

Con with_dfa_alpha1:

  • Los valores umbral aeróbico/anaeróbico, los escalares a1 y el promedio de a1 de cada lapso
  • durability_drift: cómo la deriva interna de esta salida (frecuencia cardíaca, DFA a1, frecuencia respiratoria) se situó frente a tu propia tendencia ajustada de ~6 semanas en trabajo equivalente: residuo medio, posición frente a la banda de confianza, % de pérdida de la tendencia en los anclajes y número de salidas detrás de la tendencia. Cada métrica también lleva un verdict simple (more_durable, less_durable, typical o mixed; nulo cuando esa métrica tiene muy pocos esfuerzos en la salida para respaldar una afirmación), y el objeto lleva un veredicto overall en las métricas que lo tienen. Requiere R-R limpio, por lo que está ausente en salidas sin él

Con with_power_curve:

  • power_curve y pct_of_recent_best (porcentaje de tu mejor reciente en cada duración)
  • effort_structure: tiempo invertido por banda de intensidad y duración del intervalo
  • within_session_durability: cuánto cayó la potencia sostenida a medida que se acumulaba el trabajo dentro de la salida, a lo largo del eje de kJ de la propia salida. No requiere HRV, por lo que está disponible en prácticamente cualquier salida con potencia

Con with_time_series_metrics:

  • Las matrices sin procesar por muestra: potencia, frecuencia cardíaca, cadencia, altitud, frecuencia respiratoria (más los canales a1 cuando with_dfa_alpha1 también está configurado), muestreadas a resolution

getRunningActivityDetail Datos detallados de una actividad de carrera. Misma estructura opcional que la herramienta de detalle de ciclismo.

Parámetros:

  • activityId: el id de la actividad (el campo id de un resultado de getRunningActivity)
  • with_dfa_alpha1 (opcional): booleano: agrega los valores umbral de DFA alpha 1 y durability_drift
  • with_power_curve (opcional): booleano: agrega las curvas de ritmo GAP máximo y potencia de carrera, % del mejor reciente, estructura de esfuerzo y within_session_durability
  • with_time_series_metrics (opcional): booleano: agrega las matrices sin procesar por muestra. Valor predeterminado: falso
  • resolution (opcional): muestreo para las matrices sin procesar (igual que ciclismo), por lo que no tiene efecto a menos que with_time_series_metrics sea verdadero

Devuelve por defecto:

  • id y los metadatos completos de la actividad (fecha, duración, distancia, ritmo/potencia/FC promedio, puntuaciones de estrés, clima, indicadores de la actividad)
  • laps: los lapsos de dispositivo que registró el reloj, con avg_pace_device por lapso (el ritmo sin procesar del reloj, no GAP), potencia, FC, cadencia y respiración

Con with_dfa_alpha1:

  • Los valores umbral aeróbico/anaeróbico, los escalares a1 y el promedio de a1 de cada lapso
  • durability_drift: la deriva interna de esta carrera (frecuencia cardíaca, DFA a1, frecuencia respiratoria) frente a tu propia tendencia ajustada de ~6 semanas en trabajo equivalente, con el mismo verdict por métrica y veredicto overall que la herramienta de ciclismo. Requiere R-R limpio, por lo que está ausente en carreras sin él

Con with_power_curve:

  • pace_curve, running_power_curve y pct_of_recent_best
  • effort_structure: tiempo invertido por banda de intensidad y duración del intervalo
  • within_session_durability, dividido por canal (gap para ritmo GAP, power para potencia de carrera): cuánto cayó el ritmo o la potencia sostenidos a medida que se acumulaba la distancia dentro de la carrera, a lo largo de su propio eje de GAP-km. No requiere HRV, por lo que está disponible en prácticamente cualquier carrera

Con with_time_series_metrics:

  • Las matrices sin procesar por muestra: gap (el flujo GAP, con su unidad en gap_unit), frecuencia cardíaca, potencia de carrera, altitud, cadencia, frecuencia respiratoria (más los canales a1 cuando with_dfa_alpha1 también está configurado), muestreadas a resolution

getSwimmingActivityDetail Métricas detalladas para una actividad de natación específica, incluidos datos de series temporales (ritmo, frecuencia de brazada, distancia por brazada).

Parámetros:

  • activityId: el id de la actividad (el campo id de un resultado de getSwimmingActivity)
  • with_time_series_metrics (opcional): booleano: agrega las matrices sin procesar por muestra. Valor predeterminado: falso
  • resolution (opcional): muestreo para las matrices sin procesar (igual que ciclismo), por lo que no tiene efecto a menos que with_time_series_metrics sea verdadero

Devuelve:

  • Metadatos completos de la actividad
  • Métricas de series temporales: ritmo, frecuencia de brazada, distancia por brazada, longitud de piscina
  • Desglose lapso por lapso
  • Análisis de brazada

analyzeActivityStream Calcula análisis cuantitativos para una actividad en el servidor y devuelve un resumen compacto. Prefiere esto sobre las herramientas de detalle siempre que quieras números: potencia normalizada, factor de intensidad, variabilidad, tiempo en zona, ritmo/decaimiento (primera vs segunda mitad) o extremos de canal (promedio/máx/mín de potencia, frecuencia cardíaca, cadencia, ritmo). No para durabilidad, umbrales de DFA alpha 1 o la curva media-máxima: esos están detrás de los indicadores opcionales de las herramientas de detalle.

Parámetros:

  • activityId: el id de la actividad (el campo id de un resultado de lista de actividades)
  • activityType: "Ride", "Run" o "Swim"
  • segments (opcional): "auto" (predeterminado) agrega una pequeña tabla de divisiones de ventana de tiempo igual (potencia/velocidad promedio + FC por ventana); "none" lo omite. Estas son ventanas calculadas, no los lapsos del dispositivo.
  • range (opcional): {"type": "time_seconds", "from": seconds, "to": seconds} restringe todo el análisis a una ventana de tiempo, por ejemplo, los primeros 30 minutos o un lapso de dispositivo mediante los start_s/end_s de las herramientas de detalle

Devuelve (bloques omitidos cuando la actividad carece de los datos):

  • Resumen: tiempo en movimiento/transcurrido, distancia, ganancia de elevación
  • power: promedio/máx/mín, potencia normalizada, índice de variabilidad, factor de intensidad
  • heart_rate, cadence y el canal de ritmo: gap_m_per_s para carreras (GAP), pace_m_per_s para nataciones
  • pacing: promedios de primera vs segunda mitad y fade_pct (positivo = menor potencia/ritmo más lento en la segunda mitad; ingenuo al terreno, así que verifica el ascenso/descenso por mitad antes de llamar fisiológico al decaimiento)
  • time_in_zone y segments

getOtherActivity Lista actividades de cualquier deporte fuera de correr, ciclismo y natación: entrenamiento de fuerza, esquí de fondo, yoga, senderismo, caminata. Devuelve las 20 más recientes si no se especifica un rango de fechas, hasta 40 con un rango de fechas.

Parámetros:

  • startDate (opcional): formato AAAA-MM-DD
  • endDate (opcional): formato AAAA-MM-DD

Devuelve:

  • Matriz de actividades con nombre, tipo, fecha, duración, frecuencia cardíaca promedio, puntuaciones de estrés, ganancia de elevación, distancia, calorías

Nota: las otras actividades son solo de duración. No hay datos de series temporales/flujo ni herramienta de detalle para ellas, así que no esperes potencia, ritmo, HRV o métricas por segundo.

Indicadores de actividad

setActivityFlags Establece indicadores por actividad en una actividad de ciclismo o carrera: interior, virtual, modo erg y exclusiones de análisis en tiempo de lectura. Úsalo cuando una actividad fue mal detectada (una salida en interior tratada como exterior) o cuando los datos de sensores defectuosos deben mantenerse fuera de los análisis. Solo cambian los indicadores que pases; los demás permanecen intactos.

Parámetros:

  • activityId: el id de la actividad (el campo id de un resultado de getCyclingActivity / getRunningActivity)
  • sport: "cycling" o "running"
  • isIndoor (opcional): la actividad se realizó en interiores (entrenador/cinta/virtual). También cambia el clima almacenado al marcador de interior, o vuelve a obtener el clima exterior cuando se cambia de nuevo a exterior.
  • isVirtual (opcional): salida/carrera virtual (Zwift, Rouvy, etc.). Implica interior.
  • isErgMode (opcional): registrado en modo erg (el entrenador controla la potencia)
  • excludeFromCurves (opcional): excluir de las curvas agregadas de potencia/ritmo-duración y de las comparaciones de mejor reciente (por ejemplo, mal funcionamiento del medidor de potencia)
  • excludeFromModel (opcional): excluir de los datos de entrenamiento del modelo de gemelo digital (GRU)
  • excludeFromDurability (opcional): excluir de la agregación de la curva de durabilidad
  • excludeHrData (opcional): los datos de frecuencia cardíaca no son confiables (por ejemplo, falla de la correa): excluye la actividad de la agregación de HRV/alpha 1 y del entrenamiento del modelo, manteniendo los análisis de potencia/ritmo

Devuelve:

  • Confirmación de éxito y un resumen legible de lo que cambió
  • flags: valores actuales de los siete indicadores después de la actualización
  • retrain_queued: si el cambio puso en cola un reentrenamiento del gemelo digital (excludeFromModel y excludeHrData lo hacen; excludeHrData además reconstruye los agregados de HRV almacenados)

Notas: los indicadores que estableces manualmente están fijados, por lo que la detección automática posterior no los sobrescribirá. Los valores de los indicadores también se devuelven en cada actividad en los resultados de lista y detalle de getCyclingActivity / getRunningActivity.

Análisis e información

getRaceGoalEvent Ver eventos de objetivo de carrera primarios y secundarios con predicciones de rendimiento y prioridades.

Devuelve:

  • Objetivo de carrera primario (nombre, fecha, distancia, prioridad, tiempo predicho)
  • Objetivos de carrera secundarios (si están configurados)
  • Días hasta cada carrera
  • Tiempos de finalización objetivo

getPrediction Predicciones de rendimiento basadas en ML, incluidos pronósticos futuros, datos históricos y métricas de validación del modelo.

Devuelve:

  • Predicciones futuras (próximas 12 semanas de trayectoria de condición física)
  • Predicciones históricas (comparación real vs predicho)
  • Puntuaciones de validación del modelo
  • Intervalos de confianza
  • Impacto del entrenamiento en las predicciones

getRecoveryModel Datos del modelo de recuperación, incluidos:

  • Puntuación de recuperación cardiovascular
  • DFA alpha 1 (métrica autonómica cardíaca del análisis de HRV)
  • rMSSD (variabilidad de la frecuencia cardíaca: actividad parasimpática)
  • Tendencias de frecuencia cardíaca en reposo
  • Puntuación de estrés externo
  • Recuperación ortopédica (recuperación articular/muscular para ciclismo, carrera, natación)

Parámetros:

  • days_back (opcional): cuántos días de datos de recuperación diaria devolver, 1-90 (predeterminado: 14)

Devuelve:

  • Datos de series temporales que muestran tendencias de recuperación (últimos 14 días por defecto)
  • Estado de recuperación actual
  • Factores de recuperación (qué está limitando la recuperación hoy)
  • Recuperación ortopédica específica de la actividad

getPlanProgress Progreso del plan de entrenamiento que muestra la adherencia a las zonas de entrenamiento prescritas.

Devuelve:

  • Porcentaje de coincidencia (adherencia general al plan)
  • Desglose zona por zona:
    • Resistencia: horas reales vs horas prescritas
    • Tempo: real vs prescrito
    • Umbral: real vs prescrito
    • VO2Max: real vs prescrito
    • Anaeróbico: real vs prescrito
  • Para triatletas: progreso separado para Ride, Run, Swim getNutritionModel Recupera el modelo de nutrición del usuario con los requerimientos diarios de calorías y macronutrientes (proteínas, grasas, carbohidratos), incluyendo límites inferiores y superiores.

Devuelve:

  • Requerimientos diarios de calorías y macronutrientes para 6 días (1 día pasado + hoy + 5 días futuros)
  • Requerimientos de proteínas (límites inferiores y superiores en gramos)
  • Requerimientos de grasas (límites inferiores y superiores en gramos)
  • Requerimientos de carbohidratos (límites inferiores y superiores en gramos)
  • Basado en entrenamientos planificados y la fisiología del usuario

Autenticación y Seguridad

Flujo OAuth 2.0

  1. El asistente de IA inicia el flujo OAuth
  2. El usuario es redirigido a la página de autorización de AI Endurance
  3. El usuario inicia sesión con sus credenciales de AI Endurance
  4. El usuario otorga acceso al alcance "read"
  5. AI Endurance devuelve un código de autorización
  6. El asistente de IA intercambia el código por un token de acceso
  7. Todas las solicitudes a la API se autentican mediante token Bearer

Alcances

  • read: Ver datos de entrenamiento, entrenamientos, actividades, zonas, predicciones y métricas de recuperación
  • write: Crear, modificar y eliminar entrenamientos; actualizar zonas de entrenamiento; gestionar el calendario de entrenamientos

Acceso a Datos

El servidor MCP tiene acceso a:

  • Perfil y preferencias del usuario
  • Zonas de entrenamiento (ver y modificar)
  • Entrenamientos planificados (ver, modificar calendario, crear nuevos)
  • Historial de actividades (ciclismo, carrera, natación)
  • Predicciones de rendimiento
  • Métricas de recuperación
  • Objetivos de carrera

El servidor MCP no puede:

  • Iniciar la generación de planes de entrenamiento
  • Crear o modificar exclusiones de datos por rango de fechas (las banderas por actividad se pueden establecer con setActivityFlags)
  • Alterar tus conexiones con plataformas de terceros (Garmin, Strava, etc.)
  • Eliminar tu cuenta
  • Modificar la configuración de facturación de la cuenta
  • Acceder a información de pago
  • Eliminar actividades históricas (solo puede omitir entrenamientos futuros)

Revocación

Desconecta el acceso en cualquier momento desde tu cliente MCP.

Especificaciones Técnicas

  • Versión del Protocolo: MCP 2025-06-18
  • Transporte: HTTP Streamable (preferido) o SSE (heredado)
  • Autenticación: OAuth 2.0
  • Formato de Mensaje: JSON-RPC 2.0
  • Resultados de Herramientas: cada herramienta declara un outputSchema. Un resultado exitoso de tools/call devuelve el JSON en un bloque de texto content y, de forma idéntica, en structuredContent, que se ajusta a ese esquema. Los resultados con isError: true llevan el mensaje solo en content.
  • URL Base: https://aiendurance.com/mcp
  • Endpoint de Mensajes: https://aiendurance.com/mcp/messages
  • Manifiesto: https://aiendurance.com/.well-known/ai-plugin.json

Límites de Tasa

Actualmente no se aplican límites de tasa explícitos. Se aplican las pautas estándar de uso de la API: evita solicitudes excesivas en períodos cortos de tiempo.

Manejo de Errores

Los errores se devuelven en formato compatible con MCP:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [{
      "type": "text",
      "text": "Error message here"
    }],
    "isError": true
  }
}

Códigos de error comunes:

  • 401: Autenticación requerida o token expirado
  • 403: Permisos insuficientes
  • 404: Entrenamiento/actividad no encontrado
  • 422: Error de validación (parámetros inválidos)
  • 500: Error interno del servidor

Soporte y Recursos

Compatibilidad de Plataformas

Probado y Funcionando

  • ChatGPT (web, iOS, Android - desde el directorio de plugins, con widgets interactivos)
  • Claude.ai (interfaz web)
  • Claude Desktop (macOS)

Compatible (no probado oficialmente)

  • Cualquier cliente compatible con MCP 2025-06-18 que use transporte HTTP Streamable o SSE
  • Cursor, Continue, Cline (herramientas de desarrollo)
  • Clientes que validan resultados contra outputSchema, como el proxy MCP de LiteLLM y Hermes Agent
  • Implementaciones personalizadas de clientes MCP

Registro de Cambios

Versión 1.3.1 (2026-09-04)

Corregido:

  • Cada resultado de herramienta ahora lleva structuredContent para cada cliente, no solo ChatGPT. Cada herramienta declara un outputSchema, y la especificación MCP requiere que el resultado incluya contenido estructurado que coincida. Los clientes construidos sobre los SDK oficiales de MCP, como el proxy MCP de LiteLLM y Hermes Agent, aplican esa regla y rechazaban cada llamada con "tiene un esquema de salida pero no devolvió contenido estructurado". Claude.ai y Claude Desktop no validan y no se vieron afectados. El bloque de texto content aún contiene el mismo JSON, por lo que un cliente que lee texto no ve cambios.

Versión 1.3.0 (2026-08-26)

Añadido:

  • durability_drift (la vista with_dfa_alpha1 en getCyclingActivityDetail y getRunningActivityDetail) ahora indica su propia conclusión. Cada métrica lleva un verdict - more_durable, less_durable, typical o mixed - y el objeto lleva un veredicto overall más los recuentos que lo respaldan (more_durable, less_durable, counted). Léelos en lugar de derivar una dirección de mean_residual_vs_trend: la convención de signos está invertida para DFA a1 (mayor = menos fatiga), lo cual es fácil de interpretar al revés.
  • El verdict de una métrica es null cuando esa sesión tiene muy pocos esfuerzos para respaldar una afirmación, y overall está ausente cuando ninguna métrica califica. Trata null como "sin lectura", no como "típico".

Cambiado:

  • Los campos de ritmo de carrera se renombran para indicar lo que realmente son. Cada ritmo que AI Endurance deriva para una carrera es GAP (Ritmo Ajustado por Pendiente, normalizado por gradiente), que en carreras con colinas se lee más rápido que el ritmo bruto del reloj por diseño. Bajo sus antiguos nombres neutrales se informaban como ritmo simple y se mezclaban con los valores brutos por vuelta. Renombrados, solo en carreras:
    • getRunningActivity y getRunningActivityDetail: activity_avpace -> gradient_adjusted_pace
    • Vueltas getRunningActivityDetail: avg_pace -> avg_pace_device (este es el ritmo BRUTO del reloj, directamente del dispositivo - nunca lo compares con gradient_adjusted_pace)
    • Matrices brutas getRunningActivityDetail: el flujo pace / pace_unit -> gap / gap_unit
    • analyzeActivityStream en una carrera: pace_m_per_s -> gap_m_per_s, el segmento/ventana avg_speed_m_per_s -> avg_gap_m_per_s, y pacing.basis -> gap_m_per_s
    • La natación no se modifica: su canal de ritmo realmente es ritmo bruto y conserva los nombres simples. Las salidas en bicicleta no tienen canal de ritmo.
  • El widget de detalle de actividad ya no muestra una métrica de durabilidad que tenga muy pocos esfuerzos detrás, en lugar de indicar una dirección que los datos no respaldan. Las sesiones con pocos datos muestran menos que antes.

Un cliente que analizó cualquiera de los campos de ritmo de carrera renombrados debe actualizarse: los nombres antiguos han desaparecido, no están en desuso. Nada más fue eliminado.

Versión 1.2.0 (2026-08-25)

Añadido:

  • Herramienta analyzeActivityStream: análisis computado en el servidor para una actividad: potencia normalizada, factor de intensidad, variabilidad, tiempo en zona, ritmo/desvanecimiento primera vs segunda mitad, extremos de canal y divisiones opcionales por ventanas de tiempo iguales, con un rango de tiempo opcional (por ejemplo, una vuelta del dispositivo). Esta es la ruta recomendada para preguntas cuantitativas; las matrices brutas de las herramientas de detalle permanecen desactivadas por defecto.
  • Herramienta getOtherActivity: lista actividades de cualquier deporte fuera de carrera, ciclismo y natación (fuerza, esquí, yoga, senderismo, ...). Solo duración: sin datos de flujo y sin herramienta de detalle.
  • Herramienta createRideRunWorkoutByIntensity: crea un entrenamiento simple de bicicleta o carrera desde una zona de intensidad más una carga objetivo (ess y/o intensityTime), sin redactar una lista de pasos.
  • Herramienta changeWorkoutIntensity: reescala un entrenamiento planificado existente de bicicleta o carrera en su lugar a un nuevo ess y/o intensityTime, preservando su zona de intensidad. Los entrenamientos estructurados (steps_general) fallan limpiamente con WORKOUT_HAS_NO_STEPS y deben omitirse y recrearse en su lugar.

Esto lleva la superficie de herramientas MCP a la par con las herramientas backend del chatbot de AI Endurance.

Versión 1.1.0 (2026-08-25)

Añadido:

  • Cada actividad en getCyclingActivity, getRunningActivity y getSwimmingActivity ahora lleva su id. Pásalo como activityId a la herramienta de detalle correspondiente o a setActivityFlags. Anteriormente ninguna respuesta exponía un id, por lo que las herramientas de detalle y setActivityFlags no podían llamarse desde un resultado de lista.
  • with_dfa_alpha1 en getCyclingActivityDetail y getRunningActivityDetail: los valores umbral de DFA alpha 1 más durability_drift - cómo la deriva interna de esa sesión (frecuencia cardíaca, DFA a1, frecuencia respiratoria) se situó frente a tu propia tendencia ajustada de ~6 semanas en trabajo equivalente. Necesita datos R-R limpios.
  • with_power_curve en las mismas dos herramientas: la curva de potencia/ritmo máximo, el porcentaje de tu mejor reciente, el resumen de la estructura de esfuerzo y within_session_durability - cuánto cayó la potencia o el ritmo sostenido a medida que se acumulaba el trabajo dentro de la sesión, junto con su propio eje de kJ o GAP-km. No necesita HRV, por lo que está disponible en prácticamente cada salida en bicicleta y carrera.
  • with_time_series_metrics en las tres herramientas de detalle: devuelve las matrices brutas por muestra.

Cambiado:

  • Las herramientas de detalle ya no devuelven las matrices brutas por muestra time_series_metrics por defecto: establece with_time_series_metrics para obtenerlas. Los objetos derivados anteriores responden preguntas de ritmo, desvanecimiento y durabilidad sin ellas.
  • Los valores umbral de DFA alpha 1 en las herramientas de detalle ahora requieren with_dfa_alpha1, coincidiendo con cómo las herramientas de resumen los han limitado desde 1.0.5.
  • resolution solo afecta las matrices brutas, por lo que no tiene efecto a menos que with_time_series_metrics esté establecido.

Nada fue eliminado: ambos cambios son opcionales, pero un cliente que analizó las matrices brutas o los valores a1 de una respuesta de detalle ahora debe pasar la bandera correspondiente.

Corregido:

  • Una herramienta de detalle llamada sin un activityId devolvía un error genérico "Falló la ejecución de la herramienta" en lugar de un resultado vacío.

Versión 1.0.6 (2026-08-20)

Añadido:

  • Herramienta setActivityFlags: establece las banderas por actividad en una actividad de ciclismo o carrera: interior, virtual, modo erg, y las exclusiones de análisis en tiempo de lectura (curvas de potencia/ritmo, entrenamiento del modelo gemelo digital, durabilidad, datos de frecuencia cardíaca no confiables). Las banderas establecidas manualmente se fijan contra la detección automática posterior, establecer isIndoor mantiene el clima de la actividad almacenada consistente, y las exclusiones que cambian los datos de entrenamiento ponen en cola un reentrenamiento del gemelo digital (más una reconstrucción agregada de HRV para excludeHrData).
  • Los campos de bandera ahora se devuelven en cada actividad en getCyclingActivity, getRunningActivity y los resultados de detalle correspondientes.

Versión 1.0.5 (2026-08-06)

Añadido:

  • Herramienta createRideRunWorkoutAdvanced: crea entrenamientos de bicicleta/carrera con objetivos numéricos precisos de potencia o ritmo (pruebas de rampa, pruebas FTP, sobre/bajo, sesiones de vatios exactos o ritmo exacto).
  • Parámetro fullDetails en getPlannedWorkouts: devuelve la estructura de pasos legible por máquina e intervalos de natación sin truncar.
  • Parámetro with_dfa_alpha1 en getCyclingActivity y getRunningActivity: devuelve los campos DFA alpha 1 y umbral.
  • Parámetro days_back en getRecoveryModel: amplía la ventana devuelta hasta 90 días.
  • Clima al inicio de la actividad en los resúmenes de actividades de ciclismo y carrera.

Cambiado:

  • Respuestas predeterminadas más ligeras para que los resultados de herramientas sigan siendo pequeños: getPlannedWorkouts devuelve descripciones de entrenamiento legibles por humanos más una bandera has_steps_general en lugar de la estructura completa de pasos; getCyclingActivity y getRunningActivity devuelven 20 actividades sin un rango de fechas (40 con uno) y omiten los campos DFA alpha 1; getRecoveryModel devuelve los últimos 14 días en lugar del historial completo. Cada uno se restaura con el parámetro correspondiente anterior.

Versión 1.0.4 (2026-03-23)

Eliminado:

  • Herramienta markWorkout: Esta herramienta ya no existe.

Versión 1.0.3 (2026-01-30)

Cambiado:

  • Actualizado a la versión de protocolo MCP 2025-06-18
  • Añadido soporte de transporte HTTP Streamable (preferido para nuevos clientes)
  • Transporte SSE mantenido para compatibilidad hacia atrás
  • Añadidos encabezados de respuesta MCP-Protocol-Version y MCP-Session-Id

Versión 1.0.2 (2025-01-20)

Añadido:

  • Herramienta getNutritionModel: Recupera los requerimientos diarios de calorías y macronutrientes (proteínas, grasas, carbohidratos) con límites inferiores/superiores para 6 días (1 pasado + hoy + 5 futuros) basados en entrenamientos planificados y la fisiología del usuario.
  • training_plan_generation_system_prompt añadido a la salida de la herramienta getUser para contexto LLM al generar recomendaciones de entrenamiento.

Versión 1.0.1 (2025-12-03)

  • Herramienta createStrengthOtherWorkout: nueva herramienta para crear entrenamientos de fuerza y otros tipos (p. ej., esquí de fondo, yoga, senderismo)

Versión 1.0.0 (2025-11-21)

Lanzamiento inicial

  • Protocolo MCP: Implementación de la especificación MCP 2025-03-26 con transporte SSE
  • Autenticación OAuth 2.0: Flujo OAuth completo con registro dinámico de clientes (RFC 7591)
  • 20 Herramientas: Kit completo de gestión de entrenamiento
    • Perfil y Configuración: getUser, setZones, getAvailability
    • Gestión de Entrenamientos: getPlannedWorkouts, changeWorkoutDate, skipWorkout, markWorkout, changeWorkoutAdvice, createRideRunWorkout, createSwimWorkout
    • Historial de Actividades: getCyclingActivity, getRunningActivity, getSwimmingActivity, getCyclingActivityDetail, getRunningActivityDetail, getSwimmingActivityDetail
    • Analítica e Información: getRaceGoalEvent, getPrediction, getRecoveryModel, getPlanProgress
  • 20 Recursos: Componentes de interfaz de usuario del SDK de OpenAI Apps para widgets enriquecidos de ChatGPT
  • 5 Indicaciones: Plantillas de conversación para flujos de entrenamiento comunes
    • Análisis de Plan de Entrenamiento
    • Análisis de Actividad
    • Control de Recuperación
    • Creación de Entrenamiento Personalizado
    • Planificación de Carreras
  • Soporte Multideporte: Ciclismo, carrera, natación y triatlón
  • Soporte de Plataformas: Claude.ai, Claude Desktop (macOS)
  • Documentación: Documentación completa de la API en https://github.com/ai-endurance/mcp

Creado por AI Endurance: Entrenamiento basado en datos con IA para corredores, ciclistas y triatletas.