Atlas / MCP servers / hoyt-harness / DaVinci Professional

DaVinci ProfessionalSAFE

mcp/hoyt-harness/davinci-professional-1

Token-efficient MCP server for DaVinci Resolve Studio — kernel + domain architecture keeps context cost proportional to the work.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
167 93r · 70w · 4d
Transport
stdio
License
GPL-3.0
Stars
25
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

An enterprise-grade Model Context Protocol (MCP) server that exposes the full DaVinci Resolve scripting API to AI assistants. This project was inspired by the davinci-resolve-mcp project by @samuelgursky, even though it is now a significantly different architecture.

Compatible with any AI system that supports modern MCP specifications.

How It Works

Most MCP servers dump every available tool into the AI's context window at session start. With a large API surface, that means hundreds of tool definitions loaded whether or not the current task needs them — wasting tokens and slowing response time.

This server uses a kernel + domain architecture instead:

  • Kernel tools (always available, 6 total): activate_domain,

deactivate_domain, list_domains, get_version, get_current_page, switch_page. These are useful regardless of what you're doing in Resolve.

  • Domain tools (loaded on demand): the full Resolve API is organized into

domains — Project Management, Timeline Operations, Media Pool, and more. Call activate_domain("project_management") and the server fires a notifications/tools/list_changed event; your MCP client refetches the tool list and the domain's tools are immediately available, no session restart needed.

Context cost at session start is bounded by the kernel alone. You expand it deliberately, only for the domains your current workflow actually needs.

Who This Is For

This server is built for independent creators and boutique studios where AI API costs are real and context overhead matters.

Compared to other popular MCP servers for DaVinci Resolve:

Most alternatives load every available tool definition into the AI's context at session start. For a well-resourced production environment — a studio running Claude on dedicated infrastructure with token budgets absorbed into overhead — that approach is solid and t

Read from source at commit 7c8042daef78OBSERVED · 2026-10-09
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add davinci-mcp-professional -- uvx davinci-mcp-professional
claude-desktop
{
  "mcpServers": {
    "davinci-mcp-professional": {
      "command": "uvx",
      "args": [
        "davinci-mcp-professional"
      ]
    }
  }
}
03

Exposed tools (167)

