Davinc-Resolve-Local-Bridge-MCP
Control DaVinci Resolve from any AI assistant — Claude, Cursor, Devin, and more.
215 tools. Full API coverage. Works with DaVinci Resolve Free and Studio.
What Is This?
Davinc-Resolve-Local-Bridge-MCP is a Model Context Protocol (MCP) server that gives AI assistants full control over DaVinci Resolve. It exposes 215 tools covering the entire Resolve scripting API — projects, timelines, media, Fusion, color grading, rendering, and more.
How It Works
Your AI Assistant (Claude, Cursor, Devin, etc.)
│
│ talks MCP (stdio)
▼
mcp_server/server.py ← runs on your machine
│
│ talks HTTP (localhost:8787)
▼
Bridge-Connection-Script.py ← runs INSIDE DaVinci Resolve
│ (Workspace > Scripts menu)
▼
DaVinci Resolve API ← full read + write access
The bridge script runs inside DaVinci Resolve's process, giving it full access to the Resolve scripting API — even on the Free edition (which blocks external scripting). The MCP server runs as a separate process and proxies tool calls to the bridge over localhost HTTP.
Quick Start
Prerequisites
- DaVinci Resolve 18.5+ (Free or Studio)
- Python 3.10+ on your machine
- An MCP-compatible AI assistant (Claude Desktop, Cursor, Devin, etc.)
Step 1 — Install the Bridge Script
Run the installer:
python install.py
Or manually copy bridge/Bridge-Connection-Script.py to Resolve's scripts folder:
| Platform | Path |
|---|---|
| Windows | %APPDATA%\Roaming\Blackmagic Design\DaVinci Resolve\Support\Fusion\Scripts\Utility\ |
| macOS | ~/Library/Application Support/Blackmagic Design/DaVinci Resolve/Fusion/Scripts/Utility/ |
| Linux | ~/.local/share/DaVinciResolve/Fusion/Scripts/Utility/ |
Step 2 — Install MCP Server Dependencies
pip install -r requirements.txt
Step 3 — Configure Your AI Assistant
Add the MCP server to your assistant's configuration file. The server path is mcp_server/server.py in this repo.
Claude Desktop
Edit claude_desktop_config.json:
{
"mcpServers": {
"davinci-resolve-local-bridge": {
"command": "python",
"args": ["C:/path/to/Davinc-Resolve-Local-Bridge-MCP/mcp_server/server.py"]
}
}
}
Cursor
Edit .cursor/mcp.json:
{
"mcpServers": {
"davinci-resolve-local-bridge": {
"command": "python",
"args": ["C:/path/to/Davinc-Resolve-Local-Bridge-MCP/mcp_server/server.py"]
}
}
}
Devin
Edit mcp_config.json:
{
"mcpServers": {
"resolve-local-bridge": {
"command": "python",
"args": ["C:/path/to/Davinc-Resolve-Local-Bridge-MCP/mcp_server/server.py"]
}
}
}
Claude Code
claude mcp add davinci-resolve-local-bridge -- python C:/path/to/Davinc-Resolve-Local-Bridge-MCP/mcp_server/server.py
Any MCP Client (generic)
The server uses stdio transport. Launch it with:
python mcp_server/server.py
Step 4 — Start the Bridge Inside DaVinci Resolve
- Open DaVinci Resolve
- Go to Workspace → Scripts → Bridge-Connection-Script
- Look in the Console (Workspace → Console) for:
[Resolve Bridge] Connected to Resolve 21.0.4.5
[Resolve Bridge] HTTP server running on http://127.0.0.1:8787
[Resolve Bridge] 215 actions available
Step 5 — Start Using It
Ask your AI assistant:
"Check if DaVinci Resolve is connected"
The assistant will call the resolve_status tool and report back. Then try:
"Create a new 1920x1080 30fps project called 'My Video' and add a timeline"
Architecture
Bridge Script (bridge/Bridge-Connection-Script.py)
A Python script that runs inside DaVinci Resolve via the Workspace > Scripts menu. It:
- Obtains the live
resolveobject from Fusion's globals - Starts an HTTP server on
127.0.0.1:8787 - Exposes 3 endpoints:
GET /health— check if the bridge is aliveGET /actions— list all available action namesPOST /action— execute an action by name with parameters
- Stays alive with a blocking
serve_forever()call - Kills any previous instance on the same port before starting
MCP Server (mcp_server/server.py)
A standalone MCP server that:
- Connects to the bridge over HTTP on localhost
- Auto-discovers all 215 actions from the bridge's
/actionsendpoint - Exposes each action as an MCP tool with the
resolve_prefix - Proxies tool calls to the bridge via
POST /action - Stays in sync with the bridge — no manual tool definitions needed
All 215 Tools
The MCP server auto-discovers tools from the bridge. Each tool is prefixed with resolve_ (e.g., status becomes resolve_status). Pass parameters as a params object.
Resolve Application (15 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_status |
— | Check bridge connectivity and get current project/timeline info |
resolve_get_version |
— | Get Resolve version info |
resolve_get_current_page |
— | Get the active page (edit, cut, color, etc.) |
resolve_open_page |
page |
Switch to a page: edit, cut, fusion, color, fairlight, deliver, media |
resolve_get_layout_presets |
— | List available layout presets |
resolve_load_layout_preset |
presetName |
Load a layout preset by name |
resolve_get_keyframe_mode |
— | Get current keyframe mode |
resolve_set_keyframe_mode |
keyframeMode |
Set keyframe mode |
resolve_get_fairlight_presets |
— | List Fairlight audio presets |
resolve_get_burnin_presets |
— | List burn-in presets |
resolve_import_render_preset |
presetPath |
Import a render preset from file |
resolve_export_render_preset |
presetName, exportPath |
Export a render preset to file |
resolve_open_fusion_page |
— | Switch to Fusion page |
resolve_open_edit_page |
— | Switch to Edit page |
resolve_open_deliver_page |
— | Switch to Deliver page |
Project Manager (18 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_create_project |
name, width, height, fps |
Create a new project |
resolve_load_project |
name |
Load an existing project |
resolve_save_project |
— | Save the current project |
resolve_close_project |
— | Close the current project |
resolve_delete_project |
name |
Delete a project |
resolve_create_folder |
folderName |
Create a project folder |
resolve_delete_folder |
folderName |
Delete a project folder |
resolve_get_project_list |
— | List projects in current folder |
resolve_get_folder_list |
— | List subfolders in current folder |
resolve_get_current_folder |
— | Get current folder name |
resolve_open_folder |
folderName |
Open a folder |
resolve_goto_root_folder |
— | Navigate to root folder |
resolve_goto_parent_folder |
— | Navigate to parent folder |
resolve_import_project |
filePath, projectName |
Import a .drp project |
resolve_export_project |
projectName, filePath, withStillsAndLUTs |
Export a project as .drp |
resolve_archive_project |
projectName, filePath, ... |
Archive a project |
resolve_get_current_database |
— | Get current database name |
resolve_get_database_list |
— | List available databases |
Project Settings (7 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_project_name |
— | Get current project name |
resolve_set_project_name |
name |
Rename the current project |
resolve_get_project_setting |
key |
Get a project setting by key |
resolve_set_project_setting |
key, value |
Set a project setting |
resolve_get_project_settings |
— | Get all project settings |
resolve_get_project_preset_list |
— | List project presets |
resolve_set_project_preset |
presetName |
Apply a project preset |
Media Storage (4 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_mounted_volumes |
— | List mounted storage volumes |
resolve_get_subfolder_list |
folderPath |
List subfolders in a path |
resolve_get_file_list |
folderPath |
List files in a folder |
resolve_reveal_in_storage |
path |
Reveal a file in the OS file browser |
Media Pool (13 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_import_media |
paths (list) |
Import media files into the pool |
resolve_get_media_pool |
— | List all clips in root folder |
resolve_get_root_folder |
— | Get root folder info |
resolve_add_sub_folder |
folderName, parentFolderName |
Create a subfolder |
resolve_set_current_folder |
folderName |
Set the current folder |
resolve_delete_clips |
clipNames (list) |
Delete clips from pool |
resolve_move_clips |
clipNames, targetFolder |
Move clips to a folder |
resolve_relink_clips |
clipNames, folderPath |
Relink clips |
resolve_unlink_clips |
clipNames |
Unlink clips |
resolve_export_metadata |
fileName, clipNames |
Export metadata CSV |
resolve_get_selected_clips |
— | List selected clips |
resolve_set_selected_clip |
clipName |
Select a clip |
resolve_add_timeline_mattes |
paths (list) |
Add matte files |
Timeline (21 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_create_timeline |
name |
Create a new empty timeline |
resolve_create_timeline_from_clips |
name, clipNames |
Create timeline from clips |
resolve_list_timelines |
— | List all timelines |
resolve_get_timeline_name |
— | Get current timeline name |
resolve_set_timeline_name |
name |
Rename current timeline |
resolve_set_current_timeline |
timelineIndex |
Switch to timeline by index (1-based) |
resolve_duplicate_timeline |
— | Duplicate the current timeline |
resolve_delete_timelines |
timelineNames |
Delete timelines |
resolve_get_timeline_start_frame |
— | Get start frame |
resolve_get_timeline_end_frame |
— | Get end frame |
resolve_get_start_timecode |
— | Get start timecode |
resolve_set_start_timecode |
timecode |
Set start timecode |
resolve_get_current_timecode |
— | Get current timecode |
resolve_set_current_timecode |
timecode |
Set current timecode |
resolve_detect_scene_cuts |
— | Detect scene cuts |
resolve_create_subtitles_from_audio |
settings |
Auto-generate subtitles |
resolve_timeline_export |
fileName, exportType, exportSubtype |
Export timeline |
resolve_import_timeline_from_file |
filePath |
Import timeline from file |
resolve_append_to_timeline |
clipNames |
Append clips to timeline |
resolve_get_timeline_setting |
key |
Get a timeline setting |
resolve_set_timeline_setting |
key, value |
Set a timeline setting |
Timeline Tracks (11 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_track_count |
trackType |
Count tracks (video/audio/subtitle) |
resolve_add_track |
trackType |
Add a track |
resolve_delete_track |
trackType, trackIndex |
Delete a track |
resolve_set_track_enable |
trackType, trackIndex, enabled |
Enable/disable a track |
resolve_get_track_enable |
trackType, trackIndex |
Check if track is enabled |
resolve_set_track_lock |
trackType, trackIndex, locked |
Lock/unlock a track |
resolve_get_track_lock |
trackType, trackIndex |
Check if track is locked |
resolve_get_track_name |
trackType, trackIndex |
Get track name |
resolve_set_track_name |
trackType, trackIndex, name |
Set track name |
resolve_get_items_in_track |
trackType, index |
List clips on a track |
resolve_get_timeline_selected_clips |
— | List selected timeline clips |
Timeline Items (66 tools)
All item actions accept optional trackType, trackIndex, itemIndex to target a specific clip, or operate on the first selected clip if omitted.
| Tool | Parameters | Description |
|---|---|---|
resolve_get_item_name |
trackType?, trackIndex?, itemIndex? |
Get clip name |
resolve_set_item_name |
name, trackType?, ... |
Rename a clip |
resolve_get_item_duration |
trackType?, ... |
Get clip duration |
resolve_get_item_start |
trackType?, ... |
Get clip start frame |
resolve_get_item_end |
trackType?, ... |
Get clip end frame |
resolve_get_item_property |
key?, trackType?, ... |
Get a clip property |
resolve_set_item_property |
key, value, trackType?, ... |
Set a clip property |
resolve_get_item_enabled |
trackType?, ... |
Check if clip is enabled |
resolve_set_item_enabled |
enabled, trackType?, ... |
Enable/disable a clip |
resolve_set_item_color |
colorName, trackType?, ... |
Set clip color |
resolve_get_item_color |
trackType?, ... |
Get clip color |
resolve_clear_item_color |
trackType?, ... |
Clear clip color |
resolve_add_item_flag |
color, trackType?, ... |
Add a flag |
resolve_get_item_flags |
trackType?, ... |
Get flags |
resolve_clear_item_flags |
color, trackType?, ... |
Clear flags |
resolve_add_item_marker |
frameId, color, name, note?, ... |
Add a marker |
resolve_get_item_markers |
trackType?, ... |
Get markers |
resolve_insert_generator |
generatorName |
Insert a generator |
resolve_insert_fusion_generator |
generatorName |
Insert a Fusion generator |
resolve_insert_fusion_composition |
— | Insert a Fusion composition |
resolve_insert_ofx_generator |
generatorName |
Insert an OFX generator |
resolve_insert_title |
titleName |
Insert a title |
resolve_insert_fusion_title |
titleName |
Insert a Fusion title |
resolve_grab_still |
— | Grab a still from current frame |
resolve_grab_all_stills |
— | Grab stills from all clips |
resolve_create_compound_clip |
name |
Create a compound clip |
resolve_create_fusion_clip |
— | Create a Fusion clip |
resolve_import_into_timeline |
filePath, importOptions? |
Import into timeline |
resolve_stabilize |
trackType?, ... |
Stabilize a clip |
resolve_smart_reframe |
trackType?, ... |
Smart Reframe a clip |
resolve_create_magic_mask |
mode, trackType?, ... |
Create a Magic Mask |
resolve_regenerate_magic_mask |
trackType?, ... |
Regenerate Magic Mask |
resolve_get_item_track_info |
trackType?, ... |
Get track info for a clip |
resolve_get_linked_items |
trackType?, ... |
Get linked items |
resolve_set_item_cdl |
cdl, trackType?, ... |
Set CDL values |
resolve_add_take |
mediaPoolItemName, startFrame?, endFrame? |
Add a take |
resolve_get_takes_count |
trackType?, ... |
Count takes |
resolve_select_take_by_index |
idx, trackType?, ... |
Select a take |
resolve_finalize_take |
trackType?, ... |
Finalize the current take |
resolve_copy_grades |
targetItemNames, trackType?, ... |
Copy grades to other clips |
resolve_export_lut |
exportType, path, trackType?, ... |
Export a LUT |
resolve_set_color_output_cache |
cache_value, trackType?, ... |
Set color output cache |
resolve_set_fusion_output_cache |
cache_value, trackType?, ... |
Set Fusion output cache |
resolve_get_clip_metadata |
metadataType? |
Get clip metadata |
resolve_set_clip_metadata |
metadataType, metadataValue |
Set clip metadata |
resolve_get_clip_property |
propertyName? |
Get clip property |
resolve_set_clip_property |
propertyName, propertyValue |
Set clip property |
resolve_link_proxy_media |
proxyMediaFilePath |
Link proxy media |
resolve_unlink_proxy_media |
— | Unlink proxy media |
resolve_replace_clip |
filePath |
Replace clip with file |
resolve_add_clip_marker |
frameId, color, name, note? |
Add a clip marker |
resolve_get_clip_markers |
— | Get clip markers |
resolve_set_clip_color |
colorName |
Set clip color (media pool) |
resolve_add_clip_flag |
color |
Add a clip flag |
resolve_transcribe_clip_audio |
useSpeakerDetection? |
Transcribe audio |
resolve_set_clip_mark_inout |
markIn, markOut, type |
Set mark in/out |
resolve_clear_clip_mark_inout |
type |
Clear mark in/out |
resolve_add_timeline_marker |
frameId, color, name, note? |
Add timeline marker |
resolve_get_timeline_markers |
— | Get timeline markers |
resolve_delete_timeline_markers_by_color |
color |
Delete markers by color |
resolve_delete_timeline_marker_at_frame |
frameNum |
Delete marker at frame |
resolve_export_current_frame |
filePath |
Export current frame as still |
resolve_apply_fairlight_preset |
name |
Apply Fairlight preset |
resolve_get_quick_export_presets |
— | List quick export presets |
Fusion Compositions (14 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_create_fusion_comp |
name |
Create a Fusion composition |
resolve_add_fusion_comp |
trackType?, ... |
Add a Fusion comp to a clip |
resolve_import_fusion_comp |
path, trackType?, ... |
Import a .comp file |
resolve_export_fusion_comp |
path, compIndex?, trackType?, ... |
Export a Fusion comp |
resolve_load_fusion_comp_by_name |
compName, trackType?, ... |
Load a comp by name |
resolve_delete_fusion_comp_by_name |
compName, trackType?, ... |
Delete a comp by name |
resolve_rename_fusion_comp |
oldName, newName, trackType?, ... |
Rename a comp |
resolve_get_item_fusion_comp_count |
trackType?, ... |
Count Fusion comps on a clip |
resolve_get_item_fusion_comp_names |
trackType?, ... |
List Fusion comp names |
resolve_get_current_comp |
— | Get current Fusion composition |
resolve_fusion_get_comp_list |
— | List all open comps |
resolve_fusion_new_comp |
— | Create a new Fusion comp |
resolve_fusion_save_comp |
filePath |
Save current comp |
resolve_fusion_load_comp |
filePath |
Load a comp file |
resolve_fusion_close_comp |
— | Close current comp |
resolve_fusion_render_comp |
— | Render current comp |
Fusion Tools (11 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_fusion_get_tool_list |
— | List all tools/nodes in current comp |
resolve_fusion_find_tool |
name |
Find a tool by name |
resolve_fusion_delete_tool |
name |
Delete a tool |
resolve_fusion_get_attrs |
name |
Get tool attributes |
resolve_fusion_set_attrs |
name, attrs |
Set tool attributes |
resolve_fusion_add_node |
nodeType, name |
Add a node (Background, Paint, Merge, etc.) |
resolve_fusion_connect |
fromNode, toNode, input |
Connect two nodes |
resolve_fusion_set_input |
node, input, value, frame? |
Set a node input (can keyframe) |
resolve_fusion_get_input |
node, input |
Get a node input value |
resolve_fusion_set_current_frame |
frame |
Set the current frame |
resolve_fusion_get_current_frame |
— | Get the current frame |
Gallery (4 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_gallery_still_albums |
— | List gallery still albums |
resolve_get_gallery_powergrade_albums |
— | List PowerGrade albums |
resolve_create_gallery_still_album |
— | Create a still album |
resolve_create_powergrade_album |
— | Create a PowerGrade album |
Color / Nodes (7 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_node_count |
— | Get node count on current clip |
resolve_get_node_label |
nodeIndex |
Get a node label |
resolve_get_node_lut |
nodeIndex |
Get a node's LUT |
resolve_set_node_lut |
nodeIndex, lutPath |
Set a LUT on a node |
resolve_set_node_enabled |
nodeIndex, isEnabled |
Enable/disable a node |
resolve_reset_all_grades |
— | Reset all grades |
resolve_refresh_lut_list |
— | Refresh the LUT list |
Rendering (22 tools)
| Tool | Parameters | Description |
|---|---|---|
resolve_get_render_formats |
— | List render formats |
resolve_get_render_codecs |
renderFormat |
List codecs for a format |
resolve_get_current_render_format_codec |
— | Get current format/codec |
resolve_set_render_format_codec |
format, codec |
Set render format and codec |
resolve_get_render_mode |
— | Get render mode |
resolve_set_render_mode |
renderMode |
Set render mode |
resolve_get_render_resolutions |
format, codec |
List render resolutions |
resolve_get_render_preset_list |
— | List render presets |
resolve_load_render_preset |
presetName |
Load a render preset |
resolve_save_as_new_render_preset |
presetName |
Save a new render preset |
resolve_delete_render_preset |
presetName |
Delete a render preset |
resolve_set_render_settings |
settings |
Set render settings (TargetDir, CustomName, etc.) |
resolve_add_render_job |
— | Add a render job |
resolve_delete_render_job |
jobId |
Delete a render job |
resolve_delete_all_render_jobs |
— | Delete all render jobs |
resolve_get_render_job_list |
— | List render jobs |
resolve_start_rendering |
jobIds?, isInteractiveMode? |
Start rendering |
resolve_stop_rendering |
— | Stop rendering |
resolve_is_rendering_in_progress |
— | Check if rendering |
resolve_get_render_status |
jobId |
Get render job status |
resolve_render_with_quick_export |
presetName |
Quick export |
resolve_render |
settings? |
Add job and start rendering |
Speech & Subtitles (1 tool)
| Tool | Parameters | Description |
|---|---|---|
resolve_generate_speech |
text, voice? |
Generate AI speech audio |
Special (1 tool)
| Tool | Parameters | Description |
|---|---|---|
resolve_create_hand_animation |
imagePath, ... |
Create a hand-drawing animation (Daniel Batal technique) |
Troubleshooting
Bridge won't start
- Make sure DaVinci Resolve is running and a project is open
- Check the Console (Workspace → Console) for error messages
- Restart DaVinci Resolve — it only scans the Scripts folder at startup
"Could not connect to Resolve Bridge"
- Make sure you ran Workspace → Scripts → Bridge-Connection-Script inside Resolve
- Check that the console shows
[Resolve Bridge] HTTP server running on http://127.0.0.1:8787 - If the port is already in use, close Resolve and reopen it (stale
fuscript.exeprocesses can hold the port)
Tools return errors
- Call
resolve_statusfirst to verify connectivity - Some actions require a project to be open, a timeline to exist, or a clip to be selected
- Error messages from the bridge indicate what's missing
Technical Details
- Bridge port: 127.0.0.1:8787 (localhost only, no external access)
- Transport: HTTP/1.0 with Connection: close
- MCP transport: stdio
- Dependencies:
mcp,requests(MCP server only; bridge uses pure stdlib) - Resolve version: 18.5+ (tested on 21.0.4.5)
- Python: 3.10+ for MCP server; bridge uses Resolve's embedded Python
License
MIT License — see LICENSE file.
Credits
Created by The Geek Gods. Inspired by the DaVinci Resolve scripting community.