内容
# Behringer WING MCP
适用于Behringer WING数字混音台的Model Context Protocol(MCP)服务器。
该服务器为控制WING、WING Compact或WING Rack提供了一套实用工具集。它通过OSC/UDP与混音台通信,并使用无状态的请求/响应调用,因此可以在同一网络上与其他WING集成共存。
## 当前状态
这是早期开源实现。已键入的工具涵盖了常见的通道操作:
- 设置推子级别
- 相对调整推子级别
- 静音或取消静音通道
- 设置声像
- 设置通道名称
- 按通道名称查找/列出通道
- 从键入的源/目标字段设置总线发送级别
- 读取小通道状态快照
- 读取或写入原始OSC地址作为逃生门
代码可以在没有混音台的情况下编译和测试。实际的OSC调用需要在同一网络上连接WING。
## 要求
- Node.js 20或更新版本
- 可在网络上访问的Behringer WING系列混音台
- 混音台上启用并解锁OSC
WING OSC服务默认使用UDP端口`2223`。混音台还具有TCP控制界面,端口为`2222`,但此MCP服务器仅使用OSC。
## 从源代码安装
```bash
git clone https://github.com/ralfferreira/behringer-wing-mcp.git
cd behringer-wing-mcp
npm ci
npm run build
```
## 配置混音台
在混音台上,打开远程/网络设置并确保:
- 启用OSC远程控制
- 关闭OSC远程锁定
- 混音台具有可从运行MCP服务器的机器访问的IP地址
避免将混音台网络暴露在公共互联网上。OSC控制界面适用于受信任的本地网络。
## 配置MCP客户端
首先编译项目,然后将MCP客户端指向`dist/index.js`。
示例:
```json
{
"mcpServers": {
"wing": {
"command": "node",
"args": ["/absolute/path/to/behringer-wing-mcp/dist/index.js"],
"env": {
"WING_HOST": "192.168.1.50"
}
}
}
}
```
Windows示例路径:
```json
{
"mcpServers": {
"wing": {
"command": "node",
"args": ["C:/Users/USER/Documents/Code/behringer-wing-mcp/dist/index.js"],
"env": {
"WING_HOST": "192.168.1.50"
}
}
}
}
```
## 环境变量
| 变量 | 是否必需 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `WING_HOST` | 是 | - | 混音台IP地址或主机名。 |
| `WING_PORT` | 否 | `2223` | OSC UDP端口。 |
| `WING_TIMEOUT_MS` | 否 | `1500` | 一个OSC请求/响应的超时时间。 |
| `WING_READ_ONLY` | 否 | `false` | 设置为`true`、`1`、`yes`或`on`以阻止写入工具。 |
## 工具
| 工具 | 描述 |
| --- | --- |
| `set_fader` | 以dB为单位设置通道推子级别。 |
| `adjust_fader` | 相对更改通道推子级别,单位为dB。 |
| `set_mute` | 静音或取消静音通道。 |
| `set_pan` | 设置通道声像,从`-100`左到`100`右。 |
| `set_name` | 设置通道名称。 |
| `get_strip_status` | 读取通道名称、推子、静音和声像。 |
| `find_strip_by_name` | 在通道种类中搜索通道名称。 |
| `list_strips` | 读取通道ID和名称的紧凑实时列表,可选状态。 |
| `set_bus_send` | 设置通道、辅助或总线发送级别到总线目的地。 |
| `osc_get` | 读取任意原始OSC地址。 |
| `osc_set` | 写入任意原始OSC地址,然后读取回来。 |
支持的通道种类:
| 类型 | 范围 | 备注 |
| --- | --- | --- |
| `ch` | `1-40` | 主输入通道。 |
| `aux` | `1-8` | 辅助输入通道。 `ch` + `aux`一起映射到WING系列48个输入通道。 |
| `bus` | `1-16` | 总线。 |
| `main` | `1-4` | 主总线。 |
| `mtx` | `1-8` | 矩阵。 |
| `dca` | `1-16` | 远程控制模型中的DCA。 |
## 自然语言助手示例
这些工具旨在让MCP客户端从简单的提示中工作,而无需了解每个OSC叶子。
```text
adjust_fader kind="ch" index=12 delta_db=-3
find_strip_by_name query="pastor mic"
list_strips kinds=["ch","aux","bus"] include_status=false
set_bus_send source_kind="ch" source_index=1 bus=5 db=-12 enabled=true
```
`find_strip_by_name`返回具有`kind`、`index`、`id`、`name`和`score`的排名匹配。如果多个匹配具有相同的最高分数,请使用显式`kind`和`index`调用写入工具。
`list_strips`执行实时请求/响应读取。默认情况下,它仅读取通道名称以获取ID到标签的紧凑映射;设置`include_status=true`还可以读取推子、静音和声像值。
`set_bus_send`写入`/ <source> / <index> / send / <bus> / lvl`,并接受源类型`ch`、`aux`和`bus`。当提供`enabled`时,它还会写入发送`on`状态。像每个写入助手一样,它被`WING_READ_ONLY=true`阻止。
## 原始OSC示例
使用原始OSC工具获取尚未被键入工具覆盖的参数:
```text
osc_get address="/ch/1/fdr"
osc_set address="/ch/1/mute" value=1 force_type="i"
osc_set address="/ch/1/name" value="Lead Vox" force_type="s"
```
原始写入可以立即影响实时混音。使用`WING_READ_ONLY=true`时,您只想检查值。
## 开发
```bash
npm ci
npm test
npm run build
```
有用脚本:
- `npm run build`编译TypeScript到`dist/`
- `npm test`编译并运行离线单元测试
- `npm run dev`启动TypeScript监视模式
- `npm start`运行编译后的服务器
使用MCP检查器试用服务器:
```bash
WING_HOST=192.168.1.50 npx @modelcontextprotocol/inspector node dist/index.js
```
PowerShell:
```powershell
$env:WING_HOST = "192.168.1.50"
npx @modelcontextprotocol/inspector node dist/index.js
```
## 项目布局
```text
src/index.ts MCP服务器和工具定义
src/osc.ts 最小OSC编码器/解码器和UDP客户端
src/wing.ts WING地址助手和键入操作
src/*.test.ts OSC和地址助手的离线测试
```
## 参考
- [Behringer WING产品页面](https://www.behringer.com/wing)
- [Behringer WING Rack文档列表](https://www.behringer.com/wing/wing-rack)
- [Patrick-Gilles Maillot WING远程控制资源](https://sites.google.com/site/patrickmaillot/wing)
- [Bitfocus Companion Behringer WING模块](https://github.com/bitfocus/companion-module-behringer-wing)
## 许可证
MIT