DaVinci-Resolve-MCP
The DaVinci Resolve MCP server provides 64 tools to control DaVinci Resolve Studio through its official scripting API, enabling extensive automation without UI interaction.
Connection & Project Management: Connect to Resolve, retrieve project info, manage active projects and timelines.
Timeline & Playhead Control: List/switch timelines, move playhead to timecodes or markers, inspect timeline clip under playhead.
Media Pool & Clip Operations: Inspect the media pool recursively, search clips by name, list selected/timeline clips, inspect clip metadata.
Markers: List, add (with name/note/color), and delete timeline markers; jump to markers.
Color Grading & PowerGrades: Copy grades between clips, apply DRX grades, set ASC CDL values, inspect/enable/bypass node trees, manage PowerGrades (register, search, load), and apply preset styles (cinematic, bridal, editorial, dark-moody, music-video, commercial).
Render Queue: List/create render presets, add jobs to the queue, start and monitor renders.
Gallery & Stills: List gallery albums and stills, save stills from the color page, export stills/DRX files.
Capture & References: Export current frame, clip references, before/after comparisons; manage captured artifacts and folders.
Validation: Run comprehensive checks on connection, project, timeline, clip, grading, rendering, and capture support; generate JSON/Markdown reports.
API Limitations Transparency: Clearly indicates operations not supported by the official API (e.g., adding nodes, layer mixers, node labeling).
Provides tools for interacting with DaVinci Resolve, including frame capture, timeline management, grade application via DRX, gallery still operations, and validation of project/timeline/clip state.
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., "@DaVinci-Resolve-MCP capture the current frame as a still"
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 MCP
A 64-tool stdio MCP server for DaVinci Resolve’s documented scripting API. Windows 11 is the primary platform, macOS is supported, and Linux support is best effort. The project does not use UI automation, OCR, simulated input, or undocumented Resolve methods.
Windows Quick Start
Requirements: Windows 11, Python 3.12 or newer, Git, and DaVinci Resolve. Live external control may require Resolve Studio, depending on the installed edition and Blackmagic’s scripting support.
Use a writable source location—not Program Files:
cd "$env:USERPROFILE\Documents\GitHub"
git clone https://github.com/BillyRaz/Davinci-MCP.git
cd Davinci-MCP
.\setup-davinci-mcp.ps1Setup prefers py -3.12, falls back to a compatible python, creates .venv,
installs .[dev], generates the user config, and runs pytest, Ruff, and offline
validation. It never installs packages silently, requests Administrator access,
or changes execution policy globally.
Run and validate:
.\run-davinci-mcp.ps1
.\validate-davinci-mcp.ps1
.\validate-davinci-mcp.ps1 -LiveThe .cmd wrappers provide equivalent double-click entry points. The live option
is read-only and should only be used with Resolve Studio open. Resolve Free
external scripting limitations are reported as warnings/unsupported capability,
not MCP defects.
The parameterized global color-treatment LUT engine is documented in docs/LUT_ENGINE.md.
To create an optional Desktop shortcut:
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\create_windows_shortcut.ps1The script only creates Run DaVinci MCP.lnk; it does not alter security settings.
Related MCP server: DaVinci Resolve MCP Server
Windows Codex and MCP Configuration
Keep executable and argument as separate values. Replace the example clone path:
{
"mcpServers": {
"davinci-resolve": {
"command": "C:\\Users\\YOUR_NAME\\Documents\\GitHub\\Davinci-MCP\\.venv\\Scripts\\python.exe",
"args": [
"C:\\Users\\YOUR_NAME\\Documents\\GitHub\\Davinci-MCP\\server.py"
]
}
}
}For Codex, add the server to the MCP configuration used by your Codex installation;
inspect and preserve existing servers before editing it. Generic stdio and VS
Code-compatible clients can use the same command/args object.
Windows troubleshooting:
“Missing
.venv”: run.\setup-davinci-mcp.ps1.Python not found: install Python 3.12+ with the
pylauncher, then reopen the shell.Resolve connection unavailable: open Resolve Studio and enable local External scripting in Resolve Preferences. Do not change preferences automatically.
Permission errors: clone under Documents or Developer, not
Program Files.Paths are discovered from
ProgramFiles,ProgramData,APPDATA,LOCALAPPDATA, andUSERPROFILE; explicit environment overrides take priority.
macOS Installation
Clone into a user-owned development directory, then use the portable launchers:
mkdir -p "$HOME/Developer"
cd "$HOME/Developer"
git clone https://github.com/BillyRaz/Davinci-MCP.git
cd Davinci-MCP
./setup-davinci-mcp.command
./run-davinci-mcp.commandApple Silicon and Intel are detected automatically. The launcher retains Blackmagic’s official scripting locations:
export RESOLVE_SCRIPT_API="/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting"
export RESOLVE_SCRIPT_LIB="/Applications/DaVinci Resolve/DaVinci Resolve.app/Contents/Libraries/Fusion/fusionscript.so"
export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}$RESOLVE_SCRIPT_API/Modules"RESOLVE_SCRIPT_API accepts either the parent Scripting directory or its direct
Modules directory. A generic/Codex macOS configuration is:
{
"mcpServers": {
"davinci-resolve": {
"command": "/Users/YOUR_NAME/Developer/Davinci-MCP/.venv/bin/python",
"args": ["/Users/YOUR_NAME/Developer/Davinci-MCP/server.py"]
}
}
}Linux Installation (Best Effort)
Linux discovery checks /opt/resolve, /opt/resolve/Developer/Scripting, and
common libraries under /opt/resolve/libs, while honoring all overrides:
./setup-davinci-mcp.sh
./run-davinci-mcp.sh
./validate-davinci-mcp.shLinux paths and launchers are mock-tested, but live Resolve behavior is not claimed as fully validated.
Capture Support
Capture tools export genuine Resolve output only:
capture_current_framecapture_clip_referencecapture_before_after_referencelist_captured_referencesopen_capture_folderdelete_captured_reference
Capture uses documented current-frame export when exposed, Gallery still export/delete as a fallback, or a supported temporary one-frame render path. Pillow is used only to combine already-exported images or calculate technical image-change metrics. A “before” is never claimed unless it was actually captured first.
Every generated file result includes its absolute path. Metadata includes the project, timeline, frame/timecode, timestamp, and actual capture method.
TimelineItem Locks
The playhead is an acquisition tool only. lock_timeline_item (and the compatible
lock_timeline_target name) double-reads the item under the playhead, validates any
confirmed identity, and stores a session-local TimelineItemLock. The stored lock
contains project, timeline, item unique ID, original track/address and frame range,
duration, source identity/path, creation time, and connection generation. It does
not contain the playhead position.
All production capture and grading tools re-resolve the locked item by Resolve unique ID before acting and use its currently resolved track/item address. Moving the playhead, playing, scrubbing, or switching Resolve pages therefore does not invalidate the lock. A project or timeline switch, connection generation change, missing or ambiguous item, explicit release, or server restart does.
queue_timeline_item supports acquiring multiple independent item identities for
future batch workflows. validate_queued_timeline_items resolves the queue without
consulting the playhead. Queue entries are session-local and are not persisted.
The official API does not expose timeline-item selection independently of the playhead, so initial interactive acquisition still uses the item under it. Capture may temporarily move the timeline to export an explicit frame and then restore the editor's timecode; this does not change which TimelineItem is locked.
Validation
Offline validation checks Python, dependencies, platform discovery, scripting paths, native library, writable output, config, presets, and MCP registration. Live validation additionally inspects the read-only connection/project/timeline/ clip/Gallery/render capabilities. It does not apply grades, start renders, or change the active timeline.
Reports use passed, warning, failed, skipped, and unsupported, and are
written as JSON and Markdown with timestamped copies.
Configuration and Output Paths
Default config:
Platform | Config |
Windows |
|
macOS |
|
Linux |
|
Default output root:
Platform | Output |
Windows |
|
macOS |
|
Linux |
|
Each root contains captures, comparisons, validation, logs, reports,
presets, and cache.
Older macOS artifacts at
/Applications/DaVinci Resolve/davinci-mcp/output are left untouched. Copy wanted
files manually into the new Application Support subdirectories; no automatic move
or deletion occurs.
Environment variables override TOML configuration:
DAVINCI_RESOLVE_HOMERESOLVE_SCRIPT_APIRESOLVE_SCRIPT_LIBDAVINCI_MCP_OUTPUT_DIRDAVINCI_MCP_PRESET_DIRDAVINCI_MCP_LOG_LEVELDAVINCI_MCP_CONNECTION_MODEDAVINCI_MCP_CAPTURE_FORMATDAVINCI_MCP_TEMP_RENDER_DIRDAVINCI_MCP_CONNECTION_TIMEOUTDAVINCI_MCP_RENDER_TIMEOUT
Discovery priority is explicit override, existing discovered installation, known platform default, then a clear validation failure when the selected path is absent.
Development and Testing
python3.12 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'
.venv/bin/python -m pytest
.venv/bin/python -m ruff check .
.venv/bin/python scripts/offline_validate.pyOn Windows, replace .venv/bin/python with
.venv\Scripts\python.exe. GitHub Actions runs Python 3.12 tests and Ruff on
Windows, macOS, and Ubuntu without attempting a live Resolve connection.
Available Tools
64 toolsadd_layer_mixerB
Report the official API limitation for layer mixers.
Inputs: no named parameters. Returns: result
add_markerC
Add a marker at a zero-based frame offset in the active timeline.
Inputs: frame (required), name, note, color, +2 more. Returns: object
add_parallel_nodeC
Report the official API limitation for parallel nodes.
Inputs: no named parameters. Returns: result
add_render_jobB
Configure the current timeline and append a job to Resolve's render queue.
Inputs: target_dir (required), mode, codec, format, +4 more. Returns: object
add_serial_nodeC
Report the official API limitation for adding serial nodes.
Inputs: no named parameters. Returns: result
analyze_clip_scopesB
Explain why numerical image analysis cannot use the official scripting API.
Inputs: no named parameters. Returns: result
apply_gradeC
Apply a DRX grade to a clip. Modes: 0 none, 1 source TC, 2 start aligned.
Inputs: drx_path (required), item_index (required), track_index (required), grade_mode. Returns: object
batch_grade_clipsC
Apply one registered DRX template to explicit timeline clip addresses.
Inputs: clips (required), template (required), grade_mode. Returns: object
batch_rename_clipsB
Rename timeline clips. Each item needs track_index, item_index, and name.
Inputs: items (required). Returns: object
capture_before_after_referenceC
Preserve two genuine exported frames and optionally combine them side by side.
Inputs: after_reference (required), before_reference (required), overwrite, output_name, +1 more. Returns: object
capture_clip_referenceC
Export a frame from an explicit clip, restoring the original playhead afterward.
Inputs: clip_identifier (required), overwrite, output_name, custom_frame, +2 more. Returns: object
capture_current_frameC
Export the current Resolve timeline frame and matching JSON metadata.
Inputs: overwrite, output_name, output_format, include_metadata. Returns: object
connect_to_resolveC
Connect to running Resolve Studio and return product/project context.
Inputs: force. Returns: object
copy_gradeC
Copy a source clip's current grade to explicitly addressed target clips.
Inputs: targets (required), source_item (required), source_track (required). Returns: object
create_cinematic_gradeD
Apply registered cinematic DRX.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_commercial_gradeD
Apply registered commercial DRX.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_dark_moody_gradeD
Apply registered dark-moody DRX.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_editorial_gradeD
Apply registered editorial DRX.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_luxury_bridal_gradeC
Apply registered luxury bridal DRX with protected skin and warm golds.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_music_video_gradeD
Apply registered music-video DRX.
Inputs: item_index (required), track_index (required), grade_mode. Returns: object
create_render_presetC
Configure supported render settings and save them as a named preset.
Inputs: name (required), target_dir (required), mode, codec, +4 more. Returns: object
current_clipA
Return the current video timeline item under the playhead.
Inputs: no named parameters. Returns: object
current_playheadA
Return the active timeline playhead timecode.
Inputs: no named parameters. Returns: object
current_projectA
Return the active project's identity, timeline count, and render state.
Inputs: no named parameters. Returns: object
current_timelineA
Return active timeline bounds, playhead, and track counts.
Inputs: no named parameters. Returns: object
delete_captured_referenceC
Delete one generated artifact and paired capture metadata when present.
Inputs: reference (required). Returns: object
delete_markerC
Delete the active timeline marker at a frame offset.
Inputs: frame (required). Returns: object
export_stillC
Export selected Gallery stills, including DRX for later grade application.
Inputs: folder (required), prefix (required), album_index (required), still_indices (required), +2 more. Returns: object
get_latest_validation_reportB
Return the latest persisted validation report and its absolute path.
Inputs: no named parameters. Returns: object
inspect_clipA
Inspect the current clip's metadata; image-scope analysis is not API-accessible.
Inputs: no named parameters. Returns: object
inspect_media_poolA
Return the recursive media-pool bin tree, optionally including clip metadata.
Inputs: include_clips. Returns: object
inspect_node_treeC
Inspect count, labels, LUTs, tools, and cache mode for a clip node graph.
Inputs: item_index (required), track_index (required), layer. Returns: object
jump_markerC
Move the playhead to a timeline marker identified by frame offset.
Inputs: frame (required). Returns: object
jump_to_timecodeA
Move the timeline playhead to an HH:MM:SS:FF timecode.
Inputs: timecode (required). Returns: object
label_nodeB
Report the official API limitation for changing node labels.
Inputs: no named parameters. Returns: result
list_captured_referencesA
List generated capture/comparison artifacts with absolute paths.
Inputs: no named parameters. Returns: result
list_clipsA
List addressable video timeline clips, optionally on one 1-based track.
Inputs: track_index. Returns: result
list_gallery_albumsB
List Gallery still albums or PowerGrade albums.
Inputs: powergrades. Returns: result
list_markersA
List active timeline markers with frame offsets and metadata.
Inputs: no named parameters. Returns: result
list_nodesB
List nodes in a clip color graph using 1-based node indices.
Inputs: item_index (required), track_index (required), layer. Returns: result
list_render_jobsA
List queued and completed render jobs.
Inputs: no named parameters. Returns: result
list_render_presetsA
List render presets visible to the active project.
Inputs: no named parameters. Returns: result
list_stillsA
List still labels and stable-in-call indices in a Gallery album.
Inputs: album_index (required), powergrades. Returns: result
list_timelinesA
List all timelines and indicate which one is active.
Inputs: no named parameters. Returns: result
load_powergradeC
Apply a registered PowerGrade DRX template to a timeline clip.
Inputs: name (required), item_index (required), track_index (required), grade_mode. Returns: object
monitor_renderA
Return one job's completion/status or the overall queue state.
Inputs: job_id. Returns: object
open_capture_folderA
Open the generated capture directory in Finder.
Inputs: no named parameters. Returns: object
register_powergradeC
Register or replace a named DRX template in the local grade catalog.
Inputs: name (required), drx_path (required), category, favorite, +1 more. Returns: object
run_full_validationA
Run offline plus optional read-only live checks and write JSON/Markdown reports.
Inputs: live. Returns: object
save_powergradeC
Grab a still from the current Color-page clip into the current album.
Inputs: label. Returns: object
search_clipsA
Search clip names and properties recursively across all media-pool bins.
Inputs: query (required). Returns: result
search_powergradesA
Search registered DRX templates by text and optional exact category.
Inputs: query, category. Returns: result
selected_clipsA
Return selected Media Pool clips (timeline multi-selection is not API-exposed).
Inputs: no named parameters. Returns: result
set_cdlC
Set ASC CDL values on an existing color node.
Inputs: item_index (required), node_index (required), track_index (required), power, +3 more. Returns: object
set_node_enabledB
Enable or bypass a color node through the official Graph API.
Inputs: enabled (required), item_index (required), node_index (required), track_index (required). Returns: object
start_renderB
Start selected render job IDs, or all queued jobs when omitted.
Inputs: job_ids. Returns: object
switch_timelineC
Make the uniquely named project timeline current.
Inputs: name (required). Returns: object
validate_capture_supportA
Inspect official frame-export, Gallery, and render capabilities without capture.
Inputs: no named parameters. Returns: object
validate_current_clipA
Check the timeline clip under the playhead.
Inputs: no named parameters. Returns: object
validate_current_projectB
Check that a current Resolve project is available.
Inputs: no named parameters. Returns: object
validate_current_timelineA
Check that a current Resolve timeline and playhead are available.
Inputs: no named parameters. Returns: object
validate_grade_applicationC
Validate supported observable grade state; makes no color-quality claim.
Inputs: drx_path (required), item_index (required), track_index (required), operation_succeeded (required), +2 more. Returns: object
validate_render_configurationA
Inspect supported render API methods without changing settings or rendering.
Inputs: no named parameters. Returns: object
validate_resolve_connectionA
Check the live Resolve API connection without changing Resolve state.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 64 tools
Many tools have similar purposes, such as the multiple 'create_*_grade' tools that apply different DRX presets, and the numerous validation tools. While descriptions distinguish them, an agent may struggle to select the right one without careful reading.
Tool names use snake_case consistently, with verbs like 'list_', 'create_', 'validate_', etc. The pattern is predictable, though verb variety is high, and some names are less typical (e.g., 'run_full_validation').
64 tools is excessive for a server, even for a complex application like DaVinci Resolve. Many tools are duplicative or simply report API limitations, inflating the count without adding real functionality.
The tool set covers color grading, rendering, and media pool well, but lacks editing, audio, and fusion tools. Several tools are non-functional stubs (e.g., 'add_serial_node'), creating dead ends for agents.
Maintenance
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Remote MCP server for audio stem separation, denoise, reverb, and MIDI export.
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- FlicenseCqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude to interact with DaVinci Resolve Studio, providing advanced control over editing, color grading, audio, and other video production tasks.3222-
- AlicenseNot gradedqualityCmaintenanceExposes 20 tools for project, media, render, and timeline control in DaVinci Resolve 18+ via stdio MCP, enabling AI agents to operate the software through natural language.53MIT
- AlicenseNot gradedqualityCmaintenanceComprehensive MCP server for DaVinci Resolve with 295+ tools to control projects, timelines, editing, color grading, rendering, and more via natural language.96 PyPI7MIT
- 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