livetrack-mcp
livetrack-mcp
Servidor MCP autónomo que sondea Garmin LiveTrack, almacena series temporales en SQLite y activa el análisis de Claude cada 10 minutos a través de claude-runner.
Arquitectura
Garmin LiveTrack URL
│
│ (poll every 60 s)
▼
livetrack-mcp (port 38100)
├── poller.py — fetch trackpoints from Garmin API
├── store.py — SQLite time-series persistence (/data/livetrack.db)
├── tracker.py — asyncio scheduling + race-end detection
└── analyzer.py — build prompt, call claude-runner
│
│ POST /run (fire-and-forget)
▼
claude-runner (port 38095)
│
│ claude -p <analysis prompt>
▼
Claude (sonnet)
├── analyze timeseries
├── curl POST /control if thresholds need adjustment
└── mcp__telegram__send_message → coaching pushDiseño clave: livetrack-mcp es totalmente autónomo: no es necesario que una sesión de Claude permanezca activa durante la carrera. Claude se invoca como una función de análisis sin estado cada 10 minutos. Si claude-runner no está disponible temporalmente, el siguiente ciclo de análisis lo reintenta automáticamente.
Related MCP server: Garmin-Strava-mcp
Herramientas MCP
Herramienta | Descripción |
| Iniciar el sondeo de una URL de LiveTrack |
| Detener el sondeo (también se detiene automáticamente al finalizar la carrera) |
| Estado activo, tiempo transcurrido, tiempo de inactividad, errores de sondeo |
| Datos recientes de SQLite |
| Actualizar umbrales de FC/potencia a mitad de carrera |
| Análisis manual bajo demanda, omitiendo la programación |
Endpoints HTTP personalizados
Endpoint | Método | Descripción |
| POST | Actualizar umbrales a mitad de carrera (llamado por Claude mediante curl en la herramienta Bash) |
| GET | Comprobación de estado: estado de seguimiento + estadísticas de almacenamiento |
Uso de /control (desde el prompt de análisis de Claude)
curl -sf -X POST http://localhost:38100/control \
-H 'Content-Type: application/json' \
-d '{"power_max": 150}'Campos permitidos: hr_max, hr_min, power_max, power_min, cadence_min, run_hr_max, run_hr_min, run_cadence_min
Campos de race_config
Campo | Tipo | Predeterminado | Descripción |
| int | — | Límite superior de FC en ciclismo (ppm) |
| int | — | Límite inferior de FC en ciclismo |
| int | — | Límite superior de potencia ERG (vatios) |
| int | — | Límite inferior de potencia ERG |
| int | — | Cadencia mínima de ciclismo (rpm) |
| int | — | Límite superior de FC en carrera |
| int | — | Límite inferior de FC en carrera |
| int | — | Cadencia mínima de carrera (ppm) |
| int | 60 | Frecuencia de sondeo de LiveTrack |
| int | 600 | Frecuencia de activación del análisis de Claude |
| int | 10 | Ventana de datos enviada a Claude (minutos) |
Ejemplo de race_config para un triatlón completo
{
"race_name": "CT2026",
"race_type": "triathlon",
"hr_max": 144,
"hr_min": 115,
"power_max": 165,
"cadence_min": 82,
"run_hr_max": 152,
"run_hr_min": 125,
"run_cadence_min": 165,
"poll_interval_secs": 60,
"analyze_interval_secs": 600,
"analyze_window_min": 10
}Detección de fin de carrera
El servidor se detiene automáticamente cuando:
No hay nuevos puntos de seguimiento durante ≥ 15 minutos (
STALE_STOP_MIN)Y el tiempo total transcurrido es ≥ 30 minutos (
MIN_ELAPSED_MIN)
Esto gestiona el retraso de la URL de 24 horas de Garmin: la URL sigue siendo válida después de la carrera, pero los nuevos puntos de seguimiento dejan de llegar cuando el atleta termina. El mínimo de 30 minutos evita paradas falsas al inicio cuando los datos GPS son escasos.
Configuración (Variables de entorno)
Variable | Predeterminado | Descripción |
|
| Puerto del servidor |
|
| Dirección de enlace |
|
| Ruta del endpoint MCP |
|
| Ruta de la base de datos SQLite |
|
| URL base de claude-runner |
|
| Espacio de trabajo para tareas de claude-runner |
|
| Nivel de registro |
| — | URL del colector OpenTelemetry (opcional) |
Despliegue
cd ~/ai-platform/mcps
# Build and start
docker compose up -d --build livetrack-mcp
# Logs
docker compose logs -f livetrack-mcp
# Restart
docker compose restart livetrack-mcp
# Health check
curl http://localhost:38100/healthSesión típica (a través de Claude en el espacio de trabajo de entrenamiento)
# Start tracking
use_mcp_tool livetrack-mcp start_tracking \
url="https://livetrack.garmin.com/session/.../token/..." \
race_config={"hr_max": 144, "power_max": 165, "run_hr_max": 152}
# Check status
use_mcp_tool livetrack-mcp get_tracking_status
# Manual analysis trigger
use_mcp_tool livetrack-mcp trigger_analysis
# Stop (or let it auto-stop)
use_mcp_tool livetrack-mcp stop_trackingEstructura del proyecto
livetrack_mcp/
├── Dockerfile
├── pyproject.toml
├── README.md
└── src/livetrack_mcp/
├── __init__.py
├── __main__.py
├── otel.py # OpenTelemetry setup
├── poller.py # Garmin LiveTrack URL parsing + HTTP fetch
├── store.py # SQLite time-series (sqlite3 + asyncio.to_thread)
├── tracker.py # Scheduling (asyncio.create_task) + race-end detection
├── analyzer.py # Prompt builder + claude-runner caller
└── server.py # FastMCP tools + /control + /healthThis server cannot be deployed
Maintenance
Related MCP Connectors
Adaptive running coach MCP server — training data, plans, and recovery for AI assistants.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that connects Garmin Connect data to Claude, enabling training analysis, recovery checks, and personalized plans based on real metrics like HRV, training load, and activities.21MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that gives Claude access to real-time Garmin Connect and Strava data for analyzing training and suggesting sessions.-
- AlicenseNot gradedqualityDmaintenanceSelf-hosted MCP server that exposes 90+ Garmin Connect tools to Claude and includes a live triathlon dashboard.MIT
- AlicenseAqualityBmaintenanceLocal MCP server that connects Claude Desktop with Garmin and Apple Health data to read training and recovery, estimate heart rate and pace zones, analyze performance, and create structured workouts.22MIT