Skip to main content
Glama

davinci-mcp is an MCP server for DaVinci Resolve. It gives AI agents such as Claude access to the whole Resolve scripting API: 299 typed actions across 17 domains. Every change is verified against Resolve itself before it is reported as done.

It is built for editors and colorists who want an assistant that does the clicking, and for developers who want a dependable bridge between an agent and Resolve.

See it work

A real Claude agent, given four plain messages, cut this 52-second action trailer from the open movie Tears of Steel. It imported the footage, laid out 33 shots on the beat, added the title cards, graded teal and orange, and rendered it. Nothing in the run was staged; the video below is sped up 4×.

Related MCP server: resolve-mcp

Why davinci-mcp

Verified, not hopeful

  • Every write is read back from Resolve, and its receipt says verified: true or false. An agent can't claim a change that didn't happen.

  • dry_run previews any write without applying it.

  • Deletes need consent: the first call returns a plan and a confirm_token, and nothing is removed until the same call comes back with the token.

  • Destructive edits take a safety snapshot of the timeline first.

  • Every call is written to a JSONL audit log.

Reliable

  • In the benchmark below, 20 of 20 jobs passed. The community MCP server passed 13 of 20.

  • Near-miss parameters are repaired instead of refused (fade_out → FadeOut, a bare clip name → a selector), and every rewrite is reported.

  • Errors are actionable: they suggest the right field ("did you mean"), name the right tool, and say which render setting Resolve rejected.

Economical

  • batch_run chains a whole sequence server-side in one call, for example 18 steps from timeline to render.

  • Clients defer the tools, so the first turn costs about 32k tokens of context.

  • Replies and schemas are compact. Against the community server: 31 % cheaper and 60 % fewer calls.

Exhaustive and extensible

  • 17 domains: project, media, timeline, item, color, Fusion, gallery, audio, render, interchange, AI tools, UI, app and more.

  • One-call workflows: conform_from_edl, deliver, build_vertical_reel, apply_look, title_overlay.

  • Your own recipes: YAML templates, plus Python when you opt in.

Safe by default

  • File access is limited to the folders you allow.

  • The server's own state, its configuration and your Claude configuration files are always off-limits.

  • Symlinks are never followed when importing a folder.

Benchmarks

Headless Claude agents (Sonnet) ran four post-production jobs on a live Resolve Studio 21.1, five runs each. An agent that never saw the server's code wrote the jobs:

  • dailies: log and organise a day of footage;

  • promo: build a promo with a music bed;

  • look: grade with versions and a still;

  • spot QC: duplicate, export interchange files and render a range.

Each check reads Resolve directly, never through the server under test. Every agent ran under the same isolated harness. Full method and history →

Server

Jobs passed

Tool calls

Cost (4 jobs)

davinci-mcp

20 / 20

35

$0.62

Community MCP (samuelgursky/davinci-resolve-mcp)

13 / 20

90

$0.99

Resolve's built-in MCP

20 / 20

17

$0.35

About the built-in server. Resolve 21.1 ships its own MCP server, which is cheaper because it hands the agent one tool, run_script_unsafe, to run arbitrary Python inside Resolve. That makes for short runs, but nothing is validated, read back, audited, snapshotted or confirmed before a delete. In our scale test (160 clips, 4 timelines) it once put a marker at the wrong frame, then reported the job done. davinci-mcp trades a little cost for changes you can trust.

Talk to it like an editor

Import the clips in ~/Footage/day03, sort interviews and B-roll into bins, and colour the circled takes green.
Build a 9:16 reel from these three shots, add subtitles from the audio, and render it for Instagram.
Conform this EDL against the media in ~/Rushes and deliver a ProRes master and an H.264 proxy.
Apply the show LUT to every shot of the timeline except the end card, and grab a still of the first shot.
Add a red marker at the start of every shot named "broll_" in Edit_03.
Duplicate the approved cut as "QC", export it as FCPXML and OTIO, and render 01:00:02:00 to 01:00:07:24.

How it works

flowchart LR
    A["AI agent<br/>Claude, Cursor…"] -->|MCP call| V["Validate<br/>+ repair"]
    V --> C["Consent<br/>deletes only"]
    C --> N["Snapshot<br/>destructive only"]
    N --> X["Call Resolve<br/>one thread"]
    X <-->|scripting API| D[("DaVinci<br/>Resolve")]
    X --> R["Read back<br/>→ receipt"]
    R --> L["Audit log"]
    R -->|"verified: true / false"| A
  1. Validate. The agent calls a domain tool such as timeline_write with {"op": {"action": ..., ...}}, and the parameters are checked against a typed schema. Almost-right parameters are repaired, and each repair is reported.

  2. Consent and snapshot. Deletes stop at a plan until they are confirmed, and destructive edits take a snapshot first.

  3. Call Resolve. The call runs on a single executor thread, the only place Resolve is ever called from.

  4. Read back. The server reads the result back from Resolve and returns a receipt with verified. Long renders become jobs that the agent can wait on.

Tools

52 tools. Domain tools are named <domain>_read, <domain>_write and <domain>_delete, and take {"op": {"action": ..., ...}}; together they expose about 300 actions. Reads have no side effects, writes return a verified receipt, deletes ask for confirmation first.

  • resolve_status - Connection state, Resolve version and edition, current project, timeline and page.

  • describe_action - Compact parameter schemas of one or several actions.

  • search_api - Search the Resolve 21.1 scripting API by name or description.

  • batch_run - Run several tool calls in one call, server-side, with one confirmation for the batch.

  • workflow_write - One-call jobs: conform_from_edl, deliver, build_vertical_reel, apply_look, title_overlay.

  • recipe_list / recipe_run - List and run YAML or Python recipes; every step is validated, verified and audited.

  • project_read / project_write / project_delete - Projects, folders, databases, settings and settings presets; create, load, save, archive, import, export.

  • media_read / media_write / media_delete - Media pool and storage: import, bins, relink, proxies, metadata, markers, flags, multicam, mattes, audio sync.

  • timeline_read / timeline_write / timeline_delete - Timelines, tracks, markers, playhead, compound and Fusion clips, import and export.

  • item_read / item_write / item_delete - Timeline items: properties, speed, fades, takes, flags, colors, markers, transitions, stabilization.

  • color_read / color_write / color_delete - Node graphs, CDL, LUTs, versions, color groups, DRX grades, DCTL.

  • fusion_read / fusion_write / fusion_delete - Fusion comps and tools: add, connect, inputs, keyframes, expressions, Text+ titles, settings, fuses.

  • gallery_read / gallery_write / gallery_delete - Still albums: grab, import, export, label.

  • audio_read / audio_write - Loudness analysis, silence detection, normalization, voice isolation, Fairlight presets, audio mapping.

  • render_read / render_write / render_delete - Formats, codecs, presets and render jobs; render a timeline or a range, Quick Export.

  • interchange_read / interchange_write - EDL, FCPXML, OTIO, marker CSV and .cube LUT files, read and written without Resolve.

  • ai_read / ai_write / ai_delete - Transcription, subtitles from audio, scene-cut detection, Smart Reframe, audio classification, IntelliSearch.

  • vision_read - Export or screenshot frames and contact sheets so the agent can look at the picture.

  • ui_read / ui_write / ui_delete - Pages, menus and keyboard shortcuts, for the few things the API can't do.

  • app_read / app_write / app_delete - Resolve app info, layout presets, keyframe mode, quit.

  • snapshot_list / snapshot_write - Safety copies of the timeline or project, taken automatically before destructive edits.

  • job_status / job_wait / job_list / job_cancel - Long operations (renders, analyses) run as jobs.

  • code_delete - run_lua and run_python inside Resolve, an escape hatch that is off by default and always asks for confirmation.

Install

  • DaVinci Resolve Studio 21.1 or later. In Preferences → General → External scripting using, choose Local.

  • The free edition 21.1+ is not supported. Resolve 21.1 took Python scripting out of the free edition, and its Lua sandbox can't reach the Resolve API (tested on 21.1.2). On the free 21.0.x, the in-app bridge should still work: run davinci-mcp install --bridge, then start it from Workspace → Scripts.

  • Python 3.13+ and uv (or pipx / pip).

uv tool install davinci-mcp

pipx install davinci-mcp and pip install davinci-mcp work too.

davinci-mcp doctor

doctor checks that Resolve is reachable and reports its version, edition and channel.

davinci-mcp install --target claude-code

Or add it by hand:

claude mcp add davinci-mcp -- davinci-mcp serve
davinci-mcp install --target claude-desktop

This adds the server to claude_desktop_config.json. Restart Claude Desktop to load it. To do it by hand:

{
  "mcpServers": {
    "davinci-mcp": { "command": "davinci-mcp", "args": ["serve"] }
  }
}

If Claude Desktop can't find the command, use its absolute path (which davinci-mcp).

Without installing anything, any client can run it through uvx: { "command": "uvx", "args": ["davinci-mcp", "serve"] }. Don't run uvx davinci-mcp install: it would write a path from uv's temporary cache into the client config.

In ~/.cursor/mcp.json:

{
  "mcpServers": {
    "davinci-mcp": { "command": "davinci-mcp", "args": ["serve"] }
  }
}

In .vscode/mcp.json:

{
  "servers": {
    "davinci-mcp": { "type": "stdio", "command": "davinci-mcp", "args": ["serve"] }
  }
}

Run davinci-mcp serve over stdio. Use davinci-mcp serve --transport http for Streamable HTTP; it binds to loopback and needs a bearer token for any other host. The server also exposes a davinci://status resource.

Configure

The optional file ~/.config/davinci-mcp/config.toml holds the settings. Any key can be overridden with a DAVINCI_MCP_<SECTION>__<KEY> environment variable.

[safety]
allowed_roots = ["~/Movies", "~/Projects"]  # files outside these are refused (default: your home)
auto_snapshot = "destructive"               # "off" | "destructive" | "all"

[recipes]
allow_python = false                        # Python recipes run arbitrary code: opt in

The file does not exist until you create it; without it the defaults below apply. Unknown keys, or keys in the wrong section, stop the server with a validation error. In an environment variable a list is written [~/Movies,~/Footage].

Key

Default

Meaning

state_dir (top level)

~/.local/state/davinci-mcp

Audit log, jobs, confirm tokens, temporary frames.

connection.auto_launch

true

Start Resolve when it is not running.

connection.headless

false

Launch Resolve with -nogui.

connection.call_timeout_s

30

Maximum seconds for one Resolve API call.

connection.launch_timeout_s

90

Maximum seconds to wait for Resolve to start.

connection.script_api, connection.script_lib

auto-detected

Paths to Resolve's scripting modules, only if detection fails.

safety.allowed_roots

["~"]

Folders tools may read or write; anything else is refused.

safety.auto_snapshot

"destructive"

When snapshots are taken unasked: "destructive", "all" or "off". A call can force it with snapshot.

safety.snapshot_dir

<state_dir>/snapshots

Where project exports (.drp) are written.

safety.snapshot_retention

20

Snapshots kept per project; older ones are pruned. 0 keeps none.

safety.consent_ttl_s

300

Lifetime of a confirm_token, in seconds.

safety.enable_code_execution

false

Allow arbitrary Python/Lua (code_delete) and Fusion scripts. This code runs with your user rights, outside allowed_roots.

http.host, http.port

127.0.0.1, 8765

Address for serve --transport http. Any non-loopback host requires a token.

http.token_env

DAVINCI_MCP_TOKEN

Name of the environment variable holding the bearer token.

server.schema_mode

"compact"

"full" lists every action's complete schema in tools/list (much larger).

recipes.dirs

["~/.config/davinci-mcp/recipes"]

Folders of user recipes (see recipes).

recipes.allow_python

false

Load *.py recipes, which run arbitrary code.

FAQ

Check three things:

  • Resolve is running;

  • in Studio, External scripting using is set to Local;

  • no dialog is open in Resolve, such as an update prompt or a project manager.

Then run davinci-mcp doctor.

Not from 21.1 on. Resolve 21.1 removed both external scripting and in-app Python scripts from the free edition. In-app Lua scripts still run, but in a sandbox with no file access, no network and no access to the Resolve API (tested on free 21.1.2), so no bridge can work there. On the free 21.0.x, the in-app Python bridge (davinci-mcp install --bridge) should still work. Otherwise you need Resolve Studio.

Not without consent. Every delete returns a plan first and needs a matching confirm_token. Destructive edits snapshot the timeline, and every call is logged.

Only inside allowed_roots. The server's own state, its configuration and your Claude configuration files are always refused, whatever you allow.

It runs one unchecked Python script per job. davinci-mcp makes typed, verified calls, so it uses a few more steps. batch_run and the one-call workflows keep that overhead small.

Contributing

Issues and pull requests are welcome. docs/domain-guide.md shows how to add an action: a parameter model, a handler, a read-back check and a test. The rest is generated from there.

uv sync
uv run pytest
uv run ruff check . && uv run pyright

Credits

davinci-mcp is an independent project. It is not affiliated with, endorsed by or sponsored by Blackmagic Design. DaVinci Resolve is a trademark of Blackmagic Design Pty. Ltd.

Support

davinci-mcp is free and open source. If it saves you time in the edit, you can buy me a coffee:

Made by Delanoe Pirard (Aedelon) · Apache 2.0

Available Tools

52 tools
ai_deleteAi (destructive)A
Destructive

