DaVinci Resolve MCP Server
# DaVinci Resolve MCP Server
The most complete MCP server for DaVinci Resolve's Scripting API. Control projects, timelines, media, color grading, rendering, and more from any MCP-compatible client.
## Features
- **212 tools** across 15 domains (playback, project, media storage, media pool, clips, timelines, timeline items, render, color, Fusion, gallery, Fairlight, extensions, media analysis, grade exchange)
- **3 resources** for quick context (`resolve://system`, `resolve://project`, `resolve://timeline`)
- **Complete API coverage** of the DaVinci Resolve Scripting API (Phases 1-3)
- **Offline authoring & analysis** (Phase 4): DCTL/Fuse/script installers, FFmpeg probe / frame extraction / QC, and ASC CDL grade exchange — all work on the **free edition** with Resolve closed, since they never touch the scripting bridge
- **Pydantic v2 models** for type-safe inputs and outputs
- **Pagination** for large clip and timeline item lists
- **Auto-reconnect** if Resolve restarts or becomes unresponsive
- **Platform auto-detection** for macOS, Windows, and Linux
## Requirements
- DaVinci Resolve 18+
- **Studio** for the scripting-bridge tools (the 189 live tools). External
Python scripting is a Studio-only feature — on the free edition
`scriptapp("Resolve")` returns `None`, so live tools cannot connect.
- The **free edition** is enough for the 23 offline tools (extensions,
media analysis, grade exchange), which only touch the filesystem and
FFmpeg.
- Python 3.11+
- macOS, Windows, or Linux
- Optional: FFmpeg on PATH (or `FFMPEG_BINARY`/`FFPROBE_BINARY`) for the media
analysis tools; a Whisper backend (`faster-whisper`) for transcription
## Quick Start
### Install from PyPI
```bash
pip install davinci-resolve-mcp
```
Or with [uv](https://docs.astral.sh/uv/):
```bash
uv pip install davinci-resolve-mcp
```
### Claude Desktop Configuration
Add to your Claude Desktop config file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"davinci-resolve": {
"command": "davinci-resolve-mcp"
}
}
}
```
Then restart Claude Desktop. DaVinci Resolve must be running for tools to work.
See [docs/CLAUDE_DESKTOP.md](docs/CLAUDE_DESKTOP.md) for a detailed setup guide with troubleshooting.
### Development Setup
```bash
git clone https://github.com/luquimbo/davinci-resolve-mcp.git
cd davinci-resolve-mcp
uv sync --dev
uv run davinci-resolve-mcp
```
### Verify Your Setup
```bash
python scripts/check_resolve.py
```
This prints Resolve version, current project, and timeline info to confirm the scripting bridge is working.
## Tool Domains
| Domain | Module | Tools | Description |
|--------|--------|------:|-------------|
| Playback | `playback` | 7 | Page navigation, timecode, playhead position, version info |
| Project | `project` | 21 | CRUD, settings, import/export (.drp), database folders, archive/restore, DB list |
| Media Storage | `media_storage` | 4 | Browse mounted volumes, list files, import to media pool |
| Media Pool | `media_pool` | 14 | Folder CRUD, clip management, timeline creation, metadata export |
| Clips | `media_pool_item` | 21 | Clip metadata, properties, colors, markers, flags, proxy, transcription, replace |
| Timeline | `timeline` | 29 | CRUD, tracks, items, markers, export (AAF/EDL/FCPXML), compound/Fusion clips, scene detection, auto-subtitles, settings |
| Timeline Items | `timeline_item` | 27 | Transform, crop, composite, color, markers, flags, takes, unique ID, stabilize, smart reframe, nodes |
| Render | `render` | 14 | Formats, codecs, presets, job queue, start/stop, progress monitoring |
| Color | `color` | 24 | Nodes, LUTs, CDL, grade versions, DRX application, color groups, node labels |
| Fusion | `fusion` | 11 | Compositions CRUD, generators, titles, tool listing |
| Gallery | `gallery` | 14 | Still albums, grab/import/export stills, PowerGrades, grade application |
| Fairlight | `fairlight` | 3 | Audio insertion, presets listing, preset application |
| Extensions | `extensions` | 12 | **Offline.** Install/read/list/remove DCTLs, Fuses, and Fusion scripts on disk |
| Media Analysis | `media_analysis` | 7 | **Offline.** FFmpeg probe, frame extraction, black/silence QC, Whisper transcription |
| Grade Exchange | `cdl` | 4 | **Offline.** ASC CDL read/write (`.cdl`/`.ccc`) and `.drx` grade inspection |
**Offline domains** (extensions, media analysis, grade exchange) do not use the
Resolve scripting bridge, so they run on the **free edition** and with Resolve
closed. Everything else requires DaVinci Resolve **Studio** (external Python
scripting is a Studio-only feature).
**Resources** (read-only context, no tool call needed):
| URI | Description |
|-----|-------------|
| `resolve://system` | Resolve version, product name, current page |
| `resolve://project` | Project name, timeline count, resolution, frame rate |
| `resolve://timeline` | Timeline name, frame range, track counts, timecode |
## Architecture
```
src/davinci_resolve_mcp/
server.py FastMCP instance, registers all modules, CLI entry point
resolve_api.py Lazy singleton with platform auto-detection and health checks
platform_paths.py Cross-platform Resolve support-dir resolution (LUT/Fuses/Scripts)
models.py Pydantic models (CDLValues for ASC color correction)
constants.py Enums for pages, track types, clip colors, marker colors, export types
exceptions.py ResolveNotRunning, ResolveOperationFailed
tools/
playback.py Page navigation, timecode, version
project.py Project CRUD, settings, folders, import/export
media_storage.py Volume browsing, file listing, import
media_pool.py Folder CRUD, clip management, timeline creation
media_pool_item.py Clip metadata, properties, markers, flags
timeline.py Timeline CRUD, tracks, items, markers
timeline_item.py Transform, crop, composite, color, markers
render.py Formats, codecs, presets, jobs, rendering
color.py Nodes, LUTs, CDL, versions, groups
fusion.py Compositions, generators, titles
gallery.py Stills, albums, PowerGrades
fairlight.py Audio insertion, presets
extensions.py Offline DCTL/Fuse/script authoring (filesystem)
media_analysis.py Offline FFmpeg probe, frames, QC, transcription
cdl.py Offline ASC CDL read/write, .drx inspection
_offline_helpers.py Safe filenames + ffmpeg/ffprobe discovery
resources/
system_info.py resolve://system
project_info.py resolve://project
timeline_info.py resolve://timeline
```
**Key patterns:**
- **Lazy singleton** (`ResolveAPI`): Connects to Resolve on first access, not at import time. A `GetVersion()` health check runs on every access to detect stale references and reconnect automatically.
- **One module per domain**: Each tool module exports a `register(mcp)` function that decorates tool functions with `@mcp.tool()`.
- **Defensive error handling**: Every API call catches `AttributeError` (stale scripting bridge) and re-raises as `ResolveNotRunning`. Version-specific methods are wrapped so missing APIs return clear errors instead of crashes.
- **Pagination**: Large lists (clips, timeline items) support `offset` and `limit` parameters, returning `has_more` to signal additional pages.
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full design document.
## Testing
```bash
# Unit tests (no Resolve needed)
uv run pytest
# Integration tests (requires Resolve running)
uv run pytest -m integration
```
## Scope
The 189 scripting-bridge tools (v0.1.0) cover core editing, color grading, Fusion compositions, gallery stills, Fairlight audio, timeline export, compound clips, transcription, takes management, scene detection, auto-subtitles, stabilization, smart reframe, project archival, and database management.
v0.2.0 adds 23 **offline** tools (212 total) that work on the free edition with Resolve closed: DCTL/Fuse/script authoring, FFmpeg-based media probe / frame extraction / black+silence QC / Whisper transcription, and ASC CDL (`.cdl`/`.ccc`) grade exchange plus `.drx` inspection.
## Auto-Generated Tool Reference
Run the following to generate a complete tool reference from the registered MCP tools:
```bash
python scripts/generate_tool_docs.py
```
This creates `docs/TOOLS.md` with every tool name, description, parameters, and return type grouped by domain.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md).
## License
MIT. See [LICENSE](LICENSE).
TDQS
Scored across 212 tools
Tool names use clear resource prefixes (project_, timeline_, clip_, item_, render_, media_pool_) that make most purposes obvious. A few pairs blur together—clip_get_metadata vs clip_get_properties, clip_transcribe_audio vs media_transcribe, and storage_import_to_pool vs media_pool_import_media—but the descriptions clarify the distinctions.
The set is uniformly snake_case with verb_noun structure and heavy resource prefixes, so naming is predictable. Minor inconsistencies like list/get/read interchange, project_folder_goto_parent vs project_folder_goto_root, and standalone media_probe/media_streams/cdl_read keep it from being perfect.
212 tools is far beyond the 3–15 well-scoped range and would overwhelm an agent's context and tool-selection process. Even for DaVinci Resolve's broad surface, many atomic operations could be grouped into parameterized tools (e.g. one marker tool with an action parameter).
Coverage is remarkably extensive: project lifecycle, media pool, clips, timelines, items, color, Fusion, Fairlight, gallery, render, extensions, and media analysis are all represented. It misses a few useful controls such as undo/redo, arbitrary timeline-insert positioning, and deeper Fairlight mixing operations, but there are no major dead ends.