RV MCP服务器
MCP(模型上下文协议)服务器,将克劳德等人工智能助手连接到 Autodesk/Tweak RV行业标准媒体评论应用。通过自然语言控制播放、比较镜头、调整颜色分级和管理复习会话。
RV内部不需要插件。通过Mu脚本使用RV的内置网络侦听器 remote-eval.
需求
- OpenRV (或RV 2022.3.1+),网络模式已启用
- Python 3.10+
- 紫外线 包管理器
快速开始
1.通过网络启动RV
通过以下方式在RV中启用网络 RV → 网络→ 启用网络 (默认端口 45124).
或者从命令行:
rv -network -networkPort 451242.安装并注册
克劳德代码(CLI):
claude mcp add --scope user rv-mcp -- uv run --no-sync --directory /path/to/RV_MCP rv-mcp注:--no-sync防止多个Claude会话共享同一MCP服务器时发生文件锁定冲突。跑uv sync在更改依赖关系后手动执行。
克劳德桌面 (~/.claude.json):
{
"mcpServers": {
"rv-mcp": {
"command": "uv",
"args": ["run", "--no-sync", "--directory", "/path/to/RV_MCP", "rv-mcp"]
}
}
}环境变量 (可选):
| 变量 | 默认值 | 描述 |
|---|---|---|
RV_MCP_HOST | 127.0.0.1 | RV网络主机 |
RV_MCP_PORT | 45124 | RV网络端口 |
3.使用它
让克劳德加载媒体、控制播放、比较镜头或调整颜色。服务器自动将自然语言翻译成RV命令。
建筑
Claude (stdio/MCP) --> FastMCP Server --> RV Network Protocol (TCP:45124) --> RV服务器维护一个 持久TCP连接 使用基于RV的自定义协议连接到RV RvCommunicator关键设计决策:
- 持久连接 插座丢失时自动重新连接
- 线程安全 通过
threading.Lock用于并发工具调用 - 干净关闭 通过
atexit发送的处理程序DISCONNECT(如果没有这个,RV将拒绝未来的连接) - 木绳处理 --返回值会自动取消引号和取消转义
协议流
1. Connect TCP to 127.0.0.1:45124
2. Send: NEWGREETING rv-mcp rvController
3. Send: PINGPONGCONTROL 1 0 (disable heartbeat)
4. Recv: NEWGREETING (consume RV's greeting)
5. For each command:
Send: MESSAGE RETURNEVENT remote-eval * { require commands; }
Recv: MESSAGE RETURN
6. On shutdown:
Send: MESSAGE DISCONNECTOCIO色彩管理
该服务器包括完整的OCIO v2支持。当 $OCIO 设置后,RV可以匹配DCC应用程序(3ds Max/Reshift、Nuke等)使用的确切显示变换。
自动配置
一 rv_ocio_setup.py 包含在RV加载媒体时自动配置OCIO的脚本:
- EXR/HDR/TX文件 被自动检测为场景线性(ACEScg通过
scene_linear角色) - 显示变换 从配置的默认值设置(例如。,
sRGB/ACES 1.0 SDR-video) - 色度元数据 EXR中的颜色与活动配置的颜色空间相匹配
要安装,请复制 rv_ocio_setup.py 转到您的RV支持路径:
# Windows
copy rv_ocio_setup.py %APPDATA%\RV\Python\
# Linux/macOS
cp rv_ocio_setup.py ~/.rv/Python/RV内置 ocio_source_setup 包将自动检测并使用此覆盖。
通过MCP手动OCIO
| 工具 | 说明 |
|---|---|
get_ocio_config | 列出活动OCIO配置中的颜色空间、显示、视图和外观 |
set_ocio_colorspace | 为源设置输入颜色空间(插入OCIOFile节点) |
set_ocio_display | 设置显示变换(插入OCIODisplay节点) |
set_ocio_look | 将OCIO外观应用于源 |
get_ocio_state | 以JSON格式获取当前OCIO节点状态 |
clear_ocio | 删除OCIO节点并恢复默认管道 |
红移+RV配色
如果您使用Redshift的OCIO配置($OCIO = C:\ProgramData\redshift\Data\OCIO\config.ocio),注意它的文件规则将EXR标记为“Raw”。这 rv_ocio_setup.py 脚本通过将浮点格式检测为场景线性来覆盖这一点,确保ACES色调映射器在RV中应用,就像在Redshift的渲染视图中一样。
工具(共47个)
执行(1)
| 工具 | 说明 |
|---|---|
execute_mu | 运行任意的Mu代码——对专用工具未涵盖的任何内容进行转义 |
休闲(6)
| 工具 | 说明 |
|---|---|
get_ocio_config | 获取OCIO配置信息(颜色空间、显示、视图、外观) |
set_ocio_colorspace | 为源设置OCIO输入颜色空间 |
set_ocio_display | 设置OCIO显示转换 |
set_ocio_look | 应用OCIO外观 |
get_ocio_state | 以JSON格式获取当前OCIO状态 |
clear_ocio | 删除OCIO节点,恢复默认值 |
执行(1)
| 工具 | 说明 |
|---|---|
execute_mu | 运行任意的Mu代码——对专用工具未涵盖的任何内容进行转义 |
回放(17)
| 工具 | 说明 |
|---|---|
load_source | 加载媒体文件(图像序列、电影或单张图像) |
load_sources | 一次加载多个媒体文件 |
play | 开始播放 |
stop | 停止播放 |
toggle_playback | 切换播放/停止,返回新状态 |
get_frame | 获取当前帧号 |
set_frame | 跳转到特定帧 |
step_forward | 向前移动N帧(默认值1) |
step_backward | 后退N帧(默认值1) |
set_in_point | 设置切入点(播放范围的开始) |
set_out_point | 设定输出点(播放范围结束) |
get_in_out_points | 以JSON格式获取当前的输入/输出点 |
set_fps | 设置每秒播放帧数 |
get_fps | 获取当前播放FPS |
set_realtime | 启用/禁用实时模式(跳过帧以保持FPS) |
set_play_mode | 设置循环模式: loop, once,或 pingpong |
set_playback_speed | 设置播放方向和速度(1=前进,-1=后退,2=2x等) |
get_frame_range | 以JSON格式获取完整播放状态(帧、范围、输入/输出、播放、fps) |
来源(7)
| 工具 | 说明 |
|---|---|
get_sources | 将所有加载的源节点列为JSON数组 |
get_source_media_info | 获取详细的媒体信息(分辨率、帧范围、帧率、比特深度、频道) |
get_sources_at_frame | 使源节点在特定帧处可见 |
new_session | 创建新的空会话 |
clear_session | 清除当前会话中的所有源 |
save_session | 将会话保存到 .rv 文件 |
get_session_info | 获取JSON格式的会话状态(视图节点、帧范围、源计数) |
比较(4)
| 工具 | 说明 |
|---|---|
set_view_mode | 切换视图: sequence (按顺序播放), stack (用于比较的层), layout (瓷砖并排) |
set_composite_type | 设置堆栈复合模式: over, add, difference, -difference, replace, topmost |
toggle_wipe | 切换A/B擦除比较(自动切换到堆栈视图) |
get_view_info | 以JSON格式获取当前视图状态 |
颜色(12)
| 工具 | 说明 |
|---|---|
set_lut | 加载LUT文件(.3dl, .csp, .cube等)在目标上(look, linearize, display) |
clear_lut | 停用目标上的LUT |
set_cdl | 设置CDL值(斜率、偏移、功率、饱和度)——支持部分更新 |
clear_cdl | 停用CDL颜色校正 |
set_exposure | 设置曝光(每个通道或均匀) |
set_gamma | 设置伽玛校正 |
set_saturation | 设置饱和度 |
get_color_settings | 以JSON格式获取当前颜色校正状态 |
set_display_gamma | 设置显示伽玛(例如,sRGB为2.2) |
set_display_srgb | 启用/禁用sRGB显示转换 |
set_background | 设置视口背景: black, checker, grey18, grey50, crosshatch |
用法示例
加载并查看录像
"Load the EXR sequence at /shots/sh010/comp/sh010_comp.1-100#.exr"
"Play it back at 24fps"
"Go to frame 50"
"Set in point at 20 and out point at 80"比较两个版本
"Load both /shots/sh010/comp_v1.mov and /shots/sh010/comp_v2.mov"
"Switch to stack view"
"Set composite to difference mode"
"Toggle the wipe to compare side by side"色彩校正
"Apply CDL with slope [1.1, 0.95, 1.0] and saturation 1.2"
"Load the ACES LUT from /luts/sRGB.cube"
"Set exposure to 0.5"
"Show me the current color settings"高级(生木)
"Execute this Mu code: { require commands; let s = sources(); string(s.size()); }"项目结构
RV_MCP/
├── pyproject.toml # Package config, entry point, dependencies
├── README.md
├── .gitignore
└── src/
├── __init__.py
├── server.py # FastMCP server + RvClient instantiation
├── rv_client.py # Persistent TCP client (RV network protocol)
└── tools/
├── __init__.py
├── execute.py # execute_mu — raw Mu escape hatch
├── playback.py # 17 playback/transport tools
├── sources.py # 7 source & session tools
├── compare.py # 4 view/compare tools
├── color.py # 12 color/LUT/CDL tools
└── ocio.py # OCIO v2 color management tools故障排除
“无法连接到RV”
- 确保RV正在运行
-network旗帜 - 检查端口45124是否未被防火墙阻止
- 使用
-networkPort 45124显式设置端口
RV在碰撞后拒绝连接
如果服务器退出而不发送 DISCONNECT,RV可能会拒绝新连接。重新启动RV以清除状态。服务器包括 atexit 处理程序,以防止在正常操作下发生这种情况。
Mu代码错误
- 始终将代码块包裹在
{ require commands; ... } - 穆评估了这两个分支
if/then/else--避免对可能不存在的节点进行属性访问 - 文件路径必须使用正斜杠;
escape_mu_string()自动处理此问题
超时错误
默认超时为30秒。如果Mu代码需要更长的时间(例如,加载大序列),它可能会超时。使用 execute_mu 对于长期操作,可以考虑将其分解为更小的步骤。
发展
# Install dependencies
uv sync
# Run the server directly
uv run rv-mcp
# Run with debug logging
uv run python -m src.server许可证
麻省理工学院