Remove ai objects. op.action (params; * = required):

  • clear_audio_classification(clip, folder): Clear the audio classification of a clip or folder.

  • clear_transcription(clip, folder, nested): Clear the transcription of a clip or folder (irreversible). First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real behavioral value: the mandatory plan/confirm handshake and the fact that clear_transcription is irreversible (asymmetry vs clear_audio_classification). It does not cover permission requirements or what the snapshot/backup actually preserves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a tightly formatted action list, then the workflow rule. The closing line 'Calls known in advance (a sequence, the same change on several items): ONE batch_run' is terse to the point of being cryptic but does not waste space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, nested-schema tool with an output schema this is close to complete: purpose, available actions, per-action params, confirm flow, and bulk alternative are all present. The remaining gap is auth/permission expectations and the reversibility of the audio-classification clear, which is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the top-level params, so the baseline is 3; the description does add per-action parameter names (clip, folder, nested) that the loose 'op' object with additionalProperties=true does not enumerate, which is a genuine gain. However, the stated '* = required' convention is never applied — no asterisk appears on any listed param — leaving requiredness per action ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Remove' plus the enumerated action list ('clear_audio_classification', 'clear_transcription') makes the resource scope concrete, going beyond the vague 'ai objects' of the first sentence. It distinguishes itself from sibling 'batch_run' for bulk sequences, though it does not contrast with 'ai_read'/'ai_write' directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the two-phase calling protocol explicitly (first call returns plan + confirm_token, repeat with the token to apply) and routes pre-planned multi-item work to a sibling: 'ONE batch_run.' What's missing is any guidance on when to choose ai_delete over ai_write for these same objects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_readAi (read)C
Read-onlyIdempotent

Read ai state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_transcription(clip*, nested, offset, limit, include_words): Read a clip transcription (segments, optional words), paginated.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds nothing beyond that: no mention of what happens when a clip has no transcript, whether the transcript can be large/slow to fetch, or what the payload looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses with the purpose front-loaded and no filler. Its brevity is a virtue here, though the space saved is not reinvested in useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is structurally simple (one param, nested-free), but there is no output schema, so the description should at least characterize what a 'transcript' returns (plain text vs. segments vs. timestamps). That gap, plus the missing parameter semantics, leaves the definition thin for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It only restates the name and type ('clip_id (string, required)'), which the schema already encodes, and adds no format hints, ID source, or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (retrieves) and resource (transcript for a clip), which is unambiguous on its own. It does not differentiate itself from sibling read tools like clip_read, so an agent must infer that this is transcript-specific rather than general clip metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus clip_read or other read tools, and no prerequisites or exclusions. The only directive content is a restatement of the required parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_writeAi (write)A
Destructive

Change ai state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • analyze_for_intellisearch(clip, folder, identify_faces, better_mode): Run Intellisearch analysis on a clip or folder (blocking, needs AI Extras).

  • analyze_for_slate(clip, folder, marker_color): Run Slate ID analysis on a clip or folder (job, needs the AI Slate ID Extras). [job]

  • create_subtitles_from_audio(language, caption_preset, chars_per_line, line_break, gap): Create subtitles from the audio of the current timeline (job). [job]

  • detect_scene_cuts(): Detect and make scene cuts along the current timeline (job). [job]

  • generate_speech(text*, voice_model, custom_voice_file, speed, variation, pitch, generation_id, filename, +2 more): Generate speech audio from text into the Media Pool (needs AI Speech Generator).

  • perform_audio_classification(clip, folder): Classify the audio of a clip or folder (blocking; works without Extras).

  • remove_motion_blur(clip, folder, options): Render motion-deblurred copies of a clip or folder's clips (blocking, creates clips).

  • smart_reframe(item*): Run Smart Reframe on a timeline item (job). [job]

  • transcribe_audio(clip, folder, speaker_detection, as_nested_clip): Transcribe the audio of a clip or folder (job; read it with get_transcription). [job] Shortcuts (prefer them for whole tasks):

  • workflow_write.build_vertical_reel: Build a vertical timeline from clips, add subtitles and optionally render it. One call instead of create_subtitles_from_audio. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by warning that changes 'may overwrite current values' and by explaining the read-back receipt semantics ('receipt.verified=false means it did not take'). It also labels which actions run as blocking versus background jobs and notes side effects such as clip creation for remove_motion_blur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the destructive warning and receipt semantics, then a tightly formatted per-action list. Dense but every line carries information; the only waste is the '+2 more' shorthand that partially defers rather than informs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-action dispatcher this is comprehensive: atomic vs job behavior, Extras requirements, receipt verification, dry_run/snapshot semantics, and escalation to batch_run and describe_action. With an output schema present, return-value details are appropriately delegated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema allows additional properties in op, so the description carries the real parameter documentation, listing params per action with '*' marking required ones. Minor deduction for the '+2 more' truncation on generate_speech, which leaves two parameters to describe_action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Change ai state') and then enumerates every action the tool performs, each with a concrete description. An agent can distinguish this from ai_read, ai_delete, and workflow_write without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: prefer workflow_write.build_vertical_reel for whole tasks, use batch_run for known sequences, use get_transcription to read transcription results, and consult describe_action for parameter details. It also flags prerequisites per action ('needs AI Extras', 'works without Extras') and blocking vs job execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_deleteApp (destructive)A
Destructive

Remove app objects. op.action (params; * = required):

  • delete_preset(kind*, name*): Delete a layout, keyboard, user-preferences or burn-in preset.

  • disable_background_tasks(): Disable background tasks for this Resolve session (irreversible).

  • quit_resolve(): Quit the DaVinci Resolve application. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=false, openWorldHint=false, so the safety profile is known. The description adds real context beyond that: the first call only returns a plan plus confirm_token, the repeat applies it, and disable_background_tasks is called out as irreversible while quit_resolve terminates the application.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose sentence, then a clean bulleted action list with per-action params in a consistent signature style, then the confirm-token rule, then the batch_run pointer. Dense and readable, though the opening 'Remove app objects.' is a terse fragment and the contract sentence sits at the end rather than up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, nested-object tool with an output schema and rich annotations, the description supplies what structured fields cannot: the action taxonomy, the confirmation protocol, and the irreversibility flag on one action. Minor gap is that nothing explains when snapshot=true should be preferred over the server policy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does add per-action parameter requirements (delete_preset needs kind* and name*), which the generic 'additionalProperties' op schema does not spell out, but dry_run and snapshot are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Remove app objects') and immediately enumerates the three concrete actions, which pins down the scope far better than the title alone. It is clearly distinguishable from app_read/app_write and from the other domain delete tools by virtue of the application-level action list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes multi-step work to batch_run ('Calls known in advance ... ONE batch_run') and explains the two-phase plan/confirm flow needed to actually apply a deletion. It does not say when to prefer app_write or describe_action instead, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_readApp (read)A
Read-onlyIdempotent

Read app state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_app_info(): Product, version, edition, current page and keyframe mode.

  • list_presets(kind*): List layout, keyboard, user-preferences, burn-in or Fairlight presets.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so 'no side effects' is largely redundant; the real added value is the per-action disclosure of what each call returns (product/version/edition/current page/keyframe mode; the five preset kinds). No permission or rate-limit context, but the operation is a safe read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One framing sentence followed by a tight bulleted action list; the scoping statement is front-loaded and the required-marker convention ('* = required') is declared once. No wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-shape explanation is not strictly needed and is partially duplicated here anyway. Both actions are documented with their parameters, and the escape hatch to describe_action covers the additionalProperties:true nested object, so an agent has enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but the schema only documents the action enum; the `kind` parameter and its allowed values (layout, keyboard, user-preferences, burn-in, Fairlight) exist only in the description, which compensates substantively. Remaining per-action params are deferred to describe_action, which is acceptable but not fully self-contained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Read app state') and enumerates both supported actions (get_app_info, list_presets) with their outputs. It is clearly separable from app_write/app_delete by the read framing, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'use it to find ids and check results' gives concrete intent-based guidance rather than a bare restatement. It doesn't state when *not* to use it or point to a specific alternative tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_writeApp (write)A
Destructive

Change app state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • export_preset(kind*, name*, path*): Export a layout, keyboard, user-preferences or burn-in preset to a file.

  • import_preset(kind*, path*, name): Import a layout, keyboard, user-preferences or burn-in preset file.

  • load_preset(kind*, name*): Load a layout, keyboard or user-preferences preset.

  • open_page(page*): Switch Resolve to a page (media, cut, edit, fusion, color, fairlight, deliver).

  • save_preset(kind*, name*): Save the current layout or user preferences as a named preset.

  • set_high_priority(enabled*): Raise or restore the Resolve process priority (needs a real bool on 21.1).

  • set_keyframe_mode(mode*): Set the keyframe mode (all, color or sizing).

  • update_preset(kind*, name*): Overwrite a layout preset with the current window layout. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is known. The description adds real value beyond that: the read-back verification contract (receipt.verified=false means the change did not take) and the overwrite warning tell the agent how to detect failure and what risk it is taking, though it does not say exactly which state can be clobbered per action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences establish scope, risk and the verification contract, then a tight one-line-per-action list carries the detail. Every line is load-bearing; nothing repeats the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape need not be explained, and annotations cover safety. Given that, the description supplies everything else an agent needs: action inventory, per-action parameters, failure detection, and the batch_run escape hatch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only enumerates action names inside a free-form nested object with additionalProperties; the description supplies the missing per-action contract, marking required vs optional parameters and giving accepted values (preset kinds, pages, keyframe modes). It converts a 100%-covered-but-uninformative schema into usable parameter semantics, well above the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change app state') and then enumerates all eight concrete actions with one-line meanings, so an agent knows exactly what surface this tool covers. It also distinguishes itself from batch_run for multi-call sequences, separating it from the most likely sibling confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes batched/known-in-advance sequences to batch_run, which is a clear alternative-selection rule. However, it gives no guidance on when to prefer dry_run or snapshot, nor when to consult describe_action versus the inline parameter list, leaving some operational choices to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audio_readAudio (read)A
Read-onlyIdempotent

Read audio state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • analyze_loudness(path, clip): Measure integrated LUFS, true peak and LRA of a file with ffmpeg (no Resolve needed).

  • detect_silence(path, clip, noise_db, min_duration_s): Find silent intervals of a file with ffmpeg silencedetect (no Resolve needed).

  • get_audio_mapping(clip, item): Read the audio mapping of a clip or the source channel mapping of an item.

  • get_audio_properties(item*): Read audio properties of a timeline item (volume, pan, voice isolation, leveler).

  • get_voice_isolation(item, track): Read voice isolation state of a timeline item or audio track.

  • list_fairlight_presets(): List Fairlight preset names.

  • list_normalize_modes(): List valid normalizationMode names for normalize_audio_level.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description's main added value is operational: analyze_loudness and detect_silence are flagged as running via ffmpeg 'no Resolve needed', while other actions implicitly require a Resolve session. That is real context beyond structured fields; what's missing is any note on error behavior or cost for the ffmpeg actions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by a tight, scannable action list where every bullet earns its place. The only redundancy is 'no side effects', which restates readOnlyHint, and the initial phrase is slightly compressed ('audio state').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and return values need not be explained, this description covers the action surface, per-action params, required markers, and environment requirements. An agent could select and invoke any of the seven actions from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only enumerates action names and defers params to 'additionalProperties'; the description fills that hole by listing each action's parameter names and marking required ones (item*, analyze_loudness(path, clip)). This is exactly the value the shallow schema cannot carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Read audio state') and immediately enumerates all seven concrete actions with their inputs, so an agent knows exactly what the tool covers. The sibling contrast with audio_write is clear from the read/write naming plus 'no side effects'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'use it to find ids and check results' gives a concrete use context, and per-action notes mark which ones work without Resolve. It never explicitly routes mutations to audio_write or other siblings, so the when-not guidance is only implied by the read-only framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audio_writeAudio (write)
Destructive

Change audio state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • apply_fairlight_preset(name*): Apply a Fairlight preset to the current timeline.

  • normalize_audio_level(items*, options): Normalize the audio level of timeline items (21.1, Studio).

  • normalize_file(path, clip, target_lufs, true_peak_dbtp, lra, sample_rate, output, import_to_pool): Two-pass loudnorm of a file into a new file (job); optional Media Pool import. [job]

  • set_audio_mapping(clip, item, mapping*): Write the audio mapping of a clip, or the source channel mapping of an item (21.1).

  • set_audio_properties(item*, properties*): Set audio properties of a timeline item (volume, pan, voice isolation, leveler).

  • set_voice_isolation(item, track, enabled*, amount): Enable/disable voice isolation on an item or audio track (active timeline only). Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo
batch_runBatch RunA
Destructive

Run several domain-tool calls in ONE call, in order, server-side.

Prefer it whenever the next calls are known: e.g. set metadata and color on four clips, add markers, rename tracks. Each step is {tool, op} exactly as you would call that tool, and is validated, verified and audited the same way. A step's op may read an earlier step's output with a template: "{{ steps..receipt.result.id }}" (writes), "{{ steps..result... }}" (reads), [n] and [*] supported. Stops at the first failed or unverified step; every outcome is reported. With *_delete steps the first call returns a plan + confirm_token for the whole batch.

NameRequiredDescriptionDefault
stepsYesSteps, in order.
dry_runNoPlan only.
verboseNoFull receipts for every step.
confirm_tokenNoWhen it contains *_delete steps: token from the plan.

Output Schema

NameRequiredDescription
planNo
stepsNo
recipeYes
statusYes
outputsNo
duration_msNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond destructiveHint=true: execution is ordered, halts at the first failed or unverified step, all outcomes are reported, and each step is validated/verified/audited like a direct call. The *_delete two-phase plan + confirm_token flow is exactly the kind of consequence disclosure the destructive annotation alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line definition, then progressively more specific detail; almost no waste. It is dense — the template-syntax parenthetical is the least readable sentence — but every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values are covered by the output schema, and the description handles ordering, failure semantics, limits, and the confirm flow. The remaining meaningful gap is whether a mid-batch failure rolls back earlier successful steps or leaves them applied — critical context for a destructiveHint tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so 3 is the floor; the description earns more by explaining what the schema cannot — that a step's `op` is templated from earlier output, the two template roots for writes vs reads (`receipt.result.id` vs `result...`), and that [n]/[*] indexing works. Expected behaviour of dry_run and confirm_token is also implied. Minor gap: `wait` and `snapshot` are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — batch execution of several domain-tool calls — with the distinguishing scope 'in ONE call, in order, server-side'. That immediately separates it from every single-domain sibling like media_write or timeline_write.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear routing rule ('prefer it whenever the next calls are known') plus three concrete instance examples (metadata+color on four clips, add markers, rename tracks), and the deletion path is called out separately. It never names a sibling alternative (recipe_run, or the individual tools) or states an explicit 'do not use when', so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_deleteCode (destructive)A
Destructive

