DaVinci Resolve MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port number for HTTP transport | 3001 |
| TRANSPORT | No | Transport mode: 'stdio' or 'http' | stdio |
| MOONDREAM_API_KEY | Yes | Your Moondream API key for AI vision features. Get one at https://console.moondream.ai |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| resolve_get_statusA | Get current DaVinci Resolve status including version, current project, timeline, and page. Returns JSON with product name, version, current page, project name, timeline name, and connection state. |
| resolve_open_pageA | Switch DaVinci Resolve to a specific page. Args: page: Page name — "media", "cut", "edit", "fusion", "color", "fairlight", or "deliver" |
| resolve_get_current_pageA | Get the currently active DaVinci Resolve page. Returns the page name: media, cut, edit, fusion, color, fairlight, or deliver. |
| resolve_reconnectA | Force reconnection to DaVinci Resolve. Use if Resolve was restarted. |
| resolve_list_projectsA | List all projects in the current database folder. Returns a JSON array of project names. |
| resolve_load_projectC | Open a project by name. Args: name: Project name to load. |
| resolve_save_projectB | Save the current project. |
| resolve_create_projectB | Create a new project. Args: name: Name for the new project. |
| resolve_get_project_settingsA | Get all settings for the current project. Returns JSON with frame rate, resolution, color science, and other project settings. |
| resolve_set_project_settingC | Set a project setting. Args: setting: Setting name (e.g., "timelineFrameRate", "timelineResolutionWidth"). value: Value to set. |
| resolve_list_timelinesA | List all timelines in the current project. Returns JSON array with each timeline's name, index, duration, and track counts. |
| resolve_get_current_timelineA | Get detailed info about the current timeline. Returns JSON with name, timecode, track counts, and start/end frames. |
| resolve_set_current_timelineA | Switch to a different timeline by name or index. Args: name: Timeline name to switch to (preferred). index: Timeline index (1-based). Used if name is empty. |
| resolve_get_playheadA | Get the current playhead timecode position. |
| resolve_set_playheadA | Set the playhead to a specific timecode. Args: timecode: Timecode string (e.g., "01:00:05:00"). |
| resolve_get_track_itemsB | List all clips on a specific track. Args: track_type: "video", "audio", or "subtitle" (default: "video"). track_index: Track number, 1-based (default: 1). Returns JSON array of clips with name, start/end frame, duration, and source info. |
| resolve_create_timelineB | Create a new empty timeline. Args: name: Name for the new timeline. |
| resolve_duplicate_timelineC | Duplicate the current timeline. Args: new_name: Name for the duplicate (optional, defaults to original + " Copy"). |
| resolve_list_mediaA | List clips in the media pool. Shows the current bin by default. Args: folder_path: Optional subfolder name to navigate to (e.g., "B-Roll"). Leave empty for current folder. Returns JSON with folder name, clips (with metadata), and subfolders. |
| resolve_import_mediaA | Import media files into the current media pool bin. Args: file_paths: List of absolute file paths to import (e.g., ["/Users/guy/video.mov"]). Returns names of successfully imported clips. |
| resolve_create_binC | Create a new bin (subfolder) in the media pool. Args: name: Name for the new bin. |
| resolve_append_to_timelineA | Add a clip from the media pool to the current timeline. Args: clip_name: Name of the clip in the media pool. track_index: Target video track (1-based, default: 1). media_type: 0 = video+audio (default), 1 = video only, 2 = audio only. Use 1 for b-roll to preserve interview audio. |
| resolve_get_clip_propertiesA | Get detailed properties of a media pool clip. Args: clip_name: Name of the clip in the media pool. Returns JSON with all clip properties (duration, resolution, codec, fps, etc.). |
| resolve_set_clip_transformA | Set pan/tilt, zoom (0–100), rotation (-360–360), opacity (0–100). Targets playhead, or explicit 1-based video track/clip indices. Validates before writing. Returns JSON including original values and any partial failure. |
| resolve_get_clip_transformA | Read clip transform values at the playhead or explicit 1-based video track/clip indices. |
| resolve_set_clip_speedC | Legacy speed-property request. Resolve may reject it; timeline retiming is not guaranteed by the API. This acts on the underlying media-pool property, potentially affecting other uses of the media. |
| resolve_set_clip_enabledA | Enable/disable a clip at playhead or explicit 1-based video track/clip indices. |
| resolve_create_compound_clipB | Create a compound clip from a 1-based video-track range. Creates a recovery timeline first. |
| resolve_delete_clipA | Delete exactly one clip; defaults to non-ripple. Linked peers remain. Creates a recovery copy. |
| resolve_replace_clipA | Replace at the original record position without ripple. Video-only preserves linked audio. Indices are 1-based. media_type 1 targets video; 2 targets audio. Combined replacement is rejected. source_end_frame is EXCLUSIVE; zero auto-matches source_start_frame + original duration. Source FPS must match timeline. Native source-out readbacks are reported separately. Validates bounds/locks/ambiguity and creates a recovery timeline before mutation. dry_run returns the plan without edits; new_media_id disambiguates duplicate names. |
| resolve_apply_lutA | Apply a LUT to a clip's node graph. Targets the clip at the playhead. Must be on the Color page. Common built-in LUTs:
Args: lut_path: LUT file path (relative to Resolve's LUT directory or absolute). node_index: Node to apply LUT to (1-based, default: 1). |
| resolve_get_lutA | Get the LUT currently applied to a node on the clip at the playhead. Args: node_index: Node index (1-based, default: 1). |
| resolve_create_color_versionB | Create a new color version on the clip at the playhead. Args: name: Name for the color version. version_type: 0 = local (default), 1 = remote. |
| resolve_load_color_versionA | Switch to a color version by name on the clip at the playhead. Args: name: Color version name. version_type: 0 = local (default), 1 = remote. |
| resolve_list_color_versionsA | List all color versions on the clip at the playhead. Args: version_type: 0 = local versions (default), 1 = remote versions. Returns JSON with version names and current version. |
| resolve_export_lutA | Export a LUT from the current clip's grade. Args: output_path: Absolute path for the output .cube file. export_type: "17pt", "33pt" (default), or "65pt". |
| resolve_add_markerB | Add timeline marker. Legacy frame=0 selects playhead; other values are timeline-relative. Use create_chapter_markers to explicitly address frame zero. |
| resolve_get_markersA | Read timeline markers keyed by timeline-relative frame. |
| resolve_delete_markersA | Delete markers by explicit color, All, or exact timeline-relative frame (including zero). No arguments make no changes. Returns the removed marker records for restoration. |
| resolve_insert_titleA | Insert Text+ at playhead. Validates size/position and reports partial failures after creation. |
| resolve_modify_title_textB | Modify Text+ on the playhead clip or explicit 1-based video track/clip indices. |
| resolve_list_render_presetsA | List all available render presets (both standard and Quick Export). Returns JSON with standard render presets and Quick Export presets. |
| resolve_quick_exportB | Render the current timeline using a Quick Export preset. Common presets: "H.264 Master", "H.265 Master", "ProRes 422 HQ", "YouTube", "Vimeo", "TikTok", "Twitter". Args: preset: Quick Export preset name. output_dir: Output directory (optional, uses project default if empty). filename: Custom filename (optional, uses timeline name if empty). |
| resolve_add_render_jobB | Add a custom render job to the render queue. Args: output_dir: Output directory path. filename: Custom filename (optional). format: Video format (e.g., "mov", "mp4"). Leave empty for project default. codec: Codec name (e.g., "ProRes422", "H264"). Leave empty for project default. width: Output width. 0 = use project setting. height: Output height. 0 = use project setting. frame_rate: Output FPS. 0 = use project setting. |
| resolve_start_renderA | Start rendering all queued render jobs. |
| resolve_get_render_statusA | Get the status of all render jobs. Returns JSON with each job's status, progress percentage, and completion state. |
| resolve_export_timelineC | Export the current timeline to an interchange format. Args: output_path: Absolute path for the output file. format: Export format — "fcpxml" (default), "edl", "csv", "aaf", "otio". |
| resolve_get_fusion_compsA | List Fusion compositions on a timeline clip. Targets clip at playhead by default. Args: track_index: Video track (1-based). 0 = use playhead. clip_index: Clip position on track (1-based). 0 = use playhead. Returns JSON with comp names and count. |
| resolve_add_fusion_compA | Add a new Fusion composition to the clip at the playhead. |
| resolve_get_fusion_toolsA | List all tools in a Fusion composition on the clip at the playhead. Args: comp_index: Fusion comp index (1-based, default: 1). Returns JSON array of tools with their type and name. |
| resolve_describe_frameA | Send the current frame to Moondream for a caption. detail: short or normal. |
| resolve_detect_in_frameA | Send the current frame to Moondream to detect described objects and return bounding boxes. |
| resolve_ask_about_frameB | Send the current frame to Moondream for visual question answering. |
| resolve_find_shots_by_visual_descriptionA | Look for objects such as an airplane in timeline shots using Moondream. Sends ONE midpoint timeline frame per clip (up to 50) to the cloud; may miss objects elsewhere. Analyzes the visible composite, including overlays/upper tracks. Temporarily moves playhead/page. Reports sampled clip indices, matches and restoration status; not exhaustive source-media search. |
| resolve_transcribe_audioA | Transcribe one exact clip, or a folder AND nested folders when clip_name is empty. folder_path is an exact resource path; empty uses current bin. Requires Resolve 21. Returns operation status, not a transcript; speaker detection is optional. |
| resolve_clear_transcriptionB | Delete transcription for one clip, or the current/specified folder AND nested folders. |
| resolve_classify_audioB | Classify audio for one clip, or the current/specified folder AND nested folders. |
| resolve_clear_audio_classificationC | Remove audio classification for one clip, or the current/specified folder AND nested folders. |
| resolve_analyze_intellisearchA | Analyze a clip or folder for IntelliSearch. Needs Faster/Better Extras. Face identification is opt-in. This starts native analysis; it does not query a search index. |
| resolve_reset_intellisearchA | Clear IntelliSearch analysis for the ENTIRE current project (Resolve API scope). |
| resolve_analyze_slateA | Run native Slate ID analysis on a clip or folder and add slate markers. Requires AI Slate ID Extras. |
| resolve_remove_motion_blurA | Create new deblurred media from ONE uniquely named clip; does not replace timeline clips. filename names the native output. Format/codec availability depends on this workstation. |
| resolve_generate_speechA | Generate a speech clip into the media pool, leaving the timeline untouched. Requires AI Speech Generator Extras. Text is limited to 350 characters. |
| resolve_disable_background_tasksA | Disable ALL Resolve background tasks for this application session. The API has no corresponding enable call; restart Resolve to reset this setting. |
| resolve_find_media_clipA | Find shots by case-insensitive name and/or metadata substrings across all bins. Returns exact names, media IDs and folder paths for unambiguous editing. Not visual search. |
| resolve_find_timeline_clipA | Find clips by name and/or position. timecode is absolute HH:MM:SS:FF; seconds is elapsed since timeline start (13:22 = 802 seconds). End frame is exclusive. track_index 0 searches all tracks of the selected type. |
| resolve_insert_brollA | Insert video-only B-roll into an EMPTY interval on an existing video track. Absolute record frame; defaults to dry-run. Rejects overlap, locked tracks and FPS mismatch. Creates a recovery copy before an actual insertion. |
| resolve_build_rough_cutA | Assemble complete media clips in supplied order into a NEW timeline. Rejects ambiguous media and existing timeline names. Defaults to planning only. This is an ordered assembly; it does not infer cuts from a transcript. |
| resolve_add_marker_at_playheadA | Add a marker at the exact current playhead, including drop-frame timecode support. |
| resolve_create_chapter_markersA | Create markers from supplied chapter/speaker boundaries. Each entry: {frame: timeline-relative integer, name: string, note: optional string}. Validates the complete batch before writing. Does not extract transcripts or infer speaker times. |
| resolve_render_for_youtubeA | Render locally with an installed Quick Export preset; explicitly disables uploading to YouTube. Requires an existing absolute output directory and a filename. Returns Resolve's actual status. |
| resolve_create_captionsA | Auto-caption the CURRENT timeline with Resolve's speech recognition (Studio, adds a subtitle track). Clips and audio are not changed. The native true/false result is unreliable, so success means a new subtitle track or new cues were read back. Then use resolve_get_transcript(source="captions"). language: auto, english, spanish, ...; preset: default, netflix, teletext; chars_per_line 0 = preset default. |
| resolve_get_transcriptA | Read transcript TEXT with timing. source="captions": cues from the current timeline's subtitle track(s) (0 = all); seconds are timeline-relative, frames absolute. Works on any Resolve 21 Studio after resolve_create_captions. source="clip": a media pool clip's full native transcript (Resolve 21.1+) with speakers and word times, in seconds from the clip's start; run resolve_transcribe_audio first. format json|srt|vtt|text. output_path (absolute, new file) writes SRT/VTT/text to disk. |
| resolve_detect_silenceA | Find dead air on the current timeline with ffmpeg (read-only; needs ffmpeg). detect_on="carried" reports only time when EVERY enabled audio track is quiet (safe for multi-mic podcasts); "spine" analyzes just the spine track. threshold_db 0 = calibrate per clip. Returns timeline-relative seconds (the same scale as resolve_get_transcript captions). |
| resolve_tighten_silenceA | Remove dead air from a talking-head/podcast timeline into a NEW timeline (dry-run by default). A pause is cut only where every enabled mic track is quiet for longer than min_silence_seconds; keep_pause_seconds of room stays at each side. All tracks are cut together, so cameras and mics stay in sync; timeline markers in kept time move with the edit. Needs ffmpeg. tracks="all" (default) carries every video/audio track, keeping mics and cameras in sync; tracks="spine" carries only the spine track (A1 by default). |
| resolve_build_cut_variantA | Text-based / manual editing: cut the listed ranges from ALL carried tracks into a NEW timeline (dry-run by default). remove: [{start_seconds, end_seconds}] in timeline-relative seconds, e.g. caption cues from resolve_get_transcript(source="captions") for filler words, false starts or off-topic passages. Ranges may overlap; the original timeline is not changed. tracks="all" (default) carries every video/audio track, keeping mics and cameras in sync; tracks="spine" carries only the spine track (A1 by default). |
| resolve_wait_for_renderA | Wait until a render job (or all rendering, if job_id is empty) finishes, then report the final status and output file. Other MCP calls wait while this runs, so keep timeouts modest (max 3600 s). stop_on_timeout=True calls StopRendering if the deadline passes. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| podcast_episode_edit | End-to-end first cut of a podcast or interview episode: captions, tightening, text edits, chapters. |
| tighten_recording | Remove dead air from one long talking-head, screencast or podcast recording. |
| captions_and_transcript | Create captions with Resolve's speech recognition and deliver SRT/VTT or plain text. |
| safe_shot_replacement | Replace one shot with other media without disturbing linked interview audio. |
| youtube_delivery | Render a finished episode locally for YouTube, with captions and chapters ready to paste. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| system_status | Read-only snapshot: system/status. Returns success/data or success/error JSON. |
| project_current | Read-only snapshot: project/current. Returns success/data or success/error JSON. |
| project_list | Read-only snapshot: project/list. Returns success/data or success/error JSON. |
| project_settings | Read-only snapshot: project/settings. Returns success/data or success/error JSON. |
| project_timelines | Read-only snapshot: project/timelines. Returns success/data or success/error JSON. |
| timeline_current | Read-only snapshot: timeline/current. Returns success/data or success/error JSON. |
| timeline_tracks | Read-only snapshot: timeline/tracks. Returns success/data or success/error JSON. |
| timeline_items | Read-only snapshot: timeline/items. Returns success/data or success/error JSON. |
| timeline_markers | Read-only snapshot: timeline/markers. Returns success/data or success/error JSON. |
| mediapool_folders | Read-only snapshot: mediapool/folders. Returns success/data or success/error JSON. |
| mediapool_current_folder | Read-only snapshot: mediapool/current-folder. Returns success/data or success/error JSON. |
| mediapool_clips | Read-only snapshot: mediapool/clips. Returns success/data or success/error JSON. |
| render_jobs | Read-only snapshot: render/jobs. Returns success/data or success/error JSON. |
| render_formats | Read-only snapshot: render/formats. Returns success/data or success/error JSON. |
| render_presets | Read-only snapshot: render/presets. Returns success/data or success/error JSON. |
| render_is_rendering | Read-only snapshot: render/is-rendering. Returns success/data or success/error JSON. |
TDQS
Scored across 77 tools
Several tools have close cousins: add_marker overlaps with add_marker_at_playhead, quick_export overlaps with render_for_youtube, and there are multiple transcription/analyze commands. The detailed descriptions usually clarify the intended target, but with 77 tools an agent has real misselection risk.
The resolve_ prefix and verb_noun pattern are used very consistently across the entire set. Minor deviations like resolve_reconnect, resolve_render_for_youtube, and resolve_wait_for_render break the strict verb_noun pattern, but they are still predictable.
77 tools is well beyond the 25+ over-scoped threshold. The set bundles media management, editing, color, Fusion, render, and AI vision/audio features into one server, making the namespace heavy to navigate even though each tool has a defined job.
The surface is impressively broad for editing, color, audio, and rendering, but lifecycle gaps remain: no delete/rename project or timeline, and no trim/transition/move operations for timeline clips. Agents can complete many workflows but may hit dead ends on routine cleanup/edit tasks.