一个MCP服务器,作为BLE心率监测器,用于连接HRM设备。
我们推荐使用虚拟环境和uv来管理依赖项。
此项目使用pyproject.toml进行依赖项管理。
# 创建并激活虚拟环境
python3 -m venv .venv
source .venv/bin/activate # 在Windows上使用`.venv\Scripts\activate`
# 如果尚未安装,请安装uv
pip install uv
# 安装依赖项
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
蓝牙HRM基于蓝牙协议,我们应该使用bleak来发现设备并连接到它。
discover://hrm工具:监测心率 monitoring_heart_rate
工具:获取心率 get_heart_rate
{"avg_hr": 60}工具:评估活动心率 evaluate_active_heart_rate
{"max_hr": 100}工具:获取心率桶 get_heart_rate_bucket
[{"time": 1715904000, "value": 60}, {"time": 1715904001, "value": 61}]工具:构建心率图表 build_heart_rate_chart
duration / 60秒。https://example.com/chart.png以下是服务器的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推理服务。