Remove code objects. op.action (params; * = required):

  • run_lua(code*): Run Lua through Fusion.Execute (off by default).

  • run_python(code*): Run Python with resolve/project/fusion globals; set result (off by default). First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is known. The description still adds real value beyond that: both actions are 'off by default' (a capability may be unavailable entirely) and the plan + confirm_token handshake is the only way the operation actually applies, which the annotations say nothing about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: purpose sentence, then a scannable bullet list of actions, then workflow and batching notes. The only waste is the first line, which costs accuracy rather than length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, nested-object tool, the description covers the actions, the confirmation workflow, the batch alternative and the disabled-by-default state; an output schema exists so return values need not be explained. Nothing material an agent needs before invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the top-level params (dry_run, snapshot, confirm_token) are already documented. The description nonetheless supplies the action-level parameter contract — the required code* argument and the resolve/project/fusion globals plus `result` for run_python — which the schema cannot express because op is an open object that explicitly defers to the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence says 'Remove code objects,' which reads as a deletion of code artifacts, but the only two actions exposed (run_lua, run_python) actually execute arbitrary code inside the host application. The action list is specific, yet the headline verb points an agent in a different direction than the enum, so the tool is not instantly distinguishable from siblings like fusion_write.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one explicit routing rule — 'Calls known in advance (a sequence, the same change on several items): ONE batch_run' — and describes the required two-step invocation pattern (first call for plan/token, repeat to apply). It does not, however, say when run_lua should be preferred over run_python or over a typed sibling such as fusion_write.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

color_deleteColor (destructive)A
Destructive

Remove color objects. op.action (params; * = required):

  • copy_grades(source*, targets*): Copy the current grade of one clip onto many (overwrites target grades).

  • delete_color_group(name*): Delete a color group; its clips become ungrouped.

  • delete_version(item*, name*, version_type): Delete a named color version of a clip.

  • reset_all_grades(target): Reset all grades of a clip, group or timeline graph. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, so the safety bar is lower, yet the description still adds real behavior: the first call returns a plan plus confirm_token and must be repeated to apply, and per-action consequences are disclosed (target grades overwritten, group clips become ungrouped). It does not mention permissions or irreversibility beyond the token gate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The front-loaded sentence and bulleted action list are efficient and scannable, but the confirm_token/batch_run guidance sits after the bullets rather than up front, and the trailing 'describe_action' reference partially duplicates the params already listed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-action, nested-payload tool, the description covers actions, per-action required params, the plan/confirm workflow, and the batch alternative; dry_run/snapshot semantics and the return shape are handled by the schema and output schema. A mention of snapshot recommendation for irreversible reset_all_grades would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% giving a baseline of 3, but the description goes further by naming the required params per action (source*/targets*, name*, item*/name*, target) inside an `op` object that permits additionalProperties. This meaningfully fills in the nested payload the schema only gestures at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and resource ('color objects') and enumerates the four destructive operations, so an agent knows this is the deletion counterpart to color_read/color_write. It never explicitly says 'use color_write for non-destructive changes', but the action list makes scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes bulk/known-in-advance sequences to batch_run instead of repeated calls, and the confirm_token instruction defines the two-step invocation. There is no explicit statement of when to prefer color_write over color_delete, but the destructive framing covers the main selection decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

color_readColor (read)A
Read-onlyIdempotent

Read color state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_node_graph(target): Read node count, labels, tools, LUT and cache mode of a clip, group or timeline graph.

  • list_color_groups(): List the color groups of the project with their clips in a timeline.

  • list_versions(item*): List the local and remote color versions of a clip and the current one.

  • validate_dctl(source, path): Validate DCTL source code (sensitive to formatting: one-line functions can fail).

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the per-action caveats: validate_dctl is 'sensitive to formatting: one-line functions can fail', and list_versions distinguishes local vs remote versions. These are real behavioral notes beyond the annotations, though nothing is said about latency, cost, or error modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in one sentence, then a tight bulleted action list with no filler. Minor deduction for the slightly cryptic header 'op.action (params; * = required)', which requires an extra read to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description only needs to disambiguate the action space, which it does for all four enum values. Small gaps remain, such as list_color_groups mentioning 'in a timeline' without declaring a timeline parameter, and no note on whether remote version listing needs extra auth.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema's op object is a free-form bag with additionalProperties, so the description is doing the real work: it maps each action to its expected parameters (target, item*, source/path) and marks required ones with '*'. Individual parameter meanings (e.g. what 'source' vs 'path' contain in validate_dctl) are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read color state') and immediately enumerates the four concrete actions it performs, so an agent knows exactly which sub-operations are reachable. The sibling set splits read/write/delete by suffix, and the 'no side effects' framing cleanly separates it from color_write and color_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the two intended use cases: 'find ids and check results', which is actionable guidance for an agent. It does not name color_write as the alternative for mutations or state any exclusion, so it falls short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

color_writeColor (write)A
Destructive

Change color state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_version(item*, name*, version_type): Add a color version to a clip (Color page; fails from the Edit page).

  • apply_grade_from_drx(target*, path*, grade_mode, apply_to_all_layers, reset_first): Apply a DRX grade to a graph (Color page); replaces the current grade, no new version.

  • assign_to_color_group(group*, items*): Assign clips to an existing color group.

  • create_color_group(name*): Create a color group (the name must be unique).

  • encrypt_dctl(input_path*, output_folder*, name, expiry): Encrypt a DCTL file into an output folder.

  • export_lut(item*, path*, lut_type): Export the grade of a clip as a LUT file (works only from the Color page).

  • load_version(item*, name*, version_type): Make a named color version the active one of a clip.

  • remove_from_color_group(items*): Remove clips from their color group.

  • rename_color_group(name*, new_name*): Rename a color group.

  • rename_version(item*, name*, new_name*, version_type): Rename a color version of a clip.

  • reset_node_colors(item*): Reset the node colors of every node in the active version of a clip.

  • set_cdl(item*, node*, slope, offset, power, saturation): Set CDL slope, offset, power and saturation on a node of a clip.

  • set_node_cache_mode(target*, node*, mode*): Set the render cache mode (auto, enabled, disabled) of a node.

  • set_node_enabled(target*, node*, enabled*): Enable or disable a node of a clip, group or timeline graph.

  • set_node_lut(target*, node*, lut_path*): Set (or clear) a node LUT; files outside the LUT root are installed into it first. Shortcuts (prefer them for whole tasks):

  • workflow_write.apply_look: Apply a LUT to every video item, group them in a color group and grab a still. One call instead of set_node_lut, create_color_group, assign_to_color_group. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the warning about overwriting current values is largely redundant with structured data. The description does add genuinely new behavior: changes are read back from Resolve and receipt.verified=false signals the change did not take, plus set_node_lut installs files outside the LUT root. Useful, but the safety profile comes from annotations rather than the text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: the overwrite caveat and verification semantics come first, then actions, then shortcuts. The per-action enumeration is long but each line is dense and earns its place across 15 actions; a slight cost is that describe_action is also offered as the parameter reference, creating mild duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers a 15-action destructive write tool thoroughly: action inventory, preconditions, verification signal, shortcut alternatives and batching guidance. With an output schema present, no return-value explanation is required, and the receipt.verified note bridges behavior to that output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's op object is an open bag (additionalProperties=true, only 'action' enumerated), so the description is the sole source of per-action parameter names and which are required (marked with *). Without this list the agent could not construct a valid call, making it high-value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Change color state') and then enumerates all 15 actions with concrete objects (versions, grades, groups, nodes, LUTs). This clearly separates it from color_read and color_delete and lets an agent match an intent to an action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: whole-task work should go to workflow_write.apply_look, pre-known sequences or repeated changes to batch_run, and describe_action is named as the parameter reference. It also states preconditions that select/deselect actions (add_version and export_lut 'fail from the Edit page').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_actionDescribe ActionA
Read-onlyIdempotent

Parameter schemas (compact) of one or several actions, with their flags.

With only tool, lists that tool's actions and their signatures.

NameRequiredDescriptionDefault
toolNoTool name, e.g. 'timeline_write'.
actionNoop.action, e.g. 'append_clips'.
actionsNoSeveral at once, as 'tool.action' (e.g. ['color_write.set_cdl', 'gallery_write.grab_still']): one call instead of one per action.
with_resultNoAlso return result schemas.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, closed-world behavior. The description adds useful context about the returned data: compact parameter schemas, action flags, and the tool-only listing behavior. It leaves 'flags' undefined, but the added context is meaningful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no filler. The core function is front-loaded, followed immediately by the tool-only listing behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only introspection tool with full schema descriptions and annotations, the description covers the essential behavior and output nature. It is nearly complete, though it could briefly clarify what 'flags' means and whether `with_result` changes the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters in detail. The description still adds semantic value by explaining the special behavior when only `tool` is supplied. It does not further clarify precedence among `action`, `actions`, and `with_result`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and operation: it returns compact parameter schemas for one or several actions, including their flags. It also clarifies the tool-only listing mode. It does not explicitly distinguish itself from execution-oriented sibling tools, but the introspection purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies discovery usage by explaining that providing only `tool` lists that tool's actions and signatures. However, it does not say when to use this instead of `search_api` or before invoking an action tool, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fusion_deleteFusion (destructive)A
Destructive

Remove fusion objects. op.action (params; * = required):

  • clear_keyframes(item*, comp, tool*, input*): Remove the animation of an input, keeping its value at the current time.

  • delete_comp(item*, name*): Delete a named Fusion composition from a timeline item.

  • delete_tools(item*, comp, tools*): Delete tools from a comp (one undo step).

  • install_fuse(filename*, source*, directory): Install a .fuse (Lua run by Resolve): needs code execution enabled + confirmation. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, but the description adds real context beyond them: the two-phase plan/confirm_token flow needed to actually apply a change, that delete_tools is a single undo step, that clear_keyframes preserves the current value, and that install_fuse executes Lua requiring code execution to be enabled. It stops short of stating irreversibility guarantees beyond snapshot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then a compact per-action parameter ledger, then the confirm-flow and batch_run rules. Telegraphic notation is dense but every line carries information an agent needs to construct a call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return format need not be described, and dry_run/snapshot/confirm_token semantics are covered. Minor gap: it does not say how dry_run interacts with the confirm_token loop or what happens if snapshot is omitted under server policy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the four top-level fields, and the nested op object is deliberately opaque in schema (additionalProperties with a pointer to the description), so the per-action parameter list with asterisk-marked required args is genuine added meaning. Above the baseline 3 because the description carries the enum-to-params mapping the schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Remove fusion objects") and enumerates the four concrete actions with their required parameters, so an agent knows exactly what the tool can do. It does not explicitly contrast with fusion_write/fusion_read siblings, but listing delete-style operations makes the scope readable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives actionable routing: use ONE batch_run when calls are known in advance, and consult describe_action for per-action params. It also flags the install_fuse precondition (code execution enabled + confirmation). No explicit when-not-this-tool guidance against fusion_write, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fusion_readFusion (read)A
Read-onlyIdempotent

Read fusion state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • comp_info(item*, comp, include_connections): Flow structure of a comp: tools, connections, selection, time range, undo stack.

  • list_comps(item*): List the Fusion compositions attached to a timeline item.

  • list_fuses(directory, limit): List installed .fuse files in the user Fuses folder.

  • registry_types(query, limit, offset): Search the ~1300 registered Fusion tool/modifier ids (Fusion.GetRegSummary), paginated.

  • tool_inputs(item*, comp, tool*, names, time, include_keyframes, limit, offset): Inputs of a tool: ids, data types, values at a time, animation, keyframes (paginated).

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real behavior detail beyond them — comp_info returns undo stack and selection, tool_inputs resolves values at a time and paginates keyframes, registry_types searches ~1300 ids with limit/offset. It does not mention pagination defaults, result caps, or whether a live Resolve instance is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one sentence, followed by a compact bulleted action list with a shared legend for required markers. Every line carries a distinct action; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and all five enum actions are covered with their parameters. The remaining gap is domain linkage: it never explains what "item" vs "comp" mean or how to obtain an item id before calling comp_info/tool_inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The top-level schema is deliberately generic (additionalProperties: true, "see the description or this server's describe_action tool"), so the description is the only place the real per-action parameters appear — and it lists them for all five actions with a "* = required" legend. This is genuine semantic content the schema does not provide, not repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ("Read fusion state, no side effects") and states the intended outcome ("find ids and check results"). The five enumerated actions each name a concrete resource (comp structure, compositions, .fuse files, registry ids, tool inputs), so the tool is clearly separable from fusion_write and fusion_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"use it to find ids and check results" plus "no side effects" tells the agent the situation this tool fits and implicitly contrasts with the write/delete siblings. It never names fusion_write, fusion_delete, or describe_action as the alternative for mutating or for deeper parameter lookup, so the routing is clear but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fusion_writeFusion (write)A
Destructive

