livetrack-mcp
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
Инструмент | Описание |
| Начать опрос URL-адреса LiveTrack |
| Остановить опрос (также автоматически останавливается по окончании гонки) |
| Активное состояние, прошедшее время, время простоя, ошибки опроса |
| Последние данные из SQLite |
| Обновление пороговых значений ЧСС/мощности во время гонки |
| Ручной анализ по запросу, в обход расписания |
Пользовательские HTTP-эндпоинты
Эндпоинт | Метод | Описание |
| POST | Обновление пороговых значений во время гонки (вызывается Claude через curl в инструменте Bash) |
| 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
Поле | Тип | По умолчанию | Описание |
| int | — | Верхний предел ЧСС на велосипеде (уд./мин) |
| int | — | Нижний предел ЧСС на велосипеде |
| int | — | Верхний предел мощности ERG (ватт) |
| int | — | Нижний предел мощности ERG |
| int | — | Минимальный каденс на велосипеде (об./мин) |
| int | — | Верхний предел ЧСС при беге |
| int | — | Нижний предел ЧСС при беге |
| int | — | Минимальный каденс при беге (шагов/мин) |
| int | 60 | Частота опроса LiveTrack |
| int | 600 | Частота запуска анализа Claude |
| 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-данные поступают редко.
Конфигурация (переменные окружения)
Переменная | По умолчанию | Описание |
|
| Порт сервера |
|
| Адрес привязки |
|
| Путь эндпоинта MCP |
|
| Путь к базе данных SQLite |
|
| Базовый URL claude-runner |
|
| Рабочая область для задач claude-runner |
|
| Уровень логирования |
| — | 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 + /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