resolve-ai-bridge
This MCP server lets an AI assistant inspect, edit, review, and render a DaVinci Resolve project/timeline, with previews and explicit approvals for destructive actions.
Inspect Resolve status, project info, timelines, clips, media, render presets, and project health.
Open/create timelines, move the playhead, switch pages, import media, append clips, add images, tracks, and compound clips.
Apply and inspect transforms, zooms, blur, spotlight masks, speed changes, clip properties, markers, grades, saturation animation, and color effects.
Review edits using timeline previews, timeline comparisons, source-frame capture, and source-audio analysis, silence detection, and accepted silence cuts.
Delete clips or start renders only with explicit user approval, save projects, and track render progress.
Provides tools to inspect and control DaVinci Resolve projects, including timeline management, media import, markers, clip transforms, and rendering.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@resolve-ai-bridge show me the current timeline's clips"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DaVinci Resolve AI Bridge MCP
Let your AI assistant help with the edit. Resolve AI Bridge connects Claude, Codex, Cursor, Antigravity, and other MCP-compatible assistants to the project open in DaVinci Resolve Free or Studio.
Inspect a timeline, place media, animate a zoom, adjust color, or try an edit on a duplicate timeline before touching the original.
Current Resolve Free works through the Lua connector. Native-file Lua startup and editing are live-tested on macOS Free 21.1.2.10. Python runs in the external MCP server; Resolve itself needs no Python, FFI or socket library. Choose Start AI Bridge (Lua) on Free 21.1+. The existing Python worker remains available on older Python-enabled Free builds and Studio. See compatibility evidence and limits.
Built to stay light
Works with current Resolve Free. Lua editing is verified on macOS Free 21.1.2.10; the older Python worker is verified on Free 21.0.3.7. Studio-only effects stay Studio-only.
One click to start. Choose Start AI Bridge (Lua) on current Free, or Start AI Bridge on Python-enabled builds. Your AI gets the existing editing tools.
A small, local runtime. No remote bridge server or manually entered token. Website dependencies stay out of the CLI package; FFmpeg and Remotion are optional.
Keep your tokens for the edit. The launcher starts locally, without an AI request or extra startup tools.
⭐ Finding it useful? Give the bridge a star—it helps other editors find it.
Quick setup
You'll need Python 3.10+ (download).
Option A: Run directly with npx (Recommended for Node / npm users)
npx davinci-resolve-ai-bridge-mcpOption B: One-line shell install
macOS / Linux (run in Terminal):
curl -fsSL https://raw.githubusercontent.com/flamexnreal/davinci-resolve-ai-bridge-mcp/main/install.sh | bashWindows (run in PowerShell):
irm https://raw.githubusercontent.com/flamexnreal/davinci-resolve-ai-bridge-mcp/main/install.ps1 | iexFrom a downloaded/cloned repository, run python3 install.py --with-ffmpeg (Windows: py install.py --with-ffmpeg), or use install-macos.command / install-windows.bat for the base install.
Node/npm is only needed for the npm installer and optional website/motion-graphics development.
The installer sets up ~/.resolve-ai-bridge, a private Python environment, the Resolve menu entries, editing skills, and detected supported AI clients. Valid client configs are backed up and merged; invalid configs are left unchanged with a diagnostic. Antigravity and other clients can use the generated mcp-config.json manually.
Wait for INSTALL COMPLETE, then reopen Resolve. If setup stops after downloading, see installer troubleshooting.
For Free-compatible source frame capture and efficient audio decoding, also install the optional private FFmpeg binary:
npx davinci-resolve-ai-bridge-mcp --with-ffmpegThis optional download stays in the bridge's private Python environment. It is not a Studio dependency. An existing ffmpeg on PATH also works; macOS afconvert supports audio extraction without FFmpeg.
Related MCP server: DaVinci Resolve MCP Server
Connect to Resolve
Open DaVinci Resolve with a project.
Choose Workspace → Scripts → Resolve AI Bridge → Start AI Bridge (Lua) on Free 21.1+. On Python-enabled builds, use Start AI Bridge. The folder may appear under Utility.
Ask your AI: “Call resolve_status, then bridge_capabilities and timeline_overview.” Open or create a timeline before using timeline tools; status works without one.
Start from the menu and get editing. Start once per Resolve session. In Workspace → Console, look for RESOLVE AI BRIDGE LUA READY (Lua) or RESOLVE AI BRIDGE READY (Python). Use Stop AI Bridge (Lua) for the Lua worker or Stop AI Bridge for Python; an active operation finishes first. Clicking Start again won't create another worker.
If the menu is missing after installation, quit and reopen Resolve once. Refresh/restart your AI client's MCP server after setup or a tool-schema update.
The Lua connector is live-tested on macOS / Resolve Free 21.1.2.10. Python startup remains verified on Free 21.0.3.7 / Python 3.14.6. Windows, Linux and other builds still need live verification.
On Free 21.1+, open Workspace → Console, select Lua, paste this portable fallback and press Enter:
if fusion:GetData("ResolveAIBridge.NativeApp")~=tostring(fusion) then fusion:RunScript((os.getenv("RESOLVE_AI_BRIDGE_HOME") or ((os.getenv("USERPROFILE") or os.getenv("HOME")).."/.resolve-ai-bridge")).."/ResolveLua.lua") endOn Python-enabled builds, select Py3 and use:
import os;exec(open(os.path.join(os.path.expanduser(os.getenv("RESOLVE_AI_BRIDGE_HOME") or "~/.resolve-ai-bridge"),"ResolveConsole.py"),encoding="utf-8").read())Live startup validation: macOS, DaVinci Resolve Free 21.0.3.7, Python 3.14.6: menu start, real status requests, repeated start, Stop, quit/reopen/start, and Console fallback passed. The separate native-file Lua connector supports the tested Free 21.1.2 build. Windows/Linux and other builds still need live verification.
The Lua menu worker stays in its native script context and uses bmd.wait between requests, keeping the editing UI usable. The Python menu route keeps a separate fuscript process alive; its Py3 fallback starts a daemon worker and returns after a short handshake. The Lua worker uses signed local file messages, with no socket or FFI dependency. No public MCP tool or AI startup call is added.
Studio can use the same menu workflow. To allow direct attach, set Preferences → System → General → External scripting using → Local. When external scripting is available, the bridge connects directly. It probes that connection in a disposable process and uses the Console transport when direct attach is unavailable.
What you can do
In your edit | The bridge can help with |
Find your bearings | Inspect clips, tracks, markers, media, project settings, and timeline health. |
Build the timeline | Import media, place images and overlays, create timelines, and group compound clips. |
Add movement | Set clip transforms, animate zooms, adjust supported speed controls, and stack spotlight/blur effects. |
Work with color | Read and adjust supported grades, animate saturation, and add color shifts. |
Review before committing | Try edits on duplicate timelines, compare structure, and mark candidate silence cuts. |
Check source media | View source frames and analyze source audio levels, silence, and timing. |
Deliver | Queue an approved render, follow its progress, and catch settings Resolve Free can't render. |
Tool | What it does |
| Connection, version, current project and decoder/API availability. |
| Inspect timeline structure, unique clip IDs, labels and settings. |
| Return a native MCP image plus metadata. Composite capture is attempted first; FFmpeg source fallback is labeled explicitly. |
| Source PCM peak/RMS per channel, silence intervals, energy envelope, onsets, activity clusters or a trimmed WAV. |
| Duplicate/open a review timeline and compare structure/properties/markers without switching during comparison. |
| Check active-timeline missing sources, gaps, disabled/locked tracks/clips, supplied delivery expectations and Resolve Free's UHD/60 fps render limits. |
| Place candidate markers, then apply explicitly accepted intervals on a duplicate of an isolated dialogue clip or aligned AV pair. |
| Navigate Resolve. |
| Inspect/import/place media and duration-controlled stills. |
| Static transforms and a keyframed Fusion zoom that keeps your other Fusion nodes connected. |
| Rebuild a normal-speed clip into two pieces, with a verified timeline checkpoint first. See restrictions below. |
| Best-effort title insertion; check |
| Compound creation and constant video speed through a bridge-owned TimeSpeed node. |
| Inspect/change available grade controls and Fusion color animation on bridge-owned nodes. |
| Stackable Fusion blurs (gaussian, defocus, directional) and spotlight masks, static or keyframed. |
| Read-only view of a clip's Fusion nodes and the bridge's effect chain. |
| Markers and clip metadata/state. |
| Track management, explicitly requested deletion, and saving. |
| Inspect presets, queue/start an approved render, and follow its progress. |
Motion graphics with Remotion
For custom typography, lower thirds, or animated callouts, your AI can create a Remotion video and import it with append_media. Remotion is a separate, optional toolchain; it isn't bundled into the bridge's Python runtime.
Motion graphics workflows · Editing recipes
A few things to know
Free support doesn't unlock Studio features. Source frames exclude timeline effects, and source audio isn't the Fairlight mix. Some edits have limits: splits rebuild clips, title text is best effort, and silence cuts are restricted to supported clip layouts.
Call
resolve_statusandtimeline_overview.Use each clip's
id, which uses its Resolve unique ID when available.labelvalues such asV1.2remain accepted but can change after insertions/deletions. Rebuilt and duplicated clips have new IDs.Call
preview_timelinebefore a batch of changes. It creates and opens a copy while keeping the original.Get fresh IDs from
timeline_overview, make edits, and inspect after each change.Use
compare_timelines(original, preview)to review structural changes. Audition/view the result in Resolve too: the comparison does not render pixels or compare all Fusion, color, or Fairlight data.
All public frame inputs and clip start/end positions use absolute timeline frames. Marker offsets are relative to timeline start. Timecodes support non-drop-frame and 29.97/59.94 drop-frame (HH:MM:SS;FF). Cut end positions are exclusive.
Fusion effects (animate_zoom, blur, spotlight, saturation, color fx) are the exception, because they live inside one clip: start_frame, end_frame and keyframe frame count from the clip's first frame (0). Pass timeline_start_frame, timeline_end_frame or keyframe timeline_frame to use absolute timeline frames instead.
Free edition: Use the native-file Lua worker on Free 21.1+. It uses ordinary timeline, marker, clip and Fusion APIs and shares the existing Python editing implementation outside Resolve. No Studio AI transcription, Magic Mask, Smart Reframe, or neural feature was added.
Frame images: Source fallback shows decoded source media, not the graded/composited viewer. It omits Fusion, transforms and overlays.
mode="composite"fails explicitly if a composited still is unavailable. Without a resize utility, actual dimensions are reported rather than invented.Audio: Analysis reads source PCM, not the Fairlight mix. It excludes timeline gain, fades, mute, effects and retiming. Known source retiming is rejected. Silence uses 50 ms windows, not speech transcription. Results include the source offset, absolute timeline origin, exclusive ends and a truncation flag; default analysis limit is 300 seconds.
Splits: Fusion clips, locked tracks, mixed rates and known retiming are rejected before deletion. A checkpoint is retained. Rebuilt clips restore static transforms, enabled state, clip color and the current color-grade layer. Audio links, fades, keyframes, other grade layers and all metadata are not guaranteed. On failure, the tool opens the checkpoint and reports any partial attempted timeline honestly.
Dialogue cuts: Automatic application is restricted to one isolated clip or one aligned video/audio pair. It rejects stale review markers and complex multi-clip timelines. The original is kept intact. Review audio gain, fades and non-review markers on the result.
Fusion effects: Zoom, blur, spotlight, saturation and color fx share one bridge-owned chain before MediaOut. Effects, speed and resets passed live checks through the Lua connector on macOS Free 21.1.2.10 and through Python on Free 21.0.3.7. Tests also cover preserving user nodes. Other builds, Studio and large comps need verification; inspect results with
inspect_fusionor the Fusion page.Speed: Fusion mode changes video timing inside the clip, not timeline duration or linked audio. Resetting to 1× neutralizes only the updated bridge's own node; user-created and older untagged TimeSpeed nodes are left alone. Reverse mapping is not verified and is rejected. Clip-attributes mode changes all uses of that media, multiplying its current source FPS; it is not a per-clip reset or speed ramp.
Validation: Automated tests cover mocked Resolve operations, source decoding and MCP responses. They do not certify every operation on every Free-version build or platform. See testing guidance for the manual integration checklist.
Connect your AI client
Most setup is handled by the installer. For manual configuration, use the absolute-path entry in ~/.resolve-ai-bridge/mcp-config.json. No token needs to be typed into your client; the server and worker share a local token file automatically.
The installer registers the bridge when it finds the Codex CLI. Check with:
codex mcp get resolve-ai-bridgeIf needed, register the installed runtime on macOS/Linux:
codex mcp add resolve-ai-bridge -- "$HOME/.resolve-ai-bridge/.venv/bin/python" "$HOME/.resolve-ai-bridge/bridge/server.py"On Windows PowerShell:
codex mcp add resolve-ai-bridge -- "$HOME/.resolve-ai-bridge/.venv/Scripts/python.exe" "$HOME/.resolve-ai-bridge/bridge/server.py"Restart/refresh the MCP server in the desktop app after setup or a tool-schema update. Start a new task and ask: “Call resolve_status, then bridge_capabilities and timeline_overview.” With no timeline open, resolve_status can still confirm the project connection.
The ChatGPT desktop app and local Codex clients on the same host share the Codex MCP configuration. ChatGPT web does not read this local configuration; remote plugin/tunnel setup is a separate integration and is not installed by this project. See official MCP setup documentation.
For lengthy source analysis, the optional Codex server setting tool_timeout_sec = 180 allows more time than its default timeout. Keep it inside the existing [mcp_servers.resolve-ai-bridge] table.
Use the absolute-path server entry generated at ~/.resolve-ai-bridge/mcp-config.json. The installer also writes claude-command.txt and codex-command.txt there.
For clients that support npm commands, install first, then start the server with the explicit --serve mode:
{
"mcpServers": {
"resolve-ai-bridge": {
"command": "npx",
"args": ["-y", "davinci-resolve-ai-bridge-mcp", "--serve"]
}
}
}npx davinci-resolve-ai-bridge-mcp without --serve is the installer, not an MCP stdio process. Prefer the generated absolute Python command for predictable offline startup. The installer-created resolve-ai-bridge launcher starts the server directly; npm's executable with the same name requires --serve.
No token is needed in the client configuration. The server and Console worker share a local token file automatically.
Troubleshooting & updates
If the bridge is offline, open a project and choose Start AI Bridge (Lua) on Free 21.1+, or Start AI Bridge on Python-enabled builds. Run the doctor from the repository for a connection check:
python3 tools/doctor.pyUse python3 tools/doctor.py --offline for file checks without contacting Resolve.
Before an update, stop the worker and your MCP clients. The installer validates the replacement before activating it and keeps the previous runtime for recovery.
Troubleshooting · Testing · Release notes
Console requests carry a unique ID, deadline, worker session and the project/timeline IDs last observed by that MCP client. Inspect resolve_status or timeline_overview in each client before its first queued edit. Mutations validate that context immediately before execution; stale or unavailable IDs are rejected. Restart the Console worker after updating: older workers are refused by the new client. Only one Console worker should use a runtime directory.
The Lua route signs local request/reply/heartbeat bytes with HMAC-SHA256. Complete operations hold a cross-process lock and native lease; object handles and Stop requests belong to one session. Partial file reads are retried without resending edits. An uncertain response halts further native calls, records an unknown outcome and requires fresh inspection. Lua's heartbeat runs between native calls and can pause during a long native call; it is not a progress guarantee.
The heartbeat reports busy, state (running, completed, failed, or initial idle) and request_id. Its reporting thread makes no Resolve API calls; project/timeline details are cached during jobs. A fresh heartbeat proves the Python reporter is alive, not that a native operation is making progress. A native call holding Python's GIL may still prevent heartbeat updates.
A client timeout stops waiting; it does not confirm cancellation. Queued requests expire before execution, but active native work can finish later. Inspect ~/.resolve-ai-bridge/requests/<request-id>.json and the timeline before attempting another edit. Completed/failed records retain results; a surviving running record after a crash means an unknown outcome and prevents replay of that ID. This is duplicate suppression, not an exactly-once guarantee. Completed/failed records are cleaned up after 7 days; running and explicit Lua unknown records stay for 30 days. The Python worker runs cleanup while active; the Lua transport runs it on tool calls, at most once every 10 minutes per MCP process/runtime. Cleanup also removes unread Python replies after an hour and rotates its log at 1 MB. A newly submitted request has a new ID.
In auto mode, direct attach falls back to Console only before dispatch. Forcing RESOLVE_AI_BRIDGE_MODE=direct disables worker fallback and reports offline if direct attach is unavailable. Unexpected exceptions after dispatch report an unknown outcome without replay. UI switches during native execution cannot be locked out: keep the intended project/timeline open while edits run. Context validation catches mismatches immediately before execution, not switches away and back between observations.
Before updating, stop the Console worker and MCP clients. The installer builds and validates a staged runtime and dependencies before activation, retains the old directory at ~/.resolve-ai-bridge.previous, and restores it on a caught activation failure. A hard interruption can leave a sibling .install-lock and .stage-* directory; see troubleshooting for recovery. Configuration/menu registration follows activation and is not one transaction with it. Run python3 tools/doctor.py --offline for file diagnostics without contacting Resolve.
python3 -m pip install -r requirements.txt
python3 -m unittest discover -s tests -v
node tools/check-package.mjs
python3 tools/doctor.pyWebsite development dependencies are separate from the published CLI's runtime dependencies:
npm ci
npm run buildThe package check creates and inspects a temporary npm tarball; it does not publish. GitHub Actions runs the suite, package check, website build and dependency audit on Linux, macOS and Windows. Install optional lupa (python3 -m pip install lupa) to run the Fusion Lua tests too. Maintainers: see release instructions.
License
MIT. See LICENSE.
Available Tools
46 toolsadd_imageA
Put an image on the timeline: import the still, place it with a real duration, and optionally position it.
This is the tool for logos, screenshots, overlays, title cards, and any generated picture. Use track_index=2 or higher to lay the image over existing footage; the track is created automatically when missing. Set at_playhead=True to place it at the current playhead instead of the end of the track.
pan_percent and tilt_percent move the image as a percentage of frame width and height from centre. zoom is a scale multiplier where 1.0 is the original size. opacity runs from 0 to 100. Verify with timeline_overview afterwards, and read the returned actual_duration_frames: Resolve can shorten a still.
Inputs: path (required), zoom, opacity, rotation, +8 more. Returns: result
add_markerA
Add a timeline marker. Omit frame to use the current playhead; frame values are relative to timeline start.
Inputs: name (required), note, color, frame, +1 more. Returns: result
add_trackA
Add one or more empty tracks. track_type is video, audio, or subtitle.
Inputs: count, track_type. Returns: result
animate_color_fxA
Animate rainbow hue rotation and a subtle luminance flicker with a bridge-owned Fusion ColorCorrector.
Reports any part this build's ColorCorrector cannot do. reset=True removes the bridge node. Frames: start_frame/end_frame and keyframe 'frame' count from the clip's first frame (0). timeline_start_frame/timeline_end_frame and keyframe 'timeline_frame' take absolute timeline frames.
Inputs: item_id (required), reset, flicker, rainbow, +9 more. Returns: result
animate_zoomA
Animate a clip's scale and framing over time (smooth zooms, punch-ins, rebounds, pull-outs, multi-keyframe paths).
Supports full Zoom In and Zoom Out (direction='out'), all standard easing curves
(linear, ease_in, cubic_in, ease_out, cubic_out, ease, cubic_ease,
circular_ease, rebound_in, rebound_out, elastic_out), multi-keyframe arrays,
and automated AI presets (punch_in, pop_in, slow_push, dramatic, reveal, cinematic).
Joins the bridge's Fusion chain: blur, spotlight and your own Fusion nodes stay connected.
reset=True removes only the bridge zoom node.
Frames: start_frame/end_frame and keyframe 'frame' count from the clip's first frame (0).
timeline_start_frame/timeline_end_frame and keyframe 'timeline_frame' take absolute timeline frames.
Inputs: reset, easing, preset, item_id, +11 more. Returns: result
append_mediaA
Append video or audio to the timeline from media pool ids or absolute file paths.
Omit track_index and record_frame to append at the end of the timeline. For still images use add_image instead, which controls how long the still lasts. Audio and video are retained by default. Use media_type=1 for video only or media_type=2 for audio only; track_index then selects that track type.
Inputs: paths, media_ids, media_type, track_index, +2 more. Returns: result
apply_blur_effectA
Apply a static or gradual blur to the full frame or a masked region (gaussian, defocus, directional).
Each mask_name is its own blur; reusing a name updates it. Keyframes may set frame, blur_size, center_x, center_y, width, height and easing. Joins the bridge's Fusion chain without cutting out your own nodes. reset=True removes every bridge blur and leaves other nodes connected. Frames: start_frame/end_frame and keyframe 'frame' count from the clip's first frame (0). timeline_start_frame/timeline_end_frame and keyframe 'timeline_frame' take absolute timeline frames.
Inputs: reset, width, easing, height, +18 more. Returns: result
apply_silence_cutsA
Remove USER-ACCEPTED silence intervals on a new duplicate timeline, retaining the original.
Supports an isolated normal-speed dialogue clip or one aligned video/audio pair. Complex timelines, Fusion clips, changed timelines and mixed frame rates are rejected. Requires explicit user approval of the selected cuts. Review the resulting preview: rebuilding does not guarantee preservation of fades, gain automation or all metadata.
Inputs: marker_ids (required), name. Returns: result
apply_spotlight_maskB
Apply a static or animated spotlight: dim everything outside a soft mask, with sweep keyframes.
Joins the bridge's Fusion chain without cutting out your own nodes. reset=True removes every bridge spotlight. Frames: start_frame/end_frame and keyframe 'frame' count from the clip's first frame (0). timeline_start_frame/timeline_end_frame and keyframe 'timeline_frame' take absolute timeline frames.
Inputs: reset, shape, width, easing, +19 more. Returns: result
bridge_capabilitiesB
Report Resolve version, transport, API presence and source decoder availability.
API presence does not guarantee operation success. New review workflows use ordinary timeline APIs. Python startup is verified on macOS Free 21.0.3.7. Free 21.1+ uses the Lua native-file worker; Python runs outside Resolve.
Inputs: no named parameters. Returns: result
change_clip_speedA
Change constant video speed through a bridge-owned Fusion TimeSpeed node.
Existing Fusion connections are preserved. Timeline duration and linked audio are unchanged. Speed 1 neutralizes only bridge-owned nodes. Reverse is not currently verified. Clip-attributes mode changes EVERY use of the source media, relative to its current FPS.
Args: item_id: Target clip id (e.g. 'V1.1', 'playhead', or clip name). Defaults to active clip under playhead. speed: Speed multiplier (e.g. 0.75 for 75% speed / 25% slower, 0.5 for half-speed, 2.0 for 2x speed, 1.0 for normal). speed_percent: Speed as a percentage (e.g. 75.0 for 75% speed). slow_down_percent: Slowdown percentage (e.g. 25.0 to slow down by 25% -> 0.75x speed). speed_up_percent: Speedup percentage (e.g. 50.0 to speed up by 50% -> 1.5x speed). interpolate_frames: Whether to enable smooth frame interpolation/blending (default True). reverse: Must be False; use Resolve manually for reverse playback. method: Implementation method: 'fusion' (native TimeSpeed node, default) or 'clip_attributes' (MediaPoolItem FPS).
Inputs: speed, method, item_id, reverse, +4 more. Returns: result
compare_timelinesA
Compare two timelines by unique ID or exact name without changing the active timeline.
Reports structural/property/marker changes; does not compare rendered pixels, internal Fusion graphs, full grades or Fairlight processing.
Inputs: preview (required), original (required). Returns: result
create_compound_clipA
Create a compound clip combining one or more timeline items into a single container clip.
Args: item_ids: List of timeline item ids to combine (e.g. ['V1.1', 'A1.1'] or ['A1.1']). If omitted, item_id is used. item_id: Single timeline item id to turn into a compound clip (e.g. 'V1.1' or 'playhead'). Defaults to 'playhead'. name: Name for the newly created compound clip (e.g. 'Voice Compound Clip'). start_timecode: Optional custom starting timecode for the compound clip container.
Inputs: name, item_id, item_ids, start_timecode. Returns: result
create_timelineA
Create and open a new empty timeline with an exact name.
Inputs: name (required). Returns: result
delete_clipsA
Delete timeline items. Refuses unless the user explicitly approved this destructive action in the current conversation.
Inputs: item_ids (required), ripple, user_approved. Returns: result
delete_markerA
Delete the timeline marker at a frame relative to timeline start.
Inputs: frame (required). Returns: result
get_clip_gradeB
Inspect color grading nodes, versions, and Fusion compositions on a clip.
Inputs: item_id (required). Returns: result
get_clip_transformA
Read the current position, scale, rotation, crop, opacity, and blend mode of one timeline item.
Pass an id such as V2.1, or leave item_id as "playhead" to read the clip under the playhead.
Inputs: item_id, track_index. Returns: result
import_mediaA
Import existing local media files by absolute path into the Media Pool. This does not place them on the timeline.
Inputs: paths (required). Returns: result
insert_titleA
Insert a title at the playhead on the current video track, best effort.
Available title names depend on the Resolve version and installed templates; Text+ and Text are the common ones. Setting the text through scripting is not supported on every build, so check text_set in the result and tell the user to type it in the Inspector if it is false. For designed animated typography, Remotion produces a better result.
Inputs: text, opacity, title_name. Returns: result
inspect_fusionA
Read-only: list a clip's Fusion nodes, their connections, and the bridge effect chain before MediaOut.
Use after a Fusion effect to confirm what is connected. Never creates or changes a composition.
Inputs: item_id, track_index. Returns: result
keyframe_clip_saturationA
Animate saturation (e.g. 1.0 full color to 0.0 black and white) with a bridge-owned Fusion node.
Your own ColorCorrector/BrightnessContrast nodes are never changed. reset=True removes the bridge node. Frames: start_frame/end_frame and keyframe 'frame' count from the clip's first frame (0). timeline_start_frame/timeline_end_frame and keyframe 'timeline_frame' take absolute timeline frames.
Inputs: item_id (required), reset, easing, end_frame, +5 more. Returns: result
list_mediaB
List media pool items recursively with unique ids, bin paths, file paths, frame counts, and durations.
Inputs: limit. Returns: result
list_render_presetsA
List the render presets and formats available in this project, for use with render_current_timeline.
Inputs: no named parameters. Returns: result
list_timelinesA
List every timeline in the open project and identify the current one.
Inputs: no named parameters. Returns: result
open_pageA
Switch the Resolve window to a page so the user can see a change: media, cut, edit, fusion, color, fairlight, or deliver.
Inputs: page (required). Returns: result
open_timelineB
Open a timeline by unique ID, exact name or one-based index from list_timelines.
Inputs: name, index, timeline_id. Returns: result
preview_timelineA
Duplicate and open the active timeline for reviewing edits while retaining the original.
No edits are applied by this call. Get fresh clip IDs with timeline_overview, edit the preview, and compare_timelines before accepting it.
Inputs: name. Returns: result
project_healthA
Inspect active-timeline missing sources, gaps, disabled/locked tracks and clips.
Optionally compare timeline resolution/rate against your delivery requirements. Gaps and disabled tracks can be intentional; this does not inspect Fairlight automation.
Inputs: expected_width, expected_height, expected_frame_rate. Returns: result
project_infoB
Return the current project's name, timeline, frame rate, resolution, and timeline count.
Inputs: no named parameters. Returns: result
render_current_timelineC
Add a render job for the current timeline. Starting the render requires explicit user approval.
Inputs: output_dir (required), name, start, preset, +1 more. Returns: result
render_statusA
Report render progress: whether Resolve is rendering, and each job's status, percent and errors.
Pass the job_id from render_current_timeline, or leave it empty for every job in the queue.
Inputs: job_id. Returns: result
resolve_statusA
Check how the bridge is connected, plus the Resolve version, open project, and timeline. Always call this first.
Inputs: no named parameters. Returns: result
review_silenceA
Analyze source audio for a clip and place yellow review markers; never deletes clips.
Analysis starts at the clip's in-point and excludes Fairlight processing. Audition the markers, then pass accepted marker IDs to apply_silence_cuts.
Inputs: item_id, track_index, max_duration_seconds, min_silence_duration, +1 more. Returns: result
save_projectA
Save the current Resolve project.
Inputs: no named parameters. Returns: result
set_clip_colorB
Set a standard Resolve clip color, or pass an empty string to clear it.
Inputs: item_id (required), color. Returns: result
set_clip_enabledA
Enable or disable one timeline item without deleting it.
Inputs: enabled (required), item_id (required). Returns: result
set_clip_gradeB
Apply ASC-CDL color grading (saturation, slope/gain, offset/lift, power/gamma) to a clip. Pass saturation=0.0 for black & white.
Inputs: item_id (required), power, reset, slope, +3 more. Returns: result
set_clip_propertyA
Set any documented Resolve timeline item property directly. Prefer set_clip_transform for common changes.
Inputs: value (required), item_id (required), property_name (required). Returns: result
set_clip_transformA
Position, scale, rotate, fade, crop, or blend one timeline item.
Use an id such as V2.1 from timeline_overview, or pass item_id="playhead" to act on the clip currently under the playhead so you need not look up the id. pan and tilt are in pixels from centre; pan_percent and tilt_percent are the same move as a percentage of the timeline width and height. zoom sets both axes at once, where 1.0 is original size; zoom_x and zoom_y scale one axis. opacity runs from 0 to 100. composite_mode accepts names such as normal, screen, multiply, add, overlay, or alpha. scaling is crop, fit, fill, or stretch. resize_filter, retime_process, and motion_estimation accept the Resolve mode names. This sets a static transform; for a scale that animates over time use animate_zoom instead.
Inputs: item_id (required), pan, tilt, zoom, +21 more. Returns: result
set_playheadB
Move the current timeline playhead. Use HH:MM:SS:FF matching the timeline frame rate.
Inputs: timecode (required). Returns: result
set_track_nameB
Rename one track, for example labelling V2 as Overlays.
Inputs: name (required), track_index (required), track_type. Returns: result
split_clipA
Split a normal-speed clip at an absolute frame/timecode after creating a timeline checkpoint.
Keeps static transforms, enabled state, color and current grade layer. Rejects Fusion compositions and mixed rates; audio links/fades/metadata are not guaranteed. On a failed rebuild, opens the checkpoint and reports the partial attempted timeline. Prefer unique IDs from timeline_overview. Verify the resulting halves.
Inputs: frame, item_id, timecode, track_index. Returns: result
timeline_audioA
Analyze selected source PCM, excluding Fairlight gain, fades, mute and the timeline mix.
Actions: analyze (per-channel peak/RMS), silence_cuts, energy_envelope, export_slice, onsets, vad_clusters. Defaults to the range from playhead to clip end; whole_clip starts at the clip in-point. Decode is capped at max_duration_seconds. Cut end frames are exclusive; timeline_* fields use absolute timeline coordinates. Known retiming is rejected rather than guessed. Needs ffmpeg or macOS afconvert.
Inputs: action, item_id, whole_clip, track_index, +5 more. Returns: result
timeline_frameA
Return a native MCP image of the requested absolute timeline frame or timecode.
Auto attempts a composited still, then Free-compatible ffmpeg source extraction. Source fallback excludes timeline transforms, grades, Fusion and overlays. mode='composite' fails explicitly when a true timeline still is unavailable.
Inputs: mode, frame, format, timecode, +1 more. Returns: result
timeline_overviewA
Inspect stable unique clip IDs, positional labels, tracks, frame ranges and markers. Call before and after edits.
Inputs: max_items. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 46 tools
Most tools target clearly distinct Resolve resources or actions, and descriptions help separate similar-sounding operations. A few overlaps remain: timeline_audio's silence_cuts versus review_silence/apply_silence_cuts, set_clip_property versus set_clip_transform, and resolve_status/bridge_capabilities/project_info require careful selection.
All tools use snake_case and most follow a verb_noun pattern such as list_media, set_clip_transform, and apply_blur_effect. A handful use noun-first naming like resolve_status, project_info, timeline_overview, timeline_frame, timeline_audio, project_health, and render_status, which is a minor deviation.
The 46-tool surface is far above a typical well-scoped set and risks overwhelming agents even for a broad video-editing bridge. Many granular effect tools and generic escape hatches could be consolidated or grouped more tightly.
The surface covers media import/append, timeline creation and inspection, transforms, grades, Fusion effects, markers, audio analysis/cuts, render presets, and render status. Minor gaps remain around project lifecycle operations, explicit render starting, undo/checkpoint restore, and deeper Fairlight controls.
Maintenance
Related MCP Connectors
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
Direct AI video, image, music and storyboard production from any MCP client.
Plan, compare, price, generate, and recover AI video from compatible MCP clients.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- 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.24MIT
- FlicenseBqualityDmaintenanceControl DaVinci Resolve Studio from MCP clients. Provides tools and resources for editing, color grading, Fusion compositing, audio, playback, and rendering.32-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to control DaVinci Resolve Studio via MCP, providing full scripting API coverage plus workflow helpers for editing, media organization, rendering, grading, and more.9,538 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to control DaVinci Resolve (Free and Studio) through 215 MCP tools covering the full Resolve scripting API, including projects, timelines, media, Fusion, color, and rendering.139 PyPI1MIT