Change fusion state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_comp(item*): Add an empty Fusion composition to a timeline item.

  • add_tool(item*, comp, tool_id*, name, x, y): Add a tool to a comp by registry id, with optional name and flow position.

  • connect(item*, comp, tool*, input*, source_tool*, source_output): Connect a tool input to the output of another tool.

  • create_text_title(item*, text*, comp, name, font, style, size, color, +2 more): Create a Text+ tool with text, font, size and color (connect it to MediaOut to render).

  • disconnect(item*, comp, tool*, input*): Disconnect a tool input (one undo step; undo restores the link).

  • export_comp(item*, comp, path*): Export a Fusion composition of an item to a new .comp file.

  • import_comp(item*, path*): Import a .comp file as a new Fusion composition of a timeline item.

  • load_comp(item*, name*): Make a named Fusion composition the active one of a timeline item.

  • load_tool_settings(item*, comp, tool*, path*): Load a .setting file onto an existing tool (replaces its parameters).

  • paste_settings(item*, comp, text*): Paste a Fusion .setting snippet (text) into a comp; reports the tools it created.

  • rename_comp(item*, old_name*, new_name*): Rename a Fusion composition of a timeline item.

  • rename_tool(item*, comp, tool*, new_name*): Rename a tool of a comp (expressions referring to the old name keep working in Fusion).

  • save_tool_settings(item*, comp, tool*, path*, overwrite): Save a tool (or Group, as a macro) to a new .setting file.

  • set_expression(item*, comp, tool*, input*, expression*): Set (or clear, with an empty string) the expression of a tool input.

  • set_inputs(item*, comp, sets*): Set many tool inputs in one undo step (the comp is not locked: renders need it).

  • set_keyframes(item*, comp, tool*, input*, keys*): Animate an input: add a BezierSpline when needed, then key each (time, value).

  • set_tool_enabled(item*, comp, tool*, enabled*): Enable a tool or set it to pass-through (TOOLB_PassThrough). Shortcuts (prefer them for whole tasks):

  • workflow_write.title_overlay: Add an animated Text+ title (and Merge over the clip) to a timeline item's Fusion comp. One call instead of create_text_title, add_tool, connect, set_inputs, set_keyframes. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent, but the description adds genuinely new behavior: every change is read back and receipt.verified=false signals the change did not take, disconnect is one undo step with undo restoring the link, load_tool_settings replaces existing parameters, set_inputs runs in one undo step because the comp is not locked, and rename_tool preserves expressions referencing the old name. These are non-obvious side effects and reversibility facts an agent could not get from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The highest-value content — the overwrite warning and the read-back verification rule — is front-loaded in the first sentence, followed by a scannable one-line-per-action catalog and a separate shortcuts section. The length is justified because the schema does not enumerate action parameters, so every line carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the description still flags the key return signal (receipt.verified=false), so return-value explanation is not required. Between the action catalog, the risk warning, the undo semantics, and the shortcut/batch routing, an agent has everything needed to call this destructive multi-action tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's op object is only {action, additionalProperties:true}, so the description carries nearly all parameter knowledge and does so per action, marking required params with '*' and adding meaning where types alone would not suffice (empty expression string clears, keys are (time, value) pairs, sets batches many inputs). The lone weakness is create_text_title's '+2 more', which hides two params, but describe_action is named as the escape hatch.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+risk statement ('Change fusion state; may overwrite current values') and then enumerates all 17 supported actions with their scope, so an agent knows exactly what class of mutation this tool performs. It is unambiguously distinct from fusion_read, fusion_delete, and workflow_write.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes whole-task work to the workflow_write.title_overlay shortcut ('One call instead of create_text_title, add_tool, connect, set_inputs, set_keyframes') and multi-step/repeated work to batch_run ('ONE batch_run'). It also points at describe_action as a fallback, so the agent has a decision path for both simple and compound cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interchange_readInterchange (read)A
Read-onlyIdempotent

Read interchange state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • read_cube_lut(path*): Read a .cube header: title, dimension, size, domain and entry count.

  • read_edl(path*): Parse a CMX3600 EDL into events.

  • read_fcpxml(path*): Parse an FCPXML file: assets, clips and markers.

  • read_marker_csv(path*): Read a marker CSV (header names are matched leniently).

  • read_otio(path*): Parse an OpenTimelineIO JSON file: tracks, clips, gaps and markers.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'no side effects' adds little. The description earns credit elsewhere by disclosing what each parse yields (events, assets/clips/markers, tracks/gaps/markers) and the non-obvious trait that read_marker_csv matches header names leniently. It stays silent on failure behavior for malformed or missing files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded line establishes purpose and safety, followed by a compact action list where every bullet adds a distinct parse target. No filler sentences and no repetition of schema detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description rightly omits return-value documentation and focuses on action selection, which is the real complexity here (one nested op object dispatching to five behaviors). Remaining gaps are error and path-resolution semantics, which matter for a file-parsing tool but are secondary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema is 100% described but only at the wrapper level ('{action, ...params}') and explicitly defers to the description or describe_action, so the description is what actually documents that each action takes a single required path*. That per-action required-param listing is real added value. It does not explain what a path is relative to, or any format constraints on it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (read/parse interchange files) and then enumerates all five actions with concrete objects: .cube header, CMX3600 EDL, FCPXML, marker CSV, OTIO JSON. An agent knows exactly what it is invoking. It never names interchange_write, so the read/write split is only implied by 'no side effects' rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'use it to find ids and check results' gives one concrete use case, which orients an agent toward inspection workflows. There is no when-not guidance, no exclusion for large or malformed files, and no explicit routing to the sibling interchange_write or to describe_action for richer param help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interchange_writeInterchange (write)A
Destructive

Change interchange state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • write_cube_lut(path*, title, dim, size, domain_min, domain_max, values, transform, +2 more): Write a 1D/3D .cube LUT from explicit values or a declarative grade transform.

  • write_edl(path*, title, fps, drop_frame, events*, overwrite): Write a CMX3600 EDL from a structured event list (fps / drop-frame aware).

  • write_fcpxml(path*, items*, name, fps, drop_frame, width, height, start_timecode, +2 more): Write a minimal FCPXML 1.10 (assets, spine of clips / gaps / titles, markers).

  • write_marker_csv(path*, fps, drop_frame, markers*, overwrite): Write markers to a CSV (#, Timecode, Name, Color, Duration, Notes).

  • write_otio(path*, name, fps, start_timecode, drop_frame, tracks*, markers, overwrite): Write an OpenTimelineIO JSON timeline (tracks of clips / gaps, external refs). Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructive=true, non-idempotent, non-readOnly, and the description confirms and enriches that: values may be overwritten, and every change is read back from Resolve with receipt.verified=false signalling a change that did not take. That read-back verification contract is real information not present in the annotations. Minor gap: it does not describe what the snapshot policy means in practice or which failures leave partial state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The behavioral warning is front-loaded in the first sentence, and the per-action bullets are dense but load-bearing. The '+2 more' shorthand saves space at the cost of completeness, which is the only inefficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-way dispatcher with a nested, open op object, the description supplies the action roster, per-action parameters, overwrite semantics, verification semantics, and the batch_run alternative; an output schema exists so return-shape explanation is correctly omitted. The truncated parameter lists and undefined snapshot policy are the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the three top-level parameters, and the schema itself gives no meaning to the action-specific keys inside the free-form op object; the description compensates by listing the parameters per action (path*, fps, events*, overwrite, etc.), which is genuine added value. However, the '+2 more' ellipses leave those parameters documented nowhere in the description, deferring to describe_action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific effect ('Change interchange state; may overwrite current values') and then enumerates the five concrete write actions (write_cube_lut, write_edl, write_fcpxml, write_marker_csv, write_otio), which makes the resource scoped and distinguishable from interchange_read. The umbrella term 'interchange state' is somewhat abstract, but the action list removes the ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent away from this tool when calls are known in advance and repeat over a sequence ('ONE batch_run'), and points at describe_action in the schema for per-action parameter detail. It stops short of stating when to prefer dry_run or snapshot, or when interchange_read is the right alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_deleteItem (destructive)A
Destructive

Remove item objects. op.action (params; * = required):

  • delete_item_markers(item*, frame, color, custom_data): Delete item markers by frame, by color ('All' allowed) or by custom data.

  • delete_take(item*, index*): Delete a take by 1-based index. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, but the description adds the crucial non-obvious behavior: the first call only returns a plan and confirm_token, and the call must be repeated with the token to actually apply. That is real context beyond the structured fields; it could still say more about reversibility/snapshot policy defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and action list, then the invocation sequence, then the batching hint — every line earns its place. The telegram-style abbreviation ('item*', bare param lists) is terse but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, nested-schema tool this covers the essentials: destructive nature (via annotations), the plan/confirm flow, dry_run and snapshot (documented in schema), and where to route batches. An output schema exists so return values need no explanation; only snapshot server-policy defaults and irreversibility go unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's `op` object is a free-form additionalProperties bag with only the action enum, so the description carries the per-action parameter contract: required markers on item/frame, 'All' as a valid color value, and the 1-based index for delete_take. Without this text the parameters would be unusable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') plus the resource ('item objects') and enumerates exactly the two sub-actions (delete_item_markers, delete_take), so an agent can tell this apart from sibling deleters like media_delete or timeline_delete. It does not explicitly contrast with item_write, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete routing guidance: use ONE batch_run when the calls are known in advance / the same change applies to several items, and documents the two-phase plan+confirm_token invocation pattern. It stops short of saying when to prefer this over item_write or a full timeline_delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_readItem (read)A
Read-onlyIdempotent

Read item state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_fades(item*): Read fade-in / fade-out durations (frames).

  • get_item(item*): Full details of a timeline item (timing, source range, track, flags, links).

  • get_output_blanking(item*): Read the output blanking of an item and whether the timeline one is used.

  • get_properties(item*): Read all item properties (transform, crop, composite, retime, audio...).

  • get_speed(item*): Read clip speed options (Percentage, PitchCorrection...).

  • get_takes(item*): List the takes of an item (count, selected index, take info).

  • list_item_markers(item*): List the markers attached to a timeline item.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description adds value by disclosing the return shape per action (timing, source range, track, flags, links; take count and selected index; whether the timeline blanking is used). It does not cover pagination or error behavior, but for a read-only tool this is well above the annotation bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One purpose sentence up front, then a scannable action list with a legend for the '*' required marker. No filler; every line carries an action name, its parameter, and its return content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a nested polymorphic input, annotations covering safety, and an existing output schema, the description supplies the missing piece (action catalog with per-action params and return hints) and routes the agent to describe_action for deeper detail. Nothing needed to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema is a generic nested object with additionalProperties and only names the enum values, so the description is the sole source of action-level parameter semantics — and it delivers, marking `item` as required per action and explaining what each action reads. This is exactly the compensation the schema needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and a scope constraint ('Read item state, no side effects'), then enumerates every supported action. An agent can distinguish this from item_write / item_delete purely from the description, and each action name is paired with what it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a light use case ('use it to find ids and check results') and points to describe_action for per-action parameters, but never states when not to use it or how it relates to siblings like timeline_read, media_read, or item_write. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_writeItem (write)A
Destructive

Change item state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_flag(items*, color*): Add a colored flag to items.

  • add_item_marker(item*, frame*, color, name, note, duration, custom_data): Add a marker on a timeline item.

  • add_take(item*, clip*, start_frame, end_frame): Add a Media Pool clip as a new take (creates the take selector if needed).

  • add_transition(item*, options*): Add a transition at the start or end of an item (needs source handles).

  • clear_flags(items*, color): Clear flags of one color, or all flags, on items.

  • copy_properties(source*, targets*, keys): Copy properties from one item to many (timeline snapshot taken first).

  • finalize_takes(item*): Finalize the take selection (the selected take replaces the selector).

  • flatten_multicam(item*, grade): Flatten a multicam item into its active angle (timeline snapshot taken first).

  • select_take(item*, index*): Select a take by 1-based index.

  • set_clip_color(items*, color): Set the clip color on items, or clear it when no color is given.

  • set_enabled(items*, enabled*): Enable or disable clips.

  • set_fades(items*, fades*): Set fade-in / fade-out durations (frames) on one or many items.

  • set_name(item*, name*): Rename a timeline item.

  • set_output_blanking(item*, blanking*): Set per-item output blanking in pixels (Top/Bottom/Left/Right).

  • set_properties(items*, properties*): Set properties on one or many items; each key is read back per item.

  • set_speed(items*, speed*): Set clip speed (Percentage, PitchCorrection...) on one or many items.

  • set_use_timeline_blanking(item*, use_timeline*): Choose between the timeline output blanking and the item's own.

  • smart_switch(item*, settings): Run Multicam Smart Switch on a multicam item (synchronous, may take minutes).

  • stabilize(items*): Run the stabilizer on items (can be slow; no read-back exists).

  • update_marker_custom_data(item*, frame*, custom_data*): Update the custom data string of an item marker. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the read-back/verification contract ("receipt.verified=false means it did not take"), which actions take a timeline snapshot first, that stabilize has no read-back and can be slow, and that smart_switch is synchronous and may take minutes. These are exactly the operational traits an agent needs before committing a destructive write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the risk statement, then a scannable one-line-per-action list, then the batching rule. Given 20 actions encoded in a single free-form object, the length is earned rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, and the description still adds the one return-value fact that matters (receipt.verified). Combined with dry_run/snapshot semantics implied by the per-action notes, an agent has everything needed to call any of the 20 actions correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is technically 100%, but the nested op object is additionalProperties:true and explicitly defers to the description for per-action params. The description supplies that: every action's required (starred) and optional parameters, plus semantics like 1-based take index and frames units for fades.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Change item state") and immediately qualifies it with the risk ("may overwrite current values"). The enumerated op.action list makes it unambiguous that this is the mutation counterpart to item_read/item_delete, and an agent can pick the right action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing for the multi-change case ("Calls known in advance ... ONE batch_run") and per-action prerequisites such as add_transition needing source handles and add_take creating the take selector if needed. It does not explicitly contrast itself with item_read or timeline_write, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

job_cancelJob CancelA
Destructive

Stop a running job and return its state ("cancelled").

A job whose operation cannot be interrupted returns WRONG_STATE and keeps running; a finished job is returned unchanged. Check it first with job_status if unsure.

