郊狼理疗仪

WingsButterfly/see-dg-lab
0 Stars 85 次浏览 WingsButterfly 更新于 2026-08-23

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 可以获取详细的连接信息,包括 disconnectedAtreconnectionTimeRemaining

使用流程

  1. 创建设备: 调用 dg_create_device 获取二维码内容
  2. 扫码绑定: 用户使用 DG-LAB APP 扫描二维码
  3. 检查状态: 调用 dg_get_device_status 确认 boundToApp: true
  4. 控制设备: 使用强度控制或波形控制工具

可用工具 (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 开源协议仅供爱好者自由使用设备,未经授权请勿将相关内容用于任何商业用途。

相关 MCP 服务