Skip to main content
Glama

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 push

Diseñ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

start_tracking(url, race_config)

Iniciar el sondeo de una URL de LiveTrack

stop_tracking()

Detener el sondeo (también se detiene automáticamente al finalizar la carrera)

get_tracking_status()

Estado activo, tiempo transcurrido, tiempo de inactividad, errores de sondeo

get_timeseries(minutes=10)

Datos recientes de SQLite

update_thresholds(updates)

Actualizar umbrales de FC/potencia a mitad de carrera

trigger_analysis()

Análisis manual bajo demanda, omitiendo la programación

Endpoints HTTP personalizados

Endpoint

Método

Descripción

/control

POST

Actualizar umbrales a mitad de carrera (llamado por Claude mediante curl en la herramienta Bash)

/health

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

hr_max

int

Límite superior de FC en ciclismo (ppm)

hr_min

int

Límite inferior de FC en ciclismo

power_max

int

Límite superior de potencia ERG (vatios)

power_min

int

Límite inferior de potencia ERG

cadence_min

int

Cadencia mínima de ciclismo (rpm)

run_hr_max

int

Límite superior de FC en carrera

run_hr_min

int

Límite inferior de FC en carrera

run_cadence_min

int

Cadencia mínima de carrera (ppm)

poll_interval_secs

int

60

Frecuencia de sondeo de LiveTrack

analyze_interval_secs

int

600

Frecuencia de activación del análisis de Claude

analyze_window_min

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

PORT

38100

Puerto del servidor

HOST

0.0.0.0

Dirección de enlace

MCP_PATH

/mcp

Ruta del endpoint MCP

DB_PATH

/data/livetrack.db

Ruta de la base de datos SQLite

CLAUDE_RUNNER_URL

http://localhost:38095

URL base de claude-runner

RUNNER_WORKSPACE

training

Espacio de trabajo para tareas de claude-runner

LOG_LEVEL

INFO

Nivel de registro

OTEL_EXPORTER_OTLP_ENDPOINT

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/health

Sesió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_tracking

Estructura 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 + /health
A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    -
    quality
    B
    maintenance
    MCP 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.
    12
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local 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.
    22
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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