Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Description from the maker (original English)
Resolve MCP gaps: clip effects, Paste Attributes, frame export, photo albums, camera layouts.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
RESOLVE_SCRIPT_API, RESOLVE_SCRIPT_LIBYou need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"resolve-ext": {
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}Run this in your terminal
claude mcp add resolve-ext --env RESOLVE_SCRIPT_API=your-value --env RESOLVE_SCRIPT_LIB=your-value -- uvx resolve-extFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"resolve-ext": {
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"resolve-ext": {
"type": "stdio",
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "your-value",
"RESOLVE_SCRIPT_LIB": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
RESOLVE_SCRIPT_API envRESOLVE_SCRIPT_LIB envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account CaptRauti, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.0.1) reached the registry 4 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Figma Context MCP, Claude Real Video, Figma MCP Server
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
Figma’s official server gives AI your design data so it can turn designs into code or describe them accurately. Connects to Figma’s cloud.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
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
Only the beginning is shown; read the rest in the repo