Fusion Studio MCP
Fusion Studio MCP
Lokaler MCP-Server zum Untersuchen und Steuern der eigenständigen Blackmagic Fusion Studio über die Scripting-API von Fusion.
Dieses Projekt startet konservativ: zuerst die Fusion-Verbindung nachweisen, dann schreibgeschützte Inspektionstools bereitstellen, dann abgesicherte Bearbeitungswerkzeuge mit Dry-Run- und Undo-Verhalten hinzufügen.
Aktueller Stand
Projektscaffold erstellt: 2026-07-13
Ziel-App gefunden: Blackmagic Fusion 21.0.2
Python-Importpfad für Fusions gebündelte
fusionscript.sobestätigtLive-Composition-Inspektion gegen
Composition1verifiziertLokales
.venvmit pytest, ruff und dem Python-MCP-SDK erstelltSchreibgeschützte MCP-Tools implementiert für Status, Knotenliste, Einzelknotenabfrage, Auswahl-Lesezugriffe und kompakte Comp-Zusammenfassungen
Abgesicherte Bearbeitungs-MCP-Tools implementiert für Auswahl, Eingabe-Lesen/Schreiben, Umbenennen und FlowView-Positionierung
Kontrollierte Knotenerstellung, Bildverbindungsbearbeitung, Eingabetrennung, Verbindungsinspektion und bestätigtes Einzelknotenlöschen implementiert
Konfigurierbare Knotenerstellung sowie native Keyframe- und Ausdrucks-Tools implementiert
Zusammensetzungssteuerungen sowie transaktionale Graph- und Batch-Tools implementiert
Rendervalidierung, Saver-Einstellungen, Diagnose, Tool-Katalog/Schema und Graph-Export-Tools implementiert
Live-Bearbeitungsvalidierung gegen eine wegwerfbare
Composition1bestanden
Related MCP server: nuke-mcp
Anforderungen
macOS
Blackmagic Fusion Studio 21.0.2 oder kompatibel
Python 3.11+ erforderlich (
requires-python = ">=3.11"); das in macOS integrierte Python 3.9 ist zu altDer gebündelte Scripting-Bibliothekspfad von Fusion muss verfügbar sein:
/Applications/Blackmagic Fusion 21/Fusion.app/Contents/LibrariesPython-MCP-SDK für den Servermodus
Installation mit Claude Desktop auf macOS
Empfohlen für Künstler:innen und Nicht-Entwickler:innen: Install Fusion Studio MCP - Claude Desktop (macOS).
Dies ist der öffentliche Weg mit zwei Copy-Paste-Schritten für eigenständiges Fusion Studio und Claude Desktop auf macOS. Es installiert aus dem öffentlichen GitHub-Repository: https://github.com/bigsbypuglise/fusion-studio-mcp
Nutzen Sie diesen Weg, wenn Claude Desktop ein Fusion-Comp inspizieren, Knoten auflisten und abgesicherte Knotenbäume erstellen soll, ohne ein Entwickler-Setup durchzuführen.
Kurzversion:
Öffnen Sie Fusion Studio 21 und erstellen oder öffnen Sie ein Comp.
Fügen Sie den Installations-Copy-Paste aus dem Claude-Desktop-macOS-Leitfaden ein.
Fügen Sie den Claude-Konfigurations-Copy-Paste aus dem Leitfaden ein.
Beenden Sie Claude Desktop vollständig mit Command-Q, öffnen Sie es erneut und bitten Sie Claude, die Fusion-Verbindung zu prüfen.
Hinweise:
Fusion Studio 21 wird empfohlen; Fusion Studio 20 könnte funktionieren.
Dies zielt derzeit auf eigenständiges Fusion Studio ab, nicht auf DaVinci Resolve.
Fusion Studio muss mit einem aktiven Comp geöffnet sein.
Der erste Claude-Toolaufruf kann um Erlaubnis bitten.
Der Standard-Installateur für Einsteiger folgt dem neuesten öffentlichen
main-Zweig, sodass das erneute Ausführen von Copy-Paste #1 die lokale Installation aktualisiert. Wer eine festgelegte stabile Version bevorzugt, kann die Option für getaggte Releases im Leitfaden nutzen.
Erweiterte Installation
Der macOS-Workflow unten wurde live mit Fusion Studio 21.0.2 getestet. Der Windows-Workflow ist für äquivalente Fusion-Studio-Installationen dokumentiert, muss aber noch auf einem sauberen Windows-Rechner validiert werden.
macOS-Entwickler-Setup
Unterstützte live getestete Umgebung:
Blackmagic Fusion Studio 21.0.2
Python 3.11+
Bestätigter App-Pfad:
/Applications/Blackmagic Fusion 21/Fusion.appBestätigter Scripting-Bibliothekspfad:
/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries
Installieren Sie Python bei Bedarf mit Homebrew:
brew install python@3.11Lokale Umgebung erstellen und installieren:
cd /path/to/fusion-studio-mcp
PYTHON_BIN=/opt/homebrew/bin/python3.11 scripts/setup_local.shOder manuell:
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]'Starten Sie Fusion Studio, erstellen oder öffnen Sie eine wegwerfbare Komposition und führen Sie dann aus:
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 ist ein Stdio-MCP-Server-Einstiegspunkt. Er soll von einem MCP-Client gestartet werden; wenn er direkt in einem einfachen Terminal ohne angeschlossenen Client ausgeführt wird, kann er nach dem Schließen von stdin sauber beenden. Verwenden Sie scripts/test_fusion_connection.py für einen eigenständigen Verbindungs-Smoke-Test.
macOS-MCP-Client-Beispiel:
{
"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"
}
}
}
}macOS-Fehlerbehebung:
Wenn Fusion geschlossen ist oder kein Comp aktiv ist, geben Verbindungstools
FUSION_NOT_RUNNINGoderNO_ACTIVE_COMPzurück.Wenn
fusionscriptnicht importiert werden kann, überprüfen Sie, obPYTHONPATHden Pfad zuContents/Librariesvon Fusion enthält.macOS zeigt möglicherweise beim ersten Mal Sicherheitsaufforderungen an, wenn Tools mit einer anderen App kommunizieren. Erlauben Sie Fusion und dem Terminal/MCP-Client die lokale Kommunikation.
Verwenden Sie für Saver-Render eindeutige absolute Ausgabeordner, um Überschreibschutz und Fusion-Dateinamen-Sonderfälle zu vermeiden.
Windows-Entwickler-Setup
Dokumentierte Zielumgebung:
Blackmagic Fusion Studio 21.0.2 oder kompatibel
Python 3.11+
Üblicher App-Pfad:
C:\Program Files\Blackmagic Design\Fusion 21\Fusion.exeÜblicher Scripting-Bibliothekspfad:
C:\Program Files\Blackmagic Design\Fusion 21
Installieren Sie Python von https://www.python.org/downloads/windows/ und aktivieren Sie "Add python.exe to PATH",
oder installieren Sie mit winget:
winget install Python.Python.3.11
python --version
py -3.11 --versionLokale Umgebung aus PowerShell erstellen und installieren:
cd C:\path\to\fusion-studio-mcp
.\scripts\setup_local.ps1 -Python py -PythonArgs "-3.11"
.\.venv\Scripts\Activate.ps1Wenn PowerShell das Skript blockiert, führen Sie es nur für den aktuellen Prozess aus:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\scripts\setup_local.ps1 -Python py -PythonArgs "-3.11"Manuelles Einrichten in der Eingabeaufforderung:
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]Starten Sie Fusion Studio, erstellen oder öffnen Sie eine wegwerfbare Komposition und führen Sie dann aus PowerShell aus:
.\.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.serverWie unter macOS ist der Serverbefehl dazu gedacht, von einem MCP-Client über stdio gestartet zu werden. Wenn er manuell in einer Shell ohne angeschlossenen Client ausgeführt wird, kann er beenden, wenn stdin geschlossen wird.
Windows-MCP-Client-Beispiel:
{
"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"
}
}
}
}Windows-Fehlerbehebung:
Diese Windows-Schritte sind dokumentiert, aber noch nicht live auf einem sauberen Windows-Rechner validiert.
Wenn
pythonnicht gefunden wird, verwenden Siepy -3.11oder installieren Sie Python mit aktivierter PATH-Integration neu.Wenn
fusionscriptnicht importiert werden kann, überprüfen Sie den Fusion-Installationspfad und fügen Sie sein Scripting-Verzeichnis zuPYTHONPATHhinzu.Setzen Sie Pfade mit Leerzeichen in PowerShell und JSON in Anführungszeichen; verwenden Sie in JSON-Zeichenfolgen doppelte Backslashes.
Wenn die Verbindung fehlschlägt, stellen Sie sicher, dass Fusion Studio geöffnet ist, nicht durch Windows-Sicherheitsaufforderungen blockiert wird und ein aktives Comp hat.
Verwenden Sie absolute Saver-Ausgabepfade in beschreibbaren Ordnern und bevorzugen Sie für jeden Render eindeutige Ausgabeordner.
Schneller Verbindungstest
Öffnen Sie eigenständiges Fusion Studio.
Öffnen oder erstellen Sie eine wegwerfbare Komposition.
Führen Sie aus:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python scripts/test_fusion_connection.pyDas Skript gibt strukturiertes JSON aus. Wenn Fusion geschlossen ist, sollte es success: false mit FUSION_NOT_RUNNING zurückgeben.
Schreibgeschützter Inspektions-Test
Führen Sie alle schreibgeschützten Tool-Funktionen ohne einen MCP-Client aus:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python scripts/inspect_read_only.pyAktuelle schreibgeschützte Tools:
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)
Knotenlisteneinträge enthalten:
Knotenname und Fusion-Tooltyp
Flow-Position aus
comp.CurrentFrame.FlowView.GetPosTable(tool), wenn Fusion sie bereitstelltEingaben mit ID, Name, Datentyp, aktuellem Nicht-Bild-Wert, verbundenem Ausgang und Eingabeattributen
Ausgänge mit ID, Name, Datentyp, verbundenen Eingängen und Ausgangsattributen
Schlüsseleinstellungszusammenfassung für Nicht-Bild-Steuerelemente
MCP-Server ausführen
Nach dem Setup ausführen:
cd /path/to/fusion-studio-mcp
PYTHONPATH="/Applications/Blackmagic Fusion 21/Fusion.app/Contents/Libraries:src" .venv/bin/python -m fusion_mcp.serverBeispiel für MCP-ähnliche Operationen:
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={...})Beispiel-Antwort mit kompakter Zusammenfassung von leerem live 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."
}
}Sichere Bearbeitungswerkzeuge
Bearbeitungsoperationen validieren die aktive Komposition, den Knoten und die Eingabe, bevor etwas geändert wird. Schreibvorgänge verwenden Fusion Lock(), StartUndo(...), EndUndo(True) und Unlock() über einen defensiven Bereinigungs-Wrapper, sodass fehlgeschlagene Operationen keine offene Undo-Gruppe hinterlassen.
Implementierte Bearbeitungswerkzeuge:
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 unterstützt gängige Fusion-Werttypen:
endliche skalare Zahlen
boolesche Werte, umgewandelt in
1oder0für numerische Fusion-EingabenZeichenfolgen für
Text-EingabenZeichenfolgen für
FuID-Eingaben, validiert gegen die pro Eingabe verfügbaren Optionen, wenn Fusion sie bereitstelltPunkte als
[x, y]oder{"x": x, "y": y}Farben als
[r, g, b],[r, g, b, a]oder passende Dict-Schlüssel, wenn Fusion eine echteColor-Eingabe bereitstellt
Nicht unterstützte oder mehrdeutige Werte geben einen strukturierten Fehler zurück und versuchen keinen Schreibvorgang. Bildeingaben werden von Wert-Einstelltools abgelehnt, da sie als Verbindungen und nicht als skalare Werte bearbeitet werden müssen.
Integrierte Background-Farbsteuerelemente in Fusion Studio 21.0.2 werden als separate numerische Kanaleingaben wie TopLeftRed, TopLeftGreen, TopLeftBlue und TopLeftAlpha bereitgestellt, jeweils mit INPID_InputControl == "ColorControl" und INPS_DataType == "Number". Live-Validierung bestätigte das Setzen dieser Kanäle mit skalaren Gleitkommazahlen, zum Beispiel TopLeftRed = 0.25.
Beispiel für erfolgreiche Antwort:
{
"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."
}Beispiel für Validierungsfehler:
{
"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
}Verbindungs- und Knotenwerkzeuge
fusion_create_node_tool akzeptiert optionale settings, die angewendet werden, nachdem der Knoten erstellt und validiert wurde. Fehler bei Einstellungen erzeugen ein Teilergebnis: Der erstellte Knoten bleibt im Comp, erfolgreiche Einstellungen werden gemeldet und fehlgeschlagene Einstellungen enthalten pro Eingabe Fehlercodes. Saver kann seinen Clip-Pfad über settings={"Clip": "/path/to/output.exr"} erhalten und benötigt keinen Platzhalter mehr, wenn diese Einstellung angegeben wird.
Die Verbindungsbearbeitung ist derzeit auf Bild-Flow-Verbindungen beschränkt. Die Tool-Ebene lehnt Modifier-, Ausdrucks-, Masken- und Skalar-Verbindungen mit expliziten Socket-Metadaten ab, anstatt sie als gewöhnliche Bildrohre zu behandeln.
Sicherheitsverhalten:
Tool-IDs werden vor der Erstellung gegen Fusions lokale Registry geprüft
MediaOutwird im eigenständigen Fusion abgelehnt, da seine Registry-Klasse dort nicht erstellbar istSaverist mit einem expliziten Platzhalter-Clip-Pfad erstellbar, um zu vermeiden, dass Fusion einen Dateidialog öffnetZieleingänge werden nur ersetzt, wenn
replace=trueSelbstverbindungen und offensichtliche Bildfluss-Zyklen werden abgelehnt
Löschen erfordert
confirm=trueund akzeptiert nur einen Knotennamen pro Aufrufalle Erstell-, Verbindungs-, Trenn- und Löschoperationen verwenden Fusion-Undo-Gruppen
Beispiel für erfolgreiche Verbindung:
{
"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"
}
}Beispiel für Löschschutz:
{
"success": false,
"operation": "fusion_delete_node",
"error_code": "DELETE_CONFIRMATION_REQUIRED",
"error_message": "Deletion requires confirm=true."
}Komposition und Batch-Tools
Kompositionssteuerungen legen Frame-Bereich, aktuelles Frame, Speicherpfad und explizite .comp-Speicherungen offen. Die Live-Validierung bestätigte fusion_set_comp_range_tool(1, 48), fusion_set_current_frame_tool(24) und fusion_save_comp_tool("/tmp/fusionmcp_batch_*.comp") in der eigenständigen Fusion Studio 21.0.2.
fusion_create_graph_tool akzeptiert:
nodes: Objekte mitid,tool_idodertool_type, optionalemname, optionalemx/yund optionalensettingsconnections: Objekte mit Graph-Knoten-IDs insource/target, plussource_outputundtarget_inputcomp_settings: unterstützt derzeitstart_frame/end_frameoderglobal_start/global_end
Die Grapherstellung validiert doppelte Namen, fehlende Graph-Referenzen, ungültige Tool-IDs, offensichtliche Zyklen und nicht unterstützte Werte vor oder während der Transaktion. Sie erstellt zuerst Knoten, wendet Einstellungen an und verbindet dann Image-Sockets. Wenn ein späterer Schritt fehlschlägt, versucht sie, die von dieser Anfrage erstellten Verbindungen zu trennen und nur die von dieser Anfrage erstellten Knoten zu löschen, und gibt status: "rolled_back" mit Rollback-Ergebnissen pro Element zurück.
Batch-Eingabe-/Keyframe-/Lösch-Tools verwenden eine Fusion-Undo-Gruppe pro Batch. Batch-Löschung erfordert confirm=true und löscht nur explizit aufgeführte Knoten.
Rendern, Diagnose und Export
Die Render-Ausführung erfordert confirm=true. fusion_validate_render_tool prüft den aktiven Kompositionsstatus, die Existenz/den Typ des Savers, den absoluten Ausgabepfad, die unterstützte Dateierweiterung, das fehlende Ausgabeverzeichnis, das Überschreibungsrisiko, den gültigen Frame-Bereich und den verbundenen Saver-Bildeingang, ohne absichtlich zu rendern. Vorhandene Ausgaben geben OUTPUT_ALREADY_EXISTS zurück, es sei denn, allow_overwrite=true wird explizit angegeben.
fusion_render_tool mit einem bestimmten saver_node verwendet die kanonische, live bestätigte Saver-Transaktion: Es behält das ursprüngliche Saver-Objekt bei, schreibt Clip nicht neu, fragt den Renderstatus vor dem Rendern nicht ab, ruft comp.Render einmal mit Start, End, Wait und Tool auf und bestätigt dann die Ausgabedateien vom Saver-Clip-Pfad auf der Festplatte. Wenn Fusion den Abschluss meldet, aber keine erwartete Ausgabedatei erscheint, gibt das Tool RENDER_OUTPUT_MISSING mit Details zur Render-Trace zurück.
Die Diagnose umfasst Kompositionsbereichsprüfungen, nicht verbundene erforderliche Bildeingänge, fehlende Loader-Pfade, ungültige Saver-Pfade, Ausdrücke, die zu None ausgewertet werden, unaufgelöste Tool-IDs und doppelte Namen, wo erkennbar.
fusion_export_graph_tool gibt fusionmcp.graph.v1 aus mit exakten Tool-IDs, Eingabe-IDs, sicheren Einstellungen, FlowView-Positionen, Bildfluss-Verbindungen und nativen Keyframes, wo sicher lesbar.
Animation und Ausdrücke
Native Keyframes verwenden Fusions eigene Modifikatoren:
Skalare Eingaben verwenden
BezierSplinePunkt-Eingaben verwenden
PathAusdrücke verwenden
input.SetExpression(...)
Die Tools unterscheiden static, keyframed, expression und andere modifier-Zustände. Sie lehnen stilles Überschreiben ab: Das Setzen eines Keyframes auf einen Ausdruckseingang, das Setzen eines Ausdrucks auf einen keyframed Eingang oder das Setzen eines doppelten Keyframes gibt einen strukturierten Fehler zurück. Das Entfernen von Animations-/Ausdrucksdaten erfordert confirm=true.
Live-bestätigte Beispiele:
{
"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"
}
}Schlechte Ausdrücke werden abgelehnt, wenn Fusion die Ausdruckszeichenfolge akzeptiert, sie aber am aktuellen Frame zu None ausgewertet wird.
Testen
Führen Sie Unit-Tests und Lint aus:
cd /path/to/fusion-studio-mcp
.venv/bin/python -m pytest
.venv/bin/python -m ruff check src tests scriptsFühren Sie die optionalen Live-Tests nur gegen eine wegwerfbare aktive Fusion-Komposition aus:
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 -qSicherheit
Schreib-Tools modifizieren absichtlich die aktive Komposition. Verwenden Sie sie nur auf wegwerfbaren oder ausdrücklich genehmigten Kompositionen, bis umfassendere Produktionssicherungen hinzugefügt werden.
Die schreibgeschützte Inspektion ruft absichtlich nicht Output.GetValue() auf, da dies ein vorgelagertes Rendern auslösen kann. Die Ausgabeinspektion liest nur Ausgabeattribute und Verbindungsmetadaten.
Produktionskompositionen sollten nicht für Integrationstests verwendet werden.
Die eigenständige Fusion Studio 21.0.2 behandelt MediaOut als Resolve-spezifisch für dieses Projekt. Die eigenständige Fusion erfordert keinen Endknoten. Saver wird als normales eigenständiges Tool unterstützt, wenn es ohne AddTool-Defsettings erstellt und nach der Erstellung Clip zugewiesen wird; durch Erstellung oder Inspektion wird kein Rendern ausgelöst.
Render-Versionshinweis: Die Live-Isolation am 2026-07-14 ergab, dass Saver-Clip-Schreibvorgänge als gültige Zeichenfolge zurückgelesen werden können, während die gespeicherte .comp ein internes Clip-Objekt mit Null-Spanne enthält (Length = 0, GlobalStart/GlobalEnd = -2000000000). In diesem Zustand gibt comp.Render(...) Erfolg zurück und meldet das gerenderte Frame, aber es wird keine Datei geschrieben. fusion_render_tool schreibt Saver-Clip nicht mehr unmittelbar vor dem Rendern neu; die Validierung bleibt nebenwirkungsfrei.
Verwenden Sie scripts/diagnose_saver_initialization.py für Live-Saver-Initialisierungsproben. Die aktuelle rohe Arbeitssequenz besteht darin, eine entsperrte frische Komposition zu erstellen, während des Hinzufügens von Background/Saver zu sperren, Saver-Clip nach der Erstellung zu setzen, während gesperrt zu verbinden, zu entsperren und mit Tool=saver zu rendern. Die Testumgebung und das öffentliche fusion_render_tool teilen sich jetzt diese Transaktion; fünf aufeinanderfolgende öffentliche Graph-/Validierungs-/Render-Zyklen schrieben EXR-Dateien erfolgreich.
Fehlerbehebung
Fusion-Verbindung: Stellen Sie sicher, dass die eigenständige Fusion Studio geöffnet ist und eine aktive Komposition hat.
Python-Pfade: Fügen Sie den gebündelten Bibliothekspfad von Fusion in
PYTHONPATHein, gefolgt vomsrc-Verzeichnis dieses Repos.Saver-Pfade: Verwenden Sie absolute Pfade, unterstützte Erweiterungen, vorhandene Ausgabeordner und vorzugsweise eindeutige Ordner pro Render.
Berechtigungen: Render-Ausgabeverzeichnisse müssen für den aktuellen macOS-Benutzer beschreibbar sein.
Blockierte Render: Validieren Sie zuerst mit
fusion_validate_render_tool; häufige Fehler sindOUTPUT_DIRECTORY_MISSING,OUTPUT_ALREADY_EXISTS,SAVER_INPUT_DISCONNECTEDundINVALID_RENDER_RANGE.MediaOut: Die eigenständige Fusion Studio behandelt
MediaOutin diesem Projekt als Resolve-spezifisch; verwenden SieSaverfür eigenständige Render.
Versionierung
Das Projekt verwendet semantische Versionierung. Die aktuelle Patch-Version ist 0.1.1: lokale Fusion-Studio-MCP-Steuerung mit geschützter Bearbeitung, Grapherstellung, Diagnose, Graph-Export, bestätigtem Saver-gerichtetem Rendern und macOS-Clean-Machine-Abnahmehinweisen. Reservieren Sie 1.0.0 für breiteres Produktionsvertrauen über mehr Fusion/Resolve-Versionen und größere reale Kompositionen.
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