郊狼理疗仪
DG-LAB MCP SSE 服务器是一个基于 MCP (模型上下文协议) 的设备控制服务器,支持通过 AI 助手控制 DG-LAB 设备。该服务器的功能包括通过 SSE 实现 MCP 协议通信、内置 WebSocket 服务器、单端口设计、波形管理、持续播放、会话管理和断线重连。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"dg-lab": {
"args": [
"dg-lab-mcp"
],
"command": "npx",
"env": {
"PORT": "$PORT",
"PUBLIC_IP": "$PUBLIC_IP"
}
}
}
}
该服务需要配置环境变量:PORT、PUBLIC_IP
可用工具 (16 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
dg_connect 1 个参数
【第一步】创建DG-LAB设备连接。返回deviceId(后续操作必需)和qrCodeUrl(二维码链接)。 使用流程:1.调用此工具获取二维码的链接,然后如果有工具能生成二维码则使用 → 2.生成二维码后让用户用DG-LAB APP扫码 → 3.用户说扫了码后用dg_get_status检查boundToApp是否为true → 4.boundToApp为true后才能控制设备。 可选参数alias:创建时直接设置别名(必须唯一,大小写不敏感)。 注意:每次调用会创建新连接,建议先用dg_list_devices检查是否已有可用连接是属于用户的。
该工具无需必填参数,直接调用即可
dg_list_devices 1 个参数
列出所有已创建的设备连接及其状态。 返回字段说明: - deviceId: 设备唯一标识,用于后续所有操作 - alias: 设备别名(可选,用于方便识别) - connected: 会话是否已建立 - boundToApp: APP是否已扫码绑定(必须为true才能控制设备) - strengthA/B: 当前A/B通道强度(0-200) - strengthLimitA/B: A/B通道强度上限(由APP设置) - reconnectionTimeRemaining: 剩余重连时间(秒),仅在设备断开时显示,null表示设备已连接 可选参数alias用于按别名过滤设备。
该工具无需必填参数,直接调用即可
dg_set_alias 2 个参数 需填 2 项
为设备设置自定义别名,方便后续通过别名查找和管理设备。 别名可以是用户名、昵称或任何便于识别的名称。 注意:别名必须唯一,不能与其他设备的别名重复(大小写不敏感)。 设置后可通过dg_find_device按别名查找,或在dg_disconnect中使用别名断开连接。
必填参数:deviceId、alias
dg_find_device 1 个参数 需填 1 项
通过别名查找设备(大小写不敏感,支持模糊匹配)。 返回所有匹配的设备列表,包含完整状态信息。 适用场景:当知道用户别名但不记得deviceId时使用。 返回字段与dg_list_devices相同。
必填参数:alias
dg_disconnect 2 个参数
断开并删除设备连接,释放资源。 可通过deviceId精确删除单个设备,或通过alias删除所有匹配的设备。 注意:deviceId和alias只能二选一,不能同时提供。 删除后设备需要重新调用dg_connect创建新连接。
该工具无需必填参数,直接调用即可
dg_set_strength 5 个参数 需填 3 项
设置设备通道强度。必须在boundToApp为true后才能使用。 参数说明: - deviceId 或 alias: 设备标识(二选一,deviceId优先) - channel: A或B通道 - mode: increase(增加)/decrease(减少)/set(直接设置) - value: 强度值0-200,但实际不能超过strengthLimit 使用前请先用dg_get_status确认设备已绑定APP且了解当前强度上限。
必填参数:channel、mode、value
dg_send_waveform 5 个参数 需填 1 项
发送波形数据到设备,控制输出模式。必须在boundToApp为true后才能使用。 支持两种方式: 1. 直接提供waveforms数组(每项为16字符HEX字符串,最多100项) 2. 提供waveformName引用已保存的波形(通过dg_parse_waveform保存) 两种方式二选一,如果同时提供则优先使用waveforms。 波形会按顺序播放,播放完毕后停止。
必填参数:channel
dg_clear_waveform 3 个参数 需填 1 项
清空设备指定通道的波形队列,立即停止当前波形播放。 用于中断正在播放的波形或在发送新波形前清空队列。
必填参数:channel
dg_get_status 2 个参数
获取设备完整状态信息。 关键字段: - boundToApp: 是否已绑定APP(必须为true才能控制设备) - connected: 设备是否已连接 - strengthA/B: 当前A/B通道强度 - strengthLimitA/B: A/B通道强度上限(由APP设置,不可超过) - disconnectedAt: 设备断开连接的时间戳(仅在断开时显示) - reconnectionTimeRemaining: 剩余重连时间(秒),仅在设备断开时显示 建议在dg_connect后在用户说已完成后使用此接口检查boundToApp状态。
该工具无需必填参数,直接调用即可
dg_start_continuous_playback 5 个参数 需填 1 项
启动持续播放模式,循环发送波形数据直到手动停止。 功能: - 自动循环发送波形,适合需要持续输出的场景 - 使用动态等待机制,根据实际播放时长和发送耗时计算等待时间 - 每个 hexWaveform 代表 100ms 的播放时间 参数: - deviceId 或 alias: 设备标识(二选一,deviceId优先) - channel: A或B通道 - waveforms 或 waveformName: 波形数据来源(二选一) 与 dg_send_waveform 的区别: - dg_send_waveform: 一次性发送,播放完毕后停止 - dg_start_continuous_playback: 循环发送,直到手动停止
必填参数:channel
dg_stop_continuous_playback 3 个参数 需填 1 项
停止指定通道的持续播放。 会立即停止循环发送并清空波形队列。
必填参数:channel
dg_get_playback_status 2 个参数
获取设备的持续播放状态。 返回 A 和 B 通道的播放状态,包括: - playing: 是否正在播放 - waveformCount: 波形数量 - batchSize: 每次发送的波形数量 - bufferRatio: 缓冲比例 - playbackDuration: 播放时长(毫秒) - stats: 统计信息(发送次数、平均耗时)
该工具无需必填参数,直接调用即可
dg_parse_waveform 3 个参数 需填 1 项
解析 DG-LAB APP 导出的波形数据。 功能: - 解析 Dungeonlab+pulse: 格式的波形数据 - 转换为设备可用的 hexWaveforms 数组 - 可选择是否保存到存储供后续使用 参数: - hexData (必需): 波形数据字符串,必须以 "Dungeonlab+pulse:" 开头 - name (save=true时必需): 波形名称,用于保存和后续引用 - save (可选): 是否保存到存储,默认 false 使用场景: 1. 临时解析:只需要 hexWaveforms,不保存 → 只传 hexData,返回结果包含 hexWaveforms 2. 保存复用:解析并保存,后续通过 dg_get_waveform 获取 → 传 hexData、name、save=true 返回值: - success: 是否成功 - name: 波形名称 - saved: 是否已保存 - hexWaveformCount: hexWaveforms 数量 - hexWaveforms: 波形数据数组(仅当 save=false 时返回) - metadata: 元数据(sectionCount, totalDuration) - overwritten: 是否覆盖了已存在的波形(仅当覆盖时返回) 注意事项: - 波形数据从 DG-LAB APP 的"分享波形"功能导出 - 每个 hexWaveform 代表 100ms 的播放时间 - 相同名称会覆盖已存在的波形
必填参数:hexData
dg_list_waveforms
列出所有已保存的波形。 功能: - 获取存储中所有波形的概览信息 - 显示每个波形的名称和数据量 返回值: - count: 波形总数 - waveforms: 波形列表数组 - name: 波形名称 - hexWaveformCount: hexWaveforms 数量(每个代表 100ms) 典型工作流程: 1. dg_list_waveforms 查看可用波形 2. dg_get_waveform 获取具体波形数据 3. dg_send_waveform 发送到设备 注意事项: - 只显示通过 dg_parse_waveform (save=true) 保存的波形 - hexWaveformCount × 100ms = 波形总时长
该工具无需必填参数,直接调用即可
dg_get_waveform 1 个参数 需填 1 项
按名称获取已保存的波形数据。 功能: - 从存储中获取指定名称的波形 - 返回完整的 hexWaveforms 数组 参数: - name (必需): 波形名称 返回值: - name: 波形名称 - hexWaveforms: 波形数据数组,可直接用于 dg_send_waveform 典型工作流程: 1. dg_list_waveforms 查看可用波形 2. dg_get_waveform 获取具体波形数据 3. dg_send_waveform 或 dg_start_continuous_playback 发送到设备 与其他工具配合: - dg_send_waveform: 一次性发送波形 - dg_start_continuous_playback: 持续循环播放波形 注意事项: - 波形必须先通过 dg_parse_waveform (save=true) 保存 - 如果波形不存在会返回错误
必填参数:name
dg_delete_waveform 1 个参数 需填 1 项
按名称删除已保存的波形。 功能: - 从存储中永久删除指定波形 - 同时从磁盘持久化文件中移除 参数: - name (必需): 要删除的波形名称 返回值: - success: 是否成功 - deleted: 被删除的波形名称 ⚠️ 警告: - 删除操作不可逆! - 删除后需要重新用 dg_parse_waveform 解析保存 - 建议删除前确认波形名称 注意事项: - 如果波形不存在会返回错误 - 删除不会影响正在进行的持续播放
必填参数:name
服务介绍
DG-LAB MCP SSE Server
基于 MCP (Model Context Protocol) 的 DG-LAB 设备控制服务器,支持通过 AI 助手控制 DG-LAB 设备。
功能特性
- MCP 协议支持: 通过 SSE (Server-Sent Events) 实现 MCP 协议通信
- 内置 WebSocket 服务器: 无需外部 WS 后端,直接与 DG-LAB APP 通信
- 单端口设计: HTTP/SSE 和 WebSocket 共享同一端口
- 波形管理: 支持解析、保存、发送 DG-LAB 波形数据
- 持续播放: 支持波形持续循环播放
- 会话管理: 支持设备别名、多设备管理
- 断线重连: 设备断开后保留会话,支持在超时时间内重连而不丢失设置
安装
# 全局安装
npm install -g dg-lab-mcp
# 或使用 npx 直接运行
npx dg-lab-mcp
快速开始
直接运行
# 使用默认配置
npx dg-lab-mcp
# 设置公网 IP
PUBLIC_IP=1.2.3.4 npx dg-lab-mcp
# 设置端口
PORT=8080 npx dg-lab-mcp
配置 MCP 客户端
在 Claude Desktop 或其他 MCP 客户端的配置文件中添加:
{
"mcpServers": {
"dg-lab": {
"command": "npx",
"args": ["dg-lab-mcp"],
"env": {
"PUBLIC_IP": "你的公网IP"
}
}
}
}
Windows 配置文件位置: %APPDATA%\Claude\claude_desktop_config.json
macOS 配置文件位置: ~/Library/Application Support/Claude/claude_desktop_config.json
完整配置示例
{
"mcpServers": {
"dg-lab": {
"command": "npx",
"args": ["dg-lab-mcp"],
"env": {
"PUBLIC_IP": "your.public.ip",
"PORT": "3323",
"CONNECTION_TIMEOUT_MINUTES": "10",
"RECONNECTION_TIMEOUT_MINUTES": "5",
"MCP_TRANSPORT": "sse" // 可选: sse | http | stdio
}
}
}
}
环境变量
通过环境变量配置服务器:
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
3323 | 服务端口 (HTTP/WebSocket 共享) |
PUBLIC_IP |
(自动检测) | 公网 IP 地址,用于生成二维码。留空则使用本地 IP |
MCP_TRANSPORT |
sse | MCP 传输模式:sse(默认 SSE+POST)、http(纯 HTTP JSON-RPC)、stdio(标准输入输出,适合 npm 包内嵌) |
SSE_PATH |
/sse | SSE 端点路径 |
POST_PATH |
/message | POST 端点路径 |
HTTP_RPC_PATH |
/rpc | http 模式下的 JSON-RPC 路径 |
CONNECTION_TIMEOUT_MINUTES |
5 | 未绑定设备的超时时间(分钟) |
RECONNECTION_TIMEOUT_MINUTES |
5 | 已绑定设备断开后的重连等待时间(分钟),超时后会话将被删除 |
HEARTBEAT_INTERVAL |
30000 | WebSocket 心跳间隔 (ms) |
STALE_DEVICE_TIMEOUT |
3600000 | 设备活跃超时 (ms),默认 1 小时 |
WAVEFORM_STORE_PATH |
./data/waveforms.json | 波形存储路径 |
传输模式说明
sse(默认):Claude/HTTP 客户端使用 SSE + POST,保持原有行为。http:纯 HTTP JSON-RPC,同步响应,适合不需要 SSE 的客户端。stdio:从 stdin 读取 JSON-RPC,每行一条;有响应则写回 stdout(无需 HTTP 端口),便于作为 npm 包嵌入 MCP。
会话管理机制
连接超时 (CONNECTION_TIMEOUT_MINUTES)
- 创建设备后,如果在指定时间内未完成 APP 绑定,会话将自动销毁
- 默认 5 分钟,可通过环境变量配置
重连超时 (RECONNECTION_TIMEOUT_MINUTES)
- 已绑定的设备断开连接后,会话会保留一段时间等待重连
- 在此期间设备可以重新连接而不丢失设置(强度、波形等)
- 超时后会话将被自动删除
- 默认 5 分钟,可通过环境变量配置
- 注意: 未绑定的设备断开后会立即删除,不会等待重连
状态查询
- 使用
dg_list_devices可以看到设备的连接状态和剩余重连时间 - 使用
dg_get_device_status可以获取详细的连接信息,包括disconnectedAt和reconnectionTimeRemaining
使用流程
- 创建设备: 调用
dg_create_device获取二维码内容 - 扫码绑定: 用户使用 DG-LAB APP 扫描二维码
- 检查状态: 调用
dg_get_device_status确认boundToApp: true - 控制设备: 使用强度控制或波形控制工具
可用工具 (16 个)
设备管理
| 工具 | 说明 |
|---|---|
dg_create_device |
创建新设备会话,返回二维码内容 |
dg_list_devices |
列出所有设备及状态 |
dg_get_device_status |
获取指定设备的详细状态 |
dg_delete_device |
删除设备会话 |
强度控制
| 工具 | 说明 |
|---|---|
dg_set_strength |
设置 A/B 通道强度 (0-200) |
dg_adjust_strength |
增量调整强度 |
dg_get_strength |
获取当前强度值 |
波形控制
| 工具 | 说明 |
|---|---|
dg_send_waveform |
发送单次波形 |
dg_start_continuous_playback |
开始持续播放波形 |
dg_stop_continuous_playback |
停止持续播放 |
dg_get_playback_status |
获取播放状态 |
波形管理
| 工具 | 说明 |
|---|---|
dg_parse_waveform |
解析 DungeonLab+pulse 格式波形,可选保存 |
dg_list_waveforms |
列出所有已保存的波形 |
dg_get_waveform |
获取波形详情和 hexWaveforms |
dg_delete_waveform |
删除已保存的波形 |
开发
从源码运行
# 克隆仓库
git clone https://github.com/admilkjs/sse-dg-lab.git
cd sse-dg-lab/dg-lab-mcp-server
# 安装依赖
bun install
# 启动开发服务器
bun run dev
# 运行测试
bun test
项目结构
src/
├── index.ts # 入口文件
├── cli.ts # CLI 入口 (npx)
├── app.ts # 应用初始化
├── config.ts # 配置管理
├── server.ts # HTTP/SSE 服务器
├── ws-server.ts # WebSocket 服务器
├── session-manager.ts # 会话管理
├── tool-manager.ts # MCP 工具管理
├── waveform-parser.ts # 波形解析
├── waveform-storage.ts # 波形存储
└── tools/
├── device-tools.ts # 设备管理工具
├── control-tools.ts # 设备控制工具
└── waveform-tools.ts # 波形管理工具
许可证
MIT
声明
本项目基于 DG-LAB 开源协议 实现设备通信功能。DG-LAB 开源协议仅供爱好者自由使用设备,未经授权请勿将相关内容用于任何商业用途。