关于 Ble Hrm Server
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ble-hrm-server
一个用作 BLE Heart Rate Monitoring(心率监测)的 MCP 服务,用于连接 HRM 设备。
构建状态
安装
我们建议使用虚拟环境和 uv 管理依赖项。
本项目使用 pyproject.toml 管理依赖项。
# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows use `.venv\Scripts\activate`
# Install uv if not already installed
pip install uv
# Install dependencies
uv sync
环境配置
本项目支持通过 .env 文件进行配置。你可以使用提供的 .env.sample 作为模板。
cp .env.sample .env
以下环境变量会用到:
QINIU_ACCESS_KEY:你的七牛访问密钥。QINIU_SECRET_KEY:你的七牛密钥。QINIU_BUCKET_NAME:七牛存储桶的名称。QINIU_BUCKET_DOMAIN:与七牛存储桶关联的域名。
使用方法
运行服务
uv run src/hrm/server.py
从 PyPI 安装后,你可以直接使用以下命令运行服务:
uvx ble-hrm-server
运行测试
uv run pytest
运行测试并统计覆盖率
uv run coverage run -m pytest
uv run coverage html
MCP 定义
资源
蓝牙 HRM 基于蓝牙协议,因此我们应使用 bleak 来发现设备并连接。
- 发现蓝牙设备并按 HRM 配置文件(心率服务 0x180D)筛选
- 资源:
discover://hrm
工具
-
工具:监测心率
monitoring_heart_rate- 摘要:在指定时长内开始监测设备心率,默认时长为 30 分钟(1800 秒)。监测将在后台进行。
- 输入:
- device_id:str,要监测的设备 UUID
- duration:int,监测时长,默认值为 1800 秒(30 分钟)
- 输出:无
-
工具:获取心率
get_heart_rate- 摘要:获取当前心率,使用最近 10 秒的数据并返回平均心率
- 输入:无(假设已有基线读数)
- 输出:当前心率(int),例如
{"avg_hr": 60}
-
工具:评估运动心率
evaluate_active_heart_rate- 摘要:评估最近 60 秒内的最高心率,并将本次运动期间观测到的最高值记录为运动心率。
- 输入:无(假设已有基线读数)
- 输出:最高心率(int),例如
{"max_hr": 100}
-
工具:获取心率分桶
get_heart_rate_bucket- 摘要:获取最近 10 秒的心率分桶数据,分桶大小为 1 秒。
- 输入:
- since_from:float,监测开始时间,默认为 10 秒前
- bucket_size:float,分桶大小,默认为 1 秒
- 输出:心率分桶:list[dict],例如
[{"time": 1715904000, "value": 60}, {"time": 1715904001, "value": 61}]
-
工具:构建心率图表
build_heart_rate_chart- 摘要:构建最近 600 秒的心率图表,分桶大小为动态值,默认大小为 1 秒。分桶数量上限为 60;如果分桶数量超过 60,分桶大小将增加为
duration / 60秒。 - 输入:
- since_from:float,监测开始时间,默认为 600 秒前
- 输出:心率图表 PNG URL:str,例如
https://example.com/chart.png
- 摘要:构建最近 600 秒的心率图表,分桶大小为动态值,默认大小为 1 秒。分桶数量上限为 60;如果分桶数量超过 60,分桶大小将增加为
MCP 设置
以下是此服务的 MCP 设置:
{
"mcpServers": {
"blue-hrm": {
"command": "uvx",
"args": [
"ble-hrm-server"
]
}
}
}
以下是 DeepSeek V3.1 测试用的 LLM 提示词示例:
你是一位健康专家,通过心率来检测测试者的心脏健康程度,现在测试者携带了蓝牙的心率带,
以下为检测步骤
- 你通过发现来获取的设备ID,通过rssi获取最接近的设备,再以此设备开始监控。
- 获取当前测试者的静息心率。
- 当测试结束后,提示测试者开始中高强度运动,比如波比跳,当测试者完成运动后,回复后,立刻测试其最高运动心率。
- 之后提示测试者计时休息2分钟,得到确认后,再次获取当前心率,并与最高心率的差额作为恢复心率。
最后通过恢复心率的值和以下列表评估测试者的心脏健康程度,并用健康专家的口吻给测试者一些关于心脏健康方面的建议。
------
- <22: 身体年龄略大于 真实年龄
- 22~52: 身体年龄= 真实年龄
- 53~58: 身体年龄略小于真实年龄
- 59~65: 身体年龄比真实年龄小
- >=66: 身体年龄比真实年龄小很多
代码覆盖率
| 名称 | 语句数 | 未覆盖 | 覆盖率 |
|---|---|---|---|
| src/hrm/__init__.py | 0 | 0 | 100% |
| src/hrm/bt_client.py | 139 | 5 | 96% |
| src/hrm/ts_db.py | 41 | 1 | 98% |
| 总计 | 180 | 6 | 97% |
赞助商
特别感谢七牛云提供存储服务。七牛还提供 LLM 推理服务。
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。