心率数据流服务

通过BLE胸带实时传输心率数据到Dreamer代理的MCP服务,适用于健康监测和运动训练场景。

  • by hbarra
  • Dart
  • 本地部署
  • 更新于
在 GitHub 查看 hbarra/heart-rate-2-mcp

使用说明

心率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工具

配对

每个应用程序安装都会生成一个格式唯一的配对代码 <animal><2-digit> (例如。, 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 --release

3.在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分钟
  • 数据存储在内存中(无数据库)
  • 数据在服务器重启后不会持续存在