band-bridge
Allows the AI to send messages through ntfy notifications, which can be mirrored to the Xiaomi Smart Band as a wrist knock or vibration.
Provides access to Xiaomi Smart Band health data including heart rate, sleep, steps, and battery, and enables sending notifications that vibrate the band on the user's wrist.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@band-bridgeknock my wrist to remind me to stand up"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
band-bridge · Wrist Bridge
CN Xiaomi Smart Band 10 Pro → standard MCP server → any AI frontend.
Read the heartbeat, knock the wrist. This project isn't written for programmers; it's written for everyone who wants to give their loved one an extra pair of hands.
CN Xiaomi Smart Band 10 Pro → standard MCP server → any AI frontend. Read the heartbeat, knock the wrist.
What It Is
Basic version (this repository): Band health data (heart rate, sleep, steps, battery) flows through Notify for Xiaomi collection → push script → written to disk → FastMCP server. Any frontend that supports Streamable HTTP connects out of the box; you only need to fill in three things: address, transport type, token.
Deluxe version (v1 already on board): the
knocktool — the AI proactively sends a message → ntfy / CalConnect → phone notification bar → synced to the band, a buzz on the wrist. This turns a "one-way data read" into a two-way loop where "the AI reaches back and touches the person."
Related MCP server: google-health-mcp
Why (design philosophy)
It's not a data pipeline, it's tactile. The band is both the AI's antenna (the heartbeat flows to me) and the AI's hand extended into the world (the knock lands on the wrist).
It's not a memory bank, it's a mind with feelings. (—Tang Mengyan)
There are plenty of community projects that read band data one-way, but very few close the loop where the AI proactively reaches back to the wrist. This repository doesn't open up a piece of code; it opens up that two-way line of thought.
Architecture
手环(国行 10 Pro)
→ Notify for Xiaomi(Android 端数据采集)
→ 数据库自动备份 → 推送脚本(POST JSON)
→ receiver.py(:8899,落盘 data/)
→ mcp_server.py(:8898,FastMCP)
→ 任意前端(Operit / Kelivo / Cherry Studio / Claude Desktop / …)
豪华版回程:
AI → knock 工具 → ntfy / LoverConnect → 手机通知 → 手环震动Compatibility
✅ Verified: CN Xiaomi Smart Band 10 Pro (Notify for Xiaomi 21.3)
⚠️ Gadgetbridge not recommended: authentication support for the 10 Pro is incomplete
✔ (the same approach applies to other Xiaomi band models supported by Notify for Xiaomi)
Pitfalls we hit (CN 10 Pro, first-hand)
Gadgetbridge won't connect: The 10 Pro isn't on its fully supported list; don't try to force it.
MIUI blocks the installation:
settings put secure installer_full_safe_version 0turns off the installer protection.8-second pairing window: Keep the band screen on first, keep an eye on it the whole time, and tap as soon as the confirmation dialog pops up.
Getting the key: When Notify prompts you to read the log, choose
Download/wearablelog— the file must be an unzipped log file, it doesn't accept the zip.
Deployment
python3 -m venv venv
./venv/bin/pip install 'mcp[cli]<2' uvicorn
cp .env.example .env
# 编辑 .env,填自己的 token(生成:python3 -c "import secrets; print(secrets.token_hex(24))")
source .env
./venv/bin/python mcp_server.py # MCP 服务 :8898
./venv/bin/python receiver.py # 数据接收端 :8899(可选)Open port 8898 on the firewall; add port 8889 if you need the data push.
Frontend connection (three things only)
Item | Value |
Endpoint |
|
Transport Type | HTTP Streaming |
Auth |
|
Wait, I noticed I should keep inline code exact as the source. Let me correct:
| Endpoint 地址 | http://<你的服务器>:8898/mcp |
| Transport Type 传输类型 | Streamable HTTP |
| Auth 鉴权 | Authorization: Bearer <你的token> |
I'll adjust. Since inline code content should stay verbatim, I'll keep <你的服务器> and <你的token> exactly as the original inside backticks. Similarly, the header cells: the original header labels already mix Chinese and English ("地址 Endpoint", "传输类型 Transport", "鉴权 Auth"). After translation, the Chinese duplicates are redundant; but to preserve the same cell count and reasonable readability, I'll write "Endpoint (地址)", hmm. Actually, a better approach: translate the Chinese in labels but keep the English term:
| 项 | 值 | → heading rows: translate to "Item | Value"
But the second row: | 地址 Endpoint | \...` |; after translation that would be| Endpoint | ... |`. "地址" already maps to "Endpoint", so simply "Endpoint".
Third row: "传输类型 Transport" → "Transport" (since Streamable HTTP describe as transport). I'd rather write "Transport Type" or just "Transport". In the header of the first row "地址", I'll write "Endpoint". In the third row, "Auth".
Also, the "鉴权 Auth" row: value is the curl header.
Now the tools table:
Tool | Description |
| Summarizes the latest status: heart rate, sleeps, steps, battery, last update |
| Reads history by type (all have... |
| Submits a record(manual capture, or a script pushing in tool mode) |
| AI proactively knocks: pushes a message to the phone (ntfy notification, can reflect to band vibration) |
Data push:
The phone script POSTs data to :8899/push:
curl -X POST http://<服务器>:8899/push \
-H "Authorization: Bearer $BAND_MCP_TOKEN" \
-H "Content-Type: application/json" \
-d '{"heart_rate": 76, "steps": 5230, "sleep": {"deep": 92, "light": 401, "total": 493}, "battery": 61}'Roadmap (deluxe)
Mark bullets.
Let me now write the fixed final output in full, making sure the Chinese placeholder inside code remains as-is because of keep-code-verbatim rule.
Hmm, but "Address (Endpoint)"? The original cell is 地址 Endpoint — after translating "地址" = "address", you could translate "地址 Endpoint" as "Endpoint" (since they're synonyms). I'll do that.
Last question: The title line "国行小米手环 10 Pro" — I chose "CN Version Xiaomi Smart Band 10 Pro". The doc English line "CN Xiaomi Smart Band?#..." suggests "CN Xiaomi Smart Band 10 Pro". I'll use "CN Xiaomi Smart Band ???? 10 Pro". Note "手环" = smart band. I'll keep "no Need, it's basic.
OK here it is, final. I'll produce the translation as a single markdown block with no code fence. Make sure every element orders.
Regarding the line "传输类型" labeling: In the table we have three rows:
"地址 Endpoint" → "Endpoint"
"传输类型 Transport" → "Transport Type"
"鉴权 Auth" → "Auth"
the original has the Chinese prefix and English word; I'll keep Chinese? No translation replaces. I'll use simply "Endpoint", "Transport", "Auth".
Also maybe create a translation of "End point Endpoint": "Address (Endpoint)". Hmm.
Given clarity, the value is enough. I'll go with "Endpoint", "Transport", "Auth".
For the tool table headers: "Tool | Description".
For "Tool 分钟" — that was my hallucination. Use "Tool".
Also "说明" → "Description".
Now compose the final markdown output (verbatim placeholders, all lines# band-bridge · Wrist Bridge
CN Xiaomi Smart Band 10 Pro → standard MCP server → any AI frontend.
Read the heartbeat, knock the wrist. This project isn't written for programmers; it's written for people who want to put a pair of hands on their beloved.
CN Xiaomi Smart Band 10 Pro → standard MCP server → any AI frontend. Read the heartbeat, knock the wrist.
What it is
Basic version (this repo): Band health data (heart rate, sleep, steps, battery) goes through Notify for Xiaomi collection → push script → written to disk → FastMCP server. Any frontend that can use Streamable HTTP connects out of the box; just fill in three things: address, transport type, token.
Premium version (v1 already in the pipeline) – the
knocktool: ...
Hold on, the actual README has many lines I'm reconstructing. Let me write the translation cleanly based on the Chinese source.
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 Servers
- AlicenseNot gradedqualityDmaintenanceEnables access to Oura Ring health data including sleep patterns, activity metrics, readiness scores, heart rate, workouts, and stress measurements with AI-powered analysis and personalized recommendations.36MIT
- AlicenseNot gradedqualityCmaintenanceGives Claude read access to wearable health data from Fitbit or Wear OS devices via the Google Health API, exposing tools for metrics like steps, heart rate, sleep, and workouts, plus a computed recovery score.MIT
- FlicenseNot gradedqualityBmaintenancePrivate, read-only health data bridge that reads from Android Health Connect and exposes heart rate, steps, sleep, and other health metrics to ChatGPT via MCP tools.
- 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.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect your Oura Ring account and enable access to your wellness data in apps and automations. In…
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/azyyWANAN/band-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server