RV MCP Server
RV MCP Server
MCP-сервер (Model Context Protocol), который связывает ИИ-ассистентов, таких как Claude, с Autodesk/Tweak RV, отраслевым стандартом приложений для просмотра медиаконтента. Управляйте воспроизведением, сравнивайте кадры, настраивайте цветокоррекцию и управляйте сеансами просмотра — и всё это с помощью естественного языка.
Внутри RV не требуется установка плагинов. Используется встроенный сетевой прослушиватель RV с поддержкой скриптов Mu через remote-eval.
Требования
OpenRV (или RV 2022.3.1+) с включенным сетевым режимом
Python 3.10+
Менеджер пакетов uv
Быстрый старт
1. Запуск RV с поддержкой сети
Включите сеть в RV через RV → Networking → Enable Network (порт по умолчанию 45124).
Или из командной строки:
rv -network -networkPort 451242. Установка и регистрация
Claude Code (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 Desktop (~/.claude.json):
{
"mcpServers": {
"rv-mcp": {
"command": "uv",
"args": ["run", "--no-sync", "--directory", "/path/to/RV_MCP", "rv-mcp"]
}
}
}Переменные окружения (опционально):
Переменная | По умолчанию | Описание |
|
| Хост сети RV |
|
| Порт сети RV |
3. Использование
Попросите Claude загрузить медиа, управлять воспроизведением, сравнить кадры или настроить цвета. Сервер автоматически преобразует естественный язык в команды RV.
Архитектура
Claude (stdio/MCP) --> FastMCP Server --> RV Network Protocol (TCP:45124) --> RVСервер поддерживает постоянное TCP-соединение с RV, используя пользовательский протокол на основе RvCommunicator из RV. Ключевые проектные решения:
Постоянное соединение с автоматическим переподключением при потере сокета
Потокобезопасность через
threading.Lockдля параллельных вызовов инструментовКорректное завершение работы через обработчик
atexit, который отправляетDISCONNECT(без этого RV отклоняет будущие соединения)Обработка строк Mu — возвращаемые значения автоматически очищаются от кавычек и экранирования
Поток протокола
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/Redshift, Nuke и т. д.).
Автоматическая настройка
В комплект входит скрипт rv_ocio_setup.py, который автоматически настраивает OCIO при загрузке медиа в RV:
Файлы EXR/HDR/TX автоматически определяются как scene-linear (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/Встроенный пакет ocio_source_setup в RV обнаружит и автоматически применит это переопределение.
Ручное управление OCIO через MCP
Инструмент | Описание |
| Список цветовых пространств, дисплеев, представлений и луков из активной конфигурации OCIO |
| Установка входного цветового пространства для источника (вставляет узел OCIOFile) |
| Установка преобразования дисплея (вставляет узел OCIODisplay) |
| Применение лука OCIO к источнику |
| Получение текущего состояния узла OCIO в формате JSON |
| Удаление узлов OCIO и восстановление конвейера по умолчанию |
Сопоставление цветов Redshift + RV
Если вы используете конфигурацию OCIO от Redshift ($OCIO = C:\ProgramData\redshift\Data\OCIO\config.ocio), обратите внимание, что правила файлов помечают EXR как "Raw". Скрипт rv_ocio_setup.py переопределяет это, определяя форматы с плавающей запятой как scene-linear, гарантируя, что тональный компрессор ACES применяется в RV так же, как в окне рендеринга Redshift.
Инструменты (всего 47)
Выполнение (1)
Инструмент | Описание |
| Запуск произвольного кода Mu — «черный ход» для всего, что не покрыто специализированными инструментами |
OCIO (6)
Инструмент | Описание |
| Получение информации о конфигурации OCIO (цветовые пространства, дисплеи, представления, луки) |
| Установка входного цветового пространства OCIO для источника |
| Установка преобразования дисплея OCIO |
| Применение лука OCIO |
| Получение текущего состояния OCIO в формате JSON |
| Удаление узлов OCIO, восстановление значений по умолчанию |
Воспроизведение (17)
Инструмент | Описание |
| Загрузка медиафайла (последовательность изображений, фильм или одиночное изображение) |
| Загрузка нескольких медиафайлов одновременно |
| Запуск воспроизведения |
| Остановка воспроизведения |
| Переключение воспроизведение/стоп, возвращает новое состояние |
| Получение номера текущего кадра |
| Переход к определенному кадру |
| Шаг вперед на N кадров (по умолчанию 1) |
| Шаг назад на N кадров (по умолчанию 1) |
| Установка начальной точки (начало диапазона воспроизведения) |
| Установка конечной точки (конец диапазона воспроизведения) |
| Получение текущих точек входа/выхода в формате JSON |
| Установка частоты кадров воспроизведения |
| Получение текущей частоты кадров воспроизведения |
| Включение/выключение режима реального времени (пропуск кадров для поддержания FPS) |
| Установка режима цикла: |
| Установка направления и скорости воспроизведения (1=вперед, -1=назад, 2=2x и т. д.) |
| Получение полного состояния воспроизведения в формате JSON (кадр, диапазон, точки входа/выхода, воспроизведение, FPS) |
Источники (7)
Инструмент | Описание |
| Список всех загруженных узлов-источников в виде массива JSON |
| Получение подробной информации о медиа (разрешение, диапазон кадров, FPS, глубина цвета, каналы) |
| Получение узлов-источников, видимых на конкретном кадре |
| Создание нового пустого сеанса |
| Очистка всех источников из текущего сеанса |
| Сохранение сеанса в файл |
| Получение информации о сеансе в формате JSON (узел просмотра, диапазон кадров, количество источников) |
Сравнение (4)
Инструмент | Описание |
| Переключение вида: |
| Установка режима композитинга стека: |
| Переключение сравнения A/B (автоматически переключается в режим стека) |
| Получение текущего состояния вида в формате JSON |
Цвет (12)
Инструмент | Описание |
| Загрузка файла LUT ( |
| Деактивация LUT на цели |
| Установка значений CDL (наклон, смещение, степень, насыщенность) — поддерживаются частичные обновления |
| Деактивация цветокоррекции CDL |
| Установка экспозиции (поканально или равномерно) |
| Установка гамма-коррекции |
| Установка насыщенности |
| Получение текущего состояния цветокоррекции в формате JSON |
| Установка гаммы дисплея (например, 2.2 для sRGB-подобных) |
| Включение/выключение преобразования дисплея sRGB |
| Установка фона окна просмотра: |
Примеры использования
Загрузка и просмотр отснятого материала
"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"Продвинутый уровень (сырой Mu)
"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Устранение неполадок
"Could not connect to RV"
Убедитесь, что RV запущен с флагом
-networkПроверьте, что порт 45124 не заблокирован брандмауэром
Используйте
-networkPort 45124для явного указания порта
RV отклоняет соединения после сбоя
Если сервер завершает работу без отправки DISCONNECT, RV может отклонять новые соединения. Перезапустите RV, чтобы очистить состояние. Сервер включает обработчик atexit, чтобы предотвратить это при нормальной работе.
Ошибки кода Mu
Всегда заключайте блоки кода в
{ require commands; ... }Mu вычисляет обе ветки
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Лицензия
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Geddart/rv-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server