关于 Bluetooth LE Health Sensors
该 MCP 服务读取实现 Bluetooth SIG 标准健康 GATT 配置的 BLE 传感器,面向生理学、运动科学和睡眠研究等实验场景。它可采集心率与 HRV、血氧、血压、体温和体重数据;仅供研究及实验室运营,不是医疗设备。
主要功能
- 01扫描附近 BLE 健康设备
- 02记录心率、RR 间期和 HRV
- 03读取血氧与脉搏率
- 04接收血压、体温和体重读数
- 05获取设备信息与电量
适用场景
- 01记录胸带数据并计算 HRV 指标
- 02采集血氧仪的血氧与脉搏率
- 03等待血压计、体温计或体重秤读数
MCP 相关
向 MCP 客户端提供读取标准健康 GATT 服务的工具,涵盖传感器发现、读数采集和设备信息查询;不会向设备写入控制数据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx labmcp-ble-healthLABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)LABMCP_READ_ONLYSet to 1 to disable all state-changing toolsLABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
11收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
Bluetooth LE 健康传感器 — MCP 服务
让 AI Agent 读取任何实现 Bluetooth SIG 标准健康配置文件的 Bluetooth Low Energy 传感器:从胸带读取带 RR 间期和 HRV 的心率,从血氧仪读取 SpO2 和脉率,并从监测仪、温度计和体重秤采集血压、体温和体重读数,适用于生理学实验室、运动科学研究、睡眠/HRV 研究和实验室运营场景。
警告
仅用于研究和实验室运营。这不是医疗器械。 不用于诊断、患者监测、分诊或任何临床决策,且未经任何监管机构验证或批准。消费级传感器的读数可能不准确;数值会经过 AI Agent 处理,可能被误读。切勿使用此服务的输出做出健康决策。个人读数属于个人数据:请遵守伦理审批和数据保护规定。
| 软件包 | labmcp-ble-health |
| 仪器 | 任何实现 Bluetooth SIG 配置文件的设备:心率胸带/臂带(Heart Rate Service 0x180D)、脉搏血氧仪(Pulse Oximeter Service 0x1822)、血压监测仪(0x1810)、体温计(Health Thermometer 0x1809)、体重秤(Weight Scale 0x181D),以及电池(0x180F)和设备信息(0x180A) |
| 接口 | Bluetooth Low Energy,通过 bleak 实现(Linux/BlueZ、macOS/CoreBluetooth、Windows/WinRT) |
| 协议 | Bluetooth SIG GATT:GATT Specification Supplement、HRS 1.0、PLXS 1.0.1、BLS 1.1.1、HTS 1.0、WSS 1.0.1;IEEE 11073-20601 SFLOAT/FLOAT,依据 PHD Transcoding White Paper v16 |
| 状态 | 🧪 模拟:已通过会发出字节完全匹配的 GATT 数据包的 BLE 模拟后端测试,尚未在硬件上验证。报告硬件测试结果 |
无硬件试用
uvx labmcp-ble-health --simulate --check
模拟器提供六台设备(地址为 00:00:5E:00:53:01–06,取自 IANA 文档地址段):一台组合式“健康套件”(默认),提供所有服务;以及独立的心率胸带、血氧仪、血压监测仪、体温计和体重秤。可使用例如 --simulate --address 00:00:5E:00:53:04 选择设备。
连接设备
- 检查设备是否使用标准配置文件。 只有实现了上述 Bluetooth SIG 服务的设备才能正常工作。许多消费级可穿戴设备(大多数智能手表、许多健身手环,以及一些血压计和体重秤品牌)使用专有协议;有些设备也只会在“配对”/“数据传输”模式下使用标准配置文件。支持 Heart Rate Service 的胸带是进行 HRV 测量时最可靠的选择。
- 释放设备连接。 BLE 传感器通常只接受一个连接:连接前请关闭厂商的手机应用(或关闭手机蓝牙)。
- 查找地址: 不带
--address启动服务,然后让 Agent 运行scan_devices;或者在设备进入广播模式后(佩戴胸带;按下血压计的蓝牙/启动按钮),带--check运行。Linux/Windows 上的地址是 MAC 地址(AA:BB:CC:DD:EE:FF);macOS 上的地址是 CoreBluetooth UUID,且仅对应你的电脑。 - 测试连接:
需要绑定的设备(血压计和体重秤较常见):在 Linux/Windows 上添加uvx labmcp-ble-health --address AA:BB:CC:DD:EE:FF --check # Linux / Windows uvx labmcp-ble-health --address 1A2B3C4D-1111-2222-3333-444455556666 --check # macOS--option pair=true;macOS 会自动显示系统配对提示。在 Linux 上选择非默认适配器时,使用--option adapter=hci1;使用--option connect_timeout_s=40延长设备发现时间(最长 60 秒)。
macOS:启动服务的终端(或 MCP 客户端应用)需要获得蓝牙权限(System Settings › Privacy & Security › Bluetooth)。如果没有权限,macOS 会在蓝牙功能被触及时立即终止进程(退出代码 134),且不会打印任何错误消息。
添加到 MCP 客户端
Claude Code
claude mcp add hr-strap -- uvx labmcp-ble-health --address AA:BB:CC:DD:EE:FF
Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json,……)
{
"mcpServers": {
"hr-strap": {
"command": "uvx",
"args": ["labmcp-ble-health", "--address", "AA:BB:CC:DD:EE:FF"]
}
}
}
所有工具均为只读(不会更改设备上的任何内容,也不会写入控制点),因此 --read-only 不会产生任何影响。如果同时使用多个传感器,请为每台设备分别配置一个服务条目。对于其他客户端,可使用 uvx labmcp config ble-health --address AA:BB:CC:DD:EE:FF --client vscode 生成配置片段(也支持 cursor、codex、claude-code)。
工具
| 工具 | 类型 | 描述 |
|---|---|---|
get_command_log | 👁 读取 | 返回最近发送给仪器的原始命令及收到的回复(最新记录在最后)。可用于调试和记录操作。 |
get_connection_info | 👁 读取 | 报告已连接的仪器(身份、地址、模拟或真实)、服务是否为只读,以及当前生效的安全限制。请先调用此工具。 |
get_device_info | 👁 读取 | 读取设备身份信息(制造商、型号、序列号、固件)、设备提供的标准健康服务及其功能。 |
read_battery | 👁 读取 | 读取设备电量(Battery Service,0-100 %)。 |
read_pulse_oximetry | 👁 读取 | 从脉搏血氧仪读取 SpO2(%)和脉率,返回几秒内的平均值或单次抽查读数。 |
read_temperature | 👁 读取 | 等待体温计发送温度测量值,并以 °C 返回。 |
read_weight | 👁 读取 | 等待体重秤发送体重测量值(kg);如果体重秤提供 BMI 和身高,也会一并返回。 |
reconnect | 🛑 安全 | 关闭并重新打开与仪器的连接(例如仪器断电重启或重新插接电缆后)。 |
record_heart_rate | 👁 读取 | 记录 duration_s 时长的心率:bpm 序列、RR 间期和时域 HRV(平均 HR、SDNN、RMSSD、pNN50)。 |
scan_devices | 👁 读取 | 扫描附近的 Bluetooth LE 设备:地址、名称、信号强度和广播的健康服务。无需配置 --address 即可使用。 |
wait_for_blood_pressure | 👁 读取 | 等待血压计发送测量值:收缩压、舒张压、平均动脉压(mmHg)和脉率。 |
get_connection_info、get_command_log 和 reconnect 是每个 LabMCP 服务内置的工具。
安全限制
| 限制 | 默认值 | 含义 |
|---|---|---|
max_record_duration_s | 600 s | Agent 可启动的最长心率记录时长或连续血氧测量平均窗口 |
max_wait_s | 300 s | 工具等待血压、体温、体重或单次测量读数的最长时间 |
启动时覆盖:--limit max_record_duration_s=1800。请注意,许多 MCP 客户端也会为每次工具调用设置自己的超时;较长时间的记录可能也需要调高该超时(例如 Claude Code 中的 MCP_TOOL_TIMEOUT)。
示例提示词
- “用胸带记录 5 分钟的心率,给我平均 HR、SDNN 和 RMSSD,并将原始 RR 间期保存到 ~/hrv/p07_baseline.csv。”
- “扫描附近的心率胸带,告诉我哪个信号最强。”
- “等待血压计:我现在启动袖带。报告收缩压/舒张压,以及设备是否标记了身体移动或脉搏不规律。”
- “用血氧仪测量 30 秒的平均 SpO2 和脉率,并告诉我有多少个样本不可用。”
- “参与者站上体重秤时读取数值,并使用设备时间戳记录体重和 BMI。”
- “开始本次测量前,胸带的电量是多少?”
注意事项
- 测量设备主动推送数据,不会被轮询。 血压计、体温计、体重秤和点测式血氧仪只有在测量完成时才会指示一个数值(无法读取这些设备特性)。先调用工具,再进行测量。工具会持续扫描并重新连接,直到超时,因为许多监测仪只有在测量后才会广播(血氧仪需要设置
mode="spot_check";auto必须先连接,才能确定设备支持哪种模式)。 - 一次只进行一项测量。 在同一服务上开始测量会取消仍在运行的测量(例如,在 MCP 客户端中工具调用已超时的记录);
reconnect也会取消测量;被取消的调用会返回错误。 - 格式错误的数据包会被跳过并记录到日志中(
get_command_log),而不是丢弃整段记录;record_heart_rate和read_pulse_oximetry会在malformed_packets中报告其数量。 save_path(record_heart_rate)必须是一个新的.csv文件:~会被展开,缺失的文件夹会被创建,且绝不会覆盖现有文件。此项会在开始记录前检查。- 已存储的测量值。 监测仪连接时会连续发送尚未发送的已存储读数,顺序为从最早到最新。工具会在收到第一个读数后继续监听 1.5 s,并将最新读数作为结果返回,同时在
other_measurements中列出较早的读数;设备时钟时间位于device_timestamp中(设备本地时间;如果从未设置过时钟,通常不准确)。 - 特殊值(IEEE 11073 NaN、NRes、±INF)绝不会转换为数字:它们会以
null和说明的形式报告(special_values、unavailable_samples)。血氧仪在采集数据的最初几秒通常会发送 NaN。 - 单位:血压的 kPa 会转换为 mmHg(1 kPa = 7.500617 mmHg),°F 会转换为 °C,lb 会转换为 kg;
unit_reported会说明设备发送的单位。根据 Weight Scale 规范,体重分辨率为 0.005 kg / 0.01 lb;0xFFFF表示“测量失败”,此时返回weight_kg: null。能量消耗单位为 kJ(HRS 1.0)。 - HRV 根据传感器发送的 RR 间期计算(单位为 1/1024 s):SDNN(样本标准差)、RMSSD、pNN50。超出 0.3–2.0 s 范围的 RR 间期会被排除为伪差;不会进行进一步的伪差校正或异位搏动编辑。如果某条通知在空中丢失,跨越该间隔计算出的连续差值就不是真正的逐搏差值。光学腕部传感器通常根本不会发送 RR 间期。除探索性研究外,请使用经过验证的 ECG 系统。
- 增强型血压测量、记录访问控制点(下载监测仪的全部存储数据)、当前时间和用户数据服务均未实现;绝不会向设备写入任何内容。
- 蓝牙配对、绑定密钥和操作系统权限由操作系统处理;服务绝不会接触 PIN 码。
硬件验证
| 型号 | 固件 | 接口 | 验证者 | 日期 |
|---|---|---|---|---|
| 尚无: 成为第一个 |
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。