93 read · 70 write · 4 destructive. Blast radius: 4 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add_clip_flagwriteAdd a color flag to a clip
add_clip_markerwriteAdd a marker to a clip at a specific source frame
add_color_versionwriteAdd a new color version to a timeline item
add_item_markerwriteAdd a marker to a timeline item at a source frame
add_storage_items_to_poolwriteAdd files or folders from media storage to the media pool
add_takewriteAdd a media pool clip as a take to a timeline item
add_timeline_markerwriteAdd a marker to a timeline at a specific frame
add_timeline_matteswriteAdd timeline matte files to the media pool
add_trackwriteAdd a new track to a timeline
analyze_dolby_visionwriteRun Dolby Vision analysis on timeline items
append_clips_to_timelinereadAppend media pool clips to the current timeline
apply_fairlight_presetwriteApply a Fairlight preset to the current timeline
auto_sync_audiowriteAuto-sync audio clips to video clips by waveform or timecode
clear_clip_colordestructiveClear the color label of a clip
clear_clip_flagsdestructiveClear clip flags by color. Use
clear_clip_mark_in_outdestructiveClear in/out marks from a clip
clear_timeline_marksdestructiveClear in/out marks from a timeline
copy_gradesreadCopy grades from one timeline item to others
create_color_groupwriteCreate a new color group in the current project
create_media_pool_folderwriteCreate a subfolder inside an existing media pool folder
create_powergrade_albumwriteCreate a new gallery PowerGrade album
create_projectwriteCreate a new project with the given name
create_project_folderwriteCreate a project subfolder in the current folder
create_stereo_clipwriteCreate a stereo clip from two existing clips (DaVinci Resolve Studio only)
create_still_albumwriteCreate a new gallery still album
create_timelinewriteCreate a new empty timeline with the given name
create_timeline_from_clipswriteCreate a new timeline from a list of media pool clips. Timeline is placed in the current media pool folder (use set_current_media_pool_folder to control placement).
duplicate_timelinereadDuplicate a timeline with a new name
enable_trackwriteEnable or disable a timeline track
export_clip_metadatareadExport clip metadata to a CSV file. Pass empty clip_ids list to export all clips.
export_current_frame_as_stillreadExport the current frame as a still image file
export_fusion_compreadExport a Fusion composition to a file
export_layout_presetreadExport a layout preset to a file
export_projectreadExport a project to a .drp file
export_timelinereadExport a timeline to AAF, EDL, XML, FCPXML, OTIO, DRT, ALE, HDR, or Dolby Vision
get_burn_in_preset_listreadGet the list of available burn-in preset names
get_clip_colorreadGet the color label of a clip
get_clip_flagsreadGet the list of color flags on a clip
get_clip_mark_in_outwriteGet the in/out marks set on a clip
get_clip_matte_listreadGet the list of matte file paths attached to a clip
get_clip_namereadGet the name of a media pool clip
get_clip_third_party_metadatareadGet third-party metadata from a clip
get_clip_timelinereadGet the timeline associated with a clip (if it is a timeline clip)
get_clip_unique_idreadGet the UUID of a clip (stable identifier for subsequent calls)
get_clips_in_color_groupreadGet the timeline items assigned to a color group
get_color_group_post_graphwriteGet node-count info for a color group
get_color_group_pre_graphreadGet node-count info for a color group
get_color_groupsreadGet the list of color group names in the current project
get_current_clip_thumbnailreadGet the current clip thumbnail image data from the Color page
get_current_databasereadGet info about the current project database
get_current_media_pool_folderreadGet the currently selected media pool folder
get_current_projectreadGet the name of the currently open project
get_current_project_folderreadGet the name of the current project folder
get_current_render_formatreadGet the currently selected render format and codec
get_current_still_albumreadGet the name of the currently active still album
get_current_timecodereadGet the current playhead timecode of a timeline
get_current_timelinereadGet the name of the currently active timeline
get_current_video_itemreadGet the current video item under the playhead
get_fairlight_presetsreadGet the list of available Fairlight audio preset names
get_folder_clipsreadList clips in a specific media pool folder
get_folder_subfoldersreadList subfolders of a media pool folder
get_gallery_albumsreadGet the list of gallery still album names
get_gallery_powergrade_albumsreadGet the list of gallery PowerGrade album names
get_graph_node_cache_modereadGet the cache mode of a graph node
get_graph_node_countreadGet the number of nodes in the current timeline
get_graph_node_labelreadGet the label of a node in the timeline
get_graph_node_lutreadGet the LUT path assigned to a graph node
get_graph_node_toolsreadGet the list of tool names active in a graph node
get_keyframe_modereadGet the current keyframe mode (0=all, 1=color, 2=sizing)
get_layout_presetsreadGet the list of available UI layout preset names
get_media_pool_root_folderreadGet info about the media pool root folder
get_mounted_volumesreadGet the list of mounted volumes visible to Resolve
get_quick_export_presetsreadGet available Quick Export preset names
get_render_codecsreadGet codecs for a render format as {description: codec}
get_render_formatsreadGet available render formats as {format: file_extension}
get_render_job_listreadGet the list of all render jobs and their settings
get_render_job_statusreadGet the status and completion percentage of a render job
get_render_modereadGet render mode (0=individual clips, 1=single clip)
get_render_preset_listreadGet the list of available render preset names
get_render_resolutionsreadGet available resolutions for a format and codec
get_selected_pool_clipsreadGet the clips currently selected in the media pool. Note: MediaPool.GetSelectedClips() is undocumented in FusionScript and returns empty in Resolve 21 — treat this as best-effort.
get_start_timecodewriteGet the start timecode of a timeline
get_still_labelreadGet the label of a still by index within an album
get_storage_filesreadList files in a media storage path
get_storage_subfoldersreadList subfolders in a media storage path
get_timeline_end_framereadGet the end frame number of a timeline
get_timeline_markersreadGet all markers on a timeline as {frameId: {color, duration, note, name, customData}}
get_timeline_marksreadGet the in/out marks of a timeline
get_timeline_media_pool_itemreadGet the media pool item associated with a timeline
get_timeline_node_graphreadGet the color node graph for a timeline (Color page)
get_timeline_settingsreadGet one or all settings of a timeline. Omit setting_name to get all.
get_timeline_start_framewriteGet the start frame number of a timeline
get_track_countreadGet the number of tracks of a given type in a timeline
get_track_enabledreadGet whether a timeline track is enabled
get_track_lockedreadGet whether a timeline track is locked
get_track_namereadGet the name of a timeline track
get_track_subtypereadGet the audio format subtype of an audio track
get_versionreadGet DaVinci Resolve version information
goto_parent_folderreadNavigate to the parent project folder
goto_root_folderreadNavigate to the root project folder
grab_stillreadGrab a still from the current clip on the Color page
import_folder_from_filewriteImport a folder from a .drb bin file
import_into_timelinewriteImport content into a timeline from an AAF file with remapping
import_layout_presetwriteImport a layout preset from a file
import_mediawriteImport a media file into the current media pool folder
import_projectwriteImport a project from a .drp file
import_stillswriteImport still files into a gallery album
import_timeline_from_filewriteImport a timeline from an EDL, AAF, XML, FCPXML, DRT, ADL, or OTIO file
insert_fusion_compositionwriteInsert a new Fusion composition into a timeline at the current position
insert_fusion_generatorwriteInsert a Fusion generator into a timeline
insert_fusion_titlewriteInsert a Fusion title into a timeline
insert_generatorwriteInsert a generator clip into a timeline at the current playhead position
insert_ofx_generatorwriteInsert an OFX generator into a timeline
insert_titlewriteInsert a title clip into a timeline
is_rendering_in_progressreadCheck whether a render is currently in progress
link_clipsreadLink or unlink video and audio clips in a timeline
link_full_resolution_mediareadLink a full-resolution media file to a clip
link_proxy_mediareadLink a proxy media file to a clip
list_databasesreadList all available project databases
list_media_clipsreadList all clips in the media pool root folder
list_project_foldersreadList project subfolders in the current folder
list_projectsreadList all available projects in the current database folder
list_timelinesreadList all timelines in the current project
load_color_versionreadLoad a color version by name
load_layout_presetreadLoad a UI layout preset by name
load_project_burn_in_presetreadLoad a burn-in preset for the current project
load_render_presetreadLoad a render preset by name
lock_trackreadLock or unlock a timeline track
move_folderswriteMove media pool folders to a different parent folder
open_projectreadOpen a project by name
open_project_folderreadNavigate into a project subfolder
refresh_lut_listreadRefresh the LUT list from disk
refresh_media_pool_foldersreadRefresh media pool folders (use in collaboration mode)
relink_clipsreadRelink offline clips to a new media folder
rename_color_groupwriteRename a color group
rename_color_versionwriteRename a color version
rename_fusion_compwriteRename a Fusion composition on a timeline item
rename_projectwriteRename the currently open project
rename_timelinewriteRename an existing timeline
save_layout_presetwriteSave the current UI layout as a named preset
save_projectwriteSave the current project
save_render_presetwriteSave current render settings as a new named preset
set_clip_colorwriteSet the color label of a clip
set_clip_mark_in_outwriteSet in/out marks on a clip
set_clip_metadatawriteSet a clip metadata field
set_clip_namewriteSet the name of a media pool clip
set_clip_propertywriteSet a single clip property by key
set_clip_third_party_metadatawriteSet a third-party metadata field on a clip
set_current_media_pool_folderwriteSet the currently selected media pool folder
set_graph_node_cache_modewriteSet the cache mode of a graph node
set_graph_node_enabledwriteEnable or disable a node in the timeline
set_graph_node_lutwriteAssign a LUT file to a graph node
set_item_node_lutwriteAssign a LUT file to a specific node on a timeline item
set_keyframe_modewriteSet keyframe mode (0=all, 1=color, 2=sizing)
set_project_settingwriteSet a project setting value
set_render_format_and_codecwriteSet the current render format and codec
set_render_modewriteSet render mode (0=individual clips, 1=single clip)
set_selected_pool_clipwriteSet a clip as the selected clip in the media pool (sets the source viewer clip). Note: selection state cannot be verified via get_selected_pool_clips in Resolve 21.
set_start_timecodewriteSet the start timecode of a timeline
set_still_labelwriteSet the label of a still by index within an album
set_timeline_markswriteSet in/out marks on a timeline
set_timeline_settingwriteSet a timeline setting value. Note: Timeline.SetSetting() has very limited write support in Resolve 21 — most settings are effectively read-only via the API and will return
set_track_namewriteSet the name of a timeline track
stop_renderingwriteStop the current render operation
switch_pagereadSwitch to a specific page in DaVinci Resolve
switch_timelinereadSwitch the current timeline by name
unlink_proxy_mediareadUnlink the proxy media from a clip
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
none-observed
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (11)

MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear_clip_color, clear_clip_flags, clear_clip_mark_in_out, clear_timeline_marks
Why it matters. 4 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.bandit
.bandit
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/test_security.py:162
"pickle.loads(",
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/test_security.py:163
"marshal.loads(",
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_security.py:156
"eval(",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_security.py:157
"exec(",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.specify/scripts/powershell/common.ps1:95
return (Resolve-Path -LiteralPath (Join-Path $PSScriptRoot "../../..")).Path
LOWObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
tests/test_security.py:163
marshal.loads( ... "eval(
Why it matters. decodes a payload and executes it
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
.claude/commands/security-review.md:6
You are a senior security engineer conducting a focused security review of the changes on this branch.
INFOPrompt injection · prompt.persistence · CWE-94, CWE-1427
README.md:70
[official installer](https://www.python.org/downloads/) with "Add to PATH"
Why it matters. instructs the agent to persist itself in the user's environment
INFOPrompt injection · prompt.persistence · CWE-94, CWE-1427
USING.md:13
[python.org](https://www.python.org/downloads/) with "Add to PATH" and
Why it matters. instructs the agent to persist itself in the user's environment

Gates applied: no_behavioural_pass.

Audited 2026-10-09 · audit v0.4.1 · source sha 7c8042daef78full audit observations/trust-audit/mcp-server/hoyt-harness__davinci-professional-1.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-097c8042daef78SAFEB89first audit
06

Questions

What is the DaVinci Professional MCP server?

Token-efficient MCP server for DaVinci Resolve Studio — kernel + domain architecture keeps context cost proportional to the work.

What tools does DaVinci Professional expose?

167 in total: 93 read-only, 70 that write, and 4 that can delete or overwrite (clear_clip_color, clear_clip_flags, clear_clip_mark_in_out, clear_timeline_marks). Every one is listed on this page with its risk.

Is DaVinci Professional safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 4 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does DaVinci Professional need?

No credential environment variables were found in its source, so it appears to need none.

How does DaVinci Professional run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as davinci-mcp-professional.

How current is this page?

The grade is for one exact copy of the source (7c8042daef78), read on 2026-10-09. The repository is watched and re-audited when it changes.

Advertisement