NameRequiredDescriptionDefault
job_idYesId from a write that returned status='started' (or job_list).

Output Schema

NameRequiredDescription
idYes
kindYes
errorNo
labelYes
stateYes
resultNo
progressNo
started_atYes
finished_atNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the structural hint of being destructive, the description provides complex behavioral logic: it specifies that operations that cannot be interrupted will return WRONG_STATE, and that already finished jobs will not change state. This level of operational detail is not in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed, which is necessary given the complexity of the tool's behavior. While slightly verbose, every sentence serves to clarify a specific state transition or dependency and is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all critical operational context, including pre-conditions (check status first), success paths, and various defined failure/limitation paths (unchanged, WRONG_STATE). It is complete without needing an explicit output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While schema coverage is 100%, the description adds vital semantic context for the 'job_id' by specifying that it must originate from a prior successful 'write' or a 'job_list' call, which is crucial for agent lifecycle management.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The purpose is stated clearly using a specific verb ('Stop') applied to a specific resource ('a running job'). It immediately distinguishes itself from siblings like job_status by defining it as a destructive action (cancel).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance by advising the user to check job_status first if they are unsure about the job's current state. It also covers failure cases, noting that finished jobs will be returned unchanged and non-interruptible jobs will return WRONG_STATE.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

job_listJob ListA
Read-onlyIdempotent

Every job this server started, running and finished, with its state.

Use it to recover a job_id; job_status gives one job's details.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
jobsYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe, idempotent, closed-world read. The description adds useful behavioral scope by saying the list covers all jobs this server started, including running and finished jobs, with their state. It does not mention ordering or retention limits, but the annotations and output schema carry much of the remaining burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, both front-loaded and purposeful. The first defines the result set; the second gives routing guidance. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with an output schema and read-only annotations, the description is complete enough. It explains what the list contains and how it differs from job_status, so an agent has what it needs to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to clarify. The baseline for a parameterless tool is 4, and the description does not introduce any misleading parameter expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: every job this server started, both running and finished, with state. It also explicitly distinguishes the tool from job_status, so an agent can identify its purpose without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool to recover a job_id and names job_status as the alternative for one job's details. That gives clear routing guidance between closely related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

job_statusJob StatusA
Read-onlyIdempotent

State and progress of a long-running job (render, transcription...), right now.

Returns at once; use job_wait instead to block until it finishes.

NameRequiredDescriptionDefault
job_idYesId from a write that returned status='started' (or job_list).

Output Schema

NameRequiredDescription
idYes
kindYes
errorNo
labelYes
stateYes
resultNo
progressNo
started_atYes
finished_atNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so safety is covered. The description adds important non-annotated behavior: it returns at once rather than blocking, and job_wait is the blocking alternative. It does not add further details about progress granularity, but the output schema exists to cover return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with purpose and immediately followed by the key behavioral constraint and alternative. There is no redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status-check tool with full schema coverage, annotations covering safety, and a separate output schema, the description supplies exactly the missing context: current state/progress and non-blocking behavior. Nothing needed to select or invoke it correctly appears to be absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single job_id parameter is already described in the schema, including where the id comes from. The description adds no further parameter semantics, which is acceptable at baseline 3 when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and action: the current state and progress of a long-running job, with concrete examples (render, transcription). It also contrasts itself with the blocking sibling job_wait, so an agent can distinguish its role immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use job_wait instead when blocking until completion is desired. That is a clear when-to-use/when-not-to-use rule tied to a named alternative, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

job_waitJob WaitA
Read-onlyIdempotent

Block until a job finishes, then return its final state and result.

If timeout_s elapses first, returns it still running: call again to keep waiting.

NameRequiredDescriptionDefault
job_idYesId from a write that returned status='started' (or job_list).
timeout_sNoSeconds to wait.

Output Schema

NameRequiredDescription
idYes
kindYes
errorNo
labelYes
stateYes
resultNo
progressNo
started_atYes
finished_atNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: the call blocks, returns final state and result on completion, and returns a still-running state if timeout_s elapses. This is important operational context. It does not cover failure cases or cancellation behavior, but the annotations already establish the safe read-only profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core blocking behavior and followed by the timeout fallback. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and annotations, the description covers the essential call behavior: blocking, timeout handling, and repeat invocation. It could say more about failure or cancellation outcomes, but the core semantics an agent needs are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents job_id and timeout_s. The description adds useful timeout-outcome semantics ('returns it still running'), but it does not add further meaning to job_id beyond the schema's origin note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Block until a job finishes' and return its final state and result. It distinguishes the blocking wait behavior from ordinary status checks implicitly, but does not explicitly name the sibling alternative job_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the timeout loop ('call again to keep waiting'), which implies how to use the tool across multiple calls. However, it does not explicitly say when to use job_wait instead of job_status, job_list, or job_cancel, so the alternative-selection guidance remains implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_deleteMedia (destructive)A
Destructive

Remove media objects. op.action (params; * = required):

  • clear_clip_metadata(clip*, keys*, third_party): Blank metadata keys of a clip (values are overwritten with empty strings).

  • delete_clip_markers(clip*, frame, color, custom_data): Delete clip markers by frame, color ('All' allowed) or custom data.

  • delete_clip_mattes(clip*, paths*): Delete mattes of a clip by file path.

  • delete_clips(clips*): Delete clips from the Media Pool.

  • delete_folders(folders*): Delete Media Pool folders (with their content).

  • unlink_clips(clips*): Unlink clips from their media files (they go offline).

  • unlink_proxy_media(clip*): Remove the proxy link of a clip. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the description earns credit for the details annotations cannot carry: clear_clip_metadata overwrites values with empty strings, delete_folders removes folder content, unlink_clips sends media offline. It also implies the plan/confirm two-phase safety model. It does not state irreversibility, permission requirements, or whether the snapshot back-up actually covers media-pool deletions rather than only timeline/project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then a scannable action bullet list with required params marked '*', then the confirm-token rule and the batching escape hatch. Nearly every line is load-bearing for action selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a multi-action destructive dispatcher with a nested schema, an output schema, and full annotation coverage; the description supplies the per-action parameter map the schema omits plus the confirm workflow, which is everything needed to call it correctly. Return-value description is unnecessary given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema leaves op as additionalProperties:true and explicitly defers per-action parameters to the description, so the enumerated action/parameter pairs carry genuine meaning beyond the schema. Minor gap: optional modifiers such as delete_clip_markers' frame/color/custom_data semantics and third_party's effect on metadata are named but not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove media objects') and then enumerates exactly which objects can be removed, so an agent can tell whether its target (clip metadata, markers, mattes, clips, folders, proxy links) is in scope. It does not explicitly contrast with the sibling media_write or item_delete, so the boundary with non-destructive write/delete tools must be inferred from the action list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the two-step execution protocol plainly: the first call returns a plan plus confirm_token, and the same call is repeated with the token to apply. It also names an alternative explicitly ('Calls known in advance ... ONE batch_run'), which routes batch intents to the sibling. Missing any statement of when NOT to use it (e.g. in favor of media_write for non-destructive edits).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_readMedia (read)A
Read-onlyIdempotent

Read media state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • browse_storage(path*, limit, offset): List subfolders and (paginated) files of a Media Storage folder.

  • get_audio_mapping(clip*): Audio mapping of a clip (raw JSON string plus parsed value).

  • get_clip(clip*, keys, all_properties): Full details of one clip: properties, metadata, flags, color, proxy, markers.

  • get_clip_markers(clip*): List the markers of a Media Pool clip.

  • get_clone_status(): Status of the current or most recent clone job.

  • get_selection(): Current Media Pool folder and selected clips.

  • list_clips(folder, recursive, name_contains, type, clip_color, flag, keys, limit, +1 more): List clips of a folder with filters, pagination and selectable properties.

  • list_mattes(clip, folder): List the mattes of a clip, or the timeline mattes of a folder.

  • list_volumes(): List the volumes mounted in Media Storage.

  • media_pool_tree(max_depth): Media Pool folder tree with ids, paths and clip counts.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnly/idempotent/non-destructive, and the description is consistent with them while adding real value: per-action return shapes ("raw JSON string plus parsed value"), pagination on browse_storage, and property selection on get_clip/list_clips. It does not disclose default limits, ordering, or what identifiers look like, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by a tight action-indexed list with no filler. The schema-level guidance is delegated to describe_action, which is efficient; the only blemish is the "+1 more" shorthand that hides a parameter rather than naming it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a polymorphic dispatcher over ten read-only actions, the description covers action selection, per-action scope, and required-vs-optional params, and it points to describe_action for full detail; an output schema exists so return values need no prose. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema is a generic op wrapper whose coverage is nominally 100% but adds no real detail, so the description must carry the parameter burden — and it largely does, listing params per action with '*' marking required ones. The "+1 more" truncation on list_clips and the absence of value formats (path syntax, keys, clip identifier form) leave a genuine hole.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Read media state, no side effects") and then enumerates all ten actions with their exact scope, so an agent knows precisely what is reachable here. The read/write/delete sibling triad makes the boundary obvious without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"use it to find ids and check results" gives concrete selection guidance, which is the classic pre-step for the mutating siblings (media_write, media_delete). It stops short of naming those alternatives or stating when-not to use it, so it is clear but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_writeMedia (write)A
Destructive

Change media state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_clip_marker(clip*, frame*, color, name, note, duration, custom_data): Add a marker to a Media Pool clip at a frame offset.

  • add_clip_mattes(clip*, paths*, stereo_eye): Add matte files to a clip.

  • add_flag(clip*, color*): Add a flag of the given color to a clip.

  • add_timeline_mattes(paths*): Add matte files as timeline mattes in the current folder.

  • auto_sync_audio(clips*, settings): Auto-sync audio of clips (needs at least one video and one audio clip).

  • clear_flags(clip*, color): Clear one flag color, or all flags, of a clip.

  • clear_mark_in_out(clip*, mark_type): Clear the mark in/out of a clip.

  • clone_media(source_dir*, target_dirs*, preserve_folder_name, checksum_type): Clone media with checksum verification (21.1+, long-running job). [job]

  • create_folder(name*, parent, set_current): Create a subfolder in the Media Pool.

  • create_multicam_clip(clips*, options): Create multicam clip(s) from clips (21.1+); options use live constants.

  • create_stereo_clip(left*, right*): Create a stereoscopic 3D clip from a left and a right clip.

  • export_folder_drb(folder*, path*): Export a Media Pool folder as a DRB file.

  • export_metadata(path*, clips): Export clip metadata to a CSV file.

  • import_folder_drb(path*, source_clips_path): Import a DRB folder export into the Media Pool.

  • import_media(items*, folder, via_media_storage): Import files/folders/sequences into the current or a chosen Media Pool folder.

  • link_full_resolution_media(clip*, path*): Link full-resolution media to a proxy-only clip.

  • link_proxy_media(clip*, path*): Link a proxy media file to a clip.

  • monitor_growing_file(clip*): Monitor a clip's file while it keeps growing.

  • move_clips(clips*, target*): Move clips to another Media Pool folder.

  • move_folders(folders*, target*): Move folders into another Media Pool folder.

  • refresh_folders(): Refresh Media Pool folders (collaboration mode).

  • relink_clips(clips*, folder_path*): Relink clips to media found in a folder.

  • replace_clip(clip*, path*, preserve_sub_clip): Replace the underlying media of a clip with another file.

  • reveal_in_storage(path*): Reveal a path in Resolve's Media Storage panel.

  • select_clip(clip*): Select a clip in the Media Pool.

  • set_clip_color(clip*, color): Set a clip color (16 clip colors) or clear it when color is null.

  • set_clip_metadata(clip*, metadata*, third_party): Set clip metadata (or third-party metadata) key/value pairs.

  • set_clip_name(clip*, name*): Rename a clip (MediaPoolItem.SetName).

  • set_clip_properties(clip*, properties*): Set clip properties (key -> value), reading each one back.

  • set_current_folder(folder*): Make a folder the current Media Pool folder.

  • set_mark_in_out(clip*, mark_in*, mark_out*, mark_type): Set the mark in/out of a clip.

  • update_marker_custom_data(clip*, frame*, custom_data*): Update the custom data of a clip marker. Shortcuts (prefer them for whole tasks):

  • workflow_write.conform_from_edl: Import media + EDL as a timeline, fix offline events via Start TC, report linkage. One call instead of import_media, relink_clips. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: warns 'may overwrite current values,' documents the read-back verification contract (receipt.verified=false means the change did not take), tags clone_media as a long-running [job], notes version gates (21.1+), collaboration-mode requirements, and preconditions such as auto_sync_audio needing one video and one audio clip.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the destructive/verification warning in two sentences, then a single-line-per-action catalog, then shortcuts — a sensible ordering. The 32-line enumeration is long but each line is a distinct discriminator branch, so density is justified rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 32-branch destructive dispatcher this is complete: mutation semantics, verification receipt, job-tagged actions, version constraints, dry_run/snapshot safety knobs are in the schema, and an output schema exists so return shape needn't be restated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's op object is additionalProperties:true, so the enum alone cannot convey per-action arguments; the description supplies exactly that, marking required params with '*' for every action. This adds meaning the schema cannot express, despite 100% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Change media state') and then enumerates all 32 actions with per-action parameter shapes, so an agent can identify the exact operation it needs. It is clearly the write counterpart to media_read/media_delete and covers every member of the action enum.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes whole-task work to workflow_write.conform_from_edl ('one call instead of import_media, relink_clips') and known-in-advance sequences to batch_run, which is genuine when-to-use guidance. It lacks explicit 'when not to use' framing versus media_delete/media_read beyond the obvious read/write split.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_deleteProject (destructive)A
Destructive

