mi-health-mcp
mi-health-mcp
Projektübersicht
mi-health-mcp stellt die Schlaf-, Herzfrequenz- und Schrittdaten des aktuell angemeldeten 小米-Kontos sowie der autorisierten Verwandten über das MCP-Protokoll für MCP-Clients wie Hermes bereit. Der Dienst läuft auf Cloudflare Workers. Dieses Projekt stammt von wusaki0723/mi-health-mcp, behält die GPL-3.0-Lizenz bei und orientiert sich bei der Schnittstellenimplementierung an Misty02600/mi-fitness-python und shkyyy18/mi_fitness_data_bridge.
Related MCP server: boyuan-health-bridge
Bereitstellung
Erforderlich sind Node.js 20 oder höher sowie ein Cloudflare-Konto.
git clone https://github.com/<your-github-account>/mi-health-mcp.git
cd mi-health-mcp
npm install
npx wrangler login
npx wrangler kv namespace create MI_HEALTH_KVSchreibe die vom Befehl ausgegebene Namespace-ID in kv_namespaces[0].id in der wrangler.toml. Die KV-Namespace-ID ist eine Cloudflare-Ressourcenkennung und keine Zugangsberechtigung; öffentliche Repositorys müssen wrangler.toml committen, damit Workers Builds den Worker-Einstiegspunkt und das Binding erkennen. Nach einem Fork muss die Namespace-ID vor der Bereitstellung durch die des eigenen Kontos ersetzt werden.
Dann Zugriffstoken festlegen und bereitstellen:
npx wrangler secret put AUTH_TOKEN
npx wrangler deployVerwende für AUTH_TOKEN einen selbst erzeugten langen Zufallsstring und schreibe ihn nicht in den Quellcode, in wrangler.toml oder in Git.
passToken-Anmeldung
Es wird empfohlen, userId, passToken und deviceId aus dem Browser-Cookie des Xiaomi-Kontos als Cloudflare Secret zu setzen. deviceId beginnt normalerweise mit wb_. Der Worker tauscht sie gegen eine kurzlebige Health-API-Session mit sid=miothealth ein; das ursprüngliche passToken wird nicht in KV, Logs oder MCP-Antworten geschrieben.
npx wrangler secret put XIAOMI_USER_ID
npx wrangler secret put XIAOMI_PASS_TOKEN
npx wrangler secret put XIAOMI_DEVICE_IDAlternativ kann im Cloudflare Dashboard unter Worker „Settings > Variables and Secrets“ ein gleichnamiges Secret hinzugefügt werden. XIAOMI_USER_ID und XIAOMI_PASS_TOKEN müssen zusammen gesetzt werden; XIAOMI_DEVICE_ID ist optional und sollte die deviceId aus derselben Browser-Sitzung verwenden, in der das passToken erlangt wurde.
Der Name des KV-Bindings muss MI_HEALTH_KV bleiben. AUTH_TOKEN, XIAOMI_USER_ID und XIAOMI_PASS_TOKEN müssen als Cloudflare Secret gesetzt werden und dürfen nicht in Quellcode, Konfigurationsdateien oder Git geschrieben werden.
Hermes-Konfiguration
mcp_servers:
mi_health:
url: "https://<worker-name>.<account-subdomain>.workers.dev/mcp"
headers:
Authorization: "Bearer ${MI_HEALTH_AUTH_TOKEN}"Ersetze die URL durch die Adresse deines eigenen bereitgestellten Workers. Der Wert von MI_HEALTH_AUTH_TOKEN muss mit dem AUTH_TOKEN-Secret dieses Workers übereinstimmen. Das Beispiel enthält keine echten Zugangsdaten.
Hermes-Skill
Die Datei skills/mi-health/SKILL.md im Repository leitet Anfragen für „ich/selbst“ und „Verwandte“ an das richtige Tool weiter und erläutert die Bedeutung der Felder der kompakten Ergebnisse. Sobald das Repository öffentlich ist, kann es über die URL der Originaldatei installiert werden:
hermes skills install https://raw.githubusercontent.com/<your-github-account>/mi-health-mcp/main/skills/mi-health/SKILL.md
hermes skills listDas Skill erstellt keine geplanten Aufgaben automatisch. Wenn es mit einer vorhandenen Aufgabe verbunden werden soll, prüfe zuerst die Aufgabe und die letzten Ausführungsprotokolle und füge es dann anhand der Aufgaben-ID hinzu:
hermes cron status
hermes cron list
hermes cron runs <job-id>
hermes cron edit <job-id> --add-skill mi-healthGeplante Aufgaben werden in einer unabhängigen Sitzung ausgeführt. Der Prompt muss das Abfrageziel, die Anzahl der Tage, die Zeitzone, den Sendestandort und das Vorgehen bei Fehlern klar angeben. Gib keine Zugangsdaten in den Prompt; für regelmäßige Aufgaben sollten provider und model festgelegt werden, damit sich das Verhalten nicht ändert, wenn sich globale Standardwerte ändern.
Verwendung
Nach dem Konfigurieren von
XIAOMI_USER_IDundXIAOMI_PASS_TOKENhealth_login_refreshaufrufen;XIAOMI_DEVICE_IDist ein optionales Secret, um bei Bedarf die Browser-Sitzung anzugeben, in der daspassTokenerlangt wurde. Der Worker tauscht diemiothealth-Session ein und speichert sie im Cache; bei einem Fehler wird die aktuell gecachte Session nicht gelöscht.Mit
health_medas aktuelle Konto bestätigen; für einzelne Rohzusammenfassungenhealth_latest,health_sleep,health_heartoderhealth_stepsaufrufen; für Trendanalysen bevorzugthealth_analyzeaufrufen und die aktuelle IANA-Zeitzone des Benutzers übergeben.Für Abfragen zu Verwandten zuerst
health_relativesaufrufen und danntarget: "relative"sowie die zurückgegebenerelative_uidübergeben.
health_login_start und health_login_poll sind nur aus Kompatibilitätsgründen beibehalten. Der QR-Code-Ablauf wird bei manchen Konten von Xiaomi abgelehnt und gibt 70036 zurück; auch die 小米运动健康 App kann melden, dass der QR-Code nicht unterstützt wird. Dieses Projekt beschreibt ihn nicht als verifiziert nutzbare Anmeldemethode.
Gesundheitsabfragen verwenden standardmäßig target: "self" und die Datenschnittstelle der eigenen Person; relative_uid wird nicht gesendet. Für Abfragen zu Verwandten muss eine gültige relative_uid angegeben werden; das erste Element der Verwandtenliste wird nicht automatisch ausgewählt.
MCP-Tools
health_me: Gibt den aktuellen Anmeldestatus unduser_idzurück, keine Zugangsdaten.health_login_status: Gibt zurück, ob die aktuelle Health-API-Session verfügbar ist, sowie die Anmeldemethode; keine Zugangsdaten.health_login_refresh: Erzwingt die Aktualisierung der Session mit dem 小米-Konto-Secret; bei einem Fehler bleibt die vorhandene Cache-Session erhalten.health_relatives: Listet dierelative_uidund Notizen der abfragbaren Verwandten auf.health_latest: Fragt die neuesten Zusammenfassungen von Schlaf, Herzfrequenz und Schritten ab.health_analyze: Fragt standardmäßig 30 Tage ab und erstellt eine persönliche Baseline aus den letzten 7 vollständigen Tagen und früheren Aufzeichnungen; trennt die noch nicht abgeschlossene Aktivität des aktuellen Tages ab, meldet fehlende Daten, Synchronisationsverzögerung, Vollständigkeit der Schlafphasen und Qualität der Herzfrequenzmessungen und liefert nicht-diagnostische robuste Statistiken.health_sleep: Fragt die täglichen Schlafzusammenfassungen der letzten 1 bis 30 Tage ab, höchstens ein Eintrag pro Tag.health_heart: Fragt die täglichen Herzfrequenzstatistiken der letzten 1 bis 30 Tage ab, ohne alle Messpunkte zurückzugeben.health_steps: Fragt die täglichen Schrittzusammenfassungen der letzten 1 bis 30 Tage ab, höchstens ein Eintrag pro Tag.
Für Abfragen der eigenen Person kann target weggelassen oder explizit {"target":"self"} übergeben werden. Für Abfragen zu Verwandten muss Folgendes übergeben werden:
{
"target": "relative",
"relative_uid": "...",
"days": 7
}Beispiel für eine Trendanalyse:
{
"target": "self",
"days": 30,
"recent_days": 7,
"timezone": "Europe/Berlin"
}health_analyze berechnet die von der Health-API bereits zurückgegebenen Daten nicht neu; timezone dient nur dazu, den aktuellen Kalendertag zu erkennen, die Schritte des aktuellen Tages und die tägliche Herzfrequenz als partial zu markieren und von der Baseline der vollständigen Tage auszuschließen. Schlaf wird anhand des Aufwachdatums als abgeschlossene Aufzeichnung betrachtet. Wenn für dasselbe Datum mehrere Zusammenfassungen vorliegen, wählt der Analysator deterministisch eine anhand von gültigen Messwerten, Vollständigkeit der Messungen oder Schlafphasen, Aufzeichnungszeit und stabilem Schlüssel aus. recent_days bezeichnet das Fenster der letzten Kalendertage; fehlende oder wegen unzureichender Qualität ausgeschlossene Daten werden nicht durch frühere Aufzeichnungen ersetzt. Die Ergebnisse geben zuerst data_quality zurück: missing_dates bedeutet, dass die Aufzeichnung für den Tag fehlt; missing_measurements bedeutet, dass die Aufzeichnung vorhanden ist, der Zielwert jedoch leer, nicht numerisch oder negativ ist; beide werden als unbekannt behandelt und nicht als 0. Die Ergebnisse melden außerdem die Synchronisationsverzögerung der neuesten Daten, die Vollständigkeitsrate der Schlafphasen und die Qualität der Herzfrequenzmessungen. Daten, deren Stichprobenanzahl unter 50 % des Medians der Stichprobenanzahl vollständiger Tage liegt, werden in low_sample_dates aufgeführt; Daten ohne gültige Stichprobenanzahl in unknown_sample_dates; beide fließen nicht in den Herzfrequenztrend ein. Für Trendvergleiche werden ungerundete Median, MAD, IQR und robuste Z-Scores verwendet; gerundet wird erst bei der Ausgabe. Bei unzureichenden Stichproben wird insufficient_data zurückgegeben, ohne eine erzwungene Trendaussage zu treffen. Alle Vergleiche sind persönliche historische Zusammenfassungen und nicht für die Diagnose von Krankheiten oder Medikationsempfehlungen geeignet.
Nutzungsgrenzen
Nur für die Anmeldung mit deinem eigenen 小米-Konto und die Abfrage von Daten deiner autorisierten Verwandten. Nicht für Zwecke verwenden, die die Privatsphäre anderer verletzen oder gegen die 小米-Nutzungsbedingungen verstoßen.
Für eigene Daten wird POST /app/v1/data/get_fitness_data_by_time verwendet. Für die China-Region wird das Abfragefenster um jeweils 18 Stunden vor und nach dem Zeitraum erweitert und die Daten werden anhand des zone_offset der Aufzeichnung dem Datum zugeordnet; fehlt zone_offset, wird auf UTC+8 zurückgegriffen. Eigene Schrittdatensätze werden gemäß der inkrementellen Semantik der Schnittstelle pro Tag summiert; eigene Herzfrequenz-Messpunkte werden in tägliche Statistiken umgewandelt; bei Schlafdaten desselben Tages werden bevorzugt Aufzeichnungen beibehalten, die kein Nickerchen sind, eine längere Dauer und einen neueren Aktualisierungszeitpunkt haben. Für Verwandtendaten wird daily_report unter /app/v1/relatives/* verwendet; Datensätze desselben Tages werden nicht doppelt summiert.
MCP-Antworten verwenden eine Feld-Whitelist und geben AUTH_TOKEN, passToken, cUserId, serviceToken, ssecurity oder Cookies nicht zurück. Bitte committe keine .dev.vars, .env, wrangler.toml oder .wrangler/.
Lizenz
Dieses Projekt steht unter der GNU General Public License v3.0 (GPL-3.0) und bleibt damit mit der Lizenz des Upstream-Projekts Misty02600/mi-fitness-python konsistent.
This 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 Connectors
Collect Apple Health data from your wearables through the Context app and query it via MCP
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
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.107MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for read-only access to Xiaomi Mi Fitness shared family health data, enabling queries for family members, health summaries, and historical metrics via ChatGPT.GPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to query and analyze Huawei Health data, including training records, sleep, heart rate, and athletic performance, through 14 MCP tools without third-party servers.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to query Polar health data (activity, sleep, recovery, training sessions, heart rate) through MCP with secure authentication, redacted personal info, and bounded responses.
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/Zhou-Ruichen/mi-health-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server