RV MCP服务器

RV MCP服务器是一个桥接AI助手(如Claude)与Autodesk/Tweak RV(行业标准媒体审阅应用)的协议服务器,支持通过自然语言控制播放、比较镜头、调整色彩分级和管理审阅会话。

  • by Geddart
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Geddart/rv-mcp

使用说明

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 45124

2.安装并注册

克劳德代码(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 <len> rv-mcp rvController
3. Send: PINGPONGCONTROL 1 0          (disable heartbeat)
4. Recv: NEWGREETING <len> <rv-name>   (consume RV's greeting)
5. For each command:
   Send: MESSAGE <len> RETURNEVENT remote-eval * { require commands; <mu_code> }
   Recv: MESSAGE <len> RETURN <value>
6. On shutdown:
   Send: MESSAGE <len> DISCONNECT

OCIO色彩管理

该服务器包括完整的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

许可证

麻省理工学院