Remove project objects. op.action (params; * = required):

  • delete_folder(name*): Delete a project folder of the current folder.

  • delete_project(name*): Delete a (non-current) project from the current folder.

  • delete_settings_preset(name*): Delete a project settings preset. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations: the plan + confirm_token two-phase apply, the non-current-project restriction, and that a snapshot can back up the timeline/project first. Annotations already declare destructiveHint=true and idempotentHint=false, so the remaining gaps (permissions, irreversibility of deletion, whether snapshots are recoverable) are smaller but still real.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb phrase, then a compact action table, then the confirmation and batching notes — every line carries information. The telegraphic style ('op.action (params; * = required)') costs a little readability but no sentence is waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, polymorphic tool with an output schema and rich annotations, the description covers the action surface, the two-phase apply workflow, and the batching alternative. It does not say what exactly is lost when a folder or settings preset is deleted, or whether the snapshot default is safe, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely new information the schema cannot express: the per-action required parameter (name*) for each of the three actions, which the op object itself leaves as additionalProperties with only a generic pointer. It also flags the '*' = required convention.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') plus the exact resource set via three enumerated actions (delete_folder, delete_project, delete_settings_preset), with a scope qualifier ('non-current project'). That is far more specific than the title alone, though it never names the sibling it is not (e.g. project_write, timeline_delete, item_delete).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete routing guidance: use ONE batch_run when the calls are known in advance (a sequence, same change on several items), and consult describe_action for per-action params. It also explains the two-step invocation, but stops short of explicit when-not-to-use cases such as preferring project_write for renames.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_readProject (read)A
Read-onlyIdempotent

