Garmin Connect MCP server
MCP-сервер Garmin Connect
MCP-сервер для силовых тренировок в Garmin Connect. Спланируйте тренировку в диалоге с ИИ-ассистентом, отправьте её на часы и прочитайте, что вы реально подняли.
Неофициальный. Не связан с Garmin, не одобрен и не поддерживается Garmin. Garmin и Garmin Connect являются товарными знаками Garmin Ltd. Этот проект обращается к частным конечным точкам сервиса тренировок Garmin через реверс-инжиниринг клиента python-garminconnect, поэтому Garmin может изменить или сломать его без предупреждения. Используйте на свой страх и риск и проверьте свои обязательства по условиям использования Garmin.
Всё работает локально. Ваши учётные данные остаются на вашем компьютере и передаются только в Garmin.
Зачем это нужно
Garmin Connect не импортирует файлы тренировок .FIT — импорт FIT работает только для завершённых активностей, а не для запланированных тренировок. Ваши варианты — веб-интерфейс Connect вручную или та же частная конечная точка, которую вызывает само веб-приложение. Этот проект идёт вторым путём и предоставляет MCP-интерфейс, так что тренировка может появиться из разговора, а не из двадцати минут кликанья.
Related MCP server: garmin-mcp
Инструменты
Tool | Does |
| Поиск по каталогу из ~1500 движений Garmin |
| Сохранённые тренировки и их ID |
| Чтение структуры одной тренировки |
| Создание и загрузка с проверкой полного цикла |
| Замена содержимого на месте, сохраняя ID |
| Удаление одной тренировки по ID |
| Добавление тренировки в календарь на дату |
| Многодневные шаблоны в |
| Создание или обновление каждой тренировки в программе |
| Завершённые сессии с количеством подходов и объёмом |
| Одно движение во времени: нагрузка, повторения, объём, e1RM |
| Массовый экспорт в CSV/JSON в |
| Устройства и последняя синхронизация для подтверждения отправки |
delete_workout — единственный разрушительный инструмент.
Установка
Требуется Python 3.12 или новее (garminconnect 0.3.x требует этого).
git clone https://github.com/YOUR-USERNAME/garmin-mcp.git
cd garmin-mcp
./setup.shsetup.sh создаёт .venv/ в каталоге проекта, устанавливает зависимости и копирует .env.example в .env. Ничего не устанавливается в систему. Если в вашей последней версии Python ещё нет колёс для какой-либо зависимости, переопределите её:
PYTHON=python3.13 ./setup.shЗаполните .env своими данными для входа в Garmin, затем выполните аутентификацию один раз:
./.venv/bin/python garmin_login.pyЭтот шаг намеренно интерактивный. Garmin может запросить код MFA, а у MCP-сервера нет терминала, чтобы спросить — он просто зависнет. Вход кэширует токены в ~/.garminconnect, и сервер затем молча использует их. Повторно запускайте его только в том случае, если сервер сообщит об истечении сессии.
Проверьте сборку без обращения к сети:
./.venv/bin/python garmin_mcp.py --self-testПодключение к клиенту
Claude Desktop
Добавьте в claude_desktop_config.json — на macOS в ~/Library/Application Support/Claude/, на Windows в %APPDATA%\Claude\:
{
"mcpServers": {
"garmin": {
"command": "/absolute/path/to/garmin-mcp/.venv/bin/python",
"args": ["/absolute/path/to/garmin-mcp/garmin_mcp.py"]
}
}
}Используйте абсолютные пути и интерпретатор из venv, а не просто python — приложение не наследует PATH вашей оболочки. После этого перезапустите приложение.
Всё остальное
Это стандартный MCP-сервер stdio, поэтому подойдёт любой клиент. Для отладки вне клиента:
npx @modelcontextprotocol/inspector ./.venv/bin/python garmin_mcp.pyПрограммы
Программа — это JSON-файл в programs/, описывающий многодневный шаблон. sync_program отправляет каждую тренировку в нём, сопоставляя по имени — существующие тренировки обновляются на месте, новые создаются. Смотрите programs/example.json с комментариями.
{
"name": "Example Upper/Lower",
"workouts": [
{
"name": "[EX] Upper A",
"warmup": "Two or three ramp-up sets.",
"blocks": [
{
"repeat": 4,
"steps": [
{ "exercise": "Barbell Bench Press", "reps": 5, "weight_kg": 60,
"note": "4x5-7. Add 2.5kg once you hit 7 on every set." },
{ "rest_seconds": 180 }
]
}
]
}
]
}Блок — это повторяющаяся группа, которая выполняется repeat раз. Шаг — это либо упражнение (exercise + reps, опционально weight_kg и note), либо отдых (rest_seconds). Суперсет — это один блок, содержащий оба упражнения с коротким отдыхом между ними и длинным отдыхом в конце. Опустите weight_kg для работы с собственным весом. Опустите warmup для шага разминки по умолчанию или установите его в "" для отсутствия разминки.
programs/*.json игнорируется git, кроме примера, так что ваши собственные тренировки никогда не попадут в коммит.
Что может вас подвести
Garmin молча стирает нераспознанные названия упражнений. Загрузка возвращает 200, и упражнение отображается без названия на часах во время сессии. Именно поэтому существует search_exercises и почему каждое название сверяется с каталогом перед загрузкой. Отображаемые названия содержат дефисы так, как никто не печатает — «Rope Press-down», «Close-grip Chin-up» — поэтому поиск нормализует пунктуацию и понимает сокращения вроде «db», «bb», «ohp», «rdl», «skullcrusher».
Две части API расходятся в единицах веса. Сервис тренировок принимает weightValue в килограммах, несмотря на то, что weightUnit содержит "factor": 1000.0. Полезные данные активности — то, что вы подняли, — сообщаются в граммах. Оба варианта обрабатываются; не «исправляйте» ни один из них.
Проверка полного цикла не может поймать ошибку единиц. Она сравнивает то, что Garmin сохранил, с тем, что было отправлено, и Garmin добросовестно сохраняет всё, что вы отправляете. Когда отправлялись граммы, проверка проходила, и Connect отображал «75,000 кг». Проверьте свою первую загрузку в Connect.
Обновляйте, а не удаляйте и создавайте заново. Сохранение ID тренировки означает, что часы воспринимают изменение как редактирование. Повторное создание заставляет их удалить старые тренировки и загрузить новые, что приводит к устаревшим дубликатам.
429 и 401 выглядят одинаково. Garmin агрессивно ограничивает количество входов с IP. Когда первый транспорт входа ограничен, запасной вариант garminconnect сообщает вводящий в заблуждение 401. Если вы только что видели 429, это ограничение — подождите 30–60 минут и не повторяйте попытки в цикле, это продлевает блокировку. Чтобы исключить действительно неверный пароль: garmin_login.py --check-env.
Структура
garmin_mcp.py the server — tool definitions
garmin_core.py auth, payload building, verification, set parsing
garmin_login.py one-time interactive login (MFA lives here)
programs/ multi-day templates as JSON
setup.sh creates .venv and installs dependenciesЛицензия
MIT — см. LICENSE.
Создано на основе python-garminconnect (MIT) и MCP Python SDK (MIT).
This server cannot be deployed
Maintenance
Related MCP Connectors
Your strength-training data for any AI assistant: workouts, progress, muscle volume, routines.
AI coach for Garmin: builds training plans and structured workouts, synced straight to your watch.
Ask your AI about your fitness: activities and data from Garmin, COROS, Strava, GPX and more
- Coach MCPOAuthai.iamcoach
Your endurance training data in your AI assistant: activities, recovery, plan, workout edits.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.4 npm4-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans on Garmin Connect, syncing to the user's watch.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans directly on Garmin Connect, syncing to your watch with guided prompts.1MIT