Fusion Studio MCP
Fusion Studio MCP
Servidor MCP local para inspeccionar y controlar Blackmagic Fusion Studio independiente a través de la API de scripting de Fusion.
Este proyecto comienza de forma conservadora: primero se comprueba la conexión con Fusion, luego se exponen herramientas de inspección de solo lectura y, por último, se añaden herramientas de edición protegidas con comportamiento de ejecución simulada (dry-run) y deshacer.
Estado actual
Estructura inicial del proyecto creada: 2026-07-13
Aplicación objetivo encontrada: Blackmagic Fusion 21.0.2
Ruta de importación de Python confirmada para el
fusionscript.soincluido con FusionInspección de composición en vivo verificada contra
Composition1.venvlocal creado con pytest, ruff y el SDK de Python para MCPHerramientas MCP de solo lectura implementadas para el estado, el listado de nodos, la consulta de un solo nodo, la lectura de nodos seleccionados y los resúmenes compactos de composición
Herramientas MCP de edición protegidas implementadas para la selección, la lectura/escritura de entradas, el renombrado y el posicionamiento en FlowView
Creación controlada de nodos, edición de conexiones de imagen, desconexión de entradas, inspección de conexiones y eliminación confirmada de un solo nodo implementadas
Creación configurable de nodos y herramientas nativas de fotogramas clave y expresiones implementadas
Controles de composición, además de herramientas transaccionales de grafos y de lote, implementados
Validación de render, ajustes de Saver, diagnósticos, catálogo/esquema de herramientas y herramientas de exportación de grafos implementados
Validación de edición en vivo superada contra la composición desechable
Composition1
Related MCP server: nuke-mcp
Requisitos
macOS
Blackmagic Fusion Studio 21.0.2 o compatible
Python 3.11+ requerido (
requires-python = ">=3.11"); el Python 3.9 integrado en macOS es demasiado antiguoRuta de la biblioteca de scripting incluida con Fusion disponible:
/Applications/Blackmagic Fusion 21/Fusion.app/Contents/LibrariesSDK de Python para MCP para el modo servidor
Instalación con Claude Desktop en macOS
Recomendado para artistas y no desarrolladores: Instalar Fusion Studio MCP - Claude Desktop (macOS).
Esta es la vía de instalación pública de dos copias y pegado para Fusion Studio independiente y Claude Desktop en macOS. Instala desde el repositorio público de GitHub: https://github.com/bigsbypuglise/fusion-studio-mcp
Usa esta vía si quieres que Claude Desktop inspeccione una composición de Fusion, liste los nodos y construya árboles de nodos protegidos sin necesidad de hacer una configuración de desarrollo.
Versión rápida:
Abre Fusion Studio 21 y abre o crea una composición.
Ejecuta el bloque de instalación de la guía de Claude Desktop para macOS.
Ejecuta el bloque de configuración de Claude de la guía.
Cierra completamente Claude Desktop con Command-Q, vuelve a abrirlo y pídele a Claude que compruebe la conexión con Fusion.
Notas:
Fusion Studio 21 es la versión recomendada; Fusion Studio 20 puede funcionar.
Actualmente está dirigido a Fusion Studio independiente, no a DaVinci Resolve.
Fusion Studio debe estar en ejecución con una composición activa abierta.
La primera llamada a herramienta de Claude puede pedir permiso.
El instalador predeterminado para principiantes sigue la última rama pública
main, de modo que volver a ejecutar el pegado n.º 1 actualiza la instalación local. Quienes prefieran una versión estable fijada pueden usar la opción de versión etiquetada de la guía.
Instalación avanzada
El flujo de trabajo de macOS que se muestra a continuación se ha probado en vivo con Fusion Studio 21.0.2. El flujo de trabajo de Windows está documentado para instalaciones equivalentes de Fusion Studio, pero aún necesita validación en una máquina limpia con Windows.
Configuración de desarrollo en macOS
Entorno compatible probado en vivo:
Blackmagic Fusion Studio 21.0.2
Python 3.11+
Ruta de aplicación confirmada:
/Applications/Blackmagic Fusion 21/Fusion.appRuta de biblioteca de scripting confirmada:
/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries
Instala Python con Homebrew si es necesario:
brew install python@3.11Crea e instala el entorno local:
cd /path/to/fusion-studio-mcp
PYTHON_BIN=/opt/homebrew/bin/python3.11 scripts/setup_local.shO hazlo manualmente:
cd /path/to/fusion-studio-mcp
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'Inicia Fusion Studio, crea o abre una composición desechable y luego ejecuta:
export PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src"
python scripts/test_fusion_connection.py
python -m fusion_mcp.serverpython -m fusion_mcp.server es un punto de entrada de servidor MCP por stdio. Está pensado para ser lanzado por un cliente MCP; cuando se ejecuta directamente en una terminal simple sin un cliente conectado, puede salir limpiamente después de que se cierre stdin. Usa scripts/test_fusion_connection.py para una prueba de humo de conexión independiente.
Ejemplo de cliente MCP en macOS:
{
"mcpServers": {
"fusion-studio": {
"command": "/path/to/fusion-studio-mcp/.venv/bin/python",
"args": ["-m", "fusion_mcp.server"],
"env": {
"PYTHONPATH": "/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:/path/to/fusion-studio-mcp/src"
}
}
}
}Solución de problemas en macOS:
Si Fusion está cerrado o no hay ninguna composición activa, las herramientas de conexión devuelven
FUSION_NOT_RUNNINGoNO_ACTIVE_COMP.Si
fusionscriptno se puede importar, confirma quePYTHONPATHincluye la rutaContents/Librariesde Fusion.macOS puede mostrar avisos de seguridad la primera vez que las herramientas se comunican con otra aplicación. Permite que Fusion y el cliente de terminal/MCP se comuniquen localmente.
Usa carpetas de salida absolutas y únicas para los renders de Saver a fin de evitar la protección contra sobrescritura y los casos límite de nombres de archivo de Fusion.
Configuración de desarrollo en Windows
Entorno objetivo documentado:
Blackmagic Fusion Studio 21.0.2 o compatible
Python 3.11+
Ruta de aplicación habitual:
C:\Program Files\Blackmagic Design\Fusion 21\Fusion.exeRuta de biblioteca de scripting habitual:
C:\Program Files\Blackmagic Design\Fusion 21
Instala Python desde https://www.python.org/downloads/windows/ y habilita "Add python.exe to PATH", o instálalo con winget:
winget install Python.Python.3.11
python --version
py -3.11 --versionCrea e instala el entorno local desde PowerShell:
cd C:\path\to\fusion-studio-mcp
.\scripts\setup_local.ps1 -Python py -PythonArgs "-3.11"
.\.venv\Scripts\Activate.ps1Si PowerShell bloquea el script, ejecútalo solo para el proceso actual:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\scripts\setup_local.ps1 -Python py -PythonArgs "-3.11"Configuración manual con Command Prompt:
cd C:\path\to\fusion-studio-mcp
py -3.11 -m venv .venv
.venv\Scripts\activate.bat
python -m pip install --upgrade pip
python -m pip install -e .[dev]Inicia Fusion Studio, crea o abre una composición desechable y, a continuación, ejecuta desde PowerShell:
.\.venv\Scripts\Activate.ps1
$env:PYTHONPATH = "C:\Program Files\Blackmagic Design\Fusion 21;C:\path\to\fusion-studio-mcp\src"
.\.venv\Scripts\python.exe .\scripts\test_fusion_connection.py
.\.venv\Scripts\python.exe -m fusion_mcp.serverAl igual que en macOS, el comando del servidor está pensado para ser lanzado por un cliente MCP a través de stdio. Si se ejecuta manualmente en una shell sin un cliente conectado, puede salir cuando se cierre stdin.
Ejemplo de cliente MCP en Windows:
{
"mcpServers": {
"fusion-studio": {
"command": "C:\\path\\to\\fusion-studio-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "fusion_mcp.server"],
"env": {
"PYTHONPATH": "C:\\Program Files\\Blackmagic Design\\Fusion 21;C:\\path\\to\\fusion-studio-mcp\\src"
}
}
}
}Solución de problemas en Windows:
Estos pasos para Windows están documentados pero aún no se han validado en vivo en una máquina Windows limpia.
Si no se encuentra
python, usapy -3.11o reinstala Python con la integración de PATH habilitada.Si
fusionscriptno se puede importar, verifica la ruta de instalación de Fusion y añade su directorio de scripting aPYTHONPATH.Pon entre comillas las rutas con espacios en PowerShell y JSON; usa barras invertidas dobles en las cadenas JSON.
Si la conexión falla, confirma que Fusion Studio está abierto, que no está bloqueado por avisos de seguridad de Windows y que tiene una composición activa.
Usa rutas de salida absolutas de Saver en carpetas con permisos de escritura y prefiere carpetas de salida únicas por render.
Prueba rápida de conexión
Abre Fusion Studio independiente.
Abre o crea una composición desechable.
Ejecuta:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python scripts/test_fusion_connection.pyEl script imprime JSON estructurado. Si Fusion está cerrado, debería devolver success: false con FUSION_NOT_RUNNING.
Sonda de inspección de solo lectura
Ejecuta todas las funciones de herramientas de solo lectura sin iniciar un cliente MCP:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python scripts/inspect_read_only.pyHerramientas de solo lectura actuales:
fusion_get_status_toolfusion_list_nodes_toolfusion_get_node_tool(node_name)fusion_get_selected_nodes_toolfusion_summarize_comp_toolfusion_get_node_input_tool(node_name, input_name)
Las entradas de la lista de nodos incluyen:
Nombre del nodo y tipo de herramienta de Fusion
Posición en el Flow a partir de
comp.CurrentFrame.FlowView.GetPosTable(tool)cuando Fusion la exponeEntradas con ID, nombre, tipo de datos, valor actual no relacionado con imágenes, salida conectada y atributos de entrada
Salidas con ID, nombre, tipo de datos, entradas conectadas y atributos de salida
Resumen de ajustes de fotogramas clave para controles que no son de imagen
Ejecutar el servidor MCP
Después de la configuración, ejecuta:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python -m fusion_mcp.serverEjemplos de operaciones de estilo MCP:
fusion_get_status_tool()
fusion_list_nodes_tool()
fusion_get_node_tool(node_name="Blur1")
fusion_get_selected_nodes_tool()
fusion_summarize_comp_tool()
fusion_select_nodes_tool(node_names=["Background1", "Transform1"])
fusion_get_node_input_tool(node_name="Transform1", input_name="Blend")
fusion_set_node_input_tool(node_name="Transform1", input_name="Blend", value=0.5)
fusion_set_node_name_tool(node_name="Transform1", new_name="Transform_Main")
fusion_set_node_position_tool(node_name="Transform_Main", x=0, y=0)
fusion_create_node_tool(tool_id="Blur", name="Blur_Main", x=1, y=0)
fusion_create_node_tool(
tool_id="Saver",
name="Saver_Main",
x=2,
y=0,
settings={"Clip": "/tmp/example.exr"}
)
fusion_connect_nodes_tool(
source_node="Transform_Main",
source_output="Output",
target_node="Blur_Main",
target_input="Input",
replace=false
)
fusion_get_connections_tool(node_name="Blur_Main")
fusion_disconnect_input_tool(node_name="Blur_Main", input_name="Input")
fusion_delete_node_tool(node_name="Blur_Main", confirm=true)
fusion_set_keyframe_tool(node_name="Transform_Main", input_name="Size", frame=0, value=1.0, replace=false)
fusion_get_keyframes_tool(node_name="Transform_Main", input_name="Size")
fusion_delete_keyframe_tool(node_name="Transform_Main", input_name="Size", frame=10, confirm=true)
fusion_clear_keyframes_tool(node_name="Transform_Main", input_name="Center", confirm=true)
fusion_set_expression_tool(node_name="Transform_Main", input_name="Angle", expression="time/10", replace=false)
fusion_get_expression_tool(node_name="Transform_Main", input_name="Angle")
fusion_remove_expression_tool(node_name="Transform_Main", input_name="Angle", confirm=true)
fusion_get_comp_settings_tool()
fusion_set_comp_range_tool(start_frame=1, end_frame=48)
fusion_set_current_frame_tool(frame=24)
fusion_get_current_frame_tool()
fusion_save_comp_tool(path="/tmp/example.comp")
fusion_get_comp_path_tool()
fusion_create_graph_tool(
nodes=[
{"id": "bg", "tool_id": "Background", "name": "BG", "x": -4, "y": 0,
"settings": {"TopLeftRed": 0.2, "TopLeftGreen": 0.4, "TopLeftBlue": 0.8}},
{"id": "tx", "tool_id": "Transform", "name": "TX", "x": -2, "y": 0},
{"id": "blur", "tool_id": "Blur", "name": "Blur", "x": 0, "y": 0,
"settings": {"XBlurSize": 3.0}},
{"id": "saver", "tool_id": "Saver", "name": "Saver", "x": 2, "y": 0,
"settings": {"Clip": "/tmp/example.exr"}}
],
connections=[
{"source": "bg", "target": "tx", "source_output": "Output", "target_input": "Input"},
{"source": "tx", "target": "blur", "source_output": "Output", "target_input": "Input"},
{"source": "blur", "target": "saver", "source_output": "Output", "target_input": "Input"}
],
comp_settings={"start_frame": 1, "end_frame": 48}
)
fusion_batch_set_inputs_tool(changes=[{"node_name": "BG", "input_name": "TopLeftRed", "value": 0.5}])
fusion_batch_set_keyframes_tool(keyframes=[{"node_name": "TX", "input_name": "Size", "frame": 1, "value": 1.0}])
fusion_batch_delete_nodes_tool(node_names=["Blur"], confirm=true)
fusion_get_saver_settings_tool(node_name="Saver")
fusion_set_saver_settings_tool(node_name="Saver", settings={"Clip": "/tmp/render.exr"})
fusion_validate_render_tool(saver_node="Saver", allow_overwrite=false)
fusion_render_tool(start_frame=1, end_frame=1, saver_node="Saver", confirm=true, allow_overwrite=false)
fusion_get_render_status_tool()
fusion_abort_render_tool(confirm=true)
fusion_validate_comp_tool()
fusion_find_broken_connections_tool()
fusion_find_missing_media_tool()
fusion_get_tool_catalog_tool(search="blur")
fusion_get_tool_schema_tool(tool_id="Blur")
fusion_export_graph_tool(node_names=["BG", "TX", "Saver"])
fusion_validate_graph_request_tool(nodes=[...], connections=[...], comp_settings={...})Ejemplo de respuesta de resumen compacto de la composición vacía en vivo Composition1:
{
"success": true,
"operation": "fusion_summarize_comp",
"agent_summary": {
"composition_name": "Composition1",
"node_count": 0,
"selected_nodes": [],
"tool_type_counts": {},
"plain_english": "Composition Composition1 has 0 node(s); 0 selected."
}
}Herramientas de edición seguras
Las operaciones de edición validan la composición activa, el nodo y la entrada antes de modificar nada. Las escrituras usan Lock(), StartUndo(...), EndUndo(True) y Unlock() de Fusion a través de un envoltorio de limpieza defensivo, de modo que las operaciones fallidas no dejen un grupo de deshacer abierto.
Herramientas de edición implementadas:
fusion_select_nodes_tool(node_names)fusion_get_node_input_tool(node_name, input_name)fusion_set_node_input_tool(node_name, input_name, value)fusion_set_node_name_tool(node_name, new_name)fusion_set_node_position_tool(node_name, x, y)fusion_create_node_tool(tool_id, name=None, x=None, y=None)fusion_connect_nodes_tool(source_node, source_output, target_node, target_input, replace=False)fusion_disconnect_input_tool(node_name, input_name)fusion_get_connections_tool(node_name=None)fusion_delete_node_tool(node_name, confirm=False)fusion_set_keyframe_tool(node_name, input_name, frame, value, replace=False)fusion_get_keyframes_tool(node_name, input_name)fusion_delete_keyframe_tool(node_name, input_name, frame, confirm=False)fusion_clear_keyframes_tool(node_name, input_name, confirm=False)fusion_set_expression_tool(node_name, input_name, expression, replace=False)fusion_get_expression_tool(node_name, input_name)fusion_remove_expression_tool(node_name, input_name, confirm=False)fusion_get_comp_settings_tool()fusion_set_comp_range_tool(start_frame, end_frame)fusion_set_current_frame_tool(frame)fusion_get_current_frame_tool()fusion_save_comp_tool(path=None)fusion_get_comp_path_tool()fusion_create_graph_tool(nodes, connections, comp_settings=None)fusion_batch_set_inputs_tool(changes)fusion_batch_set_keyframes_tool(keyframes)fusion_batch_delete_nodes_tool(node_names, confirm=False)fusion_get_saver_settings_tool(node_name)fusion_set_saver_settings_tool(node_name, settings)fusion_validate_render_tool(saver_node=None, allow_overwrite=False)fusion_render_tool(start_frame=None, end_frame=None, saver_node=None, confirm=False, allow_overwrite=False)fusion_get_render_status_tool()fusion_abort_render_tool(confirm=False)fusion_validate_comp_tool()fusion_find_broken_connections_tool()fusion_find_missing_media_tool()fusion_get_tool_catalog_tool(search=None)fusion_get_tool_schema_tool(tool_id)fusion_export_graph_tool(node_names=None)fusion_validate_graph_request_tool(nodes, connections, comp_settings=None)
fusion_set_node_input_tool admite tipos de valor comunes de Fusion:
números escalares finitos
booleanos, convertidos a
1o0para entradas numéricas de Fusioncadenas para entradas
Textcadenas para entradas
FuID, validadas contra las opciones de cada entrada cuando Fusion las exponepuntos como
[x, y]o{"x": x, "y": y}colores como
[r, g, b],[r, g, b, a]o claves de diccionario coincidentes cuando Fusion expone una entradaColorreal
Los valores no admitidos o ambiguos devuelven un fallo estructurado y no intentan realizar una escritura. Las entradas de imagen son rechazadas por las herramientas de establecimiento de valores porque deben editarse como conexiones, no como valores escalares.
Los controles de color de Background integrados en Fusion Studio 21.0.2 se exponen como entradas de canal numéricas separadas, como TopLeftRed, TopLeftGreen, TopLeftBlue y TopLeftAlpha, cada una usando INPID_InputControl == "ColorControl" e INPS_DataType == "Number". La validación en vivo confirmó que se pueden ajustar estos canales con flotantes escalares, por ejemplo TopLeftRed = 0.25.
Ejemplo de respuesta de éxito:
{
"success": true,
"operation": "fusion_set_node_input",
"node_name": "FMC_Test_Transform",
"input_id": "Size",
"previous_value": 1.0,
"requested_value": 0.8,
"confirmed_value": 0.8,
"summary": "Set FMC_Test_Transform.Size."
}Ejemplo de fallo de validación:
{
"success": false,
"operation": "fusion_set_node_input",
"error_code": "UNSUPPORTED_INPUT_VALUE",
"error_message": "Image inputs are connections, not scalar values.",
"node_name": "FMC_Test_Transform",
"input_id": "Input",
"requested_value": 1
}Herramientas de conexión y nodos
fusion_create_node_tool acepta settings opcionales, que se aplican después de que el nodo exista y sea validado. Los fallos en los ajustes producen un resultado parcial: el nodo creado permanece en la composición, los ajustes correctos se notifican y los ajustes fallidos incluyen códigos de error por entrada. Saver puede recibir su ruta de Clip a través de settings={"Clip": "/path/to/output.exr"} y ya no necesita el marcador cuando se proporciona ese ajuste.
La edición de conexiones está actualmente limitada a enlaces de flujo de imagen. La capa de herramientas rechaza los enlaces de modificadores, expresiones, máscaras y escalares con metadatos de socket explícitos, en lugar de tratarlos como si fueran conexiones de imagen ordinarias.
Comportamiento de seguridad:
los IDs de herramienta se comprueban contra el registro local de Fusion antes de la creación
MediaOutse rechaza en Fusion independiente porque su clase de registro no se puede crear allíSaverse puede crear con una ruta de Clip provisional explícita para evitar que Fusion abra un diálogo de archivolas entradas de destino no se reemplazan a menos que
replace=truese rechazan las autoconexiones y los ciclos evidentes de flujo de imagen
la eliminación requiere
confirm=truey solo acepta un nombre de nodo por llamadatodas las operaciones de crear/conectar/desconectar/eliminar usan grupos de deshacer de Fusion
Ejemplo de conexión con éxito:
{
"success": true,
"operation": "fusion_connect_nodes",
"previous_state": null,
"requested_state": {
"source_node": "Background1",
"source_output": "Output",
"target_node": "Transform1",
"target_input": "Input",
"replace": false
},
"confirmed_state": {
"node": "Background1",
"output": "Output",
"data_type": "Image"
}
}Ejemplo de protección de eliminación:
{
"success": false,
"operation": "fusion_delete_node",
"error_code": "DELETE_CONFIRMATION_REQUIRED",
"error_message": "Deletion requires confirm=true."
}Herramientas de composición y lote
Los controles de composición exponen el rango de fotogramas, el fotograma actual, la ruta de guardado y los guardados explícitos de .comp. La validación en vivo confirmó fusion_set_comp_range_tool(1, 48), fusion_set_current_frame_tool(24) y fusion_save_comp_tool("/tmp/fusionmcp_batch_*.comp") en Fusion Studio 21.0.2 independiente.
fusion_create_graph_tool acepta:
nodes: objetos conid,tool_idotool_type,nameopcional,x/yopcionales ysettingsopcionalesconnections: objetos con ids de nodos de grafo ensource/target, mássource_outputytarget_inputcomp_settings: actualmente soportastart_frame/end_frameoglobal_start/global_end
La creación de grafos valida nombres duplicados, referencias de grafo faltantes, ids de herramientas inválidos, ciclos obvios y valores no soportados antes o durante la transacción. Crea primero los nodos, aplica la configuración y luego conecta los sockets de imagen. Si un paso posterior falla, intenta desconectar los enlaces creados por esa solicitud y elimina solo los nodos creados por esa solicitud, devolviendo status: "rolled_back" con resultados de reversión por elemento.
Las herramientas de entrada/fotograma clave/eliminación en lote usan un grupo de deshacer de Fusion por lote. La eliminación en lote requiere confirm=true y solo elimina los nodos explícitamente listados.
Render, diagnóstico y exportación
La ejecución del render requiere confirm=true. fusion_validate_render_tool comprueba el estado activo del comp, la existencia/tipo de Saver, la ruta de salida absoluta, la extensión de archivo soportada, el directorio de salida faltante, el riesgo de sobrescritura, el rango de fotogramas válido y la entrada de imagen conectada del Saver sin renderizar intencionalmente. Las salidas existentes devuelven OUTPUT_ALREADY_EXISTS a menos que se proporcione explícitamente allow_overwrite=true.
fusion_render_tool con un saver_node específico usa la transacción Saver canónica confirmada en vivo: mantiene el objeto Saver original, no reescribe Clip, no consulta el estado del render antes de renderizar, llama a comp.Render una vez con Start, End, Wait y Tool, y luego confirma los archivos de salida desde la ruta Clip del Saver en disco. Si Fusion informa completado pero no aparece el archivo de salida esperado, la herramienta devuelve RENDER_OUTPUT_MISSING con detalles del seguimiento del render.
Los diagnósticos incluyen comprobaciones de rango del comp, entradas de imagen requeridas desconectadas, rutas de Loader faltantes, rutas de Saver inválidas, expresiones que evalúan a None, IDs de herramientas no resueltos y nombres duplicados cuando son detectables.
fusion_export_graph_tool emite fusionmcp.graph.v1 con IDs de herramientas exactos, IDs de entrada, configuración segura, posiciones de FlowView, conexiones de flujo de imagen y fotogramas clave nativos cuando se pueden leer de forma segura.
Animación y expresiones
Los fotogramas clave nativos usan los propios modificadores de Fusion:
las entradas escalares usan
BezierSplinelas entradas de punto usan
Pathlas expresiones usan
input.SetExpression(...)
Las herramientas distinguen los estados static, keyframed, expression y otros modifier. Rechazan sobrescrituras silenciosas: establecer un fotograma clave en una entrada de expresión, establecer una expresión en una entrada con fotogramas clave o establecer un fotograma clave duplicado devuelve un error estructurado. Eliminar datos de animación/expresión requiere confirm=true.
Ejemplos confirmados en vivo:
{
"success": true,
"operation": "fusion_get_keyframes",
"keyframes": [
{ "frame": 0.0, "value": 1.0 },
{ "frame": 20.0, "value": 3.0 }
],
"state": {
"state_type": "keyframed",
"modifier_type": "BezierSpline"
}
}Las expresiones malas se rechazan cuando Fusion acepta la cadena de expresión pero evalúa a None en el fotograma actual.
Pruebas
Ejecutar pruebas unitarias y lint:
cd /path/to/fusion-studio-mcp
.venv/bin/python -m pytest
.venv/bin/python -m ruff check src tests scriptsEjecutar las pruebas en vivo opcionales solo contra una composición Fusion activa desechable:
RUN_FUSION_LIVE_TESTS=1 PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python -m pytest tests/test_live_editing.py tests/test_live_connections.py tests/test_live_animation.py -qSeguridad
Las herramientas de escritura modifican intencionalmente la composición activa. Úselas solo en composiciones desechables o explícitamente aprobadas hasta que se añadan salvaguardas de producción más amplias.
La inspección de solo lectura no llama intencionalmente a Output.GetValue() porque puede desencadenar renderizado ascendente. La inspección de salida solo lee los atributos de salida y los metadatos de conexión.
Las composiciones de producción no deben usarse para pruebas de integración.
Fusion Studio 21.0.2 independiente trata MediaOut como específico de Resolve para este proyecto. Fusion independiente no requiere un nodo terminal. Saver se soporta como una herramienta independiente normal cuando se crea sin defsettings de AddTool y luego se asigna Clip después de la creación; no se desencadena ningún render por creación o inspección.
Nota de liberación de render: el aislamiento en vivo del 2026-07-14 encontró que las escrituras de Clip en Saver pueden leerse como una cadena válida mientras que el .comp guardado contiene un objeto interno Clip de intervalo cero (Length = 0, GlobalStart/GlobalEnd = -2000000000). En ese estado, comp.Render(...) devuelve éxito e informa que el fotograma se renderizó, pero no se escribe ningún archivo. fusion_render_tool ya no reescribe Clip de Saver inmediatamente antes del render; la validación permanece libre de efectos secundarios.
Use scripts/diagnose_saver_initialization.py para sondeos de inicialización de Saver en vivo. La secuencia de trabajo en bruto actual es crear un comp nuevo desbloqueado, bloquear mientras se añaden Background/Saver, establecer Clip de Saver después de la creación, conectar mientras está bloqueado, desbloquear y renderizar con Tool=saver. El arnés y fusion_render_tool público ahora comparten esa transacción; cinco ciclos consecutivos de grafo/validación/render públicos escribieron archivos EXR con éxito.
Solución de problemas
Conexión de Fusion: asegúrese de que Fusion Studio independiente esté abierto y tenga una composición activa.
Rutas de Python: incluya la ruta de la biblioteca incluida de Fusion en
PYTHONPATH, seguida desrcde este repositorio.Rutas de Saver: use rutas absolutas, extensiones soportadas, carpetas de salida existentes y preferiblemente carpetas únicas por render.
Permisos: los directorios de salida del render deben ser escribibles por el usuario actual de macOS.
Renders bloqueados: valide primero con
fusion_validate_render_tool; los errores comunes sonOUTPUT_DIRECTORY_MISSING,OUTPUT_ALREADY_EXISTS,SAVER_INPUT_DISCONNECTEDeINVALID_RENDER_RANGE.MediaOut: Fusion Studio independiente trata
MediaOutcomo específico de Resolve en este proyecto; useSaverpara renders independientes.
Versionado
El proyecto usa versionado semántico. El release de parche actual es 0.1.1: control local de Fusion Studio MCP con edición protegida, construcción de grafos, diagnóstico, exportación de grafos, renderizado confirmado dirigido a Saver y notas de aceptación en máquina limpia de macOS. Reserve 1.0.0 para mayor confianza en producción entre más versiones de Fusion/Resolve y comps del mundo real más grandes.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceComprehensive MCP server for DaVinci Resolve with 295+ tools to control projects, timelines, editing, color grading, rendering, and more via natural language.3MIT
- AlicenseNot gradedqualityDmaintenanceA production-grade MCP server for Foundry Nuke that enables AI assistants to understand and manipulate compositing environments, including AOVs, deep workflows, distortion, tracking, OCIO/ACEScct, and CopyCat ML.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes the complete DaVinci Resolve scripting API, enabling AI assistants to control DaVinci Resolve programmatically with over 440 tools for project management, timeline editing, color grading, rendering, and more.5MIT
- AlicenseNot gradedqualityAmaintenanceLets AI clients inspect and control DaVinci Resolve projects via MCP tools.1016MIT
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/bigsbypuglise/fusion-studio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server