Skip to main content
Glama

Server Details

Make videos and docs with your AI agent — describe what you need, every output stays editable.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
clueso-ai/clueso-mcp
GitHub Stars
5
Server Listing
Clueso MCP

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.7/5 across 40 of 40 tools scored. Lowest: 4/5.

Server CoherenceB
Disambiguation4/5

Most tools target a distinct resource (clip, element, project, article, audio), but remove_elements and remove_from_project(target='element') overlap, and add_audio vs add_clips(kind='video') with audio mime_type could be confused. The detailed descriptions mostly disambiguate, but a few boundaries remain fuzzy.

Naming Consistency4/5

The verb_noun snake_case pattern is strongly maintained across add_*, get_*, update_*, remove_*, create_*, and duplicate_*. A few outliers like find, auto_sync, and voiceover_batch break the pattern, but overall the convention is predictable.

Tool Count2/5

40 tools is a very large surface, well above the typical 3-15 range. While the domain (video creation, articles, audio, clueprints) is broad, the count feels heavy and could overwhelm agents, especially with many granular operations.

Completeness3/5

Core project, clip, element, and audio workflows are well covered, but there are notable gaps: no delete_project, delete_clueprint, or delete_article, and sync points/comments lack update/remove operations. These lifecycle holes could block common workflows.

Available Tools

40 tools
add_article_mediaAdd article media (image or GIF)AInspect

Add a screenshot or GIF to the article. Returns a screenshot_id to place in the article via update_article using <SCREENSHOT screenshot_id>.

  • kind="image": pass timestamp to capture a frame from the project's base video, OR pass mcp_upload_id (from the upload tool) to attach an uploaded image. One of the two is required.

  • kind="gif": pass timestamp (start) and duration (seconds). Captures a short GIF clip from the base video. Requires the project to have a video clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes'image' or 'gif'.
durationNokind='gif' only: GIF duration in seconds.
timestampNokind='image': capture frame at this timestamp (seconds). kind='gif': GIF start time.
project_idYesProject ID.
mcp_upload_idNokind='image' only: attach an uploaded image (mcp_upload_id from the upload tool) instead of capturing from video.
Behavior5/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, and the description adds meaningful behavioral context: it captures a frame from the base video or attaches an uploaded image, returns a screenshot_id, and requires a video clip for GIFs. This goes beyond the annotations by explaining the underlying mechanism and precondition.

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 compact and well-structured with bullet points for each kind. It front-loads the primary purpose, then provides conditional details. Every sentence adds necessary information, with no redundant or filler 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 the tool's moderate complexity (5 parameters, 2 required), the description fully covers all parameter combinations, return value, and prerequisites. It even explains how to integrate the result with update_article. Without an output schema, it compensates by describing the output (screenshot_id) clearly.

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?

Although the schema covers all parameters with descriptions, the tool description adds crucial relational semantics: it explicitly states that for kind='image', timestamp and mcp_upload_id are mutually exclusive and one is required, and for kind='gif', timestamp is the start time and duration is in seconds. This clarifies the dependencies and constraints beyond the flat schema descriptions.

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 clearly states the tool's function: 'Add a screenshot or GIF to the article.' It specifies the resource (article) and the action (add media), and distinguishes from sibling update_article_media by focusing on adding new media rather than updating existing. The mention of returning a screenshot_id further clarifies its role in the workflow.

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 conditional usage for kind='image' (timestamp OR mcp_upload_id) and kind='gif' (timestamp + duration), with the note that the project must have a video clip for GIFs. It also explains how the returned screenshot_id is used with update_article, giving clear context for when and how to invoke this tool.

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

add_audioAdd audio trackAInspect

Add a music track or sound effect that plays as a project-level audio layer over all clips. Does NOT consume a clip slot. Use this for background music or a soundtrack that should play under the existing timeline. (For inserting an audio file as its own sequential clip with auto-transcription, use add_clips(kind='video') with an audio mime_type instead.)

  • type="music": requires src, name, source_duration. src is either the src from a find(type='music') result, or an mcp_upload_id (prefixed mup_) from upload_file — upload ids resolve to a presigned URL server-side. For a Freesound result the src is an opaque handle; pass it through unchanged and Clueso downloads + hosts the original server-side (do not try to fetch it yourself). Get source_duration from the find result, or from analyze_audio mode='features' (data.duration_ms / 1000). Optional: guide_start_time, guide_end_time, music_start_time, music_end_time (trim the source track), volume, loop, fade_in, fade_out.

  • type="sfx": pass the src, name, and source_duration from a find(type='sfx') result, plus guide_start_time (Freesound src is an opaque handle, resolved server-side just like music). Optional: volume. (Legacy: a fixed-library sfx_key like 'whoosh' still works instead of src.)

Concurrency: whole-project mutation (conflict domain: the entire project) — serialize; do not run in parallel with ANY other mutation on the same project_id (including element/voiceover edits). Size your clips BEFORE calling add_audio, or pass guide_end_time explicitly — the default ('end of project') is captured at call time and will NOT auto-extend if clips are added or resized afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
srcNoAudio source. For type='music' (required) or a stock type='sfx': the `src` from a find(type='music'|'sfx') result (may be an opaque Freesound handle — pass as-is), or an mcp_upload_id (prefixed 'mup_') from upload_file. Not needed for legacy fixed-library sfx (use sfx_key).
loopNoLoop the track if project is longer than the source. Music only. (default: false)
nameNoTrack/effect name. From the find result, or any descriptive label when using mcp_upload_id. Required for type='music' and for stock type='sfx' (passed via src).
typeYesAudio type: 'music' or 'sfx'
volumeNoVolume as percent (0–100). Default: 50 for music, 80 for sfx.
fade_inNoFade-in duration in seconds. Music only. (default: 0.5)
sfx_keyNoLEGACY fixed-library SFX key (e.g. 'whoosh', 'pop', 'click'). Optional alternative to src for type='sfx'. Prefer the src/name/source_duration from a find(type='sfx') result.
fade_outNoFade-out duration in seconds. Music only. (default: 0.5)
project_idYesThe project ID
guide_end_timeNoWhen to stop playing (seconds). Music only. Default = end of project AT CALL TIME — captured once at insert and NOT recomputed when clips are later added or resized. Pass an explicit value (e.g. the intended final project duration) when adding audio before clips are sized.
music_end_timeNoOut-point within the SOURCE track (seconds) — trims where playback ends in the music file. Music only. Default = source_duration.
source_durationNoSource duration in seconds. From the find result, or analyze_audio mode='features' (data.duration_ms / 1000). Required for type='music' and for stock type='sfx' (passed via src).
guide_start_timeNoWhen to start playing in the guide timeline (seconds). Required for type='sfx', optional for music (default 0).
music_start_timeNoIn-point within the SOURCE track (seconds) — trims where playback begins in the music file. Music only. Default 0 (start of source).
Behavior5/5

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

Beyond the readOnly=false annotation, the description discloses key behavioral traits: the audio is a project-level layer that does not consume a clip slot; guide_end_time defaults to 'end of project' at call time and will NOT auto-extend; Freesound src handles are opaque and resolved server-side; mcp_upload_id resolves to a presigned URL server-side; and the whole-project conflict domain means serialization is required against all other mutations.

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 lengthy but justified by the tool's 14 parameters and two modes. It is front-loaded with the core purpose, uses scannable bullets for music vs sfx, and ends with a critical concurrency/time-capture warning—each sentence earns its place with no filler.

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 the complexity (14 params, two types, multiple source forms, trimming semantics, and concurrency constraints) and no output schema, the description is remarkably complete. It covers selection, invocation, parameter source, default behavior, edge cases, and concurrency—leaving no major gap for an agent to make a mistake.

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?

Although schema coverage is 100%, the description adds substantial semantic value: it explains the difference between guide_*_time (timeline placement) and music_*_time (source trimming), clarifies the source of source_duration, details the behavior of opaque Freesound handles, and explains the default-capture behavior of guide_end_time. This goes well beyond the schema property descriptions.

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 opens with a specific verb and resource: 'Add a music track or sound effect that plays as a project-level audio layer over all clips.' It clearly distinguishes from the sibling add_clips by stating it does NOT consume a clip slot, and it explicitly points to add_clips(kind='video') as the alternative for inserting an audio file as a sequential clip.

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 when-to-use guidance: background music/soundtrack over the timeline, and explicitly names the alternative (add_clips with audio mime_type) for sequential insertion with auto-transcription. It also gives concrete instructions for using find(), analyze_audio, upload_file, and covers legacy sfx_key, plus strong concurrency guidance ('serialize; do not run in parallel').

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

add_clipsAdd clips to projectAInspect

Create new clips on a project. One tool, three sources:

  • kind="blank": empty slide clips you'll populate with add_elements / generate_media. Pass clips: [{title?, duration?}, ...]. Note: create_project already creates clip 0; calling with N blank entries gives N+1 clips total.

  • kind="pptx": extract slides from an uploaded .ppt/.pptx. Pass mcp_upload_id (from upload_file), optional slide_indices. Each slide becomes a slide_clip with native text/image/shape elements pre-populated.

  • kind="video": cut clips from an uploaded video/audio. Pass mcp_upload_id and optionally mime_type (default video/mp4), title, voiceover_text, cuts: [{start_seconds, end_seconds, heading?}], auto_elements. Without cuts the whole upload becomes one clip. Pipeline (download → transcribe → insert) runs in the background; subsequent calls on the same upload hit a 24h cache and return synchronously. (To overlay a video ONTO an existing clip — picture-in-picture, b-roll, background loop — rather than insert it as its own clip, use add_elements(element_type='video') instead.)

All variants accept after_clip_id to control insertion position; appends at end if omitted.