Read project state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_current_project(): Name, unique id, folder and database of the open project.

  • get_settings(keys): Read project settings (all, or a list of keys).

  • list_databases(): List the databases known to Resolve and the current one.

  • list_projects(): List projects and folders of the current database folder.

  • list_settings_presets(): List project settings presets (name, width, height).

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered; the description reinforces this with 'no side effects' and adds what each action actually surfaces (name, id, folder, database, presets). It says nothing about authentication, permissions, or pagination, which are the remaining behavioral unknowns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then a scannable action list with one line per action and no filler. Every line maps to a distinct enum value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shapes need not be described, and the description still summarizes what each action yields. All five enum values are accounted for, so an agent can pick the right action and call it without consulting another tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema only lists the action enum strings and defers to the description ('see the description or this server's describe_action tool'). The description therefore earns credit by spelling out each action's behavior and noting that get_settings takes an optional keys list. It stops short of defining the key format or value types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Read project state') and immediately enumerates the five concrete actions it exposes, so the agent knows exactly what scope of project data is reachable. The 'read' naming plus the explicit 'no side effects' clause cleanly separates it from the project_write and project_delete siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'use it to find ids and check results' gives a concrete motivating scenario rather than leaving usage implicit. It stops short of naming an alternative tool or stating when-not to use it, but the read/write/delete sibling naming makes the boundary largely self-evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_writeProject (write)A
Destructive

Change project state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • apply_settings_preset(name*): Apply a settings preset to the current project (saved project only).

  • archive_project(name*, path*, with_stills_and_luts, archive_src_media, archive_render_cache, archive_proxy_media, force): Archive a project (broken by script on 21.x; needs force=true).

  • close_project(save_first, discard_untitled): Close the current project (saved first by default).

  • create_folder(name*): Create a project folder in the current database folder.

  • create_project(name*, media_location_path, discard_untitled): Create a project and make it current (saves the current one first).

  • export_project(name*, path*, with_stills_and_luts): Export a project of the current folder to a .drp file.

  • export_settings_preset(name*, path*): Export a project settings preset to a file.

  • goto_folder(to*): Go to the root or the parent project folder.

  • import_project(path*, name): Import a .drp project file into the current folder.

  • import_settings_preset(path*, name): Import a project settings preset file.

  • load_project(name*, discard_untitled): Load a project from the current folder (saves the current one first).

  • open_folder(name*): Enter a sub-folder of the current project folder.

  • rename_project(new_name*): Rename the current project.

  • restore_project(path*, name): Restore a project from an archive (.dra folder) into the current folder.

  • save_project(): Save the current project (refused for 'Untitled Project').

  • save_settings_preset(name*): Save the current project settings as a new preset.

  • set_database(database*, discard_untitled): Switch the current database (DbType, DbName, optional IpAddress).

  • set_settings(settings*): Set project settings one key at a time, verified by read-back.

  • update_settings_preset(name*): Overwrite a settings preset with the current project settings. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint=true annotation, it discloses that changes are read back from Resolve and that receipt.verified=false means the write did not take — a critical behavioral contract. It also surfaces implicit side effects annotations cannot express: current project is saved first, untitled projects are discarded, presets are overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key behavioral warning and the batch_run redirect, and the bulleted action list is scannable — but this is a long wall of text where 19 lines at uniform granularity force the agent to read past many irrelevant actions to find its one. Structure is functional, not lean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Rich coverage: dry_run/snapshot are schema-described, the return contract (read-back verification, receipt.verified) is explained despite an output schema existing, and per-action prerequisites are stated. Missing only that set_database's database param shape (DbType/DbName/IpAddress) is named but not typed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares action as an enum with additionalProperties=true, so the description carries the real parameter burden by listing required (*) and optional params for each action — substantial value beyond the schema. The '*' convention is inferable but never stated explicitly, and types for nested params are not given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope ('Change project state; may overwrite current values') and then enumerates all 19 actions with per-action effects, so the agent knows exactly what class of mutation lives here versus project_read/project_delete. The alternative-route note for batch sequences further sharpens the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes known-in-advance repeated changes to batch_run, and embeds situational qualifiers per action ('saved project only', 'needs force=true' on 21.x, 'refused for Untitled Project'). It stops short of stating general when-not-to-use conditions (e.g., preferring dry_run for exploratory changes), which keeps it off a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recipe_listRecipe ListA
Read-onlyIdempotent

List the recipes recipe_run can execute: name, description, parameters.

Built-in and user recipes, plus any that failed to load. Call it before recipe_run; for an ad-hoc sequence use batch_run instead.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
recipesYes
load_errorsYes

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already state readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds that the result includes built-in recipes, user recipes, and recipes that failed to load, which is useful behavioral context, but it says nothing about pagination, ordering, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and then the routing guidance. Every clause adds information; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument list tool with an output schema and annotations that cover safety, the description provides everything an agent needs: what it lists, what the entries contain, when to call it, and which sibling to use instead for ad-hoc sequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool takes no parameters, so there are no parameter semantics to explain, and the baseline score for zero parameters is 4. The description does not misrepresent any arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (List) and resource (recipes that recipe_run can execute), and it enumerates the returned fields: name, description, and parameters. It also scopes the list to built-in recipes, user recipes, and recipes that failed to load, which lets an agent distinguish it from recipe_run and batch_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage guidance: call this before recipe_run, and use batch_run instead for an ad-hoc sequence. That names the alternative tool and the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recipe_runRecipe RunA
Destructive

Run a recipe server-side: every step is validated, verified and audited.

Stops at the first failed or unverified step and reports each step's outcome. Destructive recipes first return a plan with a confirm_token.

NameRequiredDescriptionDefault
nameYesRecipe name from recipe_list.
paramsNoRecipe parameters.
dry_runNoPlan only.
verboseNoFull receipts for every step.
confirm_tokenNoFor destructive recipes: token from the planned call.

Output Schema

NameRequiredDescription
planNo
stepsNo
recipeYes
statusYes
outputsNo
duration_msNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavior: every step is validated, verified, and audited; execution stops at the first failed or unverified step; outcomes are reported per step; and destructive recipes require a confirm_token from a plan call. This is exactly the kind of behavioral context an agent needs for a potentially destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no wasted wording. It is front-loaded with the core action and then adds execution and destructive-recipe behavior in a logical order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not explain return values. With annotations covering safety hints and 100% schema coverage, the description adds the key behavioral details an agent needs: failure handling, auditing, and the destructive confirmation flow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all five parameters. The description still adds useful meaning for confirm_token by explaining that destructive recipes first return a plan with that token. It does not elaborate on params, dry_run, or verbose, but the schema carries those details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Run a recipe server-side'. It clearly explains that the tool executes recipes and validates, verifies, and audits every step. It does not explicitly distinguish this from close siblings such as batch_run or workflow_write, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by explaining that recipes are run server-side and that destructive recipes return a plan first. However, it does not say when to choose recipe_run over batch_run, workflow_write, or other execution-related siblings. The guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_deleteRender (destructive)A
Destructive

Remove render objects. op.action (params; * = required):

  • delete_all_render_jobs(): Delete every render job in the queue.

  • delete_render_jobs(job_ids*): Delete specific render jobs from the queue.

  • delete_render_preset(name*): Delete a render preset.

  • update_render_preset(name*): Overwrite a render preset with the current render settings (21.1+). First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, but the description adds the non-obvious two-phase plan/confirm safety flow that no annotation conveys. It does not mention permission requirements or what happens to the underlying media when a preset or job is removed, which would be the next useful layer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in one line, then a compact bulleted action list with required params asterisked, then the confirm contract. The trailing batch_run sentence is telegraphic and slightly awkward but still carries a real routing instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, nested-object tool this covers the essentials: what each action destroys, the confirm-token protocol, and the batching alternative, while the output schema and annotations handle return shape and risk signaling. A note on snapshot/dry_run interaction with the confirm flow would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the schema's op object is a free-form bag with additionalProperties=true and only points back to the description for per-action params. The description carries that load by naming the required parameter for each action (job_ids, name), which the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Remove render objects") and immediately enumerates the four concrete operations, so an agent knows exactly what surface this tool covers. It does not explicitly disambiguate against the nearby render_read / render_write siblings, which keeps it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear operational instruction: the first call returns a plan plus confirm_token and must be repeated with that token to apply, and defers known-in-advance sequences to batch_run. What is missing is guidance on when to prefer this over render_write (e.g., update_render_preset lives here despite being an overwrite) or other *_delete siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_readRender (read)A
Read-onlyIdempotent

Read render state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • get_render_config(): Current render format, codec, mode and whether a render is running.

  • get_render_resolutions(format, codec): List the resolutions available for a render format and codec.

  • list_render_formats(audio, format): Render formats; their codecs only with format (natural names work everywhere).

  • list_render_jobs(): List queued render jobs with progress (derived from percentage and error).

  • list_render_presets(): List render presets and Quick Export presets.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds value by disclosing that progress is 'derived from percentage and error' and that codecs are only returned when `format` is supplied. It does not mention preconditions (e.g. a project needing to be open) or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded scope sentence followed by a dense action:params list with zero filler; every line either names an action, its inputs, or its return content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-action read tool with an output schema and full annotations, the description covers what each action returns, so return values are not overloaded. Missing only environmental preconditions and error behavior, which is a minor gap given the structured coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema is effectively a generic `op` bag that explicitly defers to the description, so the description carries real weight by naming each action's parameters (format, codec, audio) and clarifying that 'natural names work everywhere'. What it lacks is any type/format detail for those arguments beyond the natural-name note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence gives a specific verb and resource ('Read render state, no side effects') plus the intent ('find ids and check results'), and the five enumerated actions spell out exactly what can be read. An agent can distinguish this from render_write/render_delete purely from the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'use it to find ids and check results' gives a concrete use case, and the per-action list makes selection among its own actions unambiguous. It stops short of naming sibling alternatives (e.g. render_write for changes, describe_action for deeper param docs), so there is no explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_writeRender (write)A
Destructive

Change render state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_render_job(): Queue a render job from the current render settings; returns its id.

  • export_render_preset(name*, path*): Export a render preset to a file.

  • import_render_preset(path*): Import a render preset from a file and select it.

  • load_render_preset(name*): Load a render preset as the current render settings.

  • quick_export(preset*, target_dir, name, video_quality, enable_upload): Render the current timeline with a Quick Export preset (21.1+, long-running). [job]

  • render_timeline(preset*, target_dir*, name*, format, codec, settings): One-shot: load preset, set target and name, queue and start (long-running). [job]

  • save_render_preset(name*): Save the current render settings as a new preset.

  • set_quick_export_preset(name*, enabled): Enable or disable a render preset for Quick Export (21.1+).

  • set_render_format(format*, codec*): Set the render format and codec (validated against the live list).

  • set_render_mode(mode*): Set the render mode (single clip or individual clips).

  • set_render_settings(settings*, base_preset): Apply render settings (on top of the loaded preset).

  • start_rendering(job_ids, interactive): Start rendering queued jobs (long-running; poll with job_wait). [job]

  • stop_rendering(): Stop any current render. Shortcuts (prefer them for whole tasks):

  • workflow_write.build_vertical_reel: Build a vertical timeline from clips, add subtitles and optionally render it. One call instead of render_timeline.

  • workflow_write.deliver: Render one or more outputs (preset/format/size) and report the real files produced. One call instead of set_render_settings, set_render_format, add_render_job, start_rendering, render_timeline. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations (destructive/not-idempotent): it discloses that values may be overwritten, that every change is read back from Resolve with receipt.verified=false meaning it did not take, that quick_export/render_timeline/start_rendering are long-running and must be polled with job_wait, and that format/codec are validated against the live list. These are operational facts an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the critical overwrite/verify warning, then a scannable bullet-per-action list, then shortcut routing. Dense for 13 actions but nearly every line is load-bearing; only the '[job]' tags and version notes add minor visual noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-action polymorphic mutation tool with a nested op object, the description covers action inventory, required vs optional params, long-running/polling behavior, version gating (21.1+), and verification semantics. An output schema exists, so return-shape explanation is correctly omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% on the three top-level params, but the schema defers per-action params to free-form additionalProperties. The description supplies them per action with '* = required' markers and defaults (e.g. render_timeline's optional format/codec/settings vs required preset/target_dir/name), which is meaning the schema does not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource plus scope: 'Change render state; may overwrite current values.' It then enumerates all 13 actions with one-line semantics, so an agent can match intent to action without opening the schema, and the write framing cleanly separates it from the sibling render_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Shortcuts (prefer them for whole tasks)' names workflow_write.deliver and workflow_write.build_vertical_reel with the exact low-level calls each replaces, and 'Calls known in advance... ONE batch_run' covers the batch case. Both alternatives and the conditions that select them are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_statusResolve StatusA
Read-onlyIdempotent

Connection state, Resolve version/edition/channel, current project, timeline and page.

Call it first, and again after an error: it tells whether Resolve is reachable and what the other tools act on by default.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
pageNo
errorNo
projectNo
timelineNo
connectedYes
capabilitiesNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond them: it tells the agent this establishes what other tools act on by default, which is critical for sequencing calls. It says nothing about cost/latency, but for a zero-arg local probe that is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the returned information and followed by the calling rule. Every clause earns its place; nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described in prose, and the description still summarizes them at a glance. Zero parameters, safe annotations, and a clear call policy leave no gap an agent must guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema has nothing to document and the baseline is 4. The description adds the relevant nuance that the returned values act as implicit defaults for the other tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates exactly what the tool surfaces (connection state, Resolve version/edition/channel, current project, timeline and page) and clarifies it is a reachability/context probe rather than a data reader. That is enough to separate it from data-oriented siblings like project_read or timeline_read, though it never explicitly names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call it first, and again after an error' gives a concrete, actionable invocation rule that an agent can apply without inference. It lacks any when-not guidance or explicit pointer to a sibling (e.g. job_status for job-level state), so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_apiSearch ApiA
Read-onlyIdempotent

Search the Resolve scripting API (official 21.1 stub) by name or description.

Use it to check what Resolve itself can do; to call something, use the domain tools (describe_action gives their parameters).

NameRequiredDescriptionDefault
limitNo
patternYesSubstring of a class, method or description.

Output Schema

NameRequiredDescription
hitsYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, so safety is covered; the description adds that results come from a fixed 21.1 stub, which tells the agent results are static documentation rather than live state. It does not mention result truncation via the default limit of 20, which matters for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, purpose first, alternative second; no filler. Every clause carries either scope or routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need not be described, and the discovery-versus-execution split is stated. Minor gap: nothing says whether matching is case-sensitive or how results are ordered/capped, which affects interpreting a hit list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: pattern is documented in the schema, limit is not. The description's "by name or description" reinforces that pattern matches substring across classes, methods and descriptions, but adds nothing about limit or result ordering. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search the Resolve scripting API ... by name or description") and scopes the corpus as the official 21.1 stub. It also routes the agent away from the domain tools, so an agent can distinguish it from describe_action and the *_read/*_write siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ("check what Resolve itself can do") and an exclusion with the alternative named ("to call something, use the domain tools"). No guidance on when to prefer describe_action directly, but the split between discovery and execution is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snapshot_listSnapshot ListA
Read-onlyIdempotent

Safety copies (timeline duplicates, .drp exports) this server took before changes.

Use it to find the copy to go back to after a bad edit; snapshot_write takes a new one on demand.

NameRequiredDescriptionDefault
projectNoOnly this project's snapshots.

Output Schema

NameRequiredDescription
snapshotsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/openWorld, so the bar is lower; the description still adds real context by explaining where snapshots come from (server-created before changes) and what they physically are (.drp exports). What it doesn't say — ordering, whether all snapshots or only recent ones are returned — is partly covered by the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler: identity of the resource first, then the call-to-action and the sibling pointer. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations already carry the safety profile. The only residual gap is the default scope when `project` is omitted, a small omission for a one-optional-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional `project` param is documented inline as "Only this project's snapshots." The description adds nothing about the filter or about what happens when it's omitted (presumably all projects), so this sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely and characterizes what a snapshot actually is (timeline duplicates, .drp exports) rather than restating the title. Prefixing with "Safety copies ... this server took before changes" clearly distinguishes it from snapshot_write, though the listing verb itself is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use it to find the copy to go back to after a bad edit" gives a concrete trigger scenario, and it explicitly routes the opposite need to snapshot_write ("takes a new one on demand"). It stops short of stating when *not* to use it (e.g. broad inventory listing), but the alternative is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snapshot_writeSnapshot (write)A
Destructive

Change snapshot state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • snapshot_project(label): Save the project and export it as a .drp file in the snapshot directory.

  • snapshot_timeline(label): Duplicate a timeline as a safety copy (current timeline by default). Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it warns that values may be overwritten, discloses that every change is read back from Resolve, and explains how to interpret failure ('receipt.verified=false means it did not take') — a post-condition semantic not present in annotations or schema. This is exactly the kind of operational detail an agent needs before invoking a destructive, non-idempotent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the effect and verification caveat, then a compact bulleted action list. Slightly telegraphic phrasing, but every sentence carries information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile, an output schema covers the return shape, and the description supplies the action roster and verification semantics. Minor gaps remain (what 'label' means, behavior when no timeline is current, whether label is truly optional), but nothing that would block a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the nested op object only pins down 'action' via enum; the per-action parameters live in additionalProperties. The description fills that gap by documenting that each action takes a 'label' and noting the '* = required' convention, which is real added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific effect ('Change snapshot state; may overwrite current values') and then enumerates the two concrete actions with verb+resource detail (save/export project as .drp, duplicate a timeline). This clearly differentiates it from snapshot_list and from the generic *_write siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes bulk usage to the sibling: 'Calls known in advance ... ONE batch_run.' It also notes the default target for snapshot_timeline ('current timeline by default'). It doesn't say when to prefer snapshot_project vs snapshot_timeline vs project_write/timeline_write, so guidance is strong but not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timeline_deleteTimeline (destructive)A
Destructive

Remove timeline objects. op.action (params; * = required):

  • delete_clips(items*, ripple): Delete timeline items (Edit page); linked audio is not removed automatically.

  • delete_marker(frame*): Delete the timeline marker at a frame offset.

  • delete_markers_by_color(color*): Delete all timeline markers of a color, or every marker with 'All'.

  • delete_timelines(timelines*): Delete timelines from the project.

  • delete_track(track*): Delete a track and the items on it. First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds the non-obvious behavior that matters: the two-phase plan + confirm_token flow before anything applies, and that linked audio is not removed with clips. Those are exactly the traits an agent cannot infer from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by a scannable per-action list and two closing operational notes. It is longer than average but almost every line earns its place; the action list could have been trimmed toward describe_action rather than fully duplicated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers the confirm_token lifecycle, the destructive scope of delete_track, and the batch_run alternative. The remaining gap is that it does not clarify what snapshot/dry_run do relative to the confirm flow, leaving the interaction between those three parameters to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the shared 'op' property is free-form (additionalProperties: true), so the description is what actually documents each action's required arguments (items, frame, color, timelines, track) and the optional ripple flag. It stops short of explaining value formats, e.g. what 'All' means as a color or what a timeline reference looks like.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Remove timeline objects") and then enumerates each operation precisely, so an agent can distinguish timeline_delete from item_delete, media_delete, or project_delete without opening the schema. The parenthetical "(Edit page)" and "from the project" further scope each action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear positive routing rule: known-in-advance or repeated-same-change work should go through batch_run instead. It does not explain when to prefer item_delete/media_delete over timeline_delete for a single clip, nor when dry_run/snapshot are advisable, so exclusions are only partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timeline_readTimeline (read)A
Read-onlyIdempotent

Read timeline state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • current_timecode(): Return the playhead timecode.

  • current_video_item(): Return the video item under the playhead, if any.

  • get_mark_in_out(): Return the video/audio mark in and out (frames relative to timeline start).

  • get_marker_by_custom_data(custom_data*): Find the first marker whose custom data matches.

  • get_output_blanking(): Return the timeline output blanking in pixels (Resolve 21.1+).

  • get_settings(keys): Read the timeline settings (project settings when custom settings are off).

  • list_items(track, name_contains, limit, offset): List timeline items of a track or of the whole timeline (paginated).

  • list_markers(color): List timeline markers, optionally filtered by color.

  • list_timelines(): List the timelines of the current project with their ids.

  • list_tracks(): List tracks of every type with name, enabled, locked and item count.

  • selected_clips(): List the currently selected timeline items (Resolve 21.0.4+).

  • timeline_info(): Name, id, frame range, start timecode, fps/resolution and track counts.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is well covered. The description adds useful behavioral details beyond the annotations, including version requirements for get_output_blanking and selected_clips and the fact that get_marker_by_custom_data finds the first match. It repeats "no side effects" but adds enough context to earn credit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and then uses a compact, scannable action list. Every listed action is relevant, and the required-parameter asterisk is efficient. It is slightly dense, especially where action signatures are embedded in a single line each, but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and strong annotations, so the description does not need to explain return values or safety behavior. It covers all twelve actions and their key parameters. Minor gaps remain around parameter value expectations and any failure modes, but the definition is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema is intentionally generic and defers action-specific parameters to the description. The description compensates well by listing each action and its parameters, marking required ones with an asterisk (e.g., get_marker_by_custom_data(custom_data*)). It does not describe value types or defaults for parameters such as limit and offset, so it stops short of full semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Read timeline state") and enumerates the exact read operations available. It clearly distinguishes the tool from mutation siblings such as timeline_write and timeline_delete by emphasizing read-only, side-effect-free access.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool to "find ids and check results," giving clear context for when to call it. Alternatives are implied by the sibling naming convention, but the description does not explicitly name when to choose timeline_read versus another read tool such as item_read or project_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timeline_writeTimeline (write)A
Destructive

Change timeline state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • add_marker(frame*, color, name, note, duration, custom_data): Add a marker at a frame offset of a timeline.

  • add_markers(markers*): Add several markers in one call; frames already occupied are skipped.

  • add_track(type*, sub_type): Add a video, audio or subtitle track (audio accepts a sub type).

  • append_clips(clips*): Append Media Pool clips to a timeline (end frames exclusive, record offsets relative).

  • auto_align_clips(items*, sync_using, use_track): Align timeline items by timecode or waveform (Resolve 21.1+).

  • clear_mark_in_out(type): Clear mark in/out.

  • convert_to_stereo(): Convert the timeline to stereoscopic 3D.

  • create_compound_clip(items*, name, start_timecode): Create a compound clip from timeline items.

  • create_fusion_clip(items*): Create a Fusion clip from timeline items.

  • create_timeline(name*): Create an empty timeline in the current Media Pool folder.

  • create_timeline_from_clips(name*, clips*): Create a timeline from Media Pool clips (optional source in/out per clip).

  • duplicate_timeline(name*): Duplicate a timeline under a new name; the current timeline is left unchanged.

  • export_timeline(path*, format*, subtype): Export a timeline (EDL, XML, AAF, DRT, OTIO, ...) to a file.

  • import_into_timeline(path*, insert_additional_tracks, insert_with_offset, source_clips_path, link_to_source_camera_files, use_sizing_info): Import items from an AAF file into an existing timeline.

  • import_timeline(path*, timeline_name, import_source_clips, source_clips_path, interlace_processing): Create a timeline from an EDL/XML/AAF/DRT/OTIO file.

  • insert_generated(kind*, name): Insert a generator, title, OFX or Fusion generator/title/comp at the playhead.

  • rename_timeline(name*): Rename a timeline (the new name must be unique).

  • rename_track(track*, name*): Rename a track.

  • set_clips_linked(items*, linked*): Link or unlink timeline items.

  • set_current_timecode(timecode*): Move the playhead to a timecode (from the Edit page when Resolve is on Media).

  • set_current_timeline(): Make a timeline the current one.

  • set_mark_in_out(mark_in*, mark_out*, type): Set mark in/out (frames relative to timeline start).

  • set_output_blanking(top, bottom, left, right): Set the timeline output blanking in pixels (Resolve 21.1+).

  • set_settings(settings*): Set timeline settings (verified key by key; some keys are silently refused).

  • set_start_timecode(timecode*): Set the timeline start timecode.

  • set_track_enabled(track*, enabled*): Enable or disable a track.

  • set_track_locked(track*, locked*): Lock or unlock a track (a locked V1 makes Insert* calls fail).

  • update_marker_custom_data(frame*, custom_data*): Replace the custom data of the marker at a frame offset. Shortcuts (prefer them for whole tasks):

  • workflow_write.build_vertical_reel: Build a vertical timeline from clips, add subtitles and optionally render it. One call instead of create_timeline, create_timeline_from_clips, set_settings.

  • workflow_write.conform_from_edl: Import media + EDL as a timeline, fix offline events via Start TC, report linkage. One call instead of import_timeline, set_start_timecode. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/non-idempotent, but the description adds real value beyond them: changes are read back from Resolve and receipt.verified=false means the change did not take, frames already occupied are skipped, some settings keys are silently refused, a locked V1 makes Insert* calls fail, and several actions are gated on Resolve 21.1+. That is exactly the failure-mode disclosure annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The most important caveat (overwrite risk plus the read-back verification contract) is front-loaded in the first sentence, the action reference is a dense one-line-per-action table with no filler, and routing advice is grouped at the end. Length is justified by 28 actions that the schema does not document.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 28-action dispatch tool with a nested generic schema, this covers action inventory, per-action params, required markers, version gates, known failure modes, and preferred shortcut wrappers. An output schema exists and receipt semantics are mentioned, so return-value explanation is not owed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's op object is generic ({action, ...params}), so the per-action parameter table is doing the real documentation work — listing each action's params with '*' marking required ones and noting constraints like 'the new name must be unique' and 'end frames exclusive, record offsets relative'. The 100% schema coverage refers only to the three top-level keys, so this description-level compensation is essential and well executed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Change timeline state; may overwrite current values.' Then enumerates all 28 legal actions, so an agent knows exactly what domain this covers and can distinguish it from timeline_read/timeline_delete by name and content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Shortcuts (prefer them for whole tasks)' block explicitly routes the agent to workflow_write.build_vertical_reel and workflow_write.conform_from_edl, and 'ONE batch_run' covers multi-change sequences — genuine alternative-routing. What's missing is explicit counter-routing against the read/delete siblings or conditions where the tool should not be used at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_deleteUi (destructive)A
Destructive

Remove ui objects. op.action (params; * = required):

  • ripple_delete_selection(keyboard_preset): Ripple delete the selected timeline clips via the UI (selection not API-readable). First call returns a plan + confirm_token; repeat it with confirm_token to apply. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.
confirm_tokenNoFrom the first call's plan; repeat that call with it to apply.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/not-idempotent/non-open-world, and the description adds meaningful behavior beyond them: the mandatory two-phase plan + confirm_token apply flow, and the rationale that selection is not API-readable. It stops short of stating irreversibility or what happens to locked/other-track clips.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short lines: resource statement, action/params, confirm-flow caveat, then the batching escape hatch. Every sentence carries a distinct instruction and the destructive apply semantics are stated right where the action is defined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema and the dry_run/snapshot/confirm_token schema fields cover returns and safety, and the description covers the plan/apply loop. For a UI-automation destructive tool, however, it omits prerequisites (host app state, active panel, an existing selection), which an agent needs before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3, but the schema's op description punts to "see the description or describe_action", and the description actually fills that gap by naming the action and its parameters. dry_run/snapshot/confirm_token are documented in the schema, so nothing further is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The top line ("Remove ui objects") is vague, but the action list supplies a concrete verb+resource: "Ripple delete the selected timeline clips via the UI." That also implicitly distinguishes it from the API-driven timeline_delete sibling, though the distinction is never made explicit at the tool level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes bulk/repeated work to batch_run ("Calls known in advance... ONE batch_run"), which is real alternative-selection guidance. It does not say when to prefer this over timeline_delete or what to do if nothing is selected, so the guidance is clear but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_readUi (read)A
Read-onlyIdempotent

Read ui state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • list_menu_items(path): List the items of a Resolve menu (top-level menu bar when path is empty).

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data and "no side effects" largely restates it. The description adds only the mild note that results can be used to find ids and verify outcomes; it says nothing about whether the menu structure is live/current or what a menu item looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the safety note, then a compact per-action parameter list. The "op.action (params; * = required)" notation is terse to the point of being slightly cryptic, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the single action plus its parameter is fully covered. The remaining gap is procedural: an agent must infer that other UI capabilities live in ui_write or describe_action rather than being routed there explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3, but the description genuinely adds meaning: the generic op wrapper only documents "{action, ...params}", while the description names the per-action parameter path and explains that an empty path returns the top-level menu bar. That is real semantics the schema does not supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read ui state") and immediately enumerates the one supported action, list_menu_items, so an agent knows exactly what the tool can do. It never names the sibling ui_write/ui_delete as the write alternative, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"use it to find ids and check results" gives an implied usage context, but there is no explicit when-to-use vs. ui_write or when-not, and no prerequisite or fallback guidance. Usage must be inferred from the single enumerated action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_writeUi (write)A
Destructive

Change ui state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • blade_at_playhead(keyboard_preset): Split the clips under the playhead on the Edit page (default Cmd+B).

  • invoke_menu(path*, validate_path): Click a Resolve menu item by its path (brings Resolve to front).

  • open_gallery_panel(keyboard_preset): Open the Color page and show the Gallery (needed for GalleryStillAlbum.ExportStills).

  • send_shortcut(command*, keyboard_preset): Run a named Resolve command via its default shortcut or menu (default preset only). Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent/write, and the description adds real context beyond them: changes may overwrite current values, every change is read back with receipt.verified=false signalling it did not take, and invoke_menu has the side effect of bringing Resolve to front. That read-back verification semantics is precisely the kind of behavior an agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior and a warning, then a compact bulleted action list — high signal per sentence. The closing line ('Calls known in advance...: ONE batch_run') is telegraphic to the point of being slightly awkward to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it still usefully explains the receipt.verified field. For a destructive, four-action tool it covers behavior, prerequisites, and batch alternatives; minor gaps are the interplay with ui_read and what a 'keyboard_preset' actually is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the nested op object accepts additionalProperties, so the schema alone does not tell an agent which payload keys each action needs — the description does, listing keyboard_preset, path/validate_path, and command per action and marking required ones with '*'. It stops short of a 5 because it omits per-param value formats (e.g. what a valid menu path looks like) and rides on describe_action for the rest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the resource and mutation ('Change ui state'), and each of the four ops is spelled out with a specific verb and object: split clips at playhead, click a menu item, open the Gallery panel, run a named command. An agent can distinguish this from ui_read and from batch_run without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance is present: use batch_run when calls are known in advance, use describe_action for param lookup, and open_gallery_panel is flagged as a prerequisite for GalleryStillAlbum.ExportStills. It lacks a 'use ui_read instead when...' exclusion, so it stops just short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_readVision (read)A
Read-onlyIdempotent

Read vision state, no side effects: use it to find ids and check results. op.action (params; * = required):

  • contact_sheet(count, timecodes, from_markers, columns, thumb_width, labels): Tile frames sampled across the timeline (or at timecodes / markers) into one JPEG.

  • export_frame(timecode, max_width): Capture the timeline frame at a timecode as a JPEG (playhead is restored).

  • probe_media(path, clip): ffprobe summary of a file or Media Pool clip: codecs, fps, audio, color metadata.

  • screenshot_resolve(max_width): Screenshot of the DaVinci Resolve window (macOS, needs Screen Recording permission).

  • source_frames(path*, seconds*, max_width): Extract frames straight from a media file with ffmpeg (Resolve not needed).

NameRequiredDescriptionDefault
opYes{action, ...params}. Parameters per action: see the description or this server's describe_action tool.

Output Schema

NameRequiredDescription
actionYes
resultYes
channelYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: 'playhead is restored' discloses a transient side effect, 'macOS, needs Screen Recording permission' discloses an OS and auth prerequisite, and 'Resolve not needed' discloses that source_frames works outside the app. These are exactly the operational facts annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then a single compact action table with a legend for the `*` convention. Every bullet adds distinct information; no filler or repetition of the annotation flags.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested, polymorphic op-dispatch tool this is complete: purpose, per-action params and requirements, platform/permission caveats, and side-effect notes are all present, and an output schema exists so return values need not be described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only exposes an open `op` object, so the description carries the entire parameter burden — it lists every action's parameters with `*` marking required ones (path*, seconds* for source_frames). This goes well beyond the 100% schema coverage baseline by documenting per-action param semantics the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read vision state, no side effects') and then enumerates all five actions with concrete outputs (tiled JPEG, frame capture, ffprobe summary, window screenshot, ffmpeg extraction). An agent can distinguish this from timeline_read/media_read purely from the action list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'use it to find ids and check results' gives the primary use case, and each action bullet implies when it applies (e.g. 'Resolve not needed' for source_frames, 'at timecodes / markers' for contact_sheet). It never explicitly excludes alternatives or points to describe_action for parameter discovery beyond the one mention.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflow_writeWorkflow (write)A
Destructive

Change workflow state; may overwrite current values. Every change is read back from Resolve (receipt.verified=false means it did not take). op.action (params; * = required):

  • apply_look: Apply a LUT to every video item, group them in a color group and grab a still.

  • build_vertical_reel: Build a vertical timeline from clips, add subtitles and optionally render it.

  • conform_from_edl: Import media + EDL as a timeline, fix offline events via Start TC, report linkage.

  • deliver: Render one or more outputs (preset/format/size) and report the real files produced.

  • title_overlay: Add an animated Text+ title (and Merge over the clip) to a timeline item's Fusion comp. Calls known in advance (a sequence, the same change on several items): ONE batch_run.

NameRequiredDescriptionDefault
opYesThe action and its parameters.
dry_runNotrue: return the planned effect, change nothing.
snapshotNotrue: back up the timeline/project first; omitted: server policy.

Output Schema

NameRequiredDescription
jobNo
planNo
statusYes
receiptNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation by disclosing the overwrite risk, that every change is read back from Resolve, and the meaning of receipt.verified=false ('it did not take') — a verification contract an agent cannot infer from annotations alone. Also references dry_run/snapshot behavior (server policy when omitted) documented in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the most important warning (overwrite + verification) before the action list, and the bulleted op enumeration is scannable. Slightly redundant with the schema's per-action descriptions, but no padding sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 5-way discriminated union, full schema coverage, and an output schema, the description supplies enough to pick the right action and understand the write semantics. The only gap is the absence of any pointer on how this relates to recipe_run/describe_action for prebuilt or introspective workflows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents op, dry_run, and snapshot, and the action blurbs in the description largely mirror the const-field descriptions in the schema. The description adds little parameter-level detail beyond what structured data provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource ('workflow state') and enumerates five concrete operations (apply_look, build_vertical_reel, conform_from_edl, deliver, title_overlay) with a specific verb for each. The umbrella verb 'change workflow state' is generic, but the action list makes it unambiguous what the tool actually does. It does not distinguish itself from recipe_run or describe_action, both of which plausibly overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes sequences and repeated changes to batch_run ('Calls known in advance ... ONE batch_run'), which is real when-to-use guidance. It also warns that it may overwrite current values, implicitly signaling this is for writes over a read tool. It gives no guidance on when to pick a workflow op versus the granular siblings (color_write, timeline_write, render_write).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 31 tool updatesv1.0.4
    • Changedai_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedai_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedapp_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedapp_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedaudio_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedcode_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedcolor_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedcolor_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedfusion_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedfusion_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedgallery_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedgallery_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedinterchange_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changeditem_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changeditem_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedjob_cancel1 field changed
      • addedInput schema / properties / job_id / description
        Added value: +"Id from a write that returned status='started' (or job_list)."
    • Changedjob_status1 field changed
      • addedInput schema / properties / job_id / description
        Added value: +"Id from a write that returned status='started' (or job_list)."
    • Changedjob_wait2 fields changed
      • addedInput schema / properties / job_id / description
        Added value: +"Id from a write that returned status='started' (or job_list)."
      • addedInput schema / properties / timeout_s / description
        Added value: +"Seconds to wait."
    • Changedmedia_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedmedia_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedproject_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedproject_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedrender_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedrender_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedsnapshot_list1 field changed
      • addedInput schema / properties / project / description
        Added value: +"Only this project's snapshots."
    • Changedsnapshot_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedtimeline_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedtimeline_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedui_delete3 fields changed
      • addedInput schema / properties / confirm_token / description
        Added value: +"From the first call's plan; repeat that call with it to apply."
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedui_write2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true: return the planned effect, change nothing."
      • addedInput schema / properties / snapshot / description
        Added value: +"true: back up the timeline/project first; omitted: server policy."
    • Changedworkflow_write2 fields changed
      • changedInput schema / properties / dry_run / description
        Previous value: -"Describe the effect without applying it."New value: +"true: return the planned effect, change nothing."
      • changedInput schema / properties / snapshot / description
        Previous value: -"true: copy the target timeline (or export the project) first; false: never; omitted: server policy (destructive actions only, by default)."New value: +"true: back up the timeline/project first; omitted: server policy."
  2. 52 tool updatesv0.1.0
    • First observedai_delete
    • First observedai_read
    • First observedai_write
    • First observedapp_delete
    • First observedapp_read
    • First observedapp_write
    • First observedaudio_read
    • First observedaudio_write
    • First observedbatch_run
    • First observedcode_delete
    • First observedcolor_delete
    • First observedcolor_read
    • First observedcolor_write
    • First observeddescribe_action
    • First observedfusion_delete
    • First observedfusion_read
    • First observedfusion_write
    • First observedgallery_delete
    • First observedgallery_read
    • First observedgallery_write
    • First observedinterchange_read
    • First observedinterchange_write
    • First observeditem_delete
    • First observeditem_read
    • First observeditem_write
    • First observedjob_cancel
    • First observedjob_list
    • First observedjob_status
    • First observedjob_wait
    • First observedmedia_delete
    • First observedmedia_read
    • First observedmedia_write
    • First observedproject_delete
    • First observedproject_read
    • First observedproject_write
    • First observedrecipe_list
    • First observedrecipe_run
    • First observedrender_delete
    • First observedrender_read
    • First observedrender_write
    • First observedresolve_status
    • First observedsearch_api
    • First observedsnapshot_list
    • First observedsnapshot_write
    • First observedtimeline_delete
    • First observedtimeline_read
    • First observedtimeline_write
    • First observedui_delete
    • First observedui_read
    • First observedui_write
    • First observedvision_read
    • First observedworkflow_write

TDQS

A3.5/5.0

Scored across 52 tools

Disambiguation4/5

Tools are mostly separated by domain and by read/write/delete, so an agent can target media pool vs timeline vs render vs color without much confusion. However, several action names repeat across scopes (get_audio_mapping, set_clip_color, add_flag, update_marker_custom_data, get/set_settings), and the three orchestration tools (batch_run, recipe_run, workflow_write) require reading descriptions to choose correctly.

Naming Consistency4/5

Almost all names are snake_case and follow a domain_action pattern (media_read, timeline_write, color_delete), with utilities using job_/snapshot_/recipe_ prefixes. A few utilities break the pattern (describe_action, search_api, resolve_status), but the set remains readable and predictable.

Tool Count2/5

52 tools is well above the recommended 3-15 and exceeds the 25+ 'too many' threshold. The grouping by domain and CRUD verb makes it less chaotic than the raw count suggests, and the DaVinci Resolve domain is unusually broad, but it is still a heavy surface for an agent to navigate.

Completeness5/5

The surface covers media pool, timeline, project, render, color, fusion, audio, gallery, AI, interchange, UI, vision, snapshots, jobs, batch, and recipes, with read/write/delete operations for nearly every domain. No obvious dead ends are apparent for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers