使用说明
配套MCP
MCP服务器 Bitfocus伴侣.公开了53个工具,涵盖了经过验证的按钮控制、样式、页面发现、运行时摘要、库存差异、检查点回滚/恢复工作流、预设管理、变量管理和批处理显示编程,因此AI助手可以通过Companion的当前API操作Stream Deck表面和其他Companion连接的设备。
为现场制作而建。与配对 grandMA2 MCP, Resolume MCP, MADRIX MCP,以及 超越MCP 完全由人工智能驱动的节目控制。
该仓库还包括一个轻量级的本地浏览器UI,供那些希望在不手动发出MCP工具调用的情况下获得相同验证流的人使用。
为什么存在
Companion是将实时生产堆栈连接在一起的物理按钮层。操作员按下Stream Deck按钮,它会发出grandMA2提示,触发Resolume片段,或启动激光序列。但是对这些按钮进行编程是手动的——你一次点击一个按钮,配置操作、标签和颜色。
这个MCP服务器允许AI完成这项工作。它可以读取您当前的按钮布局,在应用更改之前预览更改,并在几秒钟内对整个页面进行批处理。结合MA2 Agent和Resolume MCP,AI助手可以从一次对话中对整个节目控制界面进行编程。
快速开始
git clone https://github.com/drohi-r/companion-mcp && cd companion-mcp
uv sync
uv run python -m companion_mcp
浏览器用户界面
运行本地操作员UI:
uv run companion-mcp-ui
然后打开:
http://127.0.0.1:8088
UI首先是本地的。它与MCP工具位于相同的后端逻辑之上,因此经过验证的写入、快照、预设和回滚在浏览器中的行为与通过MCP的行为相同。
确保Companion正在目标主机和端口上运行。当前Companion版本使用:
- 用于按钮操作和样式写入的HTTP端点
- websocket-tRPC位于
/trpc用于更丰富的读取、发现、预览和变量检查
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
COMPANION_HOST |
127.0.0.1 |
配套实例IP |
COMPANION_PORT |
8000 |
配套HTTP和websocket端口 |
COMPANION_TIMEOUT_S |
10.0 |
HTTP请求超时(秒) |
COMPANION_ALLOWED_HOSTS |
127.0.0.1,localhost,::1 |
目标主机的逗号分隔的列表。集 * 允许任何。 |
COMPANION_WRITE_ENABLED |
1 |
设置为 0 用于只读模式 |
COMPANION_TRANSPORT |
stdio |
MCP传输(stdio, sse, streamable-http) |
COMPANION_UI_HOST |
127.0.0.1 |
浏览器UI绑定地址 |
COMPANION_UI_PORT |
8088 |
浏览器UI端口 |
建筑
graph TD
A["Companion MCP Server<br/><code>companion_mcp</code><br/>53 tools · safety gate"] --> B
B["HTTP Client<br/>Button actions · style writes"] --> D
A --> C
C["WebSocket tRPC Client<br/>Discovery · preview · variables"] --> D
D["Bitfocus Companion<br/>HTTP + WebSocket at /trpc"]
E["Browser UI<br/><code>companion-mcp-ui</code><br/>Local operator console"] -.-> A
F["Snapshot Engine<br/>Inventory · presets · rollback"] -.-> A
G["Verification Layer<br/>Render polling · diff · transactions"] -.-> A
style A fill:#1a1a2e,stroke:#14B8A6,color:#fff
style B fill:#1a1a2e,stroke:#14B8A6,color:#fff
style C fill:#1a1a2e,stroke:#14B8A6,color:#fff
style D fill:#1a1a2e,stroke:#0f3460,color:#fff
style E fill:#0f3460,stroke:#0f3460,color:#fff
style F fill:#0f3460,stroke:#0f3460,color:#fff
style G fill:#0f3460,stroke:#0f3460,color:#fff
工具
发现和阅读
用于了解Companion当前状态的安全只读工具。
| 工具 | 它做什么 |
|---|---|
get_server_config |
返回当前MCP服务器配置和安全设置 |
health_check |
Probe Companion API可达性和返回状态 |
list_surfaces |
列出连接的控制面(流甲板等) |
get_button_info |
读取特定按钮的当前控件和预览状态 |
get_button_runtime_summary |
返回按钮的紧凑的面向操作员的运行时摘要 |
get_page_grid |
从页面读取矩形按钮网格 |
snapshot_page_inventory |
导出具有简洁按钮摘要、样式、反馈和预览哈希的页面区域 |
save_page_inventory_snapshot |
将命名页面清单检查点保存到磁盘 |
load_page_inventory_snapshot |
从磁盘加载已保存的页面清单检查点 |
list_page_inventory_snapshots |
列出已保存的页面库存检查点文件 |
delete_page_inventory_snapshot |
删除已保存的页面清单检查点文件 |
diff_page_inventory |
比较两页库存快照并总结更改的按钮 |
preview_restore_page_style_from_inventory |
将保存的库存快照转换为还原计划,而无需写入Companion |
preview_restore_page_style_from_snapshot |
从已命名的已保存快照预览还原计划 |
save_page_style_preset |
将当前页面样式条目另存为可重复使用的预设 |
load_page_style_preset |
加载已保存的页面样式预设 |
list_page_style_presets |
列出已保存的页面样式预设 |
delete_page_style_preset |
删除已保存的页面样式预设 |
preview_apply_page_style_preset |
预览应用带有可选偏移量的已保存页面样式预设 |
find_buttons |
按可见文本、控件id、控件类型、连接id或定义id搜索页面区域 |
export_page_layout |
将页面区域导出为可重用的布局有效负载 |
get_custom_variable |
读取Companion自定义变量 |
get_module_variable |
从Companion模块连接读取变量 |
snapshot_custom_variables |
在一次调用中读取自定义变量的命名列表 |
verify_button_render_change |
将当前按钮预览哈希与上一个进行比较 |
预览(写作前计划)
无需触摸Companion即可验证和预览操作。使用这些来检查批处理操作在提交之前会做什么。
| 工具 | 它做什么 |
|---|---|
preview_page_style |
验证并预览页面样式批处理 |
preview_label_button_grid |
将标签网格解析为坐标 |
preview_button_template |
将可重复使用的模板放置在原点并预览结果 |
按钮操作
要求 COMPANION_WRITE_ENABLED=1 (默认)。
| 工具 | 它做什么 |
|---|---|
press_button |
按下并松开按钮 |
press_button_verified |
按下按钮并轮询可见/运行时状态更改 |
hold_button |
按住(仅向下操作) |
release_button |
松开按住的按钮(向上动作) |
rotate_left |
向左旋转编码器 |
rotate_right |
将编码器向右旋转 |
set_step |
设置当前操作步骤 |
按钮样式
| 工具 | 它做什么 |
|---|---|
set_button_text |
更改按钮显示文本 |
set_button_color |
更改文本和/或背景颜色(6位十六进制) |
set_button_style |
一次设置多个样式属性 |
set_button_style_verified |
应用样式更改并轮询,直到渲染完成或超时到期 |
批量操作
| 工具 | 它做什么 |
|---|---|
press_button_sequence |
按顺序按下多个按钮,延迟可配置 |
set_page_style |
在页面上的多个按钮上批量设置样式 |
set_page_style_verified |
在页面上批量设置样式,按按钮返回验证以及库存差异 |
restore_page_style_from_inventory |
从以前捕获的页面清单中恢复按钮样式 |
restore_selected_page_style_from_inventory |
仅从库存快照中还原选定的坐标 |
restore_page_style_from_snapshot |
从已命名的已保存快照还原样式 |
apply_page_style_transaction |
保存回滚检查点,应用已验证的样式,并返回回滚元数据 |
rollback_page_style_transaction |
回滚命名事务快照 |
apply_page_style_preset |
应用带有可选偏移量的已保存页面样式预设 |
label_button_grid |
从简单的名称列表中标记按钮网格 |
apply_button_template |
在页面原点应用可重用的按钮模板 |
变量和系统
| 工具 | 它做什么 |
|---|---|
set_custom_variable |
编写Companion自定义变量 |
rescan_surfaces |
重新扫描连接的USB表面 |
press_bank_button |
传统银行API(已弃用,仍然有效) |
克劳德桌面版
{
"mcpServers": {
"companion": {
"command": "uv",
"args": ["run", "--directory", "/path/to/companion-mcp", "python", "-m", "companion_mcp"],
"env": {
"COMPANION_HOST": "127.0.0.1",
"COMPANION_PORT": "8000"
}
}
}
}
VS代码/光标
{
"servers": {
"companion": {
"command": "uv",
"args": ["run", "--directory", "/path/to/companion-mcp", "python", "-m", "companion_mcp"],
"env": {
"COMPANION_HOST": "127.0.0.1",
"COMPANION_PORT": "8000"
}
}
}
}
法典
创建一个 codex.json MCP配置文件:
{
"mcpServers": {
"companion": {
"command": "uv",
"args": ["run", "--directory", "/path/to/companion-mcp", "python", "-m", "companion_mcp"],
"env": {
"COMPANION_HOST": "127.0.0.1",
"COMPANION_PORT": "8000"
}
}
}
}
然后使用以下命令运行Codex:
codex --mcp-config codex.json
安全生产
此服务器专为现场表演环境而设计,意外写入可能会中断正在运行的生产。
- 主机分配 --只有
127.0.0.1,localhost,以及::1默认情况下是允许的。通过以下方式显式添加LAN主机COMPANION_ALLOWED_HOSTS. - 写控制 --set
COMPANION_WRITE_ENABLED=0以阻止所有写入操作。读取和预览工具仍然可用。 - 应用前预览 --每个批处理操作都有一个相应的预览工具,可以验证输入并准确显示将要更改的内容,而无需触摸Companion。
- 已验证写入 --更喜欢
press_button_verified和set_button_style_verified当你关心实际的可见或运行时状态变化时,而不仅仅是HTTP接受度。 - 快照和差异工作流 --使用
snapshot_page_inventory批量更改前后,或让set_page_style_verified自动生成库存差异。 - 回滚路径 --使用以下命令捕获页面
snapshot_page_inventory或save_page_inventory_snapshot,检查恢复计划preview_restore_page_style_from_inventory或preview_restore_page_style_from_snapshot,然后使用匹配还原工具将样式干净地回滚。 - 交易流程 —
apply_page_style_transaction在写入之前创建一个命名的回滚检查点。rollback_page_style_transaction从该命名快照恢复。 - 预设工作流程 --使用保存可重用的页面样式
save_page_style_preset,检查preview_apply_page_style_preset,并使用进行部署apply_page_style_preset. - 输入验证 -页面、行、列、颜色十六进制、延迟边界和模板结构都在进行任何API调用之前进行验证。无效输入返回结构化JSON错误,从不返回原始异常。
- 错误隔离 --所有工具都包裹在
_handle_errors。返回网络故障、JSON解析错误和验证失败{"ok": false, "error": "...", "blocked": true}而不是使MCP会话崩溃。
现场行为记录
- 成功的HTTP写入并不总是意味着按钮会立即发生明显的变化。
- 当前的Companion版本可以先更新存储的样式状态,然后在短时间内重新绘制预览。
set_button_style_verified和press_button_verified包括有界轮询,以便MCP可以区分:- 已接受写入,但未观察到任何变化
- 写入已接受,预览在短暂延迟后更改
- 写入已接受,样式状态已更改,但可见渲染仍未更改
为什么UI有帮助
MCP后端已经是真正的产品了。UI不会取代它;它使人类更快、更安全:
- 点击页面网格中的按钮,而不是记住
page,row,column - 在一个地方检查预览、样式、运行时摘要和上次验证的响应
- 保存和浏览快照和预设,而无需打开JSON文件
- 在节目准备期间从浏览器运行经过验证的样式更改和事务回滚
- 将系统交给不会手动键入MCP呼叫的操作员
发展
uv sync
uv run python -m pytest -v