Mi Fitness Data Bridge
English version: README.en.md
Mi Bridge (Mi Fitness Data Bridge)
Локально-ориентированный мост данных, который экспортирует ваши собственные данные из приложения Xiaomi Mi Fitness в SQLite, JSON, CSV, Python и инструменты, совместимые с MCP.
Приложение Xiaomi Mi Fitness с радостью покажет вам ваши шаги, сон и пульс — но никогда не позволит забрать эти данные с собой. Этот мост помещает ваши собственные данные в файл SQLite на вашем собственном диске.
Товарный знак: Xiaomi, Mi Home, Mi Fitness являются товарными знаками Xiaomi Corporation. Этот проект является неофициальным сообществом и не имеет никакого отношения к Xiaomi Corporation и не одобрен ею.
Экспериментальный облачный адаптер может перестать работать в любой момент из-за изменений Xiaomi в частных интерфейсах. Используйте только с учётными записями и данными, к которым у вас есть право доступа.
Проверено на практике
Записано 2026-07-20 на Windows (Python 3.14) на основе коммита ветки main. Все данные синтетические, без каких-либо учётных данных или сетевого доступа. (Количество тестов повторно проверено и обновлено 2026-08-17.)
Тестовый набор:
$ python -m pytest -q -p no:cacheprovider
........................................................................ [ 96%]
... [100%]
75 passed in 10.27sСквозная синтетическая демонстрация (examples/synthetic_demo.py сначала заполняет локальный кэш SQLite синтетическими записями, а затем запускает реальный конвейер экспорта JSON/CSV):
$ python examples/synthetic_demo.py
Seeded synthetic database: C:\Users\<you>\AppData\Local\Temp\mi-fitness-demo-53el7cfh\mi_fitness.db
daily_activity: 2026-07-15 .. 2026-07-15 (1 day(s))
sleep: 2026-07-14 .. 2026-07-14 (1 day(s))
workouts: 2026-07-15 .. 2026-07-15 (1 day(s))
body_measurements: 2026-07-15 .. 2026-07-15 (1 day(s))
Export completed
mi_fitness.json
daily_activity.csv
sleep.csv
workouts.csv
body_measurements.csv
heart_rate.csv
spo2.csv
stress.csv
abnormal_heart_beat.csv
JSON envelope:
schema_version: 1.0
source: mi_fitness_data_bridge
records.daily_activity: 1 row(s)
records.sleep: 1 row(s)
records.workouts: 1 row(s)
records.body_measurements: 1 row(s)
Sample sleep row (synthetic):
start_at=2026-07-14T23:20:00 end_at=2026-07-15T07:05:00
duration_minutes=465 score=86
stages=[{"stage": "deep", "minutes": 82}, {"stage": "light", "minutes": 271}, {"stage": "rem", "minutes": 88}, {"stage": "awake", "minutes": 24}]Related MCP server: garmin-givemydata
Проект health-assistant объединён
Проект health-assistant (локально-ориентированная персональная панель здоровья: Strava, сон, состав тела, анализ питания) объединён в этот репозиторий, его исходный репозиторий архивирован. Перенесённые ресурсы находятся в каталоге docs/health-assistant/:
analytics.py— эталонная реализация движка рекомендаций по тренировкам/восстановлению без зависимостей (7-дневная статистика тренировок, соотношение острой/хронической нагрузки, проверка готовности, ежедневные рекомендации по тренировкам).coaching_methodology.md— объяснимая методология велосипедного коучинга, состава тела и спортивного питания, лежащая в его основе.README.md— полные инструкции по миграции, включая намеренно не перенесённые части (панель FastAPI, конвейер Strava OAuth/Webhook, анализ фотографий приёмов пищи) и причины.
Что делает этот проект
Читает данные Xiaomi Mi Fitness через экспериментальный облачный адаптер для китайского региона.
Сохраняет нормализованные записи в локальную базу данных SQLite.
Экспортирует переносимые JSON или CSV без учётных данных.
Предоставляет локальные инструменты запросов MCP для личной автоматизации.
Предоставляет переиспользуемую реализацию коннектора для нижестоящих проектов (например, персонального консультанта по снижению веса).
Он намеренно не предоставляет медицинские консультации, рекомендации по снижению веса, управляемый доступ к учётным записям или многопользовательские облачные сервисы.
Зачем нужен этот мост?
Раньше | Теперь |
Ваша история здоровья существует только в приложении Xiaomi Mi Fitness, и единственный способ «экспорта» — скриншоты. |
|
Чтобы ответить на вопрос «как я спал в прошлом месяце», приходится листать приложение день за днём. |
|
Чтобы дать AI-ассистенту доступ к вашим данным о здоровье, приходится передавать учётные данные какому-то хостинг-сервису. |
|
Поддерживаемые наборы данных
Ежедневная активность: шаги, дистанция, активные калории и минуты активности.
Записи сна и фазы сна.
Записи тренировок.
Измерения тела: вес и доступные поля состава тела.
Сэмплы пульса, включая пульс в покое, когда доступен.
SpO2, стресс и события аномального сердцебиения (зависит от наличия в учётной записи/устройстве).
Фактическая доступность зависит от устройства, региона учётной записи, прошивки и вышестоящих сервисов Xiaomi.
Установка
git clone https://github.com/shkyyy18/mi-bridge.git mi_fitness_data_bridge
cd mi_fitness_data_bridge
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"Windows Git Bash:
source .venv/Scripts/activate
pip install -e ".[dev]"macOS/Linux:
source .venv/bin/activate
pip install -e '.[dev]'Конфигурация
Более безопасный интерактивный путь настройки позволяет избежать записи passToken в историю shell:
mi-fitness-bridge setup
mi-fitness-bridge doctorКогда доступно, учётные данные хранятся в локальной связке ключей (keyring). Некоторые запасные реализации keyring могут хранить ключи недостаточно безопасно; перед использованием ознакомьтесь с поведением keyring вашей операционной системы.
Как получить user_id и passToken
Этот мост использует учётные данные уровня учётной записи Xiaomi (та же сессия входа, что и в приложении Mi Home), выберите один из двух способов:
Способ 1: Ручное копирование в браузере
Откройте account.xiaomi.com в браузере и войдите в свою учётную запись Xiaomi (та же учётная запись, что и в приложении Xiaomi Mi Fitness).
Откройте инструменты разработчика (F12) → «Приложение / Application» → Cookies →
https://account.xiaomi.com.Скопируйте значения cookie
userIdиpassTokenи вставьте их при запросеmi-fitness-bridge setup.
Способ 2: Инструмент входа по QR-коду
Войдите один раз по QR-коду с помощью open-source mijia-api:
pip install mijiaAPI
python -c "from mijiaAPI import mijiaAPI; mijiaAPI().login()" # 终端出二维码,用米家 App 扫码Состояние входа по умолчанию сохраняется в ~/.config/mijia-api/auth.json (на Windows — %USERPROFILE%\.config\mijia-api\auth.json); значения userId и passToken из него можно напрямую использовать в этом мосте — учётные данные уровня учётной записи Xiaomi универсальны для сервисов, и мост использует их для получения сессии Xiaomi Mi Fitness (sid=miothealth). Обратите внимание, что auth.json хранит учётные данные в открытом виде: после ввода userId и passToken в этот мост (системная связка ключей) рекомендуется удалить этот файл.
Примечания:
passToken истекает; при сообщении
doctorоб ошибке аутентификации просто получите его заново по шагам выше.При использовании браузерного способа входите в систему в вашей обычной сетевой среде; частая или необычная активность может вызвать защиту учётной записи Xiaomi (слайдер/ SMS-верификация); при срабатывании защиты можно использовать способ с QR-кодом.
Имена cookie и процесс входа основаны на проверке от 2026-08 и могут отличаться в зависимости от региона учётной записи, устройства или политики защиты; Xiaomi также может в любой момент изменить частные интерфейсы (см. экспериментальное заявление вверху).
Эти два значения эквивалентны состоянию входа в вашу учётную запись; не разглашайте их и не коммитьте в Git.
Синхронизация
mi-fitness-bridge sync --start-date 2026-07-01 --end-date 2026-07-15Или синхронизируйте только один набор данных:
mi-fitness-bridge sync --type sleep --start-date 2026-07-01 --end-date 2026-07-15
mi-fitness-bridge sync --type body_measurements --start-date 2026-07-01 --end-date 2026-07-15База данных по умолчанию находится в каталоге данных пользователя платформы (определяется platformdirs). sync, export, serve, doctor поддерживают смену расположения через параметр --db или переменную окружения MI_FITNESS_DB_PATH, приоритет: командная строка > переменная окружения > расположение по умолчанию. Обратите внимание, что platformdirs на Windows не реагирует на переменную окружения LOCALAPPDATA; для настройки пути используйте два указанных выше способа:
mi-fitness-bridge sync --db ./data/mi_fitness.db --start-date 2026-07-01 --end-date 2026-07-15
export MI_FITNESS_DB_PATH=./data/mi_fitness.dbИзвестные ограничения: инкрементальная синхронизация без параметра даты начинается со времени последней локальной записи; исправления или дополнения более ранней истории на вышестоящем сервере не подтягиваются автоматически; при необходимости явно перезапустите этот диапазон с более ранним --start-date (будет идемпотентно перезаписано, без дублирующих записей).
Экспорт
Создание переносимого JSON-файла:
mi-fitness-bridge export --format json --output exports/mi_fitness.jsonОтдельный CSV-файл для каждого набора данных:
mi-fitness-bridge export --format csv --output exports/csvФильтрация по набору данных и дате:
mi-fitness-bridge export --format json --type sleep \
--start-date 2026-07-01 --end-date 2026-07-15 \
--output exports/sleep.jsonЭкспортируемые файлы никогда не содержат сохранённый passToken Xiaomi, но содержат идентифицирующие столбцы, такие как user_id, в открытом виде — экспортируемые файлы являются чувствительными персональными данными, храните их надлежащим образом. Экспортированные записи о здоровье по умолчанию игнорируются Git.
Описание формата экспорта (структура JSON-конверта, структура CSV, правила фильтрации дат с закрытыми интервалами) см. в Export format.
MCP-сервис
Совместимая команда по-прежнему доступна:
mi-fitness-bridge serve
# legacy alias
mi-fitness-mcp serveДоступные инструменты включают запросы статуса подключения, синхронизации, покрытия, ежедневных сводок, измерений тела, сна, тренировок, пульса, SpO2 и стресса, а также ориентированный на агентов инструмент временных рядов тренировок workout_series — автоматическое понижение частоты дискретизации с жёстким верхним пределом max_points (усреднение по фиксированным временным интервалам, агрегация внутри SQLite), с честным указанием downsampled, source_points, returned_points, method в ответе, а также полной статистикой полной точности (avg/min/max/квантили) и временем в пульсовых зонах. Инструменты списков/сводок, такие как query_workouts, get_daily_summary, сопровождаются data_quality (количество покрытых дней, отсутствующие метрики, время последней синхронизации).
Пример подключения клиента (конфигурационный JSON для MCP-клиентов, таких как Claude Code / Codex):
{
"mcpServers": {
"mi-bridge": {
"command": "mi-fitness-bridge",
"args": ["serve"]
}
}
}Примечание: serve — это stdio-сервис, общающийся с клиентом через стандартный ввод-вывод, а не HTTP-сервис. Запуск его напрямую в терминале может выглядеть как «зависание» — это ожидание MCP-сообщений от клиента, что нормально; в повседневной работе запускайте его через MCP-клиент согласно конфигурации выше.
Использование в качестве Python-зависимости
Нормализованный адаптер по-прежнему доступен под совместимым именем модуля:
from mi_fitness_mcp.adapters.mi_fitness_cloud import MiFitnessCloudAdapterНижестоящие проекты должны устанавливать этот пакет, а не вендорить или копировать исходный код коннектора.
Лицензия
История лицензии: версии, выпущенные до 2026-08-03, лицензированы под MIT (атрибуция MIT вышестоящих kubulashvili/mi-fitness-mcp и binglua/mi-fitness-mcp-cn сохранена в блоке NOTICE вверху LICENSE); новый код текущей версии лицензирован под AGPL-3.0-only. Подробности см. в LICENSE и THIRD_PARTY_NOTICES.md.
Конфиденциальность и безопасность
Надлежащим образом храните passToken, локальную базу данных, экспортируемые файлы и журналы, не разглашайте их.
Экспортируемые файлы не содержат passToken, но содержат идентифицирующие столбцы, такие как
user_id, в открытом виде — это также чувствительные персональные данные.Не запускайте этот мост как публичный прокси учётных данных.
Не коммитьте реальные данные о здоровье или скриншоты с личными показателями.
В отчётах об ошибках и документации всегда используйте синтетические данные.
Это программное обеспечение предназначено только для доступа к личным данным и инженерных исследований, не для диагностики или лечения.
Ответственное раскрытие уязвимостей — см. SECURITY.md, происхождение — см. THIRD_PARTY_NOTICES.md.
Разработка
pip install -e '.[dev]'
python -m pytest -q -p no:cacheprovider
python -m ruff check src testsРелизы
История версий — в CHANGELOG.md, чек-лист релиза и пост-релизных проверок — в docs/release-checklist.md.
Связанные проекты
garmin-mcp — локально-ориентированный MCP-сервис для данных Garmin. Разделяет с этим проектом контракт данных
agent-safe-series/v1(семантика полей понижения частоты дискретизации временных рядов побайтово совпадает), один и тот же AI-агент может без проблем потреблять данные обоих сервисов.
Поддержка проекта
Если этот инструмент вам помог, поставьте звезду на GitHub.
Maintenance
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables reading and syncing Xiaomi Mi Fitness health data (steps, heart rate, sleep, workouts) from the Chinese cloud region to a local SQLite database via MCP tools.103MIT
- AlicenseNot gradedqualityAmaintenanceDownloads all your Garmin health and fitness data into a local SQLite database and exposes 45 MCP tools for AI analysis, enabling assistants to query sleep, training load, HRV, and more.139AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceRead-only MCP server that exposes Apple Health data (steps, workouts, sleep, etc.) from a local SQLite store, allowing AI agents to query health metrics without sending data to hosted services.4Apache 2.0
- AlicenseNot gradedqualityCmaintenanceSelf-hosted MCP server that syncs Xiaomi fitness data to SQLite and provides authenticated tools to query health metrics (steps, sleep, HR, etc.) for AI assistants like Grok.GPL 3.0
Related MCP Connectors
63 tools for Apple Health, Fitbit, Oura & Health Connect data in Claude, ChatGPT, Grok & Mistral.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
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/shkyyy18/mi_fitness_data_bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server