Concurrency: whole-project mutation (conflict domain: the entire project) — serialize. Do not run it in parallel with ANY other mutation on the same project_id, including element/voiceover edits; run them one at a time. (Mutations to different projects run in parallel freely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
cutsNokind='video' only: per-clip cuts. Each entry becomes one inserted clip. Omit to insert the full upload as a single clip.
kindYesSource for the new clips: 'blank' | 'pptx' | 'video'.
clipsNokind='blank' only: one entry per blank clip. Optionally set background_color/background + transition per clip at creation — no follow-up update_clips needed.
titleNokind='video' only: clip title (default 'Video').
mime_typeNokind='video' only: MIME type (default 'video/mp4'). Audio MIME types insert the file as a sequential clip with auto-TTS; for background music, use add_audio instead.
project_idYesProject (guide) ID.
after_clip_idNoInsert after this clip ID; appends at end if omitted.
auto_elementsNokind='video' only: when true, run auto-element detection (zooms, spotlights, blurs). Default false. Only meaningful on cache miss; cache hits clone the originating run's auto-elements.
mcp_upload_idNokind='pptx' or 'video': mcp_upload_id from the upload_file tool.
slide_indicesNokind='pptx' only: 0-based slide indices to insert. Omit to insert all slides.
voiceover_textNokind='video' only: post-AI voiceover script (saved as v2). Original audio is always retained as the base transcript.
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description reveals critical behavioral details: the background pipeline for video, 24h cache, N+1 clip behavior for blank clips, and the whole-project mutation conflict domain. It also explains subtle effects like auto_elements only mattering on cache miss and the original audio always retained. No contradiction with annotations; in fact, it enriches them.

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 long but meticulously structured with line breaks and clear sub-sections for each kind. It front-loads the core purpose and then provides detailed, relevant information without fluff. Every sentence earns its place, covering behavior, parameters, and concurrency in an organized manner.

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 the tool's complexity (three modes, multiple parameters, concurrency), the description is remarkably complete. It covers all modes, parameter semantics, concurrency safety, and alternative tools. No output schema exists, so the description doesn't need to explain return values; it provides all necessary context for an agent to invoke the 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?

Although schema description coverage is 100%, the description adds substantial semantic meaning beyond the schema: it explains how parameters interact (e.g., 'Without cuts the whole upload becomes one clip'), the N+1 clip behavior, the meaning of voiceover_text ('saved as v2'), and the role of mcp_upload_id in cache hits. It clarifies defaults and edge cases that the schema does not, enhancing the agent's ability to use parameters correctly.

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 clearly states the tool's function: 'Create new clips on a project' and explicitly distinguishes its three modes (blank, pptx, video). It differentiates from sibling tools by naming alternatives (e.g., add_elements for overlays, add_audio for background music), making its purpose unambiguous. The specific verb 'Create' + resource 'clips' + project scope is present.

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 when-to-use guidance for each kind and directly references alternatives for different use cases (e.g., 'use add_elements(element_type=video) instead' for overlays, 'use add_audio instead' for background music). It also includes concurrency constraints (serialize with other mutations on same project) and notes on cache behavior, leaving little ambiguity about when to invoke this tool.

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

add_commentAdd commentAInspect

Post a review comment on a project, attributed to "Clueso AI".

Use this to leave feedback, suggestions, or notes — either at the project level (no clip_id) or pinned to a specific clip with an optional timestamp inside that clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_idNoOptional clip ID to pin the comment to. Omit for a project-level comment.
project_idYesThe project (guide) ID
comment_textYesComment text to post
clip_timestampNoOptional timestamp within the clip (seconds). Only used when clip_id is provided.
Behavior4/5

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

Annotations already indicate this is a non-read-only, non-destructive operation. The description adds valuable context beyond annotations by disclosing that comments are attributed to 'Clueso AI' and that they can be project-level or clip-pinned with optional timestamps. It does not contradict 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 concise sentences. The first names the core action and attribution; the second provides usage modes. No redundant phrases or filler, and the most important information is front-loaded.

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 simple comment-posting tool with 4 parameters, the description fully covers purpose, usage modes, and parameter relationships. The schema documents each parameter, annotations cover safety, and no output schema is needed for a create operation. The description is complete without being verbose.

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 input schema already covers all parameters with descriptions (100% coverage), so baseline is 3. The description adds relational meaning by explaining that 'project level (no clip_id)' vs 'pinned to a specific clip' and that clip_timestamp is 'only used when clip_id is provided,' which clarifies how the parameters interact beyond individual schema descriptions.

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 exactly what the tool does: 'Post a review comment on a project, attributed to Clueso AI.' It specifies the verb, resource, and even attribution. It distinguishes itself from sibling add_* tools by focusing on comments, and no other sibling tool handles comments, so there is no confusion.

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 explicitly says when to use it: 'Use this to leave feedback, suggestions, or notes.' It also clarifies the two placement modes—project-level (no clip_id) or pinned to a clip with an optional timestamp. While it doesn't name alternatives, there are no competing comment tools among siblings, so this is effectively complete guidance.

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

add_elementsAdd elements to clipsAInspect

Add many elements across one or more clips in a single tool call. Replaces the per-element tool — always batch.

Use after calling get_element_schema to confirm the type_data shape per element_type. Items within one call are applied in order; returns one result entry per input item so partial success is fine.

Reuse instead of rebuilding: an item may pass component_id INSTEAD of element_type/type_data to insert a saved component from this workspace exactly as stored — no generation, instant — returning every new element_id plus its parameter_schema; set its content afterwards with update_elements(type_data.parameter_values). Find them with find(type='element_components'). Use base_component_id (with element_type='animation' and a prompt) only when you want a NEW variant rather than that component.

Grouping: pass group: "<name>" to keep a unit together (a card and its label, a stat and its caption) so the user can move or hide it as one thing. Items in one call sharing a name land in the same group, and a later call with that name adds to it. Grouping never changes coordinates. It does affect z-order: a group's members render contiguously at the group's slot, and a NEW group takes the slot of its first member, so grouping already-adjacent elements keeps their z-position while grouping scattered ones pulls them together at the lowest member's slot.

Concurrency: parallel-safe (conflict domain: the individual element). Each element is applied as a granular patch under a per-guide lock and merged onto the latest data, so you can fan this tool out across parallel subagents — even targeting the same clip — as long as they touch different elements. Only two edits to the SAME element id serialize (last write wins). Do NOT run it concurrently with a whole-clip or whole-project mutation on the same guide (update_clips on that clip, add_clips/remove_clip/split_clip/duplicate_clip, add_audio, update_project) — those rewrite a larger scope and would clobber the element.

Element-type quirks (handled per-item): • zoom → x/y/width/height are ignored; use center_x/center_y in type_data • image → provide x/y/width/height (the clip is located by clip_index; the clip_id input is accepted but unused) • animation → x/y/width/height default to the full canvas if omitted (the clip is located by clip_index) For everything else, x/y/width/height are required.

Animation: pass a top-level keyframes array (sibling of x/y/type_data, NOT inside type_data) — entries are { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels. positionX/Y use the SAME alignment-aware origin as the element's x/y. Text caveat: width/height are not keyframable on text — animate its size with fontSize (letterSpacing/lineHeight/padding* are also keyframable).

Position origin: x/y is the top-left corner for every element type EXCEPT text — center-aligned text positions by its CENTER POINT, right-aligned text by its top-right. Batching text alongside other shapes? Set alignment explicitly on each text item so you know which origin you're using.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYesElements to add — at least one entry.
project_idYesProject ID
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses ordering, per-item partial success, per-element locking with last-write-wins, z-order implications of grouping, and detailed element-type quirks. This goes far beyond what the annotations convey.

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 long but appropriately sized for the tool's complexity, and each section (Reuse, Grouping, Concurrency, Element-type quirks, Animation, Position origin) is clearly labeled and earns its place. The main purpose is front-loaded in the first two 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?

For a complex tool with no output schema, the description thoroughly covers prerequisites, concurrency constraints, return behavior (one entry per item, partial success), and per-type exceptions. The only minor gap is a precise return-object shape, though the description already promises 'every new element_id plus its parameter_schema' for component insertion.

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?

Although the schema already has 100% parameter descriptions, the description adds critical semantic details: keyframes must be a sibling of x/y/type_data (not inside type_data), clip_id is accepted but unused, position origins differ for text, and type_data shape must be confirmed via get_element_schema. This is meaningful 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?

The description opens with the exact action, 'Add many elements across one or more clips in a single tool call,' and explicitly contrasts this with the per-element tool. The verb+resource is specific and distinct from sibling tools like add_audio or add_clips.

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 provides explicit when-to-use and when-not-to-use guidance: call get_element_schema first, prefer component_id for reuse over rebuilding, use base_component_id only for new variants, and avoid concurrent whole-clip mutations. It even names specific sibling tools to avoid, such as update_clips, add_clips, split_clip, and add_audio.

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

add_sync_pointAdd a sync point at a word + timestampAInspect

Insert one sync marker on a clip's transcript.

Use this when:

  • The user is explicit about WHERE the camera should pause / cut (e.g. "sync the word 'submit' to 4.2s of the demo").

  • auto_sync ran but missed a step you care about.

How matching works:

  • word: case-insensitive, punctuation-stripped. The first match in the transcript is used unless occurrence > 1.

  • occurrence: 1-indexed — pass 2 to target the SECOND time that word appears, 3 for the third, etc. Required when the word repeats.

  • timestamp_seconds: clip-relative seconds. When the clip has run TTS already (generated_timestamps present), the server inverse-maps this to original-recording seconds automatically.

Constraints: the clip MUST be a video clip with a source recording (otherwise the frame thumbnail can't be extracted). The transcript must already contain the word — if not, you'll get word_not_found with a 200-char excerpt of the transcript to help you retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesTarget word (case-insensitive; trailing punctuation is stripped).
clip_idNoClip ID (preferred). If omitted, clip_index is used.
clip_indexNoZero-based clip index. Ignored if clip_id is provided.
occurrenceNo1-indexed match number when the word repeats. Defaults to 1 (first occurrence).
project_idYesProject ID.
sync_point_nameNoOptional label (e.g. 'Click submit'). Defaults to 'Sync point N' using the next order number.
timestamp_secondsYesClip-relative timestamp in seconds. Auto-mapped to original-recording seconds when the clip has generated_timestamps.
Behavior5/5

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

The description goes well beyond the annotations by detailing the matching algorithm (case-insensitive, punctuation-stripped, first-match behavior, occurrence indexing), timestamp inverse-mapping when generated_timestamps exist, and the word_not_found error format. This is rich, non-obvious behavioral context.

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 well-structured with descriptive headers and bullet lists. Every section earns its place: when to use, matching mechanics, and constraints. It is detailed but not bloated, and front-loads the core action.

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 description covers most necessary context for a complex tool with 7 parameters, including constraints and error behavior. Minor gaps: it doesn't state what a successful response returns (no output schema exists), and the phrase 'Required when the word repeats' slightly conflicts with the schema's default of 1 for occurrence. Overall very strong.

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?

Even though schema coverage is 100%, the description adds meaning beyond the schema: it clarifies how occurrence selects repeated words, how timestamp_seconds maps between clip-relative and original-recording time, and how clip_id/clip_index interact. These are critical semantics not evident from the schema alone.

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 opens with 'Insert one sync marker on a clip's transcript', which is a specific verb + resource statement. It clearly distinguishes this from sibling tools like auto_sync by positioning it as a manual insertion tool, not an automatic process.

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 'Use this when' section explicitly lists two scenarios and references auto_sync as the alternative. It also states strong constraints (video clip with source recording, transcript must already contain the word), giving agents clear go/no-go criteria.

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

analyze_audioAnalyze audioA
Read-only
Inspect

Analyze an audio file. Modes:

  • transcript: Speech-to-text with word-level timestamps. Works on BOTH speech and sung lyrics — routes to a music-aware provider when content is detected as music. Use to get words[{w,start_ms,end_ms}] for caption timing, script editing, or word-level visual sync. Note: features.has_speech may report false on pure music while transcript still successfully extracts lyrics.

  • silences: list of silent regions with start/end/peak. Use for auto-trim, smart-split, or pause-aware editing.

  • beats: tempo (bpm) + beat positions for music tracks. Returns empty for non-music. Use to align animations/zooms to a beat.

  • features: duration, peak/rms/lufs loudness, speech-vs-music heuristic. Cheap dispatcher — call once to decide which other mode to use, or to get duration_ms for source_duration when calling add_audio.

Source: provide exactly one of mcp_upload_id (from upload tool) or file_url (already-public URL, e.g. a find(type='music') result or Clueso CDN file). Optional time range: range_start_ms / range_end_ms crops the analysis window.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesWhich analysis to run.
file_urlNoPublic http(s) URL to the audio. Use when the file is already accessible (e.g. find(type='music') result, Clueso CDN). Validated against private/loopback ranges.
range_end_msNoEnd of analysis window in milliseconds. Default: whole file.
mcp_upload_idNoMCP upload ID from the upload_file tool. Use this OR file_url, not both.
range_start_msNoStart of analysis window in milliseconds. Default 0 (beginning).
silences_optionsNoOptions for mode='silences'.
transcript_optionsNoOptions for mode='transcript'.
Behavior5/5

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

Beyond annotations (readOnlyHint=true), the description discloses behavioral nuances: transcript routes to a music-aware provider, features.has_speech may be false on pure music, beats returns empty for non-music, and features is a cheap dispatcher. This adds context about what results to expect.

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 well-structured with a mode list and clear sentences, avoiding fluff. Each sentence provides actionable guidance or behavioral notes.

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 tool with 7 params, nested options, and no output schema, the description covers mode behavior, source handling, time range, edge cases, and even output shapes—adequate for an agent to select and call the 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?

While schema covers all 7 parameters (100% coverage), the description adds rich semantics: mode values are explained with expected outputs, source parameters are clarified with requirements, and range parameters are described as cropping the analysis window. It also names exact output structures like words[{w,start_ms,end_ms}].

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 opens with 'Analyze an audio file' and enumerates four distinct modes (transcript, silences, beats, features), each with a specific purpose. It clearly differentiates itself from siblings like add_audio by focusing on analysis rather than adding/modifying audio.

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?

For each mode it states concrete use cases ('Use to get words...', 'Use for auto-trim...', 'Use to align animations...', 'Cheap dispatcher...'). It also advises the source selection ('provide exactly one of mcp_upload_id or file_url') with examples.

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

auto_syncAuto-generate sync pointsAInspect

Run the agentic auto-sync pipeline against a clip with a source recording. Detects natural sync points (UI state changes, narrated steps) and inserts sync-marker nodes into the clip's transcript.

Async: returns immediately with a status enum from the pre-flight; sync-marker nodes appear in the transcript a few seconds later. Poll get_clip if you need to verify.

Capacity: capped at 3 concurrent runs platform-wide. Returning status='success' means the job was accepted, not that it finished.

Sync points are required input for voiceover TTS on video clips — without them, the TTS has no per-step pacing reference. (See resource clueso://docs/sync-points for the full model.)

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_idYesClip ID to auto-sync.
project_idYesProject ID.
Behavior5/5

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

Beyond annotations (which only provide hints), the description discloses critical behavior: async execution with immediate status enum, delayed insertion of sync-marker nodes, platform-wide concurrency cap of 3, and the meaning of status='success' (accepted, not finished). This adds substantial value over the annotation flags.

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 structured into four focused paragraphs, each covering a distinct aspect (function, async behavior, capacity, rationale). It is front-loaded with the primary action and avoids redundancy, though slightly verbose in places.

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 tool with no output schema, it thoroughly explains the async nature, how to verify results (poll get_clip), capacity limits, and the service's role in TTS. It even references additional docs. This is comprehensive given the tool's complexity.

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% with both parameters described, but the description adds meaning: clip_id must refer to a clip with a source recording, and the result affects the clip's transcript. This contextualizes the parameters beyond their schema descriptions.

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 clearly states the verb ('Run the agentic auto-sync pipeline'), resource ('clip with a source recording'), and outcome ('inserts sync-marker nodes into the clip's transcript'). It distinguishes from sibling 'add_sync_point' by emphasizing automatic detection of natural sync points rather than manual addition.

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 clear context: requires a source recording, explains that sync points are needed for voiceover TTS, and suggests polling get_clip for verification. However, it does not explicitly name alternatives or state when not to use it, 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.

check_uploadsCheck upload statusA
Read-only
Inspect

Fetch all files the user uploaded via the hosted upload page. Returns one mcp_upload_id per file — pass each to the appropriate tool (add_clips, add_article_media, etc.). Call this once after the user confirms they are done uploading; the token covers all files they dropped on the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
upload_tokenYesThe upload_token returned by upload_file(request_hosted_upload: true)
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context beyond that: the token covers all files (no per-file calls), returns one mcp_upload_id per file, and should be called once. This is useful behavioral information not covered by 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 three concise sentences, front-loaded with the core action. No redundancy or irrelevant details. Every sentence contributes to understanding the tool's purpose, timing, and follow-up.

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 simple one-parameter read-only tool, the description covers the action, timing, token scope, and downstream usage. It doesn't detail exact response formatting or error cases, but these are not critical for basic invocation. Given the absence of an output schema, the description provides enough context for an agent to use 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?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining that the token covers all files, which implies a single call returns multiple IDs. This supplements the schema's definition with usage context.

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 uses a specific verb ('Fetch') and identifies the resource ('files the user uploaded via the hosted upload page'). It also mentions the return of mcp_upload_id, which differentiates it from upload_file and other sibling tools. This clearly establishes what the tool does.

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 description explicitly states when to call it ('once after the user confirms they are done uploading') and mentions passing IDs to appropriate tools. However, it lacks explicit 'when not to use' or direct alternatives, so it doesn't fully earn a 5.

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

create_clueprintCreate clueprintAInspect

Create a new clueprint (reusable video template). A clueprint is a structured file directory with design notes, composition rules, and screenshots that can be used to generate videos.

Use human-readable folder categories: design/ (colors, typography, backgrounds, animation), rules/ (composition, voiceover, editing), screenshots/ (rendered clip previews). See the "Creating Clueprints" section in the system instructions for the full structure.

If source_guide_ids are provided, guide data is automatically extracted clip-by-clip into the clueprint as reference material.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the clueprint
visibilityYes'private' = only you, 'workspace' = everyone in your workspace
descriptionNoDescription of what this clueprint does
source_guide_idsNoIDs of existing projects to extract template data from
Behavior4/5

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

Annotations already indicate the tool is not read-only and not destructive. The description adds behavioral context by explaining that source_guide_ids trigger automatic clip-by-clip extraction and that the tool creates a structured file directory, which goes beyond the annotation information.

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 front-loaded with the primary purpose, uses clear enumeration for folder categories, and includes a conditional for source_guide_ids. Each sentence contributes useful information without unnecessary verbosity.

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 the moderate complexity and absence of an output schema, the description fully covers the tool's purpose, structure, optional behavior, and points to additional system instructions. It is sufficiently complete for an agent to select and invoke 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?

Schema description coverage is 100%, so all parameters are already described. The description adds value by clarifying the behavior of source_guide_ids (automatic extraction) and the folder categories that relate to the created structure, supplementing the schema without being redundant.

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 explicitly states the tool 'Create a new clueprint (reusable video template)', using a specific verb and resource. It defines the concept and distinguishes from siblings like get_clueprint and update_clueprint, while also differentiating from create_project by emphasizing reusability.

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 description provides clear context for when to use the tool (creating a reusable video template) and explains the folder structure, even pointing to system instructions. However, it does not explicitly name alternatives or state when not to use it, so it misses the 'explicit when/when-not' level.

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

create_projectCreate projectAInspect

Create a new blank Clueso project. Returns the projectId and initialClipId — the project starts with one blank clip already at index 0 (default short duration). Use update_clips to resize/retitle clip 0, add_clips(kind='blank') to append more clips, add_elements to place content, and add_audio to attach a project-level music track.

Optionally place the project inside a folder (use find(type='folders') to find folder IDs) and set a description at creation time.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoProject title
folder_idNoOptional folder ID to nest the project under. Use find(type='folders') to discover IDs. Omit to create at workspace root.
descriptionNoOptional project description (max ~500 chars)
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint=false, destructiveHint=false). The description adds valuable context: the project starts with one blank clip at index 0 with a default short duration, and it returns an initialClipId. This goes beyond the annotations by explaining the created object's initial state, which is important for follow-up operations.

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 compact and front-loaded with the core action. The first sentence states the main purpose and return values. The second sentence provides a high-value workflow chain with sibling tool names. The final sentence covers optional parameters. Every sentence adds distinct information without waste.

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?

Despite having no output schema, the description explains the return values (projectId and initialClipId) and the initial project state. It also covers optional folder nesting and description setting. Given the tool's relatively low complexity, the description covers all essential context for selecting and invoking the tool, and even provides next-step guidance.

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?

The schema covers 100% of parameters with clear descriptions, so the baseline is 3. The description adds minor semantic value by explaining folder placement (root vs nested) and that description is optional, but this is largely redundant with the schema. No parameters need extra explanation beyond what the schema already provides.

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 opens with a specific verb and resource: 'Create a new blank Clueso project.' It clearly distinguishes from sibling tools by noting it creates a blank project with an initial clip, and explicitly differentiates from tools like create_clueprint. The return values (projectId and initialClipId) further clarify the purpose.

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 workflow guidance: after creating, use update_clips, add_clips, add_elements, and add_audio to continue building. It also directs users to use find(type='folders') to discover folder IDs and explains when to omit folder_id (workspace root). This is strong 'when to use vs alternatives' guidance.

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

duplicate_clipDuplicate a clipAInspect

Clone one clip — within the same project, or from another project — into a target project.

  • Same project: pass target_project_id and source_clip_id (omit source_project_id).

  • Cross-project: pass target_project_id, source_project_id, source_clip_id. The source clip's S3 assets (voiceover audio, original video footage, generated video, etc.) are re-hosted into the target guide's S3 namespace, so the new clip is independent of the source — deleting the source project later won't break it.

Insertion: pass after_clip_id to place immediately after a specific clip in the target. Omit to append at end.

Returns the new clip_id and its final index. Concurrency: whole-project mutation (conflict domain: the entire target project) — serialize; do not run in parallel with any other mutation on the same target_project_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
after_clip_idNoInsert after this clip ID in the target. Appends at end if omitted.
source_clip_idYesID of the clip to duplicate.
source_project_idNoCross-project mode: ID of the project the source clip lives in. Omit for same-project duplication.
target_project_idYesProject (guide) ID to insert the duplicate into.
Behavior5/5

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

Annotations only indicate it's not read-only and not destructive. The description goes far beyond by disclosing S3 asset re-hosting, independence from the source project, insertion behavior, return value, and the conflict domain (entire target project). This directly contradicts nothing in the annotations and adds essential behavioral context.

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 longer than typical but well-structured with clear sections. It is front-loaded with the core action and then provides necessary details. Every sentence earns its place, and the use of bold and line breaks aids readability.

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 complex mutation with cross-project asset handling and concurrency constraints, and the description fully covers behavior, return value, and serialization requirements. Despite the lack of an output schema, the description mentions the return value and all key edge cases, making it highly 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?

The schema already describes all 4 parameters at 100% coverage. The description adds semantic value by explaining how omitting source_project_id enables same-project mode, how after_clip_id controls insertion, and the cross-project asset implications. This clarifies the relationships between parameters, which the schema alone does not convey.

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 clearly states the tool clones a clip into a target project, with explicit same-project and cross-project modes. This distinguishes it from siblings like duplicate_project (project-level) and add_clips (adding new clips). The verb+resource+scope is specific and actionable.

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 description provides explicit usage patterns for same-project (omit source_project_id) and cross-project, plus insertion semantics via after_clip_id. It also includes a strong concurrency warning ('do not run in parallel with any other mutation'). It does not name alternative tools explicitly, but the context is sufficient for selection.

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

duplicate_projectDuplicate projectAInspect

Clone an entire project — every clip, voiceover, asset, and metadata field — into a fresh project. The copy has its own S3 namespace, so changes or deletions to the source never affect the duplicate.

Defaults:

  • new_title omitted → "{source title} (copy)" when no folder_id is given (or it's empty) and the source stays in the same org; pass an explicit non-empty folder_id and the title is preserved.

  • folder_id omitted → copy lives in the same folder as the source.

Returns the new project's id and title. Concurrency: whole-project read+create — serialize against other mutations on the same source_project_id; do not run them in parallel.

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idNoPlace the duplicate in this folder. Omit to keep the same folder as the source. Pass '' (empty string) to move to workspace root.
new_titleNoOverride the title of the duplicate.
source_project_idYesProject (guide) ID to duplicate.
Behavior5/5

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

The description significantly augments the minimal annotations (which only indicate non-read-only, non-destructive) with key behavioral details: the duplicate has its own S3 namespace so source changes never affect it, title and folder default behaviors, what the return value contains, and concurrency implications. This is exactly the kind of context an agent needs that is not available in the annotations or 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?

The description is detailed but every sentence earns its place: the core purpose, namespace isolation, default rules, return value, and concurrency note are all essential. The bulleted 'Defaults' section is easy to scan, and the concurrency warning is clearly separated. No fluff or repetition.

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 no output schema, the description compensates by stating 'Returns the new project's id and title' and covers concurrency, isolation, and default behaviors. For a tool of this complexity (whole-project duplication with multiple default interactions), the description is complete enough for an agent to invoke it correctly without guessing. It might not cover every error edge case, but it covers the key operational aspects.

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?

Although the schema has 100% parameter coverage, the description adds critical conditional logic: the new_title default changes depending on folder_id being empty/non-empty, and folder_id omission behavior is clarified. This creates a decision rule that the schema alone does not convey, so the description provides substantial meaning beyond the structured fields.

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 opens with 'Clone an entire project — every clip, voiceover, asset, and metadata field — into a fresh project,' clearly stating the verb and resource scope. This distinguishes it from sibling duplicate_clip, which targets a single clip, and from create_project, which starts from scratch. The scope is explicit and 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?

The description gives clear context for when to use it: to duplicate an entire project while preserving all components, and it provides explicit concurrency guidance ('serialize against other mutations on the same source_project_id; do not run them in parallel'). However, it does not explicitly state when not to use it or name alternatives, so it misses the top bar for 5.

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

estimate_durationEstimate clip durationA
Read-only
Inspect

Estimate voiceover duration for one or many clips at once (~150 words/minute). Pass an array of voiceover texts — one per clip. Returns durations in the same order, ready for add_clips.

ParametersJSON Schema
NameRequiredDescriptionDefault
textsYesArray of voiceover texts to estimate — one string per clip.
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, so the description adds extra context: the assumed reading speed (~150 words/minute) and the guarantee of ordering ('Returns durations in the same order'). This goes beyond the structured fields, though it omits potential edge-case behaviors.

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 sentences, front-loaded with the main purpose, and every clause adds value (rate, array requirement, ordering, integration with add_clips). No wasted words.

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 tool's simplicity (one parameter), the description covers the input format, the processing assumption, and the output ordering. It doesn't specify units (e.g., seconds), but this is likely implied or documented elsewhere. The lack of an output schema is partially compensated by the explicit mention of ordering.

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?

The schema already describes the single parameter 'texts' with 100% coverage ('one string per clip'). The description repeats this and adds that durations return in the same order, which is more about output semantics than parameter meaning. Overall, the description adds little 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?

The description clearly states a specific action ('Estimate voiceover duration') and a resource ('one or many clips'), distinguishing it from sibling tools that add or modify clips. It also references the add_clips tool, indicating its role in a workflow.

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 provides clear context on when to use it: pass an array of voiceover texts to get durations, and notes the results are 'ready for add_clips'. While it doesn't explicitly mention when not to use it or list alternatives, the tool is simple enough that this guidance suffices.

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

export_projectExport projectAInspect

Kick off a video export of the project. Returns immediately with an export_id; the export pipeline runs in the background. The user can find the rendered video in the Exports tab in the editor.

Defaults: 1080p / 30fps / no captions / English. Pass overrides only when needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoFrames per second (default 30)
captionsNoBurn subtitles into the video (default false)
project_idYesThe project ID to export
resolutionNoOutput resolution (default 1080p)
Behavior4/5

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

The annotations already indicate this is not read-only and not destructive. The description adds beyond annotations by disclosing the asynchronous behavior (returns immediately, pipeline runs in background) and where the output appears (Exports tab). It also mentions defaults, which is useful context. No contradictions with 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 three sentences, front-loaded with the main action and key behavioral outcome. Every sentence contributes essential information: what it does, the async return, and defaults/guidance. No filler or redundant structure.

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 moderate complexity and lack of output schema, the description covers essential context: async execution, return value (export_id), user-facing outcome (Exports tab), and default settings. It omits error handling or status-checking details, but those are beyond the scope of initiating an export. The description is sufficiently complete for an agent to invoke it correctly.

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?

The input schema already covers all parameters with descriptions and default values for fps, captions, and resolution (100% coverage). The description repeats those defaults and adds 'English' (not a parameter), providing minimal extra meaning. The phrase 'Pass overrides only when needed' reinforces optionality but does not significantly compensate beyond baseline.

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 clearly states the verb ('Kick off a video export'), the resource ('project'), and the immediate outcome (returns export_id). It distinguishes the tool from siblings by describing the async background pipeline, which is unique among the listed tools.

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 description implies when to use the tool ('to export a project') and gives usage guidance by listing defaults and advising 'Pass overrides only when needed.' It does not explicitly name alternatives, but no sibling tool handles exports, so no exclusion is necessary.

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

findFind resourcesA
Read-only
Inspect

Find any resource in Clueso by type, optionally filtered by name or exact id. One tool for listing and searching across the workspace.

type: • projects | folders | clueprints | workspaces • backgrounds | voices | image_gen_style_packs | element_components • images | videos | music | sfx — media; each result carries a source ('org' = your saved-media library, 'stock' = a stock/curated provider). Scope with source, pick the library with provider (see below). Stock results are a short described shortlist — pick the best fit and use its src. Stock video results also carry safe_src and a video_files tier list with one entry marked recommended — use safe_src (or the recommended tier) in add_elements; tiers above 1080p can exceed its ~200MB source cap and fail. For a Freesound music/sfx result, src is an OPAQUE handle (not a playable URL) — pass it straight to add_audio and the original is fetched + hosted by Clueso server-side; a preview_url is included only so you can tell what it sounds like. (image_gen_style_packs = generation style presets for generate_media kind='image' style_id; element_components = saved components (e.g. animations) from THIS WORKSPACE only — there is no community library for components (unlike clueprints); each reports param_keys. Insert one AS-IS with add_elements(component_id=...), or generate a variant from it with base_component_id.)

Filters (all optional): • query — for stock media it's the search phrase (real semantic search for provider='clueso'; provider keyword search otherwise). For clueprints a query runs a relevance-ranked search across your workspace + the global community library (search_summary, relevance_reason, tags, is_community, fork_count). For everything else it's a case-insensitive name substring. • provider — which stock library to search (ONE call, no merging). Choose by strength: images → 'pexels' (default; realistic photography) or 'pixabay' (illustrations, vectors, icons, clip-art — set image_type) videos → 'pexels' (default; real-world footage) or 'pixabay' (motion graphics — set video_type='animation') music → 'clueso' (default; our curated, brand-safe library with the best descriptions/search — try this FIRST) or 'freesound' (niche/genre tracks) sfx → 'freesound' (default; vast sound-effect library) or 'clueso' (curated sfx) • image_type — images + provider='pixabay': 'photo' | 'illustration' | 'vector' • video_type — videos + provider='pixabay': 'film' | 'animation' • id — exact id; returns just that one record (any type) • source — media only: 'org' | 'stock' | 'all' (default = org + stock). Under 'all', stock is appended only when a query is given. sfx is stock only. • folder_id — projects + saved media (images/videos/music): restrict to a folder • engine / language — voices only • creator_id / mine_only — clueprints only • orientation — stock images/videos: 'landscape' | 'portrait' | 'square' • color — stock images: a color name/hex, e.g. 'blue' • size — stock videos: 'large' | 'medium' | 'small' • min_duration / max_duration — stock videos + freesound audio: length bounds in seconds • page / limit — paging for large sets (projects, components, clueprints — a clueprint list is sliced to the limit with no marker when more exist, so page through rather than assuming the first page is everything); stock media ignores these (fixed shortlist)

Returns { type, count, items: [{ id, name, type, ... }] }. Feed the returned id straight into the consuming tool (set_voice, update_clips background, generate_media style_id, add_audio src, use_clueprint, etc.). Any duration on a returned item is in SECONDS — pass it straight to add_audio's source_duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoExact id — returns just that record.
pageNoPage (default 1) — projects/element_components/clueprints.
sizeNostock videos only: minimum resolution bucket.
typeYesResource type to find.
colorNostock images only: color name or hex, e.g. 'blue'.
limitNoPage size (default 50; voices default 5 — a '_more' item flags further pages).
queryNoCase-insensitive substring match on name.
engineNovoices only: 'eleven' | 'cartesia' | 'google'.
sourceNomedia types (images/videos/music/sfx) only: where to search — 'org' (your saved workspace media), 'stock' (stock library — images/videos via Pexels, music from Clueso's catalog), 'all' (both; default). sfx is stock-only.
languageNovoices only: e.g. 'en'.
providerNostock media: which library to search (exactly one). images/videos: 'pexels' (default — polished real-world photos & footage) | 'pixabay' (illustrations, vectors, clip-art, icons + more variety; pair with image_type/video_type). music/sfx: 'clueso' (default for music — our curated, brand-safe, well-described library, best semantic search) | 'freesound' (huge community library; best for niche music and sound effects — default for sfx).
folder_idNoprojects/images/videos/music only: restrict to a folder.
mine_onlyNoclueprints only: only ones I created.
creator_idNoclueprints only: filter by creator id.
image_typeNostock images + provider='pixabay' only: 'photo' | 'illustration' | 'vector' (flat/drawn graphics, icons, clip-art). Use illustration/vector for graphic looks; photo (or Pexels) for realism.
video_typeNostock videos + provider='pixabay' only: 'film' (live footage) | 'animation' (motion graphics).
orientationNostock images/videos only: result orientation.
max_durationNostock videos + freesound audio: maximum clip length in seconds.
min_durationNostock videos only: minimum clip length in seconds.
Behavior5/5

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

Discloses many behavioral traits not captured by annotations: Freesound src is an opaque handle, stock video results include safe_src and video_files tiers, freesound audio includes preview_url, clueprint lists are sliced without a marker, duration is in seconds, and stock results are a fixed shortlist. Annotation readOnlyHint/openWorldHint are consistent and expanded with operational details.

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 long but well-structured with clear sections (type, filters, return) and bullet lists. Every section earns its place given the 19 parameters and numerous edge cases. It is not as tight as a two-sentence description, but the density of necessary detail justifies the length. Minus one because it could be slightly reorganized to reduce inline parenthetical density.

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?

Despite no output schema, the description fully covers return format ({ type, count, items }), how to feed returned ids into consuming tools, pagination caveats, and special-case behaviors (e.g., component param_keys, safe_src, duration). For a tool with this many parameters and cross-parameter interactions, it is remarkably complete.

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?

Even with 100% schema coverage, the description adds substantial semantic value beyond the schema. For example, it explains that 'query' behaves differently per resource type (semantic search for clueso stock and clueprints, substring otherwise), how provider interacts with image_type/video_type, and that source='all' appends stock only when a query is given. This is meaningfully more than the schema's per-field descriptions.

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 opens with a specific verb and resource: 'Find any resource in Clueso by type, optionally filtered by name or exact id.' It clearly states this is the one tool for listing and searching across the workspace, which distinguishes it from sibling tools that are all mutating or action-oriented (add, update, remove, set_voice, etc.).

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?

Provides explicit guidance on when to use which options and how to choose between providers (e.g., 'clueso' default for music — try this FIRST; 'freesound' for niche tracks). Also explains non-obvious usage such as 'stock media ignores these (fixed shortlist)' and that element_components are workspace-only. This goes far beyond a simple when-to-use statement.

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

generate_mediaGenerate AI media (image or animation)AInspect

Generate an AI image or canvas-code-based animation directly into a clip.

  • kind="image": text-to-image. Pass prompt. Optional: style_id (from find type='image_gen_style_packs'), reference_image_url or mcp_upload_id for image-to-image grounding.

  • kind="animation": canvas-code animation rendered from a prompt. Pass prompt. Optional: voiceover_text (drives timing), base_component_id (reuse a saved animation as the starting point), reference_image_url or mcp_upload_id for visual grounding.

Generation is asynchronous: the element is created immediately with a stable element_id and rendered in the background. Poll get_clip (the phantom flag drops once rendering completes).

Tip: use this tool whenever the user asks for a "generated", "AI", or "create me a" visual. For uploaded photos / logos / icons / GIFs, use add_elements with element_type='image' and a src or mcp_upload_id instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesTop-left X in canvas pixels.
yYesTop-left Y in canvas pixels.
kindYes'image' = AI text-to-image; 'animation' = canvas-code-based motion graphic.
widthYesWidth in pixels.
heightYesHeight in pixels.
promptYesGeneration prompt. For animations, be SPECIFIC: name the UI elements, interaction sequence, timing feel, and visual style. Vague prompts produce bad output.
clip_idYesClip ID to place the generated element into.
end_timeNoDisappear at (seconds).
style_idNoImage only. Style preset ID from find(type='image_gen_style_packs'). See resource clueso://docs/generation-styles.
project_idYesProject ID.
start_timeNoAppear at (seconds).
mcp_upload_idNomcp_upload_id from the upload flow. Resolved server-side to a presigned URL before generation.
voiceover_textNoAnimation only. Paces the motion to the spoken script — and as a side effect sets this clip's voiceover text and triggers speech generation for the clip.
base_component_idNoAnimation only. Reuse a saved animation component as the starting point (from find(type='element_components')). To re-skin its tunable parameters, set parameter_values via update_elements after it renders.
reference_image_urlNoPublic URL of a reference image. Mutually exclusive with mcp_upload_id.
Behavior5/5

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

Beyond the sparse annotations (readOnlyHint=false, destructiveHint=false), the description discloses critical asynchronous behavior: immediate element creation, background rendering, polling get_clip with a phantom flag. It also reveals side effects like voiceover_text triggering speech generation. No contradictions with 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 well-structured with a bolded lead sentence, bullet lists for the two kinds, and a concise tip section. Every sentence earns its place, and the layout makes complex information easily skimmable. No filler or redundancy.

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?

Despite having no output schema, the description tells the user exactly what to expect (stable element_id, background render, phantom flag) and how to verify completion. It covers both variants, prerequisites (style_id from find, base_component_id from find), and side effects, making it fully actionable for a complex 15-parameter 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 description coverage is 100%, so the baseline is 3. The description adds meaningful semantic grouping (image-only vs animation-only params, mutual exclusivity of reference_image_url and mcp_upload_id) and practical guidance like the prompt specificity warning for animations. This adds value beyond the already-rich 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?

The description opens with a clear, specific verb+resource: 'Generate an AI image or canvas-code-based animation directly into a clip.' It accurately captures both modes and explicitly contrasts with add_elements for uploaded media, distinguishing it from siblings.

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 tip section gives explicit when-to-use guidance ('whenever the user asks for a generated, AI, or create me a visual') and when-not-to-use ('For uploaded photos / logos / icons / GIFs, use add_elements'). It also clarifies the image vs animation split, which is essential for correct selection.

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

get_articleGet articleA
Read-only
Inspect

Get the article content as markdown. Screenshots appear as <SCREENSHOT {id}> placeholders. Returns the markdown text and a list of screenshot IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds useful behavioral context about placeholder formatting and return values, which is beyond what annotations provide.

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?

Three concise sentences, all informative and free of redundancy. Every sentence adds value, with the key information front-loaded.

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 simple read-only tool with one parameter and no output schema, the description fully explains what the caller will receive (markdown text and screenshot IDs). No critical details are missing.

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 fully documents the single parameter (project_id). The description does not add extra parameter-level details, so the baseline of 3 applies.

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 uses a specific verb ('Get') and resource ('article content as markdown'), clearly distinguishing it from sibling tools like get_project or get_clip. It also states the output format, making the purpose 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?

The description clearly implies when to use the tool (when needing article content as markdown), but it does not explicitly mention alternatives or when not to use it. Context is clear, but lacks explicit exclusions.

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

get_clipGet clip detailsA
Read-only
Inspect

Read one clip: its elements (positions/sizes in canvas pixels), voiceover (text, voice, duration, voiceover_volume), background and transition. Pass render to also get a PNG of the frame.

ASK FOR WHAT YOU NEED. A full read is large — on a dense clip the per-word voiceover array and the element type_data blobs dominate it, and repeated full reads are the main way a long session runs out of context. select returns exactly the parts you name:

select: ['elements.x','elements.y','elements.width','elements.height'] → geometry only, to fix a layout select: ['elements.name','elements.start_time','elements.end_time'] → a timing pass select: ['words'] → word timings only, to sync visuals to narration select: ['elements.textdata','words'] → rewrite copy against the VO select: ['elements'] → whole element rows, no words select: [] → no JSON at all (pair with render for the PNG alone — smallest read) (omit select) → everything; fine for a first look, expensive to repeat

render is the other output, and it is separate from select: select shapes the JSON, render produces a PNG.

render: {} → the frame at t=0 render: { timestamp: 2.5 } → the frame 2.5s into the clip render: { save: true } → also uploads the PNG and returns presigned_url select: [], render: {} → the PNG alone, no JSON select: ['elements'], render: {} → element rows AND the frame

Omitting render renders nothing. timestamp and save live inside it because they only mean anything for a render — there is no way to ask for them without asking for the image.

element_ids is the other axis: it picks WHICH element rows come back, independently of select. Combine them for the leanest read — e.g. element_ids: ['el_9'], select: ['elements.x','elements.y'].

Element shape: universal wrapper fields (id, geo, name, x, y, width, height, start_time, end_time, rotation) plus type-specific data (textdata/shapedata/imagedata/videodata/zoomdata) plus an optional keyframes array when animated. Keyframes come back in the same flat wire shape add_elements takes — { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels — so you can round-trip read → edit → update_elements without reshaping.

Clip-level fields include transition (the current transition object — sibling of the update_clips transition arg; null if none) and voiceover_words (per-word timestamps; null on clips with no transcription).

ParametersJSON Schema
NameRequiredDescriptionDefault
renderNoRender a PNG of the frame. Presence of this object IS the request to render — omit it and nothing is rendered. `{}` renders at t=0. Independent of `select`, which only shapes the JSON: pair `select: []` with `render: {}` for the PNG alone (smallest read). CHECKING YOUR WORK: pass a mid-clip `timestamp`, not the t=0 default — text and image elements have entry animations (a ~0.4s slide/fade by default), so at t=0 they have not arrived yet and a correct edit renders as an empty frame. Shapes have no entry animation and do show at t=0, which makes a t=0 render especially misleading: some elements appear and others don't.
selectNoAsk for exactly the JSON you want, GraphQL-style. Omit for everything; pass [] for none. Sections: 'elements' (whole element rows), 'words' (per-word VO timings). Rendering is `render`, not a value here. Per-key: 'elements.<key>' projects element rows to just those keys (id is always kept). Keys: name, geo, x, y, width, height, start_time, end_time, rotation, keyframes, textdata, shapedata, imagedata, videodata, zoomdata, codedata, parent_id. Examples: ['elements.x','elements.y','elements.width','elements.height'] to read geometry; ['elements.name','elements.start_time','elements.end_time'] for a timing pass; ['words'] to sync visuals to narration; [] with render:{} returns the PNG with no JSON (smallest read); ['elements.textdata','words'] to rewrite copy against the VO. Mixing 'elements' with 'elements.<key>' returns whole rows. Use element_ids to choose WHICH rows — that is independent of this.
clip_indexYesZero-based clip index
project_idYesThe project ID
element_idsNoWHICH element rows to return — all others are dropped. Independent of `select`, which chooses the sections/keys. Use it to re-inspect just what you added or updated; most add_elements/update_elements already echo the element's resolved layout, so often you don't need this at all.
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses major behavioral traits: response size and context cost, independence of `select` and `render`, the render timestamp default and t=0 entry-animation pitfall, `save` uploading to S3, and the keyframe shape being round-trippable. These details go far beyond what annotations cover.

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?

Despite being long, the description is front-loaded (purpose in first sentence) and organized into clear subsections with examples. Every sentence contributes: usage warnings, parameter interactions, and response shape. There is no redundancy or filler.

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 no output schema, the description thoroughly explains response contents: element wrapper fields, type-specific data, keyframes, transition, voiceover_words, and render output (PNG, presigned_url). It also covers edge cases like null when no transcription and how to get the smallest read. For the tool's complexity, the description is complete.

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?

Although schema descriptions cover all parameters at 100%, the description adds meaningful multi-parameter semantics: interaction of `select` and `render`, `element_ids` as independent row filtering, examples of select combinations, and the meaning of `render: {}` vs `render: { save: true }`. This is very helpful guidance 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?

The description states 'Read one clip' and enumerates exact contents (elements, voiceover, background, transition) plus optional render for a PNG. This is a specific verb+resource and clearly distinguishes it from sibling tools like get_project or get_element_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?

The description provides extensive usage guidance: 'ASK FOR WHAT YOU NEED' explains how to use `select` for concrete use cases (fix layout, timing pass, sync narration), warns that repeated full reads drain context, and shows how to combine `select`, `render`, and `element_ids` for lean reads. It also mentions round-tripping with update_elements, giving clear when-to-use context.

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

get_clueprintGet clueprintA
Read-only
Inspect

Fetch clueprint data. Use include to control how much you pull back:

  • include="metadata": just the clueprint's name/description/tags/visibility/thumbnail.

  • include="tree": metadata + the full file tree (path, mime_type, and size per entry). Call this first when exploring an unfamiliar clueprint.

  • include="files": the contents of the files listed in file_paths (no metadata — call include='tree' first if you also need metadata). Text inline, binary as presigned GET URLs.

  • include="all": metadata + the file tree + the contents of every file in the clueprint (use sparingly on large clueprints).

Calling this also logs the clueprint as "used" (fire-and-forget) so the workspace's recents list stays accurate — no follow-up use_clueprint call needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoWhat to return: 'metadata' | 'tree' | 'files' | 'all'. Defaults to 'tree'.tree
file_pathsNoinclude='files' only: relative paths to read (e.g. ['design/colors.md', 'rules/voice.md']). Ignored for other modes.
clueprint_idYesID of the clueprint.
Behavior4/5

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

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses an important side effect: 'Calling this also logs the clueprint as "used" (fire-and-forget)...' and explains binary files are returned as presigned GET URLs. This adds useful behavioral context without contradicting the primary read-only nature, though the side effect is a subtle deviation from pure read-only semantics.

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 well-structured with a clear opening sentence and bullet-pointed include modes. Each line provides essential information without fluff, and the final sentence about the usage log is a single purposeful addition. The length is appropriate for the tool's complexity.

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 no output schema, the description carries the burden of explaining return values, and it does so thoroughly. It covers metadata fields, tree structure (path, mime_type, size), file content handling (text inline, binary as presigned URLs), and the default behavior. It also includes guidance on usage weight. The tool is fully understandable without needing additional context.

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. The description adds meaningful semantics to the include parameter by explaining exactly what each enum value returns (metadata, tree, files, all), and clarifies file_paths behavior with examples and the note that it is ignored for other modes. This goes beyond the schema's enum list.

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 opens with 'Fetch clueprint data' and then details the specific include modes, clearly defining the tool's scope as retrieving a clueprint's metadata, tree, files, or all. It is distinct from siblings like get_project or get_article by focusing on the clueprint resource, and the verb 'fetch' is explicit.

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 description gives clear contextual guidance: 'Call this first when exploring an unfamiliar clueprint' for tree mode, and 'use sparingly on large clueprints' for all mode. It also explains when to use files mode and that no follow-up use_clueprint call is needed. However, it does not explicitly list alternative tools or exclusions for when not to use this tool.

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

get_design_guideGet design guideA
Read-only
Inspect

Clueso's house style for composing video clips — how to think about concept, typography, color, composition, motion, and pacing. Read it before composing or editing a clip's visuals when you're NOT following a clueprint, or to fill gaps a clueprint leaves silent. General craft, not clueprint-specific.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds context that this is a reference guide with specific content areas, implying a no-side-effect read operation. It does not contradict annotations, and the extra behavioral context is adequate for a static resource.

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 deliver high-density information: what the guide contains, when to use it, and what it is not. No filler or repetition, front-loaded with the core purpose.

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, read-only tool with no output schema, the description fully covers its purpose, content, and usage context. Sibling differentiation is implicit since no other guide-like tool exists, and the description is self-sufficient.

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 the description is not required to elaborate on any. With 0 params, the baseline is 4, and the description appropriately focuses on the resource itself rather than parameter syntax.

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 clearly states the tool provides 'Clueso's house style for composing video clips' with specific topics like concept, typography, color, composition, motion, and pacing. It distinguishes itself from all sibling tools by being the only guide/resource tool, and the verb 'read' is implied, giving a specific action.

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?

Explicit when-to-use guidance is provided: 'Read it before composing or editing a clip's visuals when you're NOT following a clueprint, or to fill gaps a clueprint leaves silent.' It also clarifies that it is general craft, not clueprint-specific, which helps avoid misuse.

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

get_element_schemaGet element schemaA
Read-only
Inspect

Return the JSON schema for an element type's type_data. Call this before add_elements / update_elements when you don't already know the field shape for the element_type you're placing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'add' returns required + optional fields; 'update' returns all-optional.add
element_typeYesOne of: text, callout, rectangle, arrow, blur, spotlight, zoom, image, video, animation
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds contextual behavior beyond annotations by specifying the timing relative to add/update operations and the purpose of retrieving type_data schemas. This adds value without contradicting 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 sentences, front-loaded with the core purpose, and the second sentence provides actionable guidance. Every word earns its place with no redundancy.

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 simple read-only tool with a clear output (JSON schema) and no output schema, the description is complete. It tells the agent exactly what the tool returns and when to invoke it, and the sibling context makes the guidance even more relevant.

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%—both parameters (element_type and mode) have descriptive comments in the schema. The description itself does not add additional parameter detail beyond the schema, so the baseline of 3 applies.

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 clearly states the tool returns the JSON schema for an element type's type_data, using a specific verb and resource. It also distinguishes itself from sibling tools by explicitly referencing add_elements/update_elements as the intended usage context.

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 explicitly instructs when to use this tool: before add_elements or update_elements when the field shape is unknown. This provides clear usage context and names the relevant alternatives, satisfying the highest bar for this dimension.

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

get_projectGet project dataA
Read-only
Inspect

Get a summary of a project: canvas dimensions, per-clip summary (ids, indices, durations, element counts, voiceover_volume), and audio_tracks — every music/SFX entry on the project flattened to the same wire shape add_audio accepts (id, src, name, source_duration, guide_start_time/end_time, music_start_time/end_time, volume, loop, fade_in, fade_out). To copy an audio track to another project: read it from audio_tracks here and feed the same fields to add_audio on the target project. Call this to understand what's in the project before making changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns without contradicting. It adds behavioral context by specifying that audio_tracks are flattened to the same wire shape add_audio accepts, revealing the return format and interoperability behavior beyond simple safety hints.

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 sentences, each serving a distinct purpose: what it returns, how to use the output with add_audio, and when to call it. It's front-loaded with the summary contents and avoids fluff.

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 getter with one parameter and no output schema, the description covers the essential return contents (canvas dimensions, per-clip summary, audio_tracks) and even provides a cross-tool workflow. It is sufficiently complete for an agent to understand the tool's capabilities.

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% with a single self-explanatory project_id parameter. The description doesn't add parameter-specific semantics, but the baseline of 3 from comprehensive schema coverage applies.

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 uses a specific verb 'Get' with resource 'project' and enumerates the summary contents (canvas dimensions, per-clip summary, audio_tracks). It distinguishes itself from siblings like get_clip by focusing on the whole project and explicitly positioning itself as a pre-change inspection tool.

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 explicitly says 'Call this to understand what's in the project before making changes,' providing a clear when-to-use. It also names an alternative workflow: reading audio_tracks and feeding them to add_audio for copying, which shows integration with sibling tools.

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

record_screenRecord screenAInspect

Create a screen-recording clip in a project. Creates blank placeholder clips, registers job entities, and sends the job to AVS.

The blank clips this tool creates are placeholders; they become video clips when processing completes, so removing one loses that scene. Article placeholders are also inserted automatically into plainDoc.

Requires the Auto-Recording add-on and per-workspace sign-in credentials for the product being recorded. Workspaces without it get back the manual path instead (upload_file, then add_clips(kind='video')) rather than a failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenesYesREQUIRED — the recording to make, as a list of scenes. This is the ONLY way to specify what to record. A normal single recording is exactly ONE scene; a code-wizard multi-scene / marketing video is N scenes (one clip per scene, and ALL cuts of one video go in a SINGLE record_screen call). A narrated scene REQUIRES a non-empty narration_script; a b-roll scene is silent (no narration, no article). A cut that starts somewhere disconnected is just a scene with entry.mode "fresh". Cleopatra orgs accept exactly ONE narrated scene. Do not set scene_id — it is assigned server-side.
chat_idYesConversation context ID
guide_idYesTarget guide ID
languageNoLanguage code for the recording (default: en)en
video_intentionNoOne-line intent shared across all scenes of a multi-scene recording (e.g. "punchy 30s launch teaser for feature X"). Ignored for single-scene recordings.
preceding_clip_idYesClip ID after which to insert the new clip
exact_video_scriptNoSet to true when the video narration must be used exactly as written — the agent that does the recording will not reword, rephrase, or rewrite video_script at all. Default false.
custom_instructionsNoOptional per-recording instructions (e.g. "select project X", "add rectangle 200x100"). Not related to mocking.
exact_article_scriptNoSet to true when the article must be used exactly as written — the agent that does the recording will not reword, rephrase, or rewrite article_script at all. Default false.
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description discloses that blank clips are placeholders that become video clips, removing them loses scenes, and article placeholders are auto-inserted into plainDoc. It also notes the prerequisite add-on and credentials. This adds meaningful behavioral context without contradicting 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 three tight paragraphs: main action, behavioral caveats, and prerequisites/fallback. Every sentence provides essential information without fluff. It is front-loaded with the core purpose and remains efficient given the tool's complexity.

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 tool with 9 parameters, 4 required, no output schema, and significant side effects, the description covers mechanism, side effects, prerequisites, and fallback. The only minor gap is that it does not specify the return value or success response, but the description already explains the job is sent to AVS, which implies asynchronous processing. This is sufficient for an agent to invoke correctly.

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 baseline is 3. The description itself does not add parameter-level meaning beyond what the schema already provides, but it does set context (e.g., placeholder semantics) that indirectly helps understand scenes. No explicit parameter info in the description, so a 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?

The description opens with a specific verb and resource: 'Create a screen-recording clip in a project.' It then details the mechanism (creates blank placeholder clips, registers job entities, sends to AVS), clearly distinguishing it from siblings like add_clips and upload_file by explaining it's the screen-recording path. It even contrasts with the manual fallback, reinforcing differentiation.

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?

Explicit guidance is given: requires the Auto-Recording add-on and credentials, and if the workspace lacks them, the manual path (upload_file, then add_clips(kind='video')) is the alternative. This tells the agent both when to use this tool and when to use alternatives, with no ambiguity.

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

remove_clipRemove clipA
Destructive
Inspect

Remove a clip from the project by index. Cannot remove the last remaining clip.

After removal, all clips with index > clip_index shift down by 1. When removing multiple clips by index, remove from highest index to lowest (or capture clip_ids first and re-derive indices between calls). Concurrency: whole-project mutation (conflict domain: the entire project) — serialize. Do not run it in parallel with ANY other mutation on the same project_id, including element/voiceover edits; run them one at a time. (Mutations to different projects run in parallel freely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_indexYesZero-based clip index to remove
project_idYesThe project ID
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses important behaviors: index shifting after removal, edge case of last clip, and detailed concurrency conflict domain. This adds significant context beyond the structured 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 compact, front-loaded with the main purpose, then covers constraints and concurrency. Every sentence provides useful information without waste.

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 mutation with concurrency implications, the description covers the essential edge cases, index behavior, and serialization guidance. It is complete for an agent to select and invoke the tool correctly, even without an output schema.

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% with clear parameter descriptions. The description largely repeats the meaning of clip_index in behavioral terms (shift down) but does not add new syntax or format details. Baseline of 3 is appropriate given high schema 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?

The description clearly states the verb ('Remove') and resource ('a clip from the project') and specifies the method ('by index'). It also highlights a key constraint (cannot remove last clip), which distinguishes it from other mutation tools.

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 description provides clear context on how to use this tool (e.g., remove from highest index to lowest for multiple removals) and concurrency constraints. It does not explicitly compare to sibling tools like remove_elements, but the usage context is strong.

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

remove_elementsRemove elements from clipsA
Destructive
Inspect

Remove many elements across one or more clips in a single tool call. One entry per element ({clip_index, element_id}).

Concurrency: parallel-safe (conflict domain: the individual element) — same as add_elements/update_elements. Each removal is a granular element_remove patch merged under a per-guide lock, and the whole batch lands in ONE save. Fan out across subagents freely; two edits to the SAME element id serialize. Do NOT run concurrently with whole-clip/whole-project mutations on the same guide (update_clips on that clip, structural clip ops, add_audio, update_project). To remove an audio track (not an element), use remove_from_project(target='audio').

ParametersJSON Schema
NameRequiredDescriptionDefault
removalsYesElements to remove — at least one entry.
project_idYesProject ID
Behavior5/5

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

Annotations only indicate destructiveHint=true, but the description adds substantial behavioral context: each removal is a granular element_remove patch under a per-guide lock, the whole batch lands in one save, parallel safety for different elements, serialization for same element IDs, and explicit exclusions for concurrent operations. This goes well beyond the annotation.

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 well-structured: first sentence states the core purpose, then a concurrency paragraph with actionable guidance. Every sentence adds value, no fluff. It is moderately long but justified by the complex concurrency behavior.

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 batch operation with concurrency implications and no output schema, the description covers purpose, usage, conflict domain, exclusions, and alternatives. It is sufficiently complete for an agent to invoke correctly without additional context.

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%, with both parameters well-described. The description adds minimal extra param detail—it only restates the entry structure as '{clip_index, element_id}', which mirrors the schema. Since the schema fully explains the parameters, the baseline of 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?

The description clearly states the operation: 'Remove many elements across one or more clips in a single tool call.' It specifies the resource (elements within clips) and the scope (batch across clips). It also distinguishes from sibling tools by explicitly pointing to remove_from_project for audio tracks and referencing add_elements/update_elements for related operations.

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 gives explicit when-to-use guidance: it is for batch element removal, explains the conflict domain, and advises against concurrent use with whole-clip/project mutations. It also names the alternative tool for audio tracks ('use remove_from_project(target="audio")'), making the choice clear.

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

remove_from_projectRemove element or audio trackA
Destructive
Inspect

Remove an element or audio track from a project.

  • target="element": removes an element from a clip (requires clip_index + element_id)

  • target="audio": removes a music/SFX track (requires music_id — returned by add_audio)

Concurrency: target='element' is element-scoped (conflict domain: the individual element) — parallel-safe with other element edits on different elements, same as remove_elements. target='audio' is a whole-project mutation — serialize it against any other mutation on the same project_id. (Mutations to different projects run in parallel freely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesWhat to remove: 'element' or 'audio'
music_idNoMusic/SFX track ID to remove (required for target='audio')
clip_indexNoZero-based clip index (required for target='element')
element_idNoElement ID to remove (required for target='element')
project_idYesThe project ID
Behavior5/5

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

Annotations already mark destructiveHint=true, and the description adds significant behavioral context: element removal is element-scoped and parallel-safe with other element edits, while audio removal is a whole-project mutation requiring serialization. This goes beyond the annotation and provides important concurrency semantics for safe invocation.

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 well-structured with bullet points for target modes, but the concurrency paragraph is somewhat dense and could be more concise. Still, every sentence serves a purpose and the critical information is front-loaded.

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 the tool's complexity (two modes, conditional parameters, concurrency constraints) and the absence of an output schema, the description covers all necessary aspects: mode-specific requirements, parameter provenance, and concurrency rules. It is sufficiently detailed for an agent to invoke correctly in various contexts.

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 already describes all parameters with conditional notes (e.g., music_id 'required for target=audio') and 100% coverage. The description adds value by grouping parameters by target and noting that music_id is returned by add_audio, providing provenance not present in 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?

The description clearly states it removes an element or audio track from a project, and enumerates two distinct target modes with specific resource types. This distinguishes it from sibling tools like remove_clip (removes a clip) and remove_elements (likely removes elements in batch), even if not explicitly contrasted.

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 specifies when to use each target mode ('target=element' requires clip_index + element_id; 'target=audio' requires music_id), giving clear context for internal selection. However, it does not explicitly mention alternatives like remove_clip or remove_elements for other removal scenarios, so sibling differentiation is incomplete.

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

reorder_elementsReorder elements within a clipAInspect

Reorder the elements inside a clip. List position IS the z-index — later entries in ordered_element_ids render on top of earlier ones.

You MUST pass the full set of element IDs currently in the clip. The handler rejects partial lists so a reorder can never silently drop an element. Get the current list via get_clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_indexYesZero-based clip index.
project_idYesProject ID.
ordered_element_idsYesAll element IDs currently in the clip, in the new order. Position N = z-index N (later = on top).
Behavior5/5

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

The description adds important behavioral details beyond the annotations: the handler rejects partial lists to prevent silent drops, and explains the z-index ordering semantics. This matches the non-read-only, non-destructive nature while giving context not captured in 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?

Two concise, front-loaded paragraphs. The first states the purpose with a clear rule, the second states a critical constraint and provides a pointer to get_clip. Every sentence earns its place with no waste.

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 reorder operation with a critical constraint, it fully explains the z-index semantics, the full-set requirement, and how to get the current list. No output schema is needed, and the description covers all necessary context for an agent to invoke the tool correctly.

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%, so the description need not repeat parameter details. It reinforces the 'full set' requirement and z-index meaning already present in the schema, but adds little new parameter-specific information beyond the prerequisite to use get_clip.

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 exactly what the tool does: 'Reorder the elements inside a clip.' It uses a specific verb and resource, and clarifies the z-index semantics (later entries render on top), distinguishing it from sibling tools that add, remove, or update elements.

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 provides clear context by requiring the full set of element IDs and pointing to get_clip for retrieving the current list. However, it does not explicitly name alternative tools or specify when not to use it, which would elevate it to a 5.

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

set_voiceSet voiceAInspect

Set the voiceover voice for every clip in a project.

Use this to apply a clueprint's voice (read voiceover.voice.name and voiceover.voice.engine from the clueprint source data), or to switch all clips to a specific voice in one call. The voice is looked up by name + engine; lookup is case-insensitive on the name.

Common engines: 'eleven' (ElevenLabs), 'cartesia', 'google'.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project (guide) ID
voice_nameYesVoice name as stored in the voices table (e.g. 'Alex', 'Sofia')
voice_engineYesVoice engine — 'eleven', 'cartesia', 'google', etc.
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds value beyond these by noting the bulk behavior, case-insensitive name lookup, and common engine examples, providing practical behavioral context without contradicting 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 concise with three focused paragraphs: core purpose, usage scenarios, and engine examples. No filler or repetition, and the most important information is front-loaded.

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 simple setter tool with three well-described parameters and clear annotations, the description adequately covers purpose, usage context, and behavioral details. It does not explain return values or error handling, but these are not essential given the tool's simplicity and lack of 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% with descriptions for all three parameters. The description enhances this by clarifying the lookup combination (name + engine), the case-insensitivity rule, and providing common engine values, going beyond the schema's basic field definitions.

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 opens with a specific action and scope: 'Set the voiceover voice for every clip in a project.' This clearly states the verb, resource, and breadth of effect, distinguishing it from per-clip or batch tools by emphasizing the project-wide application.

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 describes two use cases: applying a clueprint's voice (with direct field references) and switching all clips to a specific voice in one call. However, it does not mention alternatives or when not to use this tool, so it lacks explicit exclusions.

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

split_clipSplit clipAInspect

Split a video clip into two clips at the given timestamp. The left clip keeps the original clip ID; the right clip gets a new ID and is inserted immediately after. Elements spanning the split point are duplicated into both clips with adjusted timing. Voiceover transcript and transcribed words are split proportionally.

Concurrency: whole-project mutation (conflict domain: the entire project) — serialize. Do not run it in parallel with ANY other mutation on the same project_id, including element/voiceover edits; run them one at a time. (Mutations to different projects run in parallel freely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_indexYesIndex of the clip to split
project_idYesThe project ID
split_timeYesTime in seconds within the clip where to split (clip-relative, not timeline-relative). Must be > 0.1s and < clip_duration − 0.1s; values outside this range are rejected.
Behavior5/5

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

Annotations only indicate readOnly=false and destructive=false. The description goes beyond by detailing concrete effects: left clip keeps ID, right clip gets new ID, spanning elements are duplicated, and voiceover split proportionally. It also discloses the whole-project conflict domain, providing operational transparency.

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 front-loaded with a clear core statement, followed by a concise concurrency note. Every sentence contributes essential behavioral or operational detail; no filler or repetition.

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 description covers the split behavior, element handling, and concurrency constraints thoroughly for a mutation tool. It does not specify return values, but there is no output schema, and the provided detail is otherwise comprehensive. Minor gap: no mention of prerequisites like clip existence or project access.

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%, so the baseline is 3. The description adds no new parameter-specific meaning beyond what the schema provides (e.g., split_time constraints are already in the schema). It only describes outcomes of parameters, not their semantics.

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: 'Split a video clip into two clips at the given timestamp.' It also clarifies key behavior (ID retention, insertion order, element duplication), distinguishing it from sibling tools like duplicate_clip or remove_clip.

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 concurrency note provides explicit 'when-not' guidance: do not run with any other mutation on the same project_id. However, it does not mention alternatives (e.g., when to use duplicate_clip instead) or outline conditions for selecting this tool over others.

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

switch_workspaceSwitch active workspaceAInspect

Switch the active workspace for this session. Use find(type='workspaces') to see available options.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYesWorkspace ID to switch to
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive mutation. The description adds the session-scoping context but doesn't explain any further side effects or return behavior.

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 concise sentences front-load the purpose and follow with a practical usage tip. Every word earns its place.

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 simple single-parameter tool with annotations and no output schema, the description covers purpose, session scope, and how to obtain the parameter value. It is complete for the agent's needs.

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 input schema fully documents workspaceId as a string, and the description enriches it by telling the user how to find valid workspace IDs via find(type='workspaces'). This provides useful 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?

The description clearly states the action ('Switch active workspace') and the scope ('for this session'), distinguishing it from project-level tools. The verb+resource combination is unambiguous and specific, with no ambiguity about what the tool does.

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 provides a clear prerequisite by directing users to find(type='workspaces') to list available options. Since there are no alternative workspace-switching tools among siblings, this is sufficient context, though it lacks an explicit when-not-to-use statement.

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

update_articleUpdate articleAInspect

Update article text content from markdown. Use <SCREENSHOT {id}> placeholders to position screenshots. Screenshots in the markdown are kept. Screenshots removed from markdown are deleted. Order in markdown defines final order. Get the current article first with get_article, modify the markdown, then call this.

ParametersJSON Schema
NameRequiredDescriptionDefault
markdownYesUpdated article content as markdown with <SCREENSHOT {id}> placeholders
project_idYesProject ID
Behavior1/5

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

The description states 'Screenshots removed from markdown are deleted,' indicating destructive behavior, while annotations declare destructiveHint: false. This is a direct contradiction, so transparency scores 1.

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?

Three concise sentences cover purpose, screenshot behavior, and usage workflow without wasted words.

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?

Covers what is updated, screenshot handling, and how to use it. No output schema is present, but update tools often need not describe return. The workflow advice adds completeness.

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 description adds meaning by explaining that order in markdown defines final order and screenshots are kept/deleted based on presence, elaborating on the markdown parameter's semantics.

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 'Update article text content from markdown,' which is a specific verb+resource. It also details screenshot placeholder handling, distinguishing this tool from related article media tools.

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 instructs to 'Get the current article first with get_article, modify the markdown, then call this,' providing a clear workflow and identifying the prerequisite sibling tool.

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

update_article_mediaUpdate or inspect article mediaAInspect

Update an article image/GIF (screenshot), or inspect its current state.

  • Provide one or more of zoom_factor, crop, shapes to change metadata.

  • Pass render=true (with no other updates) to fetch the current details without mutating.

To DELETE an article image/GIF: call update_article with markdown that omits the <SCREENSHOT id> reference. Unreferenced media is pruned server-side on save. There is no separate delete tool — the markdown IS the source of truth for what's present.

ParametersJSON Schema
NameRequiredDescriptionDefault
cropNoCrop data: { position: [x,y], size: [w,h] } in fractional coords.
renderNoIf true (and no other updates supplied), returns current details and a PNG preview without mutating.
shapesNoArray of shape objects for annotations.
project_idYesProject ID.
zoom_factorNoZoom magnification (1.0 = no zoom).
screenshot_idYesScreenshot ID (from get_article).
Behavior5/5

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

The description adds meaningful behavioral context beyond the sparse annotations: it discloses that render=true is non-mutating, that updates mutate metadata, and that deletion is not a direct operation but occurs indirectly when media is unreferenced in markdown and pruned server-side. This gives the agent a clear mental model of the tool's side effects and the system's source-of-truth behavior. No contradiction with 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 efficiently structured: a clear opening sentence, two concise bullets for primary usage, and a short paragraph explaining deletion. Every sentence serves a distinct purpose (action, update modes, delete alternative), with no fluff or redundancy. The format is easy to scan and front-loads the most critical 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?

The description handles the tool's dual update/inspect functionality and explicitly covers deletion behavior, which is critical given the source-of-truth model. However, it does not describe the return value of a successful update (only that render=true returns details and a PNG preview). In the absence of an output schema, a note about mutation responses would make it fully complete. Still, for the tool's complexity, it covers the main usage scenarios well.

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?

The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds some value by listing which parameters trigger updates and reiterating that render=true must be used with no other updates, but this nuance is already present in the schema's render description. The description does not introduce additional parameter-level details, so it neither exceeds nor falls below the baseline.

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 immediately states the action with a specific verb and resource: 'Update an article image/GIF (screenshot), or inspect its current state.' It further clarifies the scope (metadata updates via zoom/crop/shapes) and explicitly distinguishes itself from the delete action, which is handled by update_article. This makes the purpose unambiguous and well-differentiated from siblings.

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 context: 'Provide one or more of zoom_factor, crop, shapes to change metadata' and 'Pass render=true (with no other updates) to fetch the current details without mutating.' It also gives a clear alternative for deletion: 'call update_article with markdown that omits the <SCREENSHOT id> reference.' This not only says when to use the tool but also when not to use it, naming the alternative tool.

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

update_audioUpdate an existing audio trackAInspect

Mutate fields on an existing music/SFX track by id. Read existing tracks via get_project.audio_tracks — the per-entry shape there matches this tool's args, so you can flip a knob (volume, fades, timing, loop) and write it back without losing the track's id.

Only fields you pass are changed; omitted fields are preserved. To delete a track entirely, use remove_from_project(target='audio') instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoWhether the track loops
volumeNoNew playback volume 0-100
fade_inNoFade-in duration (seconds)
fade_outNoFade-out duration (seconds)
music_idYesID of the audio track (from get_project.audio_tracks[].id)
project_idYesThe project ID
guide_end_timeNoNew end time on the project timeline (seconds)
music_end_timeNoNew end offset within the source file (seconds)
guide_start_timeNoNew start time on the project timeline (seconds)
music_start_timeNoNew start offset within the source file (seconds)
Behavior4/5

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

The description discloses the partial-update behavior ('Only fields you pass are changed; omitted fields are preserved'), which is a key behavioral trait beyond the annotations. It also notes that the per-entry shape matches this tool's args, helping the agent understand the data flow. Annotations already indicate it's writable and not destructive, so this adds valuable context without contradiction.

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 concise and front-loaded, with the primary purpose in the first sentence. Each subsequent sentence adds essential guidance: reading existing data, partial update semantics, and the deletion alternative. There is no fluff or redundant 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?

For a tool with 10 parameters and no output schema, the description is highly complete. It explains how to obtain the necessary IDs, which fields are updatable in general, and how to avoid losing the track id. It also differentiates from the deletion alternative, covering the full usage context an agent needs.

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. The description adds meaning by grouping parameters into categories ('volume, fades, timing, loop') and explaining that the args match `get_project.audio_tracks` entries, which helps the agent map values from a read operation to this update call. This goes beyond the individual schema descriptions.

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 starts with 'Mutate fields on an existing music/SFX track by id', which precisely states the action (update), resource (audio track), and scope (existing by id). It clearly distinguishes from siblings like `add_audio` (create) and `remove_from_project` (delete) by explicitly referencing them.

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 workflow guidance: read existing tracks via `get_project.audio_tracks`, then update by passing the same shape. It also tells the agent when not to use this tool ('To delete a track entirely, use `remove_from_project(target='audio')` instead'), making the alternatives clear.

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

update_clipsUpdate clips (batch)AInspect

Update one or more clips in a single call — background, transition, duration, title, visibility, position, and (video clips) the footage transform via video_styling. Always batch.

Each entry: { clip_index, duration?, title?, background_color? | background?, transition?, hidden?, position?, voiceover_volume?, video_styling? }

  • voiceover_volume: 0-100. This is how you make a clip SILENT — set 0 to mute the narration while keeping the text and its word timings. get_clip and get_project report the current value, so read it before muting to restore it later. There is no "delete voiceover" tool; muting is the supported way.

  • background_color: hex (keeps the existing pattern/image, changes color). background: full object from find(type='backgrounds') — replaces the whole background.

  • transition: { type, duration, direction?, color? }, or null to remove. Set on the OUTGOING clip — the transition plays at the END of clip_index, into the next clip. Types: circleWipe, rainbowWipe, cornerWipe, stack, colorWipe, dissolve, pushPull, fadeToColor. Directions: rainbowWipe/cornerWipe take topLeft|topRight|bottomLeft|bottomRight; colorWipe left|right; stack/pushPull left|right|top|bottom.

  • position: move the clip to a new zero-based index. Moves apply FIRST (in array order), then property patches — keep reorders in a separate call from property edits so indices stay predictable.

  • video_styling (VIDEO CLIPS ONLY — ignored on slide clips): reposition/resize the clip's recording on the canvas, e.g. into a designed window slot. { position?: [cx, cy], size?: [w, h] } as canvas fractions 0–1 ([1,1] = full-bleed, position is the footage CENTER), plus crop? and border?. Fields merge onto the clip's existing video_styling.

Concurrency: parallel-safe per clip — all property updates land in ONE save. Safe to fan out across DIFFERENT clips. Do NOT run concurrently with element/voiceover edits on the SAME clip, or whole-project mutations (add_clips, add_audio, update_project). When adding audio + resizing clips, run update_clips BEFORE add_audio.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesOne entry per clip to update.
project_idYesProject ID
Behavior5/5

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

Beyond the basic annotations (readOnlyHint=false), the description discloses important behavioral traits: mute behavior via voiceover_volume, transition playing on the outgoing clip, position move application order, video_styling field merging, and the fact that there is no 'delete voiceover' tool. These details are not inferable from the schema or annotations and significantly help the agent predict side effects.

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 long but tightly organized with a summary, entry format, per-field details, and a concurrency section. Every sentence adds value and addresses real usage pitfalls. Despite the volume, it is well-structured and easy to scan, which is appropriate for a batch tool with six updateable field types.

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 the complexity (batch updates, many parameter interactions, ordering constraints) and the absence of an output schema, the description fully covers what an agent needs to know: field semantics, ordering rules, concurrency limitations, and integration with sibling tools like add_audio. It leaves no critical gap for correct invocation.

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?

Even though schema coverage is 100%, the description adds crucial semantics: explains that voiceover_volume 0 mutes while preserving word timings, describes transition direction defaults per type, clarifies that background_color keeps the pattern while background replaces it, and specifies video_styling merge behavior. This goes far beyond the schema field descriptions.

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?

Describes exactly what the tool does: 'Update one or more clips in a single call' with a specific list of fields (background, transition, duration, etc.). Clearly distinguishes from sibling tools like add_clips (add vs update) and update_elements (element vs clip). The instruction 'Always batch.' reinforces a distinct usage pattern.

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?

Provides explicit guidance: 'Always batch', 'keep reorders in a separate call from property edits', and 'run update_clips BEFORE add_audio'. Also warns against concurrent execution with element/voiceover edits or whole-project mutations. This gives clear when-to-use and when-not-to-use context that an agent needs.

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

update_clueprintUpdate clueprintA
Destructive
Inspect

Update a clueprint's metadata and/or file contents in one call.

Metadata fields (name, description, tags, visibility, thumbnail_path) are applied as a patch — only the fields you pass change. Pass at least one to update metadata.

files is a list of file mutations:

  • Write text: { path, content }

  • Write binary: { path, content, encoding: "base64" }

  • Write from URL: { path, source_url } (presigned URL, e.g. from get_clip with save=true)

  • Delete: { path, content: null }

You can mix writes and deletes in a single call. Existing files at the same path are overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name.
tagsNoNew tags (replaces existing).
filesNoFile mutations — writes and deletes. Empty/omitted for metadata-only updates.
visibilityNoNew visibility.
descriptionNoNew description.
clueprint_idYesID of the clueprint to update.
thumbnail_pathNoRelative path of a screenshot in the clueprint to use as thumbnail (e.g. 'screenshots/title-slide.png').
Behavior5/5

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

Annotations already mark destructiveHint=true, but the description goes further by specifying exactly what is destructive: 'Existing files at the same path are overwritten' and 'Set content to null to DELETE this path.' It also explains that metadata is patched rather than replaced, providing valuable behavioral context beyond the structured 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 well-structured and efficient. It opens with the main purpose, then organizes metadata and file mutation details in clear bullet-like sections. Every sentence adds useful information without redundancy, making it easy to scan and understand.

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 tool with this complexity (multiple mutation types, patching semantics, destructive actions), the description covers all necessary aspects: metadata patch behavior, file write/delete modes, URL sourcing, and overwrite behavior. No output schema exists, but the description adequately covers what the tool does and how to invoke it 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?

Although schema coverage is 100%, the description adds significant semantic value. It explains the relationship between metadata fields and patch behavior, details the file mutation structure, clarifies base64 encoding, and documents the special use of content: null for deletion. These are insights not derivable from the raw schema alone.

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 starts with a clear, specific verb+resource: 'Update a clueprint's metadata and/or file contents in one call.' It distinguishes this from sibling update tools (update_project, update_article) by focusing on clueprint-specific operations and by detailing the dual metadata/file update capability that is unique to this tool.

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 guidance on how to use different file mutation modes, including when to use source_url vs inline content ('Use this instead of inline content for large/binary files'). It also clarifies metadata patching semantics and the significance of content: null for deletion, giving clear context for when and how to use each parameter.

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

update_elementsUpdate elementsAInspect

Update many elements across one or more clips in a single tool call. Replaces the per-element tool — always batch.

Each item can update position/timing fields alone, or type-specific fields via type_data (use get_element_schema in 'update' mode to see what's settable for an element_type). Items within one call are applied in order; partial success is fine.

Grouping: pass group: "<name>" to move an element into a named group (created on demand), or group: "" to pull it back out to the clip root. Several items sharing a name collect into one group — the way to tidy loose elements into units the user can move or hide together. Grouping never changes coordinates. It does affect z-order: a group's members render contiguously at the group's slot, and a NEW group takes the slot of its first member, so grouping already-adjacent elements keeps their z-position while grouping scattered ones pulls them together at the lowest member's slot.

Customising a component: after add_elements(component_id=...), set its content here with type_data.parameter_values on the animation element it returned.

Concurrency: parallel-safe (conflict domain: the individual element), same as add_elements — fan out across subagents freely; the server merges per-element under a per-guide lock. Two edits to the same element id serialize. Do NOT run concurrently with whole-clip/whole-project mutations on the same guide (update_clips on that clip, structural clip ops, add_audio, update_project).

Keyframes: pass a top-level keyframes array (sibling of x/y/type_data, NOT inside type_data) to set, or null to clear. Per-entry shape: { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels; positionX/Y use the element's alignment-aware origin.

Text elements: pass fit_to_lines: N to run an automatic widen + font-shrink pass after the entry's regular update lands. The server reshapes the element so the rendered text wraps to at most N lines without overlapping its neighbours.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesElement updates — at least one entry.
project_idYesProject ID
Behavior5/5

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

The description details partial success, sequential application within a call, grouping z-order effects, keyframe clearing semantics (null vs empty array), and locking behavior under concurrency. Annotations only say readOnly=false and destructive=false, so no contradiction; the text adds significant behavioral context beyond safety flags.

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 long but broken into topic paragraphs (purpose, grouping, concurrency, keyframes, text). It is front-loaded with the essential purpose and batch requirement. Some details could be condensed, but the complexity of the tool justifies the 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?

Given the tool's complexity, the description covers parameter semantics, concurrency, grouping, keyframes, and even return hints for save_as_component. Without an output schema, it does not fully define the response format for normal updates, but 'partial success is fine' implies per-item results. This is complete enough for an agent to invoke 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 descriptions are 100% covered, but the description adds crucial semantics: placement of `keyframes` as a top-level sibling, grouping via `group` with empty-string semantics, the `fit_to_lines` algorithm (widen then font-shrink), and `save_as_component` behavior. It also clarifies alignment origin interplay with x/y. This exceeds the schema baseline.

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 opens with a specific verb and resource: 'Update many elements across one or more clips in a single tool call.' It clearly distinguishes itself from add_elements and the per-element tool it replaces. The title is generic but the description is precise and action-oriented.

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 explicitly states this is the replacement for the per-element tool and mandates batching ('always batch'). It provides concurrency guidance with explicit do-not-run conditions (update_clips, add_audio, update_project) and tells the agent to consult get_element_schema for settable fields. This gives clear when-to-use and exclusions.

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

update_projectUpdate projectAInspect

Update a project's metadata: rename, change description, move to a different folder, or change aspect ratio.

Only fields you provide are changed. To move a project to the workspace root, pass folder_id="" (empty string).

Aspect ratio: pass any "W:H" (positive integers). The canvas is fit inside 1920×1080 keeping the ratio, so element pixel coordinates use the resulting canvas. Common values:

  • "16:9" → 1920×1080 (landscape, YouTube/web — default)

  • "9:16" → 608×1080 (portrait — TikTok/Reels/Shorts)

  • "1:1" → 1080×1080 (square — Instagram feed)

  • "3:4" → 810×1080 (portrait card)

  • "4:5" → 864×1080 (portrait — Instagram feed)

Element coordinates are stored as fractions of the canvas, so existing elements reflow to the new canvas automatically — no element coordinates are rewritten.

Concurrency: whole-project mutation (conflict domain: the entire project) — serialize. Do not run it in parallel with ANY other mutation on the same project_id, including element/voiceover edits; run them one at a time. (Mutations to different projects run in parallel freely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew project title
folder_idNoNew folder ID. Pass '' (empty string) to move to workspace root.
project_idYesThe project ID to update
descriptionNoNew description
aspect_ratioNoNew aspect ratio as 'W:H' (positive integers). Common: '16:9' landscape, '9:16'/'4:5'/'3:4' portrait, '1:1' square.
Behavior5/5

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

The description discloses several behaviors beyond the annotations: partial updates ('Only fields you provide are changed'), the special empty-string folder_id to move to workspace root, the canvas-fit logic for aspect ratios (1920×1080 container, resulting pixel dimensions), and the fact that element coordinates are stored as fractions and reflow automatically without being rewritten. It also explicitly warns about the whole-project conflict domain and serialization requirements, which is critical for correct concurrent invocation.

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 well-structured: it opens with the purpose sentence, then uses short paragraphs and a bullet list for common aspect ratios. Every sentence adds value—special folder_id behavior, canvas math, coordinate reflow, and concurrency constraints. Despite its length, the structure makes it easy to scan, and the concurrency warning is clearly separated.

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 involves nuanced side effects (aspect ratio reflow, coordinate system, concurrency), and the description fully explains these, including common-use examples and constraints. It does not explicitly state the return value, but given the lack of an output schema and the straightforward nature of an update operation, this is a minor omission. Overall, it provides all the information an agent needs to invoke the 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 description adds significant meaning beyond the schema's parameter descriptions. For aspect_ratio, it gives a concrete mapping table with computed canvas sizes (e.g., '9:16' → 608×1080) and use cases. It clarifies that folder_id='' moves to workspace root and that all parameters are optional partial updates. These details are not present in the schema and materially help an agent understand the effect of parameter choices.

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 begins with 'Update a project's metadata: rename, change description, move to a different folder, or change aspect ratio.' This clearly identifies the action (update) and resource (project metadata), listing the specific fields affected. It also distinguishes itself from sibling update_* tools by targeting project metadata rather than articles, audio, clips, or elements.

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 description states exactly when to use the tool (renaming, changing description, moving folders, changing aspect ratio) and adds partial-update semantics: 'Only fields you provide are changed.' It also provides clear concurrency guidance: 'Do not run it in parallel with ANY other mutation on the same project_id,' explicitly advising serialization. It does not name alternative sibling tools, but the context of project-level updates is sufficient for an agent to choose it appropriately.

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

upload_fileUpload fileAInspect

Upload one or more files to Clueso. Three modes — pick by client + where the file lives:

  1. file_name — HOSTED upload, the default for any non-UI / programmatic upload (Claude Code, Cursor, Claude Desktop, scripts). Returns an upload URL on Clueso's OWN base domain + a ready-to-run curl that streams a single local file to it; Clueso relays the bytes to storage server-side. The PUT targets the base domain — NOT cloud storage directly — so it works on desktop/agent clients that can't reach or are blocked from S3. Requirement: the client must be able to PUT bytes to the Clueso base domain (run the returned curl, or any HTTP PUT). The agent (or the user at a shell prompt) runs the curl. Prefer this whenever there's no human at a browser.

  2. file_url: Pass a public https URL. Server fetches and stages the file. Returns mcp_upload_id immediately. Use when the file is already on the open web — no user interaction needed.

  3. request_hosted_upload (UI mode — use ONLY when a human should pick files in a browser: many files at once, or a host with no shell / no PUT capability): Returns a single upload_token + upload_page URL. Share the link with the user; they open it in a new browser tab, drop their files, click Done. Then call check_uploads(upload_token) to retrieve all mcp_upload_ids. Call once for all files.

Hosted uploads cover any number of files per call: one call issues one upload_token, and that token covers every file the user drops on the page. Repeat calls issue additional tokens, each tracking only its own files.

The returned mcp_upload_id (prefixed mup_) can be passed to:

  • add_elements / update_elements (image or video → an element ON a clip: pass it as type_data.mcp_upload_id, on either tool — this is how a local image becomes on-canvas content, and how an existing element's source is swapped). To fill an animation's image slot, pass it inside type_data.parameter_values on update_elements only — parameter_values is an update-path field and is stripped on add.

  • add_audio (audio → project music track that plays under all clips)

  • add_clips(kind='video') (video or audio → sequential clip with auto-transcription)

  • add_clips(kind='pptx') (.ppt/.pptx → slide clips)

  • add_article_media (image/GIF → article asset)

  • analyze_audio (audio → transcript / silences / beats / features)

ParametersJSON Schema
NameRequiredDescriptionDefault
file_urlNoPublic URL to fetch the file from
file_nameNoFile name with extension. Returns a Clueso upload URL + curl command that streams this single local file to us (single file).
file_namesNoList of file names the user will upload (for hosted mode). Shown on the upload page as guidance.
request_hosted_uploadNoIf true, returns a hosted upload page. Call once for all files — the page accepts multiple uploads under one token.
Behavior5/5

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

Annotations already include readOnlyHint=false and openWorldHint=true, and the description thoroughly explains the underlying behavior: the file_name mode 'Returns an upload URL on Clueso's OWN base domain + a ready-to-run curl' and requires the client to PUT bytes to that domain, avoiding the need for direct S3 access. It also clarifies server-side fetching for file_url and one-token-many-files semantics for hosted uploads. This goes well beyond what annotations 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?

The description is front-loaded with the purpose and a clear three-mode breakdown, then proceeds to integration details. It is longer than typical but each section serves a purpose; however, some redundancy exists (e.g., repeated 'call once for all files') and the downstream usage section could be condensed without losing 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?

For a tool with four optional parameters, no output schema, and moderate complexity, the description covers everything: mode selection, prerequisites (PUT capability), the mcp_upload_id lifecycle, and specific downstream tools (add_elements, update_elements, add_audio, add_clips, add_article_media, analyze_audio). It even notes update-path-only semantics for parameter_values. This is exceptionally 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% with per-parameter descriptions, so the baseline is 3. The description adds meaningful mode-based context (e.g., file_name is for a single file and returns a curl command; file_names is guidance for the hosted page; request_hosted_upload is a boolean that toggles the UI mode). This enriches the schema without repeating it verbatim.

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 opens with 'Upload one or more files to Clueso' and then enumerates three distinct modes (file_name, file_url, request_hosted_upload), each with a clear use case. This specific verb+resource+scope clearly differentiates it from sibling tools that consume uploads, such as add_elements or add_clips.

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 when-to-use guidance for each mode: 'Prefer this whenever there's no human at a browser' for file_name, 'Use when the file is already on the open web' for file_url, and 'use ONLY when a human should pick files in a browser' for request_hosted_upload. It also describes how to chain with check_uploads and which downstream tools accept the returned mcp_upload_id.

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

voiceover_batchSet voiceover scriptsAInspect

Set voiceover text and/or trigger speech generation for any number of clips in a single call.

Each entry chooses its own action:

  • "set_text" — set transcript for a clip (clip_index + text)

  • "generate_speech" — async TTS for a clip (clip_id; returns immediately)

  • "set_and_generate" — set text and kick off TTS in one entry (clip_index + clip_id + text)

Entries within one call are applied in order. Returns one result object per input entry. All text-set actions land in ONE save; the TTS for generate/set_and_generate runs async per clip after.

IMPORTANT — generating speech retimes the clip: when audio is generated (generate_speech / set_and_generate), the clip's duration is reset to the spoken audio length (auto-fit). Any element start/end times you authored against a planned duration then play against that new length, and element time past the audio end is cut. So size timings against the spoken length: estimate it up front with estimate_duration (or generate speech BEFORE placing time-sensitive elements), then read the clip back after generation to confirm its final duration.

Concurrency: parallel-safe (conflict domain: a clip's voiceover). The server merges each clip's voiceover under a per-guide lock and preserves that clip's elements, so you can fan voiceover work out across subagents by clip — and it's safe to run alongside element edits. Two edits to the SAME clip's voiceover serialize. Do NOT run concurrently with whole-clip/whole-project mutations on the same guide (update_clips on that clip, structural clip ops, add_audio, update_project).

ParametersJSON Schema
NameRequiredDescriptionDefault
entriesYesVoiceover entries — at least one.
project_idYesProject ID
Behavior5/5

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

The description goes far beyond the minimal annotations (readOnly=false, destructive=false) by disclosing async TTS behavior ('returns immediately'), the single-save batching for text actions, and the critical retiming side effect ('clip's duration is reset to the spoken audio length' with element time past the audio end being cut). It also explains per-guide locking and serialization semantics, which is rich behavioral context.

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 well-structured: a one-sentence purpose, a concise bulleted action list, a brief ordering note, and then two clearly labeled caveat blocks (IMPORTANT and Concurrency). Every sentence carries essential information, and the layout front-loads the primary purpose before diving into edge-case guidance. Despite its length, there is no filler.

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 the tool's complexity (three action types, async processing, timing side effects, concurrency constraints) and the absence of an output schema, the description is remarkably complete. It covers what the tool does, how entries are processed, what to expect as return behavior, important retiming consequences, and explicit concurrency rules, leaving little ambiguity for an agent.

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. The description adds value by mapping each action variant to its required parameters (e.g., set_text needs clip_index+text, generate_speech needs clip_id) and clarifying that entries are applied in order. This helps the agent construct valid entries combinations beyond the schema's per-property descriptions.

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 opens with a specific verb+resource+scope: 'Set voiceover text and/or trigger speech generation for any number of clips in a single call.' It clearly distinguishes itself from siblings like set_voice by emphasizing batch capability and the dual text/TTS operations, and enumerates three concrete action types.

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 when-to-use context: 'any number of clips in a single call' and the three action variants. It gives detailed concurrency guidance, naming specific tools to avoid (update_clips, add_audio, update_project) and explaining when it is safe to fan out across subagents. It also references estimate_duration as a timing prerequisite, which serves as an alternative/precursor.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.