Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Resolve MCP gaps: clip effects, thumbnails, auto colour, CDL, jobs, clone media, camera layouts.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
RESOLVE_SCRIPT_API, RESOLVE_SCRIPT_LIB你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"resolve-ext": {
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add resolve-ext --env RESOLVE_SCRIPT_API=your-value --env RESOLVE_SCRIPT_LIB=your-value -- uvx resolve-ext运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"resolve-ext": {
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"resolve-ext": {
"type": "stdio",
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
RESOLVE_SCRIPT_API envRESOLVE_SCRIPT_LIB env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月10日
注册名称已通过 GitHub 账户 CaptRauti 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.0.5)于昨天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, ONE — pagos en Monero y trueque de cómputo
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP del agente ONE: cobros y pagos XMR, libro auditable y trueque de cómputo. AliceLabs LLC.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An MCP server that adds the DaVinci Resolve 21.1.2 scripting surfaces the mainstream Resolve MCP servers do not cover — clip effects, effect properties, Paste-Attributes, frame export and media-pool folder lookups.
It is deliberately an extension, not a replacement: register it alongside the other two Resolve MCP servers and you get a larger surface with no overlap — see the full setup. Everything it exposes is measured against a live Resolve, and calls that turn out to be broken are reported as broken rather than wrapped in a success.
effects apply/list/remove/toggle/reorder clip effects
clip_attrs copy attributes between clips (Paste Attributes) export_frame stills from a clip or media-pool item folder_ops which bin does this clip/folder live in photo_albums albums, photos, ratings, flags, versions, stills node_graph node labels, colours, enable state, LUTs, cache project_extras render presets, audio render formats, transcription camera_comparison 2x2 / split layouts, camera labels, markers clip_position read placement + handle offsets; flags broken APIs resolve_ext_status health check
Resolve is not covered by one MCP server. Three independent servers do different jobs, and full coverage means running all three. This project is the third; the other two are not optional extras.
| Server | Origin | Tools | What it is for |
|---|
| Blackmagic's own ResolveMCP.exe | Ships with DaVinci Resolve 21 — nothing to download | 14 | A *meta-server*: it provides Resolve's scripting-API stubs and a Python sandbox (run_script, search_scripting_api, get_whats_new) plus LUT/DCTL management. It performs no Resolve actions itself. | | community samuelgursky/davinci-resolve-mcp | npx or git | 37 (390 with --full) | The workhorse: editing, media pool, render, markers, grading, Fusion — one granular tool per task. Ships a second davinci-resolve-advanced server (18 Node tools) for source-safe media analysis. | | this project resolve-ext | pip | 10 | The gaps the other two leave — see the table below. |
All three talk to the same Resolve through the same single-client scripting API. They coexist without overlap; registering one and wondering why a capability is missing is the usual disappointment.
# 1. Blackmagic's — already on disk, just register it:
npx davinci-resolve-mcp setup
pip install https://github.com/CaptRauti/ResolveMCP-ext/releases/download/v1.0.0/resolve_ext-1.0.0-py3-none-any.whl resolve-ext doctor
Full procedure, per-platform paths, the Windows "Resolve is on another drive" case, and the failure modes of each: [AGENTS.md](AGENTS.md) — written so an AI agent can install all three unattended.
DaVinci Resolve 21.1.2 (22 Oct 2026) added a batch of scripting APIs. The popular MCP servers do not implement them — verified two ways: searching their source for each symbol, and probing live Resolve objects with hasattr (a type stub documents the API; only the live object proves your build has it).
| Resolve 21.1.2 symbol | In mainstream MCP servers |
|---|---|
Resolve.GetEffectsList | absent |
TimelineItem.AddEffect / GetEffects / DeleteEffects | absent |
Effect.GetInfo / Get/SetIsEnabled / Get/SetIndex | absent |
TimelineItem.CopyAttributes | absent |
TimelineItem.ExportFrame / MediaPoolItem.ExportFrame | absent |
MediaPoolItem.GetParentFolder / Folder.GetParentFolder | absent |
TimelineItem.Get/SetLeftOffset / GetPosition | absent |
Timeline.MoveItems / DeleteGaps / Get/SetIsEnabled | absent |
Photo Album APIs (PhotoAlbum, PhotoAlbumItem, 53 methods) | absent |
Graph.SetNodeLabel / Get/SetNodeColor / SetNodeEnabled | absent |
Project.GetAudioRenderFormats / GetAudioRenderCodecs | absent |
Project.UpdateRenderPreset / SetQuickExportEnabledForRenderPreset | absent |
MediaPoolItem.SetTranscription | absent |
TimelineItem alone exposes 113 methods on 21.1.2; a large share of them were unreachable through MCP before this server.
Installing this with an AI agent? Point it at
AGENTS.md — it is a step-by-step procedure written for agents,
including the failure cases. This section is the human-facing version.
Requires Python 3.10+ and DaVinci Resolve Studio (external scripting is a Studio feature — the free build refuses it).
Download the wheel from the releases page and install it:
pip install resolve_ext-1.0.0-py3-none-any.whl
The wheel is pure Python and platform-independent — the same file works on Windows, macOS and Linux.
pip install git+https://github.com/CaptRauti/ResolveMCP-ext
Or from a local clone:
git clone https://github.com/CaptRauti/ResolveMCP-ext
cd ResolveMCP-ext pip install .
mcp 2.x breaks FastMCP, so the dependency is pinned <2. That pin is in the package metadata — you do not need to add it yourself.
resolve-ext doctor
resolve-ext 1.0.0
--- Python --- 3.12.4 at /usr/bin/python3 ok (3.10+)
--- DaVinci Resolve scripting API --- platform linux api_path /opt/resolve/Developer/Scripting (found) lib_path /opt/resolve/libs/fusionscript.so (found)
--- Import test --- ok: DaVinciResolveScript imports
--- Live connection --- ok: connected to Resolve; project = My Project
--- Result --- All checks passed.
doctor exits 0 when everything works and 1 otherwise, so it is usable in a setup script. When something is wrong it names the exact path that is missing and what to enable.
The server finds Resolve's scripting API by itself, so on a default installation there is nothing to configure:
{
"mcpServers": { "resolve-ext": { "command": "resolve-ext" } } }
For a non-standard Resolve location, or to see the explicit form, run:
resolve-ext env
which prints the configuration for the machine it runs on — including the exact RESOLVE_SCRIPT_API, RESOLVE_SCRIPT_LIB and PYTHONPATH values — as generic JSON and as a hermes mcp add command.
When merging into an existing client config, the server entry sits flat under the client's own mcpServers key. Do not wrap it in a second mcpServers level — that silently disables tool discovery.
Resolve must be running with Preferences → System → General → External scripting using → Local.
effectslist_available(media_type?) video (default) | photo | audio
list_applied(item_id?|name?, category?) apply(item_id?|name?, category, id) remove(item_id?|name?, category, indices?) set_enabled(item_id?|name?, index, enabled, category?) reorder(item_id?|name?, index, new_index, category?)
Address a timeline item with item_id (GetUniqueId) or with name plus the track it sits on (track_type default video, track_index default 1).
Always call list_available first — apply needs the category and id it returns. On a stock 21.1.2 Studio that is 36 fusion + 98 ofx effects for video, plus the Fairlight set for audio. Fusion ids look like Fusion/Effects/ / .
clip_attrsoptions() the full option vocabulary
copy(source_id?|source_name?, target_ids?|target_names?, options, ...) read(item_id?|name?)
The API behind the Edit page's Paste Attributes — the lever that makes a per-camera look repeatable: grade one clip, push the same attributes onto every other clip from that camera.
36 options in 6 groups (clip, video, zoom_crop_flip, retime, grade_fusion, audio). Shorthands: copy_all_video, copy_all_audio.
{"colorCorrection": true, "allZoomAttributes": true,
"allCropAttributes": true, "videoPlugins": true}
export_frameitem(item_id?|name?, frame_offset, output_type?, file_path?, format?, max_dimension?)
media(clip_id, frame_offset, output_type?, file_path?, format?, max_dimension?) timeline(frame_offset, ...) # broken on 21.1.2 — see below
item and media are verified working. The offset is 0-based and must be below the item's duration. output_type: file (needs file_path) or encodedString (default); for the latter the base64 is decoded and written to out/ next to the server, with only a short prefix returned inline.
folder_opsparent_of_clip(clip_id) which bin holds this clip
parent_of_folder(path?|folder_id?) a folder's parent (root has none) path(clip_id?|folder_id?) "Master/Sub/Bin" find_clip(clip_id) locate a clip anywhere in the tree
photo_albumslist() / current() / set_current(album_id?|name?)
create(name) / create_from_photos(name, clip_ids) / delete(album_ids?) / rename(...) quick_export_presets() / render_settings(settings?) photos(album_id?|name?) / add_photos(clip_ids) / remove_photos(photo_ids) / current_item() stills(album_id?|name?, all_photos?) photo(photo_id) / rate(photo_id, stars) / flag(photo_id, color?|clear?) clip_color(photo_id, color?|clear?) / versions(photo_id) add_version / load_version / delete_version copy_grade / effects_list / effect_apply / effect_remove / fusion_comps / fusion_add
Verified working on 21.1.2.10: 9/9 `PhotoAlbum` methods, 20/20 `PhotoAlbumItem` methods, CreatePhotoAlbumFromPhotos, persistent ratings / flags / versions, AddFusionComp on a photo.
add_photos is broken upstream (AddToPhotoAlbum adds nothing) — the action verifies by reading the album back and tells you so. Use `create_from_photos`, which is the verified path.
Note the split: the album *listing* methods live on
Project, the
*creating/adding* ones on
MediaPool, and Resolve answers none of them. The
tool resolves the right object per call, because a Resolve proxy makes
hasattrreport every method on every object.
node_graphinfo(item_id?|name?|photo_id?) node list with labels and colours
label(node_index, label) "" clears the label color(node_index, color) "" clears the colour enable(node_index, enabled) tools(node_index) which Fusion/OFX tools sit in the node lut(node_index, lut_path?) read, or set cache(node_index, mode?) read, or set reset_colors() photo graphs only reset_grades(confirm=true) destructive — clears the whole grade
Valid node colours: Orange, Apricot, Yellow, Lime, Olive, Green, Teal, Navy, Blue, Purple, Violet, Pink, Tan, Beige, Brown, Chocolate.
Target a timeline clip by item_id/name, or a photo by photo_id. Labels and colours verified persistent across calls.
project_extrascapabilities() what this build answers at all
render_presets() GetRenderPresetList update_render_preset(preset_name) GUI-dependent, see the broken table quick_export_enable(preset_name, enabled) GUI-dependent audio_formats() {display name -> ex
只显示了开头部分;其余内容请在仓库中阅读