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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityBmaintenanceMCP 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.12MIT
- Flicense-qualityBmaintenanceMCP server that gives Claude access to real-time Garmin Connect and Strava data for analyzing training and suggesting sessions.
- Alicense-qualityCmaintenanceSelf-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
Related MCP Connectors
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aviman1109/livetrack_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server