Control the free edition of DaVinci Resolve 21.1 from Claude through a Lua script that runs inside Resolve. macOS and Windows (experimental), no Studio licence, no network.
Server has 15 tools with complete schemas and descriptions. Naming follows verb_noun convention (resolve_status, run_lua, get_project_info, list_projects, etc.). Descriptions are detailed (100-300 chars) and explain WHAT the tool does and WHEN to use it. However, several tools lack parameter descriptions, and error handling guidance is minimal. Output schemas are not explicitly documented. Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE, IRREVERSIBLE) are present but not formalized as toolAnnotations in the MCP protocol.
Add a marker to the current timeline at a specified frame, with a name, color, and optional note.
Delete all markers on the current timeline, or markers at specific frames. Requires confirm=true to proceed.
Get metadata about the currently open project: name, path, frame rate, resolution, bit depth, color space, and timeline count.
Poll the status of an ongoing render job. Returns progress percentage, job state, and any error messages.
Get all items (clips, gaps, transitions) on a timeline, organized by track type (video, audio, subtitle) and track index. Includes item names, types, positions, and durations.
List all clips in the media pool of the currently open project, with their names, paths, and durations. Paginated with offset and limit.
Output schemas not documented. Tools return results but LLMs cannot see what fields to expect (e.g., resolve_status returns bridge state, platform, version, but structure is not declared). This forces LLMs to guess field names for downstream operations.
Pagination tools (list_projects, list_timelines, list_media_pool_clips) accept offset/limit but do not document total count or next_cursor in output. LLMs cannot determine if more results exist or how many items are available.
Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE, IRREVERSIBLE) are present in metadata but not formalized as MCP toolAnnotations (readOnlyHint, destructiveHint, idempotentHint). Protocol does not expose these hints to clients.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
List all projects in the Resolve database, with their names and paths. Paginated with offset and limit.
List all timelines in the currently open project, with their names and frame counts. Paginated with offset and limit.
Open a project by name from the Resolve database. The project must exist in the database.
Start a render of the current timeline with specified export settings. The render runs asynchronously; use get_render_status to poll progress.
Reports whether the in-Resolve Lua bridge is running and reachable, with the reason when it is not (never started, stopped, Resolve gone, no reply, lock held), the bridge session (pid, start time, state directory), the platform, the self-install outcome of the two Lua scripts, configuration problems, and, when alive, the Resolve product, version, edition (Studio or free), current page and open project. Read-only; it does not start the bridge (only a click in Resolve can).
Run arbitrary Lua code inside Resolve with access to the live resolve and fusion globals. The code runs synchronously; long API calls block the bridge. Returns the value returned by the Lua code as JSON, or an error. print() output is captured. Destructive operations are allowed; use with care.
Search the DaVinci Resolve Lua scripting API documentation by keyword or method name. Returns matching API classes, methods, and their signatures.
Set the currently active timeline in the open project by name.
Stop the in-Resolve Lua bridge loop. The bridge must be restarted manually from Workspace > Scripts in Resolve.
Error handling lacks recovery guidance. Tools like run_lua (IRREVERSIBLE) and delete_markers (DESTRUCTIVE) do not document what happens on failure or how to undo. No confirmation step for destructive operations.
Parameter descriptions for pagination (offset, limit) are minimal. No guidance on valid ranges, defaults, or maximum page size. LLMs may pass invalid values.