Skip to main content
Glama

livetrack-mcp

Автономный MCP-сервер, который опрашивает Garmin LiveTrack, сохраняет временные ряды в SQLite и запускает анализ Claude каждые 10 минут через claude-runner.

Архитектура

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

Ключевая особенность: livetrack-mcp полностью автономен — во время гонки не требуется поддерживать активную сессию Claude. Claude вызывается как функция анализа без сохранения состояния каждые 10 минут. Если claude-runner временно недоступен, следующий цикл анализа автоматически повторит попытку.

Related MCP server: Garmin-Strava-mcp

Инструменты MCP

Инструмент

Описание

start_tracking(url, race_config)

Начать опрос URL-адреса LiveTrack

stop_tracking()

Остановить опрос (также автоматически останавливается по окончании гонки)

get_tracking_status()

Активное состояние, прошедшее время, время простоя, ошибки опроса

get_timeseries(minutes=10)

Последние данные из SQLite

update_thresholds(updates)

Обновление пороговых значений ЧСС/мощности во время гонки

trigger_analysis()

Ручной анализ по запросу, в обход расписания

Пользовательские HTTP-эндпоинты

Эндпоинт

Метод

Описание

/control

POST

Обновление пороговых значений во время гонки (вызывается Claude через curl в инструменте Bash)

/health

GET

Проверка работоспособности — состояние отслеживания + статистика хранилища

Использование /control (из промпта анализа Claude)

curl -sf -X POST http://localhost:38100/control \
  -H 'Content-Type: application/json' \
  -d '{"power_max": 150}'

Допустимые поля: hr_max, hr_min, power_max, power_min, cadence_min, run_hr_max, run_hr_min, run_cadence_min

Поля race_config

Поле

Тип

По умолчанию

Описание

hr_max

int

Верхний предел ЧСС на велосипеде (уд./мин)

hr_min

int

Нижний предел ЧСС на велосипеде

power_max

int

Верхний предел мощности ERG (ватт)

power_min

int

Нижний предел мощности ERG

cadence_min

int

Минимальный каденс на велосипеде (об./мин)

run_hr_max

int

Верхний предел ЧСС при беге

run_hr_min

int

Нижний предел ЧСС при беге

run_cadence_min

int

Минимальный каденс при беге (шагов/мин)

poll_interval_secs

int

60

Частота опроса LiveTrack

analyze_interval_secs

int

600

Частота запуска анализа Claude

analyze_window_min

int

10

Окно данных, передаваемое в Claude (минуты)

Пример race_config для полного триатлона

{
  "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
}

Определение окончания гонки

Сервер автоматически останавливается, когда:

  • Нет новых точек трека в течение ≥ 15 минут (STALE_STOP_MIN)

  • И общее прошедшее время ≥ 30 минут (MIN_ELAPSED_MIN)

Это учитывает задержку URL-адреса Garmin 24-часового формата: URL остается действительным после гонки, но новые точки трека перестают поступать, когда спортсмен финиширует. 30-минутный минимум предотвращает ложные остановки в начале, когда GPS-данные поступают редко.

Конфигурация (переменные окружения)

Переменная

По умолчанию

Описание

PORT

38100

Порт сервера

HOST

0.0.0.0

Адрес привязки

MCP_PATH

/mcp

Путь эндпоинта MCP

DB_PATH

/data/livetrack.db

Путь к базе данных SQLite

CLAUDE_RUNNER_URL

http://localhost:38095

Базовый URL claude-runner

RUNNER_WORKSPACE

training

Рабочая область для задач claude-runner

LOG_LEVEL

INFO

Уровень логирования

OTEL_EXPORTER_OTLP_ENDPOINT

URL коллектора OpenTelemetry (опционально)

Развертывание

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

Типичная сессия (через Claude в рабочей области training)

# 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

Структура проекта

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