ATEM MCP服务器
使用模型上下文协议通过AI助手控制Blackmagic ATEM视频切换器。使用 克劳德桌面, claude.ai, 克劳德·莫比尔, 光标,以及任何兼容MCP的客户端。
用简单的英语与您的切换器交谈: *“将相机2置于程序中并溶解”* 或 *“开始流式传输和录制”* 或 *“运行宏3。”*
支持两者 本地 (stdio)和 远程 (OAuth 2.0的流式HTTP)传输。
运作原理
You (natural language)
│
▼
Claude (Anthropic Cloud)
│ translates to MCP tool calls
▼
ATEM MCP Server (your Mac/PC)
│ uses atem-connection library
▼
ATEM Switcher (network)
│ executes commands
▼
ATEM Software Control / hardware
│ reflects changes in real time支持的ATEM型号
底层 atem-connection 库(由NRK/Sofie提供)支持每一代ATEM:
- ATEM迷你、迷你专业、迷你专业ISO、迷你极端、迷你极端ISO
- ATEM电视演播室HD、HD8、HD8 ISO
- ATEM 1 M/E、2 M/E、4 M/E制作工作室/星座
- ATEM SDI、SDI Pro ISO、SDI Extreme ISO
- 以及所有其他Blackmagic ATEM型号
快速开始
1.安装
cd atem-mcp-server
npm install
npm run build2.配置克劳德桌面
编辑您的Claude Desktop配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json\ 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"atem": {
"command": "/opt/homebrew/bin/node",
"args": ["/path/to/atem-mcp-server/dist/index.js"],
"env": {
"ATEM_HOST": "192.168.1.100"
}
}
}
}注: 替换/opt/homebrew/bin/node使用完整的Node.js路径(运行which node找到它)。用ATEM的地址替换IP。
3.重新启动克劳德桌面
退出并重新启动Claude Desktop。你应该看看锤子(🔨) 指示MCP工具可用的图标。
4.开始与你的切换器交谈
- *“通过192.168.1.100连接到我的ATEM”*
- *“显示当前切换器状态”*
- *“将相机3置于预览状态并将其溶解”*
- *“褪色成黑色”*
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
ATEM_HOST | ATEM IP地址(启用自动连接) | -- |
ATEM_PORT | ATEM端口 | 9910 |
TRANSPORT | 运输方式: stdio 或 http | stdio |
PORT | HTTP服务器端口(当 TRANSPORT=http) | 3000 |
BASE_URL | OAuth端点的公共URL(在隧道/代理后面时) | http://localhost:PORT |
如果 ATEM_HOST 设置后,服务器将在启动时自动连接。否则,请使用 atem_connect 手动连接。
远程访问(claude.ai、claude Mobile、HTTP)
HTTP传输将MCP服务器暴露为内置OAuth 2.0的web端点。这允许从以下位置进行远程访问 claude.ai, 克劳德·莫比尔,以及任何支持HTTP的MCP客户端。
快速启动(HTTP模式)
TRANSPORT=http BASE_URL=https://atem.yourdomain.com ATEM_HOST=192.168.1.100 node dist/index.js服务器在端口3000上启动时具有:
- MCP端点:
POST /mcp(需要不记名代币) - OAuth 2.0: 全自动配置流程(发现、注册、授权、令牌交换)
- 健康检查:
GET /health
从claude.ai连接
- 首选 claude.ai/设置/连接器
- 点击 添加自定义连接器
- 输入您的MCP URL(例如。,
https://atem.yourdomain.com/mcp) - 点击 连接 --OAuth流自动完成
- 开始对话并远程控制您的ATEM
从克劳德桌面(远程)连接
{
"mcpServers": {
"atem": {
"url": "https://atem.yourdomain.com/mcp"
}
}
}不 command 或 args 需要--服务器远程运行。
OAuth 2.0实现
HTTP服务器为MCP身份验证实现了完整的OAuth 2.0流程:
| 终点 | 目的 |
|---|---|
GET /.well-known/oauth-protected-resource | RFC 9728资源元数据 |
GET /.well-known/oauth-authorization-server | 授权服务器元数据 |
POST /register | 动态客户端注册(DCR) |
GET /authorize | 授权端点(自动批准) |
POST /token | 代币交换(发行不记名代币) |
OAuth服务器自动提供令牌,无需用户交互,专为个人/可信使用而设计。对于生产环境,考虑添加适当的身份验证。
通过Cloudflare隧道进行公开
使用命名的Cloudflare隧道作为永久URL——没有端口转发,没有动态DNS,没有更改URL。
先决条件
- 自由的 云耀 账户
- 由Cloudflare DNS管理的域
cloudflared已安装CLI(brew install cloudflared在macOS上)
设置
1.验证并创建隧道
cloudflared login
cloudflared tunnel create atem-mcp注意隧道ID(UUID)。
2.路由DNS
cloudflared tunnel route dns atem-mcp atem.yourdomain.com3.创建配置文件 (~/.cloudflared/config.yml)
tunnel:
credentials-file: ~/.cloudflared/.json
ingress:
- hostname: atem.yourdomain.com
service: http://localhost:3000
- service: http_status:4044.启动服务器和隧道
# Terminal 1: MCP server
TRANSPORT=http BASE_URL=https://atem.yourdomain.com ATEM_HOST=192.168.1.100 node dist/index.js
# Terminal 2: Cloudflare tunnel
cloudflared tunnel run atem-mcp您的MCP端点现在位于 https://atem.yourdomain.com/mcp.
关键:禁用Cloudflare AI Bot阻止
如果您使用Cloudflare并从claude.ai连接,则必须禁用ai bot阻止,否则claude.ai的请求将被403静默阻止。
Claude.ai的后端使用 Claude-User 来自Google Cloud Platform IP的用户代理。Cloudflare的“阻止AI训练机器人”管理规则在这些请求到达您的服务器之前阻止它们。
要修复:
- 首选 Cloudflare仪表板 >选择您的域名
- 在 概述 页面,查找 “阻止人工智能训练机器人” 在右侧边栏上
- 使从…变成 “阻止所有页面” 到 “不要阻塞(允许爬虫)”
您可以在中验证 安全>分析>事件 --被阻止的请求显示为 Service: Managed rules, Rule: Manage AI bots, User agent: Claude-User.
作为后台服务运行(macOS)
sudo cloudflared service install这将创建一个启动守护进程,在启动时启动隧道。
有用的命令
cloudflared tunnel list # List all tunnels
cloudflared tunnel info atem-mcp # Show tunnel details
cloudflared tunnel cleanup atem-mcp # Remove stale connections
cloudflared tunnel delete atem-mcp # Delete the tunnel entirely可用工具(58个工具)
连接
| 工具 | 说明 |
|---|---|
atem_connect | 通过IP连接到ATEM切换器 |
atem_disconnect | 断开ATEM |
atem_get_status | 获取模型、输入、程序/预览状态 |
切换
| 工具 | 说明 |
|---|---|
atem_set_program | 设置程序(实时)输入 |
atem_set_preview | 设置预览(下一个)输入 |
atem_cut | 硬切过渡 |
atem_auto_transition | 自动转换(溶解/擦除等) |
atem_fade_to_black | 将淡入淡出切换为黑色 |
atem_preview_and_auto | 在一次通话中设置预览+自动过渡 |
过渡
| 工具 | 说明 |
|---|---|
atem_set_transition_style | 设置混合、浸渍、擦拭、DVE或刺 |
atem_set_transition_rate | 以帧为单位设置过渡持续时间 |
atem_set_transition_position | 手动T形杆位置(0.0–1.0) |
atem_get_transition_state | 获取当前过渡设置 |
路线和钥匙
| 工具 | 说明 |
|---|---|
atem_set_aux_source | 将输入路由到辅助输出 |
atem_get_aux_source | 获取当前辅助路由 |
atem_set_dsk_on_air | 下游开/关空气调节器 |
atem_auto_dsk | DSK的自动转换 |
atem_set_dsk_sources | 设置DSK填充和关键源 |
atem_set_usk_on_air | 上游键盘开/关空气 |
atem_set_usk_sources | 设置USK填充和切割源 |
宏
| 工具 | 说明 |
|---|---|
atem_macro_run | 按索引运行宏 |
atem_macro_stop | 停止运行宏 |
atem_macro_continue | 继续暂停的宏 |
atem_list_macros | 列出所有已定义的宏 |
录制和流媒体
| 工具 | 说明 |
|---|---|
atem_start_recording | 开始录制 |
atem_stop_recording | 停止录制 |
atem_start_streaming | 开始流媒体播放 |
atem_stop_streaming | 停止流媒体播放 |
atem_get_recording_status | 获取录制/流媒体状态 |
超级来源
| 工具 | 说明 |
|---|---|
atem_get_supersource_state | 获取所有框的位置、来源、艺术和边框设置 |
atem_set_supersource_box | 配置单个框(来源、位置、大小、裁剪) |
atem_set_supersource_layout | 使用预设设置布局(并排、2x2网格、PiP等) |
atem_set_supersource_art | 配置艺术填充/剪切源、前景/背景 |
atem_set_supersource_border | 配置边框宽度、颜色、斜面、光源 |
atem_go_gallery | 2x2画廊网格:主人+3位客人,通过音频级别优先考虑活动扬声器 |
atem_cut_to_active_speaker | 将全屏切换到当前正在讲话的人(通过音频级别检测) |
atem_auto_switch_on | 开始自动切换:程序模式(全屏)、ssrc_box模式(超级源框)或host_ssrc模式(主机全屏+访客并排) |
atem_auto_switch_off | 停止自动切换模式 |
atem_get_auto_switch_status | 检查自动开关是否正在运行,请参阅统计数据 |
atem_save_look | 将当前超级源布局另存为命名的“外观”(框、艺术、边框) |
atem_load_look | 加载保存的外观并应用它——可以选择覆盖不同访客的来源 |
atem_list_looks | 列出所有保存的外观及其描述和框数 |
atem_delete_look | 删除已保存的外观 |
混音器(Fairlight+经典)
音频工具自动检测混音器类型。 费尔莱特 用于ATEM Mini Extreme、Constellation和较新型号。 经典 用于ATEM Mini、Mini Pro和旧型号。
| 工具 | 说明 |
|---|---|
atem_set_audio_mixer_input | 设置输入增益、推子、平衡、混合模式(Fairlight或Classic) |
atem_set_audio_master_output | 设置主输出增益/衰减器 |
atem_get_audio_state | 获取完整的音频混音器状态(报告混音器类型) |
Fairlight EQ&Dynamics
适用于配备Fairlight音频的ATEM型号(Mini Extreme、Constellation及更新型号)的全参数均衡器、压缩器、限制器和门/扩展器控制。包括常见用例的EQ预设。
| 工具 | 说明 |
|---|---|
atem_set_fairlight_eq | 在输入端设置单个EQ频带(形状、频率、增益、Q) |
atem_set_fairlight_eq_preset | 应用EQ预设:人声、播客、音乐、de_mud或平面 |
atem_set_fairlight_compressor | 设置压缩机(阈值、比率、启动、保持、释放) |
atem_set_fairlight_limiter | 设置限制器(阈值、攻击、保持、释放) |
atem_set_fairlight_gate | 设置噪声门/扩展器(阈值、范围、比率、攻击、释放) |
atem_get_fairlight_eq_state | 获取输入的完整EQ+动态状态 |
atem_set_fairlight_master_eq | 在主输出上设置EQ波段 |
atem_set_fairlight_master_compressor | 将压缩机设置为主输出 |
atem_set_fairlight_master_limiter | 在主输出上设置限制器 |
atem_set_fairlight_makeup_gain | 在输入端设置化妆增益 |
atem_reset_fairlight_dynamics | 将压缩机/限制器/闸门重置为出厂默认值 |
atem_reset_fairlight_eq | 将EQ重置为出厂默认值 |
通用输入ID
| ID | 来源 |
|---|---|
| 1–20 | 物理SDI/HDMI输入 |
| 1000 | 颜色条 |
| 2001 | 颜色生成器1 |
| 2002 | 颜色生成器2 |
| 3010 | 媒体播放器1 |
| 3011 | 媒体播放器1键 |
| 3020 | 媒体播放器2 |
| 3021 | 媒体播放器2键 |
| 6000 | 超级来源 |
| 10010 | 黑色 |
| 10011 | 清洁饲料1(程序) |
| 10012 | 清洁饲料2 |
对话示例
基本切换:
“将摄像头1设置为程序”\ “将预览设置为相机3,并进行2秒的溶解”\ “剪切成彩色条”
显示设置:
“设置过渡样式以与45帧率混合”\ “将摄像头1连接到辅助1,用于置信度监视器”\ “播放DSK1的下三分之一图形”
流媒体/录制:
“开始流式传输和录制”\ “录制状态如何?”\ “停止流媒体播放,但继续录制”
音频(Fairlight&Classic):
“将摄像头2音频降低5 dB” “将摄像头1音频设置为音频跟随视频模式” “将输入端3的音频静音” “将主输出设置为-3dB” “显示混音器状态”
Fairlight EQ&Dynamics:
“将人声均衡器预设应用于麦克风1” “以3kHz的频率增强摄像头2音频的存在感” “添加一个压缩器到麦克风1--4:1的比率,阈值为-20dB” “屏蔽麦克风2,使其在-40dB以下关闭” “在-3dB的主机上安装一个限制器” “显示输入1的EQ和动态状态” “将摄像头1上的所有均衡器重置为平坦”
图库和活动扬声器:
“前往画廊” “与2、3和5号摄像机上的客人一起去画廊” “切换到活动扬声器” “自动开关” *(开始连续跟随当前扬声器)* “自动切换主机+有源扬声器” *(主持人讲话时全屏,客人讲话时并排)* “自动关闭” “与摄像头1和2并排设置” “用3切到主机”
保存和召回外观:
“将此外观另存为播客4” “加载播客4” “加载带有摄像头2、3、6、7的播客4” *(重用不同来源的布局几何图形)* “我保存了什么外观?” “删除旧的_test外观”
建筑
此服务器使用 atem连接 该库(由NRK/Sofie TV Automation提供)通过UDP实现Blackmagic专有的ATEM协议。它与ATEM软件控制使用的协议相同,因此所有更改都会在所有连接的客户端上实时反映出来。
MCP服务器包装 atem-connection 方法作为Claude(或任何兼容MCP的AI)可以调用的MCP工具。每个工具映射到一个或多个ATEM命令。
运输方式:
- 标准 (默认)--适用于Claude Desktop、Cursor和本地MCP客户端
- 超文本传输协议 (
TRANSPORT=http)--使用OAuth 2.0的流式HTTP,用于claude.ai、claude Mobile和远程访问。使用快捷+原始http.createServer以便使用MCP SDK进行正确的标头处理。
直播节目使用情况
在现场生产期间使用此服务器控制ATEM时,您需要立即执行每个命令——没有确认对话框,没有批准提示,没有延迟。体验因客户而异:
客户行为
| 客户 | 工具批准 | 最适合 |
|---|---|---|
| claude.ai | 无需批准——工具立即运行 | 直播节目,远程控制 |
| 克劳德·莫比尔 | 无需批准——工具立即运行 | 移动控制 |
| 克劳德桌面 | 无需批准——工具立即运行 | 本地生产控制 |
| 克劳德代码(CLI) | 每次工具调用都需要批准 | 仅限开发和测试 |
| 光标 | 根据设置,可能需要批准 | 开发和测试 |
对于现场制作,请使用claude.ai、claude Mobile或claude Desktop。 这些客户端执行MCP工具调用时不会中断——你说 *“切换到相机2”* 并且它立即发生。
Claude Code(终端CLI)专为软件开发而设计,并具有在运行工具之前提示批准的安全系统。这非常适合编码,但不适合每秒都很重要的实时切换。
展前检查表
在上线之前,先浏览一下这份清单,以便及早发现问题:
- 验证连接 — *“显示切换器状态”*
- 测试切换 — *将相机1置于预览模式,然后切换到该模式*
- 测试转换 — *“将过渡设置为在30帧时混合,并溶解到相机2”*
- 测试音频 — *“显示混音器状态”*
- 测试记录/流媒体 — *“开始录制”* → 验证→ *“停止录制”*
- 测试超级源 (如果使用)-- *“与摄像头1和2并排设置”*
- 设置您的节目默认设置 --过渡风格、速率、音频级别、EQ预设
现场制作技巧
- 集
ATEM_HOST在您的环境中,服务器在启动时会自动连接,无需每次手动连接 - 使用特定语言 — *“切换到相机3”* 比 *“你能换到第三台相机吗?”*
- 组合命令 — *“将相机2置于预览状态并将其溶解”* 作为单个执行
preview_and_auto呼叫 - 保留后备方案 --在网络出现问题时,始终提供ATEM软件控制或硬件面板
故障排除
锤子图标未显示在Claude Desktop中:
- 确保您使用的是完整路径
node(奔跑which node) - 检查日志:
~/Library/Logs/Claude/mcp*.log - 完全重新启动Claude Desktop(退出,而不仅仅是关闭窗口)
无法连接到ATEM:
- 验证ATEM是否在同一网络上
- 尝试从终端ping ATEM IP
- 默认ATEM端口为9910(UDP)
- 确保ATEM软件控制没有阻塞连接
claude.ai连接器显示身份验证错误:
- 检查Cloudflare“阻止AI训练机器人”是否设置为“不阻止”(请参阅 Cloudflare部分)
- 检查 安全>分析>事件 在Cloudflare仪表板中显示被阻止的请求
- 验证
BASE_URL与您的公共隧道URL完全匹配 - 测试用
curl -X POST https://your-url/mcp--应该返回401 JSON(而不是403 HTML)
HTTP服务器返回406 Not Acceptable:
- MCP SDK需要
Accept: application/json, text/event-stream但有些客户发送Accept: */* - 服务器包含一个内置的解决方法,可以在原始HTTP级别修补Accept标头
命令不起作用:
- 某些功能需要特定的ATEM型号(例如,在Mini Pro+上进行流式传输/录制)
- 检查
atem_get_status验证连接
学分
许可证
麻省理工学院
