心率2 MCP
通过MCP将实时心率数据从BLE胸带传输到Dreamer代理。
建筑
┌─────────────────┐ 1Hz ┌─────────────────┐
│ Mobile App │─────────────▶│ Backend + MCP │
│ (Flutter) │ POST /hr │ (Render) │
│ │ │ │
└─────────────────┘ └─────────────────┘
│ ▲
│ BLE │ sdk.callTool
▼ │
┌─────────────────┐ ┌─────────────────┐
│ Chest Strap │ │ Dreamer Agent │
│ (Garmin/Polar) │ │ │
└─────────────────┘ └─────────────────┘组件
移动应用程序(Flutter)
- 连接到BLE心率监测器(Garmin、Polar、Wahoo等)
- 计算心率区域(基于年龄或手动)
- 以1Hz将BPM+区域流式传输到后端
- 生成并显示配对代码
后端+MCP服务器(Node.js)
- 从移动应用程序接收心率数据
- 存储30分钟滚动窗口(在内存中)
- 为Dreamer代理公开MCP工具
配对
每个应用程序安装都会生成一个格式唯一的配对代码 ` (例如。, tiger42, falcon07`).
用户告诉他们的Dreamer代理:“我的心率代码是tiger42”,代理会将其存储以备将来查询。
MCP工具
| 工具 | 说明 |
|---|---|
getCurrentHeartRate | 获取最新的BPM和区域 |
getHeartRateHistory | 获取最后N秒的读数 |
getHeartRateStats | 获取各区域的平均值/最小值/最大值和时间 |
示例用法
// In a Dreamer agent
const result = await sdk.callTool('heart-rate-2-mcp', {
tool: 'getCurrentHeartRate',
arguments: { pairingCode: 'tiger42' }
});
// Returns: { bpm: 142, zone: 4, timestamp: "2024-01-15T10:23:45Z" }设置
1.部署服务器进行渲染
cd server
npm install
npm run build渲染时:
- 创建新的Web服务
- 连接GitHub仓库
- 构建命令:
npm install && npm run build - 启动命令:
npm start - 不需要环境变量
2.构建移动应用
cd app
flutter pub get
flutter build ios --release
flutter build apk --release3.在Dreamer中注册MCP工具
注册已部署的MCP端点(https://your-app.onrender.com/mcp)作为Dreamer中的一个工具。
发展
服务器
cd server
npm install
npm run dev移动应用
cd app
flutter pub get
flutter run该应用程序包括 测试模式 无需物理胸带即可模拟心率数据的按钮。
心率区域
使用标准公式根据年龄计算区域:
- 最大心率=220-年龄
- 1区:50-60%(回收率)
- 2区:60-70%(有氧运动)
- 区域3:70-80%(速度)
- 区域4:80-90%(基本要求)
- 区域5:90-100%(最大摄氧量)
用户还可以在应用程序设置中手动配置区域阈值。
支持设备
任何宣传心率服务(0x180D)的BLE设备:
- Garmin HRM Pro,HRM Dual
- 极地H10、H9、OH1
- Wahoo股票,tickk x
- 大多数通用胸带
数据保留
- 心率读数保持30分钟
- 数据存储在内存中(无数据库)
- 数据在服务器重启后不会持续存在
