framesail
Server Details
Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.
- Status
- Healthy
- Uptime
- 99.9% over 43 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 72 tools
The set contains several near-overlapping pairs (update_segment_content vs update_segment_prompts, change_segment_type vs animate_segment, save_script vs revise_script vs generate_script, scan_script vs rescan_voice_blocks, update_style_fields vs update_style_references), but the descriptions explicitly delimit each one (e.g. 'the direct counterpart to', 'the ONLY way to') so an agent can reliably tell them apart. The verb+noun naming also reinforces the boundaries, keeping confusion low despite the volume.
The vast majority of tools follow a clean verb_noun snake_case pattern (create_project, generate_script, list_scenes, update_segment_prompts, delete_asset, etc.) with consistent verb families for CRUD. A few outliers (director_note, whoami, await_jobs) break the pattern, but they are minor and readable.
72 tools is far beyond a comfortable surface and well into the heavy range; even for a multi-stage video pipeline many of these (scattered get_/list_ pairs, single-field setters, near-parallel prompt editors) could be consolidated into fewer, parameterized tools. The count is defensible given the domain's breadth but still excessive.
The surface covers the full lifecycle end-to-end: channels, projects, styles, script generation/scanning, assets and references, voices, voiceover, storyboard, segments, scenes, music, SFX, captions, export, credits, and BYOK keys. Only minor gaps remain, such as image/video FILE references and style uploads requiring a separate multipart REST endpoint not exposed as an MCP tool.
Available Tools
72 toolsactivate_script_versionActivate script versionAIdempotentInspect
Switch the project's active script to another saved version (ids come from get_script's version list — each generate_script run creates one; save_script edits the active version in place). Re-run scan_script / rescan_voice_blocks afterwards if the text differs, since downstream artifacts follow the active version.
| Name | Required | Description | Default |
|---|---|---|---|
| script_id | Yes | ID of the script version to activate, from get_script's version list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only and not destructive, with idempotentHint true. The description adds meaningful behavioral context beyond the annotations: switching the active version affects downstream artifacts, and post-activation rescans may be required. This informs the agent about side effects and necessary follow-up actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and parameter source are front-loaded, while the post-activation guidance is provided as a necessary caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter activation tool with no output schema, the description covers the action, the source of valid IDs, the relationship to sibling tools, and the downstream consequences. The agent has everything needed to decide when 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes script_id, so baseline is 3. The description adds extra meaning by explaining the lifecycle of version IDs: each generate_script run creates one, and save_script edits the active version in place. This helps the agent understand what the parameter refers to beyond the literal schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Switch the project's active script to another saved version.' It distinguishes itself from related tools by explaining that generate_script creates versions and save_script edits the active version in place. The purpose is unambiguous and well differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent where version IDs come from ('ids come from get_script's version list'), how versions are created versus edited, and what to do after activation ('Re-run scan_script / rescan_voice_blocks afterwards if the text differs'). This provides clear usage context and routes the agent away from confusing it with generate_script or save_script.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_music_trackAdd music trackAInspect
Add background music to the project from the audio library (find track ids with browse_audio_library, category="music"). Defaults loop the track under the whole video at bed level (volume 0.12 ≈ -18.4 dB under narration — don't raise it without being asked); re-run export_video to hear it.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | True loops the track under the whole video; false plays it once | |
| name | No | Display name for the track on the project's timeline | Music |
| volume | No | Playback volume 0-1; the 0.12 default sits at bed level under narration — don't raise it unless asked | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| start_frame | No | Timeline frame at which the track starts (0 = start of the video) | |
| library_track_id | Yes | Audio library track ID, from browse_audio_library(category="music") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, etc.), the description adds key behaviors: default loop and volume with dB equivalent, bed level under narration, and the need to re-run export_video to hear. It includes a warning not to raise volume without being asked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the action and prerequisite, then explain defaults and side effects. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and no output schema, the description covers the essential usage: what it does, defaults, and the need to export to hear. It lacks details on error conditions or adding multiple tracks, but overall provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning: explains the default volume as bed level with dB conversion, clarifies the loop behavior, and ties library_track_id to browse_audio_library. This enriches the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and the resource 'background music to the project', with a direct link to browse_audio_library for finding track IDs. It distinguishes itself from sibling tools like remove_music_track and update_music_track by its action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a prerequisite (find track IDs with browse_audio_library) and practical tips (default loop and volume, re-run export_video to hear). However, it does not explicitly contrast with alternatives like update_music_track or 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.
add_segment_sfxAdd segment sound effectAInspect
Attach a sound effect from the audio library to a segment (find track ids via browse_audio_library with category="sfx"). It lands on the segment's scene immediately — no build_scenes needed.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments | |
| library_track_id | Yes | Audio library track ID, from browse_audio_library(category="sfx") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a useful behavioral detail beyond the annotations: the effect lands on the segment's scene immediately and does not require build_scenes. However, it does not disclose whether calling it again replaces an existing SFX or stacks another one, which matters for a mutating tool with idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The main action is front-loaded, the parameter lookup hint is embedded compactly, and the important immediate-effect behavior is stated last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter tool with no output schema, the description gives the agent enough to select and invoke the tool correctly: what it does, where to get the track ID, and what happens after the call. The main omission is behavior around repeated calls or replacement semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents project_id, segment_number, and library_track_id. The description adds little beyond what the schema says, except reinforcing that the track ID comes from browse_audio_library with category='sfx'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Attach'), a specific resource ('a sound effect from the audio library to a segment'), and names the source library lookup path. This clearly distinguishes it from siblings like add_music_track or update_segment_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent how to obtain the required track ID via browse_audio_library(category='sfx') and that no build_scenes step is needed afterward. It does not explicitly name an alternative like add_music_track for music, so it falls just short of full when-to-use coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_styleRe-analyze styleADestructiveInspect
Re-run style analysis (after changing a style's inputs). Async — await_jobs(style_id=...) until the style_analysis job completes.
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | Yes | ID of the style to re-analyze, from create_style or list_styles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and description adds async behavior and job type detail. No contradiction. Adds value beyond annotations by explaining awaiting pattern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no redundancy. All information is front-loaded and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter async analysis tool, description provides enough context. Could mention output implications, but no output schema exists. Adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (style_id) described. Description does not add extra parameter meaning beyond schema, but mentions it indirectly. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool re-runs style analysis after changing inputs, distinguishing it from related tools like 'create_style' or 'get_style'. The verb 're-run' and resource 'style analysis' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (after changing style inputs) and how to handle the async job (await_jobs). Lacks explicit 'when not to use', but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
animate_segmentAnimate segmentAInspect
Animate one segment in a single call: flip it to a generated video shot (keeping its rendered image as the clip's first frame) and START the clip render immediately. BILLS video credits on this call — the segment's image must already be rendered (400 otherwise). A refused generation (out of credits, already running) rolls the flip back, so the segment is either animating or exactly as it was. This is the ONLY way to a generated video (voice=true for a Talking Head) — change_segment_type refuses that target; it owns the other kind switches (real media, overlay scene, back to a still — segment_type "image" with carry_frame=true reverts an animated shot for free). Async — returns {ai_job_id, segment}; await_jobs until the clip completes.
| Name | Required | Description | Default |
|---|---|---|---|
| voice | No | True lip-syncs the on-frame speaker to the voiceover (lip-sync model family — bills the exact segment length, so long segments cost proportionally more); False is an ordinary prompt-driven clip. Always explicit, never inferred. | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it discloses billing of video credits, a 400 error when the image is not rendered, rollback behavior on refused generation, and the async contract returning {ai_job_id, segment}. This is far beyond a minimal safe-read/write statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: core action, sequence semantics, billing, error precondition, rollback, sibling differentiation, and async completion. The structure front-loads the main action and immediately gives the agent the highest-stakes facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description states the return shape and follow-up call, making it complete for invocation. It covers prerequisites, failure modes, cost implications, and alternatives, leaving no obvious gap an agent needs before calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 tying voice=true to the Talking Head use case and clarifying that the voice flag is 'always explicit, never inferred.' It does not add much for project_id or segment_number, but the schema already documents them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Animate one segment in a single call: flip it to a generated video shot... and START the clip render immediately.' It clearly distinguishes itself from change_segment_type, which 'owns the other kind switches,' so an agent can tell this tool from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly frames this call as 'the ONLY way to a generated video' and names the alternative for other segment-type switches: change_segment_type. It also gives the prerequisite (image must already be rendered), the async follow-up (await_jobs), and notes that voice=true is for a Talking Head.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
await_jobsWait for jobsARead-onlyIdempotentInspect
Block (server-side) until the scope has no pending/running jobs, or the timeout passes — use this instead of polling get_workflow_status yourself. Returns {done, jobs}. If done=false the work is still running: just call await_jobs again (a 3-5 minute storyboard takes a few consecutive calls). Keep timeout_seconds <= 50 so the client doesn't time out the tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | No | Style ID whose analysis/template jobs to wait for; pass exactly one of project_id or style_id | |
| project_id | No | Project ID whose jobs to wait for; pass exactly one of project_id or style_id | |
| timeout_seconds | No | Max seconds to block server-side before returning done=false; keep <= 50 so the client doesn't time out the tool call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent. The description adds critical behavioral context: server-side blocking, repeated calls needed, and return structure {done, jobs}. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three sentences, each with a clear purpose. Front-loaded with the main blocking behavior, then usage notes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description mentions the return shape {done, jobs}. Given the tool's simplicity and ample annotations, this is fully complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description reinforces key parameter constraints: mutual exclusivity of style_id and project_id, and timeout_seconds <=50. Adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool blocks until no pending/running jobs or a timeout occurs. It distinguishes itself from polling get_workflow_status, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (instead of polling), when to call again (if done=false), and provides a timeout constraint (<=50s) to avoid client timeout, giving clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_audio_libraryBrowse audio libraryARead-onlyIdempotentInspect
Browse the audio library for background music and sound effects. category: "music" | "sfx". Returns {tracks} — track ids feed add_music_track / add_segment_sfx. Zero matches also returns the mood and genre tags the library actually carries, so retry with one of those rather than guessing new filter words.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | Filter by the track's mood tag; empty for no filter | |
| genre | No | Filter by the track's genre tag; empty for no filter | |
| search | No | Free-text search over track names/descriptions; empty for no filter | |
| category | No | Track kind: "music" (background tracks) or "sfx" (sound effects); empty returns both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety behavior is covered. The description adds behavior beyond annotations: returning a {tracks} object and, on zero matches, exposing the actual mood and genre tags the library carries. This gives the agent useful failure-recovery information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all information-dense and purposeful, with the core browse action and result shape front-loaded. The zero-match retry guidance earns its place rather than padding the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only browse tool with four optional filters, the description covers return shape, filter categories, downstream use, and an edge case (zero matches). It does not mention pagination or result ordering, but those are minor gaps given the simplicity and annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all four optional parameters. The description mostly restates the category values and adds downstream usage context, but it does not significantly deepen the meaning of individual parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Browse the audio library for background music and sound effects,' with the category dimension made explicit. It distinguishes the tool somewhat by describing its result feeding add_music_track / add_segment_sfx, but it does not explicitly differentiate it from sibling list_music_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it returns track ids that feed add_music_track / add_segment_sfx, which tells the agent how to use the results downstream. It also gives a retry strategy when zero matches occur, which is practical guidance. It does not explicitly name when not to use it or mention alternatives, so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_scenesBuild scenesADestructiveInspect
Compile segments + assets + voiceover into the editor/render timeline (scenes). Run after segment assets are complete, before export. Returns a receipt — {scene_count, scenes: [{scene_id, segment_number, duration_frames, status, layer_count}]}; composition detail via list_scenes.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds useful context about the required pipeline stage and the returned receipt, but it does not explain what a rerun does to existing scenes or what destructive effects 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: the action is front-loaded, the pipeline position is stated, and the return shape is summarized without filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool, the description covers the action, when to run it, what it returns, and where to get more detail. The destructive safety hint is supplied by annotations, and the output receipt is described inline, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, project_id, and the schema description fully covers it: 'Project ID, as returned by create_project or list_projects'. The description adds no further parameter semantics, so the schema baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the concrete action: compiling segments, assets, and voiceover into the editor/render timeline (scenes). It also anchors the tool in the pipeline ('after segment assets are complete, before export'), which distinguishes it from later export or inspection siblings like export_video and list_scenes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing guidance: run after segment assets are complete and before export. It does not explicitly name alternatives or when not to use it, but the pipeline positioning plus the pointer to list_scenes for composition detail provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_segment_typeChange segment typeADestructiveInspect
Change what a segment's base visual IS: a generated still ("image"), fetched real media (media_source="real" — a real photo for "image", stock b-roll footage for "video"), or an overlay scene. Generated video is NOT set here — it's the state a rendered still reaches through animate_segment (voice=true for a Talking Head), and a "video" target without media_source="real" is refused with that guidance. segment_type "image" with carry_frame=true reverts an animated shot back to its still for free. media_source="real" turns the shot into fetched media with no start frame and no generation. carry_frame=true reuses the already-rendered image instead of recreating it; ignored for a real target. SFX and overlays always survive a type change. dry_run=true previews what would be kept / staled / recreated / deleted before you commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True previews the consequences (assets kept / staled / recreated / deleted, rendered assets lost) without changing anything | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| carry_frame | No | True reuses the already-rendered frame as the new type's starting visual instead of recreating it from scratch | |
| media_source | No | "" keeps the segment's current source; "real" makes the visual fetched stock footage / a real photo (b-roll) instead of a generated one; "generated" switches back | |
| segment_type | Yes | New visual type: "image", "video" (fetched b-roll only — requires media_source "real"), or "overlay_scene" | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses substantial behavioral nuance: media_source="real" removes start frame and generation, carry_frame is ignored for real targets, SFX/overlays survive type changes, and dry_run previews what would be kept/staled/recreated/deleted. These are the kind of side effects an agent needs to anticipate, and they align with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence carries a distinct piece of behavior or constraint, and the core purpose is front-loaded. Slight redundancy with the schema's parameter descriptions and a few informal phrases keep it from a perfect score, but there is no wasted filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the absence of an output schema, the description covers the essential operational concerns: valid type transitions, refusal conditions, carry_frame semantics, media_source behavior, survival of SFX/overlays, and dry-run preview. An agent has enough information to call this tool correctly and predict consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all six parameters, so the baseline is 3. The description earns an extra point by clarifying interactions not fully spelled out in the schema: carry_frame being ignored for real media targets, media_source="real" meaning no start frame and no generation, and the refusal condition for non-real video targets.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Change what a segment's base visual IS', then enumerates the exact type values and their meanings. It also explicitly distinguishes itself from animate_segment by stating that generated video is not set here, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is explicit: generated video belongs to animate_segment, and a "video" target without media_source="real" is refused. The description also clarifies when carry_frame and dry_run are relevant, giving the agent clear decision rules for when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
combine_segmentsCombine segmentsADestructiveInspect
Merge a segment with an adjacent one (segment numbers must be neighbors). keep: "this" | "other" — whose creative data survives: its assets are kept (rendered frame/clip marked stale against the combined narration and its prompts re-derived); the other segment's assets are deleted. Later segments renumber — re-check get_segments before further edits.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Whose creative data survives the merge: "this" (segment_number) or "other" (with_segment_number) | this |
| dry_run | No | True previews the consequences without changing anything | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments | |
| with_segment_number | Yes | 1-based number of the adjacent segment to merge with (must neighbor segment_number) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructiveHint=true, but the description goes much further: the other segment's assets are deleted, kept assets are marked stale, prompts are re-derived, and later segments renumber. This gives an agent concrete, actionable expectations about 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The action and adjacency constraint are front-loaded, and the remaining detail about asset survival, deletion, and renumbering is dense but relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the destructive consequences, renumbering behavior, and the need to re-fetch segments afterward. It does not state return values or whether the operation is asynchronous, and there is no output schema, but the essential call-time information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 enriches the meaning of the 'keep' parameter beyond the schema by explaining that kept assets remain while the other segment's assets are deleted. It does not add format-level detail for IDs or segment numbers, but the schema already covers those adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Merge a segment with an adjacent one') and adds a precise constraint ('segment numbers must be neighbors'). This clearly identifies the operation and distinguishes it from segment-related siblings like split_segment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit preconditions ('segment numbers must be neighbors') and a clear follow-up instruction ('re-check get_segments before further edits'). It does not explicitly name alternatives for non-neighbor cases or contrast with split_segment, but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_assetCreate assetAInspect
Manually add a character/environment/object the scan missed. asset_type: "character" | "environment" | "object". The description is the generation-facing spec of its look — be specific.
The scan reads narration and `[SCENE: ...]` directions, so the common
miss is anyone NEITHER ever names — a host the video needs but no text
mentions, a recurring set the script only implies. Name the asset exactly
as the script or directions will refer to it so the storyboard binds the
two, then generate_asset_reference it like any scanned asset.| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Asset name as the script refers to it (e.g. the character's name) | |
| asset_type | Yes | Kind of asset: "character", "environment", or "object" | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| description | No | Generation-facing spec of the asset's look; every shot renders from it, so be specific |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotations are false, providing no positive safety profile, so the description carries the burden. It does add useful context: the description parameter is a generation-facing spec rendered into shots, the name binds storyboard to script, and created assets behave like scanned assets in the pipeline. However, it doesn't disclose what happens on duplicate names or how creation interacts with existing assets of the same name, and since idempotentHint=false, the agent gets no warning against double-creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and key parameter guidance are front-loaded in the first sentence. The second paragraph is somewhat elaborate with examples (host, recurring set) but each clause earns its place by clarifying the failure mode and the naming requirement. No filler, though the examples could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter create tool with no output schema and no enums, the description covers the purpose, the scenario that warrants manual creation, the critical naming constraint, and the next pipeline step. Minor gaps: no indication of what the tool returns after creation and no guidance on handling duplicate names. Overall, an agent can successfully invoke it from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3. The description goes beyond the schema by explaining the naming semantics in depth (exactly as the script/directions refer to it, so the storyboard binds the two) and by reinforcing that description must be a specific, generation-facing look spec. The asset_type values are restated, which adds little, but the naming rule is genuinely non-obvious guidance the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Manually add a character/environment/object the scan missed" states a specific verb (manually add), a concrete resource (character/environment/object assets), and the precise scope (things the scan missed). This clearly differentiates it from the automatic scan_script flow and from sibling tools like update_asset, delete_asset, and list_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use context: the scan reads narration and [SCENE] directions, so the common miss is anything neither ever names — a host, a recurring set. It also supplies naming guidance (use the script's exact reference so the storyboard binds) and a follow-up step (generate_asset_reference it). It doesn't explicitly exclude alternatives like 'if the asset already exists, use update_asset instead,' but the scan-miss framing implies the boundary well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_channelCreate channelAInspect
Create a new channel — the container for projects and their reusable styles. Use when the user wants a fresh creative identity rather than adding to an existing channel.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the new channel | |
| description | No | Optional free-text description of the channel's content focus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and no destructiveness (destructiveHint=false). The description adds useful context about channel being a container, but lacks details on side effects, permissions, or return value, which is a gap given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage guidance. No extraneous information; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description explains the channel concept and usage, it omits critical information for a creation tool: what the response contains (e.g., channel ID or object), any constraints (e.g., name uniqueness), and does not compensate for the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters (name and description). The description does not add extra meaning beyond the schema's titles and descriptions, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a new channel' as the verb-resource combination, defines channel as 'container for projects and their reusable styles', and distinguishes from sibling tools by saying 'rather than adding to an existing channel'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use the tool ('when the user wants a fresh creative identity') and what not to do ('rather than adding to an existing channel'), providing clear context against alternatives.
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 project. The description (the video concept/topic) seeds script generation, so write a meaningful one. Pass video_format='portrait' for a vertical video — every shot, overlay, and the export are then composed for a 9:16 frame. The response's web_url is the project's page in the web app — share it so the user can follow along.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Project title shown in the app | |
| channel_id | Yes | ID of the channel to create the project in, from list_channels or create_channel | |
| description | No | The video concept/topic; seeds script generation, so make it specific and meaningful | |
| video_format | No | Output frame shape: 'landscape' (16:9, the default — YouTube and long-form) or 'portrait' (9:16 — Shorts, Reels, TikTok). Fixed once the storyboard is generated, so pick it up front. | landscape |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotations (which are all false): the description seeds script generation, video_format='portrait' composes everything for 9:16, and the response includes a shareable web_url. This provides useful context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver purpose, parameter advice, and response usage with no filler. Every sentence earns its place and the key information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description appropriately highlights the web_url return value. It also covers the behavioral consequences of the description and video_format parameters. It relies on the schema for channel_id sourcing, which is acceptable, but could have mentioned prerequisites in the description itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already documents all 4 parameters (100% coverage), the description adds practical semantics: write a meaningful description because it seeds script generation, and the video_format choice is fixed once the storyboard is generated. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'Create a project.' It then elaborates on the implications of the description parameter (seeds script generation) and the video_format parameter, which clearly distinguishes it from siblings like update_project, delete_project, and get_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates this is the entry point for a new project by explaining that the description seeds script generation and that video_format must be chosen up front. However, it does not explicitly contrast with alternatives like update_project or generate_script, so the guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_styleCreate styleAInspect
Create a style. Two mutually exclusive paths:
References (best): inputs=[{"input_type": "youtube" | "text", "value":
"<url or description>"}] — YouTube videos are watched (a channel link or
@handle resolves to that channel's newest usable upload) and text
directions read; async analysis writes the style's art/narrative/director
fields: await_jobs(style_id=...) before using the style. (Image/video FILE
references require the multipart REST endpoint POST /styles.)
Presets (instant, no analysis): presets={"art_style": id,
"narrative_style": id, "director_style": id} — all three axes, ids from
list_style_presets.| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the style | |
| inputs | No | Reference material to analyze, [{"input_type": "youtube" | "text", "value": "<url or description>"}]; a youtube value can be a video link or a channel link/@handle (resolved to that channel's newest usable upload). Triggers an async analysis job. Mutually exclusive with presets | |
| presets | No | Preset IDs per axis, {"art_style": id, "narrative_style": id, "director_style": id}, from list_style_presets; instant, no analysis. Mutually exclusive with inputs | |
| channel_id | Yes | ID of the channel to create the style in, from list_channels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With minimal annotations (only readOnlyHint=false, destructiveHint=false), the description carries the full burden and succeeds: it discloses mutual exclusivity of inputs/presets, async analysis behavior for references, instant execution for presets, channel/@handle resolution semantics, and a note about REST-only file uploads. This goes far beyond the annotations and adds critical 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loaded with the core purpose, and every sentence adds information. The two-path breakdown with examples is economical and readable despite the length, with no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with async behavior, no output schema, and two mutually exclusive input modes, the description covers prerequisites, sequencing (await_jobs), alternative REST endpoint, and required IDs from sibling tools. It is fully actionable 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.
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 enhances this by providing a concrete example structure for inputs and presets, explaining that presets require all three axes (art, narrative, director), and noting that channel/@handle resolves to the newest usable upload. These details go beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a style'—a specific verb and resource—and then details two distinct creation paths (references and presets), clearly distinguishing this from sibling tools like update_style_fields, analyze_style, and get_style. The scope is unambiguous and well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use each path ('References (best)' vs 'Presets (instant)'), mentions the need to call await_jobs before using the style, and explains that file references require the multipart REST endpoint, effectively guiding the agent away from this tool for those cases. It also references list_style_presets as a prerequisite source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_assetDelete assetADestructiveInspect
Delete a project asset (e.g. one the scan over-extracted).
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | ID of the asset to delete, from list_assets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; description adds example of typical deletion scenario. Consistent with annotations, no contradiction, but does not elaborate on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler. Every word is necessary for the description of a one-parameter destructive tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter, destructive hint, and no output schema, the description is sufficient. Example and schema provide complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully describes the single parameter (asset_id) with origin hint ('from list_assets'). Description adds no additional parameter meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Delete a project asset'. Includes example usage ('one the scan over-extracted') which distinguishes from sibling tools like create_asset and list_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a specific use case (over-extracted assets) but lacks explicit when-not or alternative suggestions. The example gives context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectDelete projectADestructiveInspect
Permanently delete a project and everything in it (script versions, assets, voiceover, segments, renders). Irreversible — confirm with your user first.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ID of the project to permanently delete, from list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint: true. The description adds specific details on what gets deleted (script versions, assets, etc.) and the irreversible nature, providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core action and immediately follow with key context. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one param and no output schema, the description fully covers what the tool does, its effects, and usage warning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds value by noting the project_id comes from list_projects, aiding in parameter selection beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (permanently delete) and the resource (project) with a specific list of contents affected. It distinguishes from siblings like create_project and update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns about irreversibility and advises confirming with the user, which guides appropriate usage. However, it does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_styleDelete styleADestructiveInspect
Delete a style (e.g. a failed analysis experiment). Don't delete a style that projects still use as their default — rebind them first with set_project_style.
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | Yes | ID of the style to delete, from list_styles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds context: warns about deleting styles used as defaults and suggests rebinding. This goes beyond the annotation flag, though it doesn't detail reversibility or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The main purpose is front-loaded, and the caution is concise. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with one required parameter and clear annotations, the description covers purpose, usage, and a crucial pitfall (default styles). It is complete given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter style_id has full description in the schema ('ID of the style to delete, from list_styles'). The tool description does not add additional semantics beyond what the schema provides. Baseline score 3 as schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a style' with an example use case (failed analysis experiment). It distinguishes from sibling tools like set_project_style, create_style, and update_style_fields by explicitly mentioning when not to use it and what to do instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (delete a style, e.g. failed experiment) and when not to (if projects still use it as default), providing an alternative: rebind with set_project_style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
director_noteDirector note (one scene)AInspect
Edit ONE scene with a natural-language note (the same director chat the editor UI uses): move/restyle/add/remove layers and overlays, change motion, etc. Storyboard image, video and voiceover layers can't be removed. Synchronous — returns summary, mutations, skipped_mutations (edits that did NOT land, with reasons — check it) and the scene's layers ({id, name, layerType, segmentAssetId}); list_scenes(include_composition=True) has the full composition. Address the scene by project_id + segment_number (preferred) or a scene_id from a fresh list_scenes call. Scene durations are locked to the narration: don't ask to extend/shorten any but the final scene. remove_segment_asset deletes an SFX or overlay by id without a model in the loop; for whole-video notes, project_director_note.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Natural-language edit note for this scene, e.g. "move the caption to the top" or "calmer motion" | |
| scene_id | No | ID of the scene to edit, from a FRESH list_scenes call — scene ids change whenever segments are edited (split/combine/update-content), so never reuse ids saved earlier; prefer project_id + segment_number | |
| project_id | No | Project ID; required (with segment_number) when not passing scene_id | |
| segment_number | No | 1-based segment number of the scene to edit (from list_scenes or get_segments) — preferred over scene_id because it is resolved to the current scene at call time | |
| conversation_history | No | Prior chat turns as [{"role": ..., "content": ...}] to continue an editing conversation on this scene; omit to start fresh |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (no readOnly/idempotent/destructive hints), so the description carries the full burden. It discloses that the call is synchronous, returns summary/mutations/skipped_mutations (with a warning to check skipped_mutations), and that scene ids change after segment edits – important behavioral context beyond annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: scope, exclusions, return behavior, addressing rules, duration constraint, and alternative tools. It front-loads the primary purpose and packs the rest efficiently without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with five parameters and no output schema, the description covers all critical operational details: what can/can't be edited, return values and their significance, scene addressing, and when to use alternatives. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds semantic value by explaining the preferred addressing method (project_id+segment_number) and why scene_id should come from a fresh list_scenes call (because ids become stale). This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Edit ONE scene with a natural-language note' – a specific verb, resource, and mechanism. It enumerates example actions (move/restyle/add/remove layers, overlays, change motion) and distinguishes itself from siblings by explicitly naming project_director_note for whole-video notes and remove_segment_asset for direct deletions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use and when-not-to-use guidance: 'for whole-video notes, project_director_note' and 'remove_segment_asset deletes an SFX or overlay by id without a model in the loop.' It also sets exclusions (storyboard/video/voiceover layers can't be removed) and a hard constraint (scene durations locked to narration, don't shorten/extend except final scene), plus how to address the scene (project_id+segment_number preferred, scene_id from a fresh list_scenes call).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_videoExport videoAInspect
Render the final MP4 (Remotion). Fetches the current timeline and queues the render. Async — poll get_workflow_status for the video_export job, then call get_video_url.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (not read-only) and destructiveHint=false. The description adds that the tool is async ('Async — poll...') and queues a render job, providing behavioral context beyond annotations. It does not detail side effects or failure scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences immediately conveying the core action and async workflow. Every sentence adds value with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and no output schema, the description adequately covers the tool's role and the async flow. It could mention the need for a complete timeline, but overall it is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description for project_id is clear: 'Project ID, as returned by create_project or list_projects.' The tool description does not add additional meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Render the final MP4 (Remotion)' and explains the process: 'Fetches the current timeline and queues the render.' It distinguishes from siblings like get_video_url and get_workflow_status by describing the async workflow and next steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit post-call steps: 'poll get_workflow_status for the video_export job, then call get_video_url.' This guides the agent on usage. However, it does not specify when not to use this tool or prerequisites like a valid timeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_asset_referenceGenerate asset reference imageAInspect
Render an asset's reference image in the channel's art style — the visual anchor that keeps a character/environment looking identical across every shot. EVERY character, environment, and object asset needs one before generate_voiceover (the server enforces this; fire the jobs for all assets, then one await_jobs). Async — the job writes the image onto the asset row: await_jobs(project_id), then list_assets and view_image the file_path to check likeness.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Image model ID; empty uses the asset's saved drawer choice, else the account default, else the server default | |
| asset_id | Yes | ID of the asset to render a reference image for, from list_assets | |
| settings | No | Model-specific settings (e.g. image quality/orientation); valid keys come from the model's settings_schema in list_models | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template for the reference-image job |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare write/non-idempotent/non-destructive, but the description adds the key traits beyond them: the call is async, the job writes the image back onto the asset row, and the server enforces the prerequisite ordering. It does not mention cost or failure/retry behavior, which is the one remaining gap for an image-generation job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every sentence carries information (role, prerequisite, ordering, verification loop). It is dense and slightly instruction-heavy, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains where the result lands and how to verify it (view_image the file_path) plus the correct batching pattern. It is nearly complete for a 4-param async job, though cost/time expectations are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so model, settings, and editable_sections are already documented in the schema. The description adds no parameter-level detail (e.g., guidance on which model or section overrides to use), so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Render an asset's reference image") plus the scope (in the channel's art style) and the artifact's role as a cross-shot visual anchor. An agent can distinguish this from generate_voiceover, regenerate_segment_asset, and create_asset without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when it must be used ("EVERY character, environment, and object asset needs one before generate_voiceover"), that the server enforces this ordering, and names the follow-up tools (await_jobs, list_assets, view_image). Nothing about sequencing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_scriptGenerate scriptAInspect
Generate the project's script from its description/concept and the channel's narrative style. Async — returns {job_id}; poll get_workflow_status.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID to generate with; empty uses the default (see list_models("script")) | |
| settings | No | Model-specific settings; valid keys come from the model's settings_schema in list_models("script") | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template("script") for the sections this job exposes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses async behavior and the need to poll 'get_workflow_status', adding behavioral context beyond the all-false annotations. It does not cover potential side effects, but the 'generate' verb implies non-destructive creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise and front-loaded sentences: the first states the purpose, the second describes the async pattern. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core behavior and async workflow. It could mention prerequisites like existing project and channel narrative style, but the schema references provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is well-described in the schema. The description adds no additional parameter meaning, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a script from the project's description/concept and the channel's narrative style, distinguishing it from related siblings like 'revise_script' or 'scan_script'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for initial script generation but does not explicitly provide when to use this tool versus alternatives such as 'revise_script' for modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_segmentsRender segment assetsAIdempotentInspect
Render every actionable segment asset (images, video clips, overlays) across the project, in dependency order. THE most expensive call in the pipeline: ALWAYS dry_run=true first, show your user the estimate next to get_credit_balance, and wait for a fresh yes before the real run — prior blanket permission ("do the whole thing") does not cover this spend. The staged flow is cheapest: asset_scope="no_clips" first (images + overlays), review, then animate_segment the shots that deserve motion. Pass segment_numbers to render only a subset — e.g. segments 1-18 for the opening minute before committing to the full video. Safe to re-run: completed and currently-generating assets are skipped, so a second call only picks up new/failed work. Async — one job per asset; await_jobs until all complete.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True returns the credit-cost estimate without rendering anything; ALWAYS run true first and get user approval before the real run | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| asset_scope | No | "" renders everything actionable; "no_clips" is the cheap base pass (images, overlays, fetched b-roll — no generated video clips); "clips_only" renders just the generated clips | |
| segment_numbers | No | 1-based segment numbers (from get_segments) to render only a subset; omit to render every actionable asset in the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: this is the most expensive pipeline call, prior permission does not cover it, re-runs skip completed and currently-generating assets, and execution is async with one job per asset requiring await_jobs. This aligns with idempotentHint=true and gives the agent critical operational guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, cost warning, staged workflow, subset guidance, idempotency, and async behavior. The most important operational warning is front-loaded immediately after the purpose statement, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity and no output schema, the description covers the full decision workflow: dry-run before spending, staged scope selection, subset rendering, re-run safety, and async completion via await_jobs. It also references related tools (get_credit_balance, animate_segment, get_segments) that the agent will need to execute correctly. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by showing how parameters work together: using asset_scope="no_clips" as a cheap first pass, and passing segment_numbers like 1-18 to render only the opening minute before committing to the full video. This converts bare parameter options into a coherent invocation strategy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: rendering every actionable segment asset (images, video clips, overlays) across the project in dependency order. It clearly differentiates this bulk generation tool from siblings like animate_segment and regenerate_segment_asset by emphasizing project-wide scope and dependency ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use instructions: always run with dry_run=true first, show the credit estimate alongside get_credit_balance, and require fresh user approval before the real run. It also prescribes a staged workflow using asset_scope="no_clips" then animate_segment, and explains when to use segment_numbers for subset rendering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_storyboardGenerate storyboardADestructiveInspect
Plan the full visual storyboard: segments, shot pacing, image/video prompts, overlays, continuation chains — driven by the channel's director and art styles. Requires voiceover to exist (timing comes from it). Plans generated stills + real media only (real media requires the style's @real-media tag); generated video is added per segment after the images render, with animate_segment. Async — returns {job_id}; this is the longest LLM step.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID to plan with; empty uses the default (see list_models("storyboard")) | |
| settings | No | Model-specific settings; valid keys come from the model's settings_schema in list_models("storyboard") | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template("storyboard") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only the mutation/destructive profile (destructiveHint=true, readOnlyHint=false); the description adds genuinely new behavioral facts the schema cannot express: async execution, exact return shape ({job_id}), relative latency ('longest LLM step'), and a processing boundary (video deliberately deferred to animate_segment). The @real-media tag constraint also discloses a failure condition in advance. No statement contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct information in a logical order: purpose → prerequisite → scope boundary → async/latency. Critical facts are front-loaded and there is zero redundancy or filler; the density is justified by the tool's async, multi-phase complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async tool with no output schema, the description covers what it does, what it requires, what it deliberately excludes, and what it returns — enough for correct invocation. The only omission is an explicit pointer to poll via await_jobs, though that is inferable from the {job_id} return and the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already carries a rich description referencing sibling tools (list_models, get_section_template). The tool description adds only indirect context — the voiceover prerequisite implies project_id must reference a voiced project, and 'director and art styles' explains what drives model/settings choice — but no parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Plan') and resource ('the full visual storyboard') with enumerated deliverables — segments, shot pacing, image/video prompts, overlays, continuation chains. The visual-planning focus differentiates it from siblings like generate_script, generate_voiceover, and generate_segments, and the 'full' scope distinguishes it from per-segment tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Requires voiceover to exist (timing comes from it)') that tells an agent when it is valid to call, and routes the next pipeline step to animate_segment ('generated video is added... with animate_segment'). Lacks an explicit when-not-to-use statement naming alternative planners such as generate_segments, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_style_templateGenerate style templateAInspect
Render one of a style's two template images — a REAL step of style
setup, not an optional extra: a style isn't finished until both its
character and environment templates are rendered (the app shows them on
the style card). Asset reference images render against them (characters →
character template; environments and objects → environment template), and
segment renders fall back on them when a shot has no asset reference — so
finish BOTH before generate_asset_reference. Run once per template_type
("character" | "environment") for every new style; skip types the style
already has (get_style's templates). A template already exists is a hard
stop here — the call refuses unless replace=True, because overwriting one
silently re-anchors every future render. Async — await_jobs(style_id=...),
then get_style.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Image model ID; empty uses the template job's default (see list_models) | |
| replace | No | Set True ONLY to deliberately overwrite an existing template of this type — the user must have asked for a new one. Leave False and the call refuses rather than clobbering a template the style already has | |
| style_id | Yes | Style ID, as returned by create_style or list_styles | |
| template_type | Yes | Which of the style's two template images to render: "character" or "environment" — run once for each | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template for the template job |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (all false), so description carries full burden. It discloses that overwriting re-anchors future renders, that an existing template causes refusal unless replace=True, and that the operation is async.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence adds unique operational info: purpose, rationale, prerequisites, edge case, and async guidance. Front-loaded with the core purpose, avoiding redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 purpose, workflow position, edge cases, and async behavior. It directs to await_jobs and get_style to verify completion, making it operationally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, so baseline is 3. Description adds workflow context (run once per type, replace semantics, async follow-up) that goes beyond the schema, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Render one of a style's two template images' with a specific verb and resource. Explicitly distinguishes from generate_asset_reference and refers to get_style for checking existing templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not-to-use guidance: run once per template_type, skip types the style already has, finish both before generate_asset_reference. Also explains the hard stop and replace=True exception.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_voiceoverGenerate voiceoverAInspect
Generate TTS audio for the project's voice blocks. Without voice_block_ids it fills gaps: only blocks with no audio yet run, so re-calling it is always safe (already-generated and currently-generating blocks are skipped, never re-billed). Pass voice_block_ids to explicitly REgenerate those blocks (e.g. after changing a block's voice). Speakers must have voices bound first — set_narrator_voice / set_character_voice. Optional editable_sections/settings apply to every selected block (see get_section_template("voice_block") and list_models("voice_block")). On a project that already has a storyboard, segment timings are re-aligned to the new audio automatically when the run finishes (prompts and rendered images untouched) — await_jobs until the project is idle before exporting. Async — returns one job per block.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | TTS model ID; empty uses the default for the project's TTS provider. If set, it must belong to that provider — see list_models("voice_block") for each model's provider | |
| settings | No | Model-specific TTS settings applied to every selected block; valid keys come from the model's settings_schema in list_models("voice_block") | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| voice_block_ids | No | Block IDs (from list_voice_blocks) to explicitly REgenerate; omit to fill gaps — only blocks with no audio yet run | |
| editable_sections | No | Per-call prompt section overrides applied to every selected block; see get_section_template("voice_block") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate no read-only, open-world, idempotent, or destructive hints, so the description must disclose behavior. It reveals non-idempotence for regeneration (re-billing), explains idempotent gap-filling (skips existing), and notes automatic re-alignment of segment timings. It also mentions async behavior. This adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-structured: the first sentence states the core, then critical safety and regeneration semantics, then prerequisites and side effects. Slightly long but each clause carries information; no redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, async, side effects) and lack of output schema, the description covers essential usage, pitfalls (re-billing), and post-condition (await_jobs). It might omit error cases or exact response shape, but these are not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes beyond by clarifying the dual semantics of voice_block_ids (omit vs pass) and explaining how editable_sections/settings apply to every selected block. It also directs to get_section_template and list_models for valid keys, adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generating TTS audio for voice blocksians, with a specific verb (generate), resource (voice blocks), and distinct modes (fill gaps vs regenerate). It differentiates from siblings like set_narrator_voice and update_voice_block by focusing on audio generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each mode: omit voice_block_ids to fill gaps safely, or pass them to regenerate. It also states a prerequisite (voices must be bound) and references sibling tools for setup. This is comprehensive routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_balanceGet credit balanceARead-onlyIdempotentInspect
Current credit balance + plan info. Check before expensive steps (a full segment render can cost hundreds of credits — generate_segments dry_run gives the estimate). Jobs covered by a BYOK provider key bill 0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description does not contradict them. It adds useful context about what data is returned (balance and plan info) and billing behavior, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences; first states purpose, second gives usage guidance. No wasted words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description fully covers what it does and when to use it. The billing nuance adds completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% schema description coverage. Baseline is 4. The description does not need to add parameter info, and it doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'current credit balance + plan info', which is a specific verb+resource combination. No sibling tool overlaps with this purpose, so it is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to check before expensive steps, provides a concrete example (full segment render costing hundreds of credits), and mentions alternative (generate_segments dry_run for estimate). Also clarifies that BYOK jobs bill 0. This is excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_progressGet pipeline progressARead-onlyIdempotentInspect
THE resume/orientation tool: one call returns every pipeline step's state (script -> scan -> reference_images -> voices -> voiceover -> style_templates -> storyboard -> segment_assets -> scenes -> export), any running jobs, and a next_action telling you exactly what to do next. Call this when picking up an existing project, after any await_jobs, or whenever you're unsure where a video stands — never guess pipeline position.
Every step carries a web_url — the page in the Framesail web app where your
user can see that step's output. Share it whenever you present a step's
results ("review the storyboard here: ...") so they can inspect and edit in
the browser; the app and this API act on the same live state.| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds context that it provides comprehensive state, web URLs for step outputs, and next_action guidance, which is behaviorally rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient paragraphs, front-loaded with purpose and usage. The second paragraph adds important web_url guidance, though it slightly extends beyond core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completes the picture for a complex pipeline tool without output schema: explains return structure, step list, next_action role, and web URL usage. No gaps for agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (project_id) that has a clear description. The description adds minor clarification about project_id source but does not significantly extend beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns every pipeline step's state, running jobs, and next_action, using specific step names. It distinguishes itself as a resume/orientation tool from sibling tools that perform individual pipeline actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: when picking up an existing project, after await_jobs, or when unsure of video status. Includes directive 'never guess pipeline position'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet projectARead-onlyIdempotentInspect
Fetch a project row — settings, voice config, default style, export URL.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, indicating a safe read operation. The description adds value by detailing the response content (settings, voice config, etc.), which goes beyond the annotations and informs the agent of what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the essential information without any fluff. Every word is meaningful, and the structure is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no output schema), the description is complete. It explains what data is returned, compensating for the lack of an output schema. The context signals and sibling tools further clarify its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter project_id, with a clear description in the schema. The tool description does not add additional semantics beyond what is already in the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch a project row' and lists specific fields returned (settings, voice config, default style, export URL), making the purpose explicit and distinct from sibling tools like create_project, update_project, and list_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for retrieving a single project by ID, which is clear. However, it does not explicitly state when not to use it (e.g., use list_projects for browsing or update_project for modifications), so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scriptGet scriptARead-onlyIdempotentInspect
Read the active script's full text + the version list. Use this to show the script to your user for review/feedback before scan_script — the review-edit-resave loop (get_script -> discuss -> save_script) is the expected workflow when the user wants input.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the exact return content (full text + version list), which goes beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main purpose. No extraneous words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter, no output schema, and comprehensive annotations, the description provides sufficient context about the tool's role in the workflow and expected behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single parameter (project_id) adequately. The description does not add new parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the active script's full text and version list. The verb 'Read' and resource 'script' are explicit, and it distinguishes itself from sibling tools like scan_script or save_script.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use this tool before scan_script and within a review-edit-resave workflow. It provides clear guidance on when and how to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_section_templateGet section templateARead-onlyIdempotentInspect
Inspect the prompt sections a generation job exposes for per-call override via editable_sections (jobs: script, script_scan, storyboard, segment_image, segment_video, voice_block, ...). Sections marked locked cannot be overridden.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | Generation job name, e.g. "script", "script_scan", "storyboard", "segment_image", "segment_video", "voice_block" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds key behavioral detail: 'Sections marked locked cannot be overridden', which is beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Purpose stated upfront, followed by essential behavioral constraint. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter; description sufficiently explains input and expected output (list of sections with locked flag). No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the single parameter 'job' with 100% description coverage (lists examples). Description reiterates examples and adds context linking to editable_sections, but adds little new meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Inspect the prompt sections a generation job exposes for per-call override via editable_sections', clearly defining verb, resource, and purpose. Includes example job names, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly clear when to use: to inspect editable sections before overriding. No explicit exclusions or alternatives, but context and sibling list make purpose distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segment_assetsGet segment assetsARead-onlyIdempotentInspect
List one segment's assets (images/video/overlays) including their status, config (prompts, model), and public URLs of rendered files — pass an image's public_url to view_image to actually look at it.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds return details (status, config, public URLs) which is useful but not extensive. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description adequately explains return content (status, config, public URLs) and hints at next step (view_image). Complete for a listing tool with two required params and good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with clear descriptions for both parameters. Description does not add additional parameter-level information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies verb 'list', resource 'one segment's assets', and includes details on what is returned (status, config, public URLs). It also distinguishes from sibling 'view_image' by noting that to view an image, use view_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the tool lists assets for a segment and provides guidance to use view_image for actually viewing images. Lacks explicit when-not-to-use but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segmentsList segmentsARead-onlyIdempotentInspect
List the storyboard's segments (narration span, type, duration, creative direction). The 1-based segment_number is the handle every segment tool takes (update/split/combine/continuation/regenerate) — you never need a UUID. Returns {total, offset, returned, segments}; on big projects page through with offset/limit rather than fetching all segments in one call.
Each segment reports `continues_from_segment`: when set, this shot
CONTINUES that earlier segment's frame (same composition, only the delta
changes); null is a fresh shot. Adjust with set_segment_continuation.
Each segment's segment_assets also lists its overlays (asset_type
ui_element, text under config.overlay) — the one call that audits every
lower third / title card in the project.| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum segments to return; 0 returns all. Long-form projects can hold 100+ segments — page with offset/limit instead of pulling everything at once. | |
| offset | No | 0-based index of the first segment to return (pagination) | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds substantial behavioral context: it explains the meaning of the `continues_from_segment` field (continuation vs. fresh shot), the pagination behavior (limit/offset, 0 returns all), and that each segment's assets include overlays. It also discloses the return shape {total, offset, returned, segments}. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but every sentence contributes: it covers the return shape, pagination, the continuation semantics, and the overlay auditing capability. It is front-loaded with the core purpose, and the subsequent paragraphs expand on important behavioral details without redundancy. It earns its length given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with three parameters, no output schema, and rich annotations, the description covers everything an agent needs: the return structure, the pagination pattern, the special meaning of a field, and how the result relates to other tools. The description is complete enough to call the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already described. The description goes beyond the schema by explaining the pagination intent ('page through with offset/limit rather than fetching all segments') and clarifying that segment_number (not a parameter here) is the handle for other tools. It reinforces the meaning of limit/offset without repeating the schema text verbatim, adding contextual value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('List') and resource ('storyboard's segments'), then enumerates the returned fields (narration span, type, duration, creative direction). It explicitly states that segment_number is the handle used by all segment tools, and distinguishes itself from sibling tools like get_segment_assets by noting it is the one call that audits every overlay. This clearly separates it from the get_segment_assets sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool: to list segments and to audit overlays, and it tells the agent to page through large projects with offset/limit rather than fetching everything. It also points to set_segment_continuation for adjusting the continuation field, giving an alternative action. No ambiguity about when to use it versus other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_styleGet styleARead-onlyIdempotentInspect
Fetch one style row — its inputs (reference material), analyzed fields
(art_style, narrative_style, director_style, script_prompt, ...), and
templates: {"character": url|null, "environment": url|null}, the two
template images. A null there means that template is genuinely missing and
needs generate_style_template; a URL means it exists (view_image it) —
don't re-render it. Show fields to the user for review; fine-tune with
update_style_fields. inputs_stale: true means the references changed
since the last analysis run — the analyzed fields don't reflect them;
offer the user analyze_style (it rewrites those fields).
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | Yes | Style ID, as returned by create_style or list_styles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description reveals important state semantics: null vs URL template meaning, the fact that inputs_stale indicates analyzed fields are outdated, and the downstream consequences of those states. This is meaningful behavioral context not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and every clause earns its place, covering the return shape, null/URL handling, and stale-input behavior. It is slightly long but justified by the semantic complexity of the tool's return state.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 state interpretation. It covers the main fields, the templates object, null semantics, and inputs_stale behavior, giving an agent everything needed to correctly act on the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, style_id, and the schema already documents it fully as 'Style ID, as returned by create_style or list_styles.' The description adds no new parameter detail, but with 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Fetch one style row') and enumerates exactly what that row contains: inputs, analyzed fields, and templates. It is clearly distinguishable from sibling tools like list_styles, analyze_style, update_style_fields, and generate_style_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives conditional routing guidance: null template values should lead to generate_style_template, URL values to view_image, stale inputs to analyze_style, and review/fine-tuning to update_style_fields. This explicitly tells an agent when to use this tool versus related alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_urlGet video download URLARead-onlyIdempotentInspect
Download URL for the most recent completed export.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe read. The description adds contextual details: it returns a download URL for the 'most recent completed export,' which is helpful beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and directly tells the agent what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and clear annotations, the description is mostly complete. It could mention that the export must have been completed, but this is implied. No output schema needed for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter (project_id) described as 'Project ID, as returned by create_project or list_projects.' The description does not add any additional meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Get video download URL' and description 'Download URL for the most recent completed export' clearly state the verb (get/download) and resource (video URL). It distinguishes from siblings like export_video which creates exports, and other get_ tools which retrieve different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after an export is completed but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites (e.g., an export must exist). No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_statusGet workflow statusARead-onlyIdempotentInspect
Poll this between steps: returns active + recently-finished AI jobs
(scope by project_id, or style_id for style analysis), plus per-segment-
asset render statuses for projects. A step is done when its jobs reach
status=complete (or error, with a user-readable message). NOTE: finished
jobs drop out of jobs after ~30s — a short list does NOT mean work was
lost; judge render batches by segment_assets statuses (or
get_pipeline_progress), never by counting jobs. Prefer await_jobs over
polling this in a tight loop.
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | No | Style ID to scope jobs to (style analysis); pass exactly one of project_id or style_id | |
| project_id | No | Project ID to scope jobs to; pass exactly one of project_id or style_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. The description adds crucial behavioral context: finished jobs drop out after ~30s, a short list does not mean work lost, and how to correctly assess render batches. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, well-structured, with clear language and a notable warning in bold. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (transient jobs, multiple scope options), the description covers usage, interpretation of results, and links to sibling tools. No output schema exists, but the description hints at return structure (jobs, segment_assets, error messages) adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds minimal extra value (e.g., 'for style analysis' for style_id) but largely repeats what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns active and recently-finished AI jobs, scoped by project_id or style_id, plus per-segment-asset render statuses. It distinguishes itself from siblings like await_jobs and get_pipeline_progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises polling between steps, recommends preferring await_jobs over tight polling, and warns against counting jobs to judge render batches. Provides clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsList assetsARead-onlyIdempotentInspect
List the project's assets extracted by scan_script — characters, environments, objects. Each has a description (the spec every shot uses to render it — surfaced top-level here; the raw row nests it at ai_output.description), an optional reference image (file_path is a public URL — view_image it), and for characters a voice_id. Review these after scan_script: fix descriptions, then generate_asset_reference for each one (all of them need a reference image before voiceover). asset_type filter: "character" | "environment" | "object".
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | Optional filter: "character", "environment", or "object"; empty lists all asset types | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds useful behavioral context: the output structure (description surfaced top-level, file_path as public URL, voice_id for characters) and the asset_type filter behavior. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus a clause. It front-loads the purpose, then provides workflow context, then filter details. Every sentence is necessary and informative, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (2 params, no output schema) and rich annotations, the description fully covers what the tool does, what the output contains, and its place in the workflow. It explains the asset types, their attributes, and recommended next steps, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with adequate descriptions for both parameters. The description adds value by explaining the asset_type filter values explicitly ('character', 'environment', 'object') and indicating that empty lists all types. It also clarifies the project_id context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'assets', and the scope 'project's assets extracted by scan_script'. It distinguishes from sibling tools like create_asset, delete_asset, update_asset by specifying the source and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'Review these after scan_script'. It also gives next steps: 'fix descriptions, then generate_asset_reference for each one'. It doesn't explicitly state when not to use or list alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsList channelsARead-onlyIdempotentInspect
List your channels. Every project lives in a channel, which owns the reusable styles (art/narrative/director) that drive generation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, read-only operation. The description adds value by explaining that channels own reusable styles, which is behavioral context beyond the annotations. No contradictions or missing disclosures for this simple list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the action, and every sentence provides essential information. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no parameters and comprehensive annotations, the description sufficiently covers what the tool does and the context of channels. No output schema exists, but the description doesn't need to detail returns for such a standard operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is trivially 100%. The description does not need to add parameter details, and the baseline for zero parameters is 4. No additional parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'your channels', which is specific and distinct from sibling list tools like list_projects or list_assets. The additional sentence explains the role of channels, reinforcing the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_projects or list_styles. It simply states what it does without context for selection or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsList modelsARead-onlyIdempotentInspect
List the models allowed for a generation job, with display names, credit
estimates, and each model's settings_schema — the valid keys for that
tool's settings param (e.g. image quality/orientation, video duration).
When model is omitted the server picks: the scope's saved expert-drawer
choice if one exists, else the account's default for the job (set on the
account page), else the first entry here. The list is personalized — the
account default is listed first with its saved settings as the schema
defaults. Jobs whose models split into families (voice_block by provider,
segment_video by lip_sync) are personalized only when you name the family,
since the account default is stored per family.
Voice models carry a provider field — a voice_block model must match the
project's voice_tts_provider or generate_voiceover rejects it.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | Generation job whose allowed models to list, e.g. "script", "storyboard", "segment_image", "segment_video", "voice_block" | |
| lip_sync | No | segment_video only: whether the shot is lip-synced to the narration (the asset's config.lip_sync). Video models split on it, so pass it to get that family's list and the account default for it. | |
| provider | No | voice_block only: the project's voice_tts_provider ("minimax" or "elevenlabs"). Voice models split by provider, so pass it to get that family's list and the account default for it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only profile, yet the description adds substantial behavior beyond them: the deterministic default-resolution order (saved expert-drawer choice > account default > first entry), personalization ordering, family-level personalization, and the hard constraint that a voice_block model must match the project's voice_tts_provider or generate_voiceover rejects it. That last item is a cross-tool failure condition an agent cannot infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the remaining lines each carry distinct information (defaults, personalization, family behavior, provider constraint). It is dense and slightly clause-heavy, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describing the returned data (display names, credit estimates, per-model settings_schema) and how entries are ordered. Combined with full param coverage, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning not in the schema — chiefly the default-resolution behavior when `job`... is unspecified, and the rationale for the optional family params. It reinforces rather than merely repeats the schema's own lip_sync/provider hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the models allowed for a generation job') and goes further to enumerate what the listing contains (display names, credit estimates, settings_schema). This clearly separates it from sibling list_* tools like list_voices/list_styles and tells an agent it is the model-enumeration call for a job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the selection semantics when `model` is omitted and, more importantly, states when to pass the family parameters (lip_sync for segment_video, provider for voice_block) and why — 'personalized only when you name the family'. It does not name alternative tools or explicit exclusions, but the when-to-pass guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_music_tracksList music tracksARead-onlyIdempotentInspect
List the project's background music tracks (volume, loop, timing).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds useful context about the returned properties (volume, loop, timing), going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool with one param and rich annotations, description explains what is returned (volume, loop, timing). However, could be more explicit about listing all tracks and output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, with a good description in the schema. The tool description does not add any additional param information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'list' and resource 'background music tracks' with properties (volume, loop, timing). Clearly distinguishes from sibling tools like add_music_track and remove_music_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives provided. The purpose is implied from sibling tool names, but lacks guidance on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsBRead-onlyIdempotentInspect
List projects in a channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID of the channel whose projects to list, from list_channels or create_channel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description does not add any behavioral context (e.g., pagination, error handling, rate limits, or what happens if the channel is not found). It adds no value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words, achieving maximum conciseness. It is well-front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the simple structure (1 required param, no output schema), the description fails to explain what is returned (e.g., list of project IDs or full objects). Without output schema, description should specify return format. Also lacks details like ordering, filtering, or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (channel_id has a description). The tool description does not mention parameters, so it adds no additional meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List projects in a channel' clearly specifies the verb (list), resource (projects), and scope (in a channel), effectively distinguishing it from sibling tools like get_project (single project) or create_project (create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_project or list_assets. It does not mention prerequisites, ordering, filtering, or pagination. The schema parameter description hints at obtaining the channel_id from other tools, but the description itself offers no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_provider_keysList provider keysARead-onlyIdempotentInspect
List registered BYOK providers (masked — only the last 4 characters). Returns {keys: [...]}; an empty list means no keys are registered (every job bills platform credits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral details beyond the annotations: the masking behavior ('only the last 4 characters') and the interpretation of an empty result. These are not available in the annotations or schema, making the description genuinely informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences deliver the key facts with no filler. The main behavior (list masked provider keys) is front-loaded, and the return semantics are stated immediately afterward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, idempotent list operation, the description fully covers what an agent needs: what is returned, how it is masked, and how to interpret an empty list. The annotations already cover safety, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so parameter documentation is structurally complete. The description adds no parameter details, but none are needed; per the baseline for zero-parameter tools, this is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('registered BYOK providers') and adds a distinguishing detail: keys are masked to the last 4 characters. This clearly sets it apart from sibling list_* tools without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by explaining the return shape and the meaning of an empty list (no keys registered, so jobs bill platform credits). It does not explicitly name alternative tools or exclusion conditions, but the resource is distinct enough that usage is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenesList scenesARead-onlyIdempotentInspect
List the project's scenes in timeline order. Default rows are light summaries ({scene_id, segment_number, duration_frames, status, layer_count}) — enough to address a scene by number or id; include_composition=True returns the full layer/layout JSON (bulky — page with offset/limit on long projects). Returns {total, offset, returned, scenes}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum scenes to return; 0 returns all | |
| offset | No | 0-based index of the first scene to return (pagination) | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| include_composition | No | Include each scene's full composition JSON (layers, layout) — kilobytes per scene, so page with offset/limit when True; the default summary rows are enough for ids and director notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses timeline ordering, the difference between summary and full composition output, the bulk/volume warning, and the exact response envelope {total, offset, returned, scenes}. This gives the agent a realistic expectation of cost and output without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core behavior first, then the mode trade-off, then the return shape. Every clause contributes useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description supplies the response wrapper shape and enough detail about both output modes to interpret results. Combined with annotations covering side-effect safety, nothing an agent needs to invoke or understand the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters with 100% coverage, so the baseline is 3. The description adds value by explaining when summary fields suffice, warning that include_composition is bulky, and explicitly tying offset/limit to pagination on long projects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), resource ('the project's scenes'), and ordering ('timeline order'), clearly distinguishing it from sibling listing tools for other resource types such as list_assets, list_projects, and list_styles. There is no ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: default light summaries are enough to address a scene by id or number, while include_composition=True returns bulky JSON and should be paginated for long projects. It does not explicitly contrast against a sibling alternative, but the tool's role and the trade-off between modes are clearly laid out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_style_presetsList style presetsARead-onlyIdempotentInspect
The curated preset catalog for the no-AI style creation path, grouped by axis (art_style / narrative_style / director_style). Show the user the labels + descriptions and let THEM pick one per axis — don't choose silently. Art presets include preview image URLs (view_image works on them). Create with create_style(presets={axis: id, ...}) — instant, no analysis job. Full field text lands on the style row (get_style shows it after creation).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by revealing that art presets include preview image URLs viewable with view_image, and that creation via create_style is instant with no analysis job. This adds significant 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, but slightly verbose with some redundant phrases. Still, every sentence adds value and the structure aids quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of output schema, the description fully compensates by explaining the output format, usage flow, and relationship to other tools. No gaps remain for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, but the description enriches understanding by detailing what the output contains (labels, descriptions, preview URLs) and how to use them, which is the essence of parameter semantics for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists curated presets for a no-AI style creation path, grouped by axis (art_style, narrative_style, director_style). It distinguishes this from other style tools like list_styles and the analysis path, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidelines are given: show the user labels + descriptions, let them pick per axis, do not choose silently. It also directs the agent to create_style for instant creation, effectively guiding tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stylesList stylesARead-onlyIdempotentInspect
List the channel's style rows (variable groups). Styles hold the art_style / narrative_style / director_style / script_prompt fields that drive every generation step, plus any custom @variables.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID of the channel that owns the styles, from list_channels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds context about what the styles contain, but does not mention pagination, ordering, or return format. Extra detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, front-loaded with the action. Every word adds value. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description covers purpose and what the items represent. A minor gap is the lack of explicit mention that the output is a list of style objects, but it is implied by 'List the channel's style rows.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (channel_id) is fully described in the input schema with a clear description. With 100% schema coverage, the description adds no additional parameter semantics beyond the schema, hitting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'style rows (variable groups)' and mentions specific fields (art_style, narrative_style, etc.), making the purpose specific. However, it does not explicitly differentiate from sibling tools like get_style or create_style, which would push it to a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that styles 'drive every generation step,' implying when to use this tool (to see styles affecting generation), but it gives no guidance on when not to use it or how it compares to alternatives like get_style or analyze_style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_voice_blocksList voice blocksARead-onlyIdempotentInspect
List the project's voice blocks (per-speaker narration chunks) with
their audio status and assigned voices. A block's scene_direction is the
script's [SCENE: ...] direction governing it (never spoken; null when
the span carries none). Word-level subtitle timings are stripped unless
include_subtitle_data=True.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| include_subtitle_data | No | Include each block's word-level subtitle timings — bulky and rarely needed; omitted by default (subtitle_data reports "omitted" when present but stripped) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the semantics of scene_direction (never spoken, null when absent) and by disclosing that subtitle timings are stripped by default unless include_subtitle_data=True. These are non-obvious behaviors an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence earns its place: purpose, field clarification, and default behavior. It is front-loaded with the core action and keeps supporting details brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description covers what is returned (audio status, assigned voices), clarifies a key field's semantics, and explains the optional parameter's effect. With annotations already covering safety and idempotence, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well documented. The description reinforces the include_subtitle_data behavior but adds no meaningfully new parameter information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the project's voice blocks', and clarifies exactly what a voice block is ('per-speaker narration chunks'). It also differentiates the resource from sibling tools by focusing on voice blocks rather than scenes, segments, or assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: an agent should use this when it needs voice blocks with audio status and assigned voices. However, it does not explicitly discuss alternatives such as update_voice_block or rescan_voice_blocks, nor does it state 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.
list_voicesList voicesARead-onlyIdempotentInspect
List available TTS voices (id, label, preview audio URL) for a provider:
"minimax" (default engine) or "elevenlabs". Match the project's
voice_tts_provider (see get_project) so picked ids work with its engine.
Returns {groups: {name: count}, voices}; the ElevenLabs catalogue is
150+ voices, so pass group (names from groups) rather than reading it
all at once.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Return only this catalogue group (case-insensitive; e.g. "Narration", "Characters"). Empty returns every group — the ElevenLabs catalogue is 150+ voices, so filter it by group; the response's `groups` lists the valid names with counts. | |
| provider | No | TTS engine to list voices for: "minimax" (default engine) or "elevenlabs"; match the project's voice_tts_provider | minimax |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavior beyond annotations: it reveals the response shape ({groups, voices}) and warns about the large ElevenLabs catalogue, guiding the agent to filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: purpose, provider guidance, and response/filtering note are each front-loaded and necessary. The structure makes the key operational detail (large catalogue, use groups) easy to find.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with richly annotated schema and no output schema, the description supplies the essential missing pieces: return shape, provider-project matching, and group filtering. Nothing critical is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'group' and 'provider' well. The description reinforces the provider choices and the group-filtering strategy but does not add substantial new parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'List available TTS voices' and names the returned fields (id, label, preview audio URL). It also distinguishes the two provider engines, making the tool's scope clear relative to sibling tools like list_voice_blocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear practical context: match the project's voice_tts_provider (pointing to get_project) and filter by group for ElevenLabs to avoid reading 150+ voices. It does not explicitly name exclusions or alternatives, but the guidance is sufficient for correct use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_director_noteDirector note (whole project)AInspect
Apply a project-WIDE director note ("make the intro punchier", "all captions bigger"). A routing pass picks the scenes the note applies to and edits each — at most 10 scenes per call, so a change touching more needs repeat calls or per-scene director_note. Synchronous — a few seconds per scene. Returns per-scene results (summary, mutation_count).
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Project-wide director note in natural language, e.g. "make the intro punchier" or "all captions bigger" | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several non-obvious behaviors beyond the sparse annotations: a routing pass selects applicable scenes, the call is synchronous with a few seconds per scene, there is a hard limit of 10 scenes, and the return value is per-scene results with summary and mutation_count. This fully carries the behavioral burden since all annotations are false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states purpose, the second states the routing constraint and alternative, the third states behavior and return shape. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and all-false annotations, the description covers purpose, constraints (10 scenes), synchronous timing, and return fields. It could additionally mention error cases or what happens when no scenes match, but it is already sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters already well-described: 'message' has natural-language examples and 'project_id' explains its origin. The description reinforces that 'message' is project-wide in scope but does not add any new parameter-level 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.
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: 'Apply a project-WIDE director note', with concrete examples like 'make the intro punchier'. It also differentiates itself from the sibling 'director_note' by explicitly framing the scope as project-wide, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear condition for when to repeat calls or fall back to the alternative: 'at most 10 scenes per call, so a change touching more needs repeat calls or per-scene director_note'. It identifies the sibling tool and a limiting constraint, though it could be more explicit about preferring per-scene director_note for single-scene edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regenerate_segment_assetRegenerate segment assetAInspect
Regenerate a segment's primary image or video with optional overrides — the API equivalent of the editor's expert drawer. asset_type: "image" | "video" (for a video segment, "image" targets its start frame). Use a different model, override prompt sections (see get_section_template("segment_image")), or tweak settings (e.g. image quality), then re-run just this asset. Async — returns {job_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID to render with; empty uses the job's default (see list_models("segment_image") / list_models("segment_video")) | |
| settings | No | Model-specific settings (e.g. image quality, video duration); valid keys come from the model's settings_schema in list_models | |
| asset_type | Yes | "image" or "video"; for a video segment, "image" targets its start frame | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template("segment_image") or ("segment_video") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are non-committal (no readOnly/hints), but the description adds key behavioral details: async execution, returns {job_id}, and that it is the API equivalent of the editor's expert drawer. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) with no wasted words. It front-loads the main purpose, then clarifies key parameters and async behavior, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return value ({job_id}). It also references related tools for parameter details, making it self-contained for an agent. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions, but the description adds context beyond the schema, such as clarifying that asset_type 'image' for a video segment targets the start frame, and listing the purpose of editable_sections and settings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool regenerates a segment's primary image or video with optional overrides, explicitly mentioning asset_type and async behavior. It distinguishes itself from siblings by focusing on regenerating individual assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (re-run just this asset with different model, overrides, settings) and references related tools like get_section_template and list_models. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_music_trackRemove music trackADestructiveInspect
Remove a music track from the project.
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes | ID of the music track to remove, from list_music_tracks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true, so description confirms removal but adds no new behavioral details (e.g., irreversibility, permissions). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, directly conveys the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple removal tool with one parameter, the description is sufficient. No output schema needed. Could mention if operation is reversible, but still complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with description for track_id including source hint 'from list_music_tracks'. Description adds context beyond schema, improving parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses clear verb 'remove' and resource 'music track' with scope 'project'. Distinguishes well from siblings like 'add_music_track' and 'update_music_track'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., when to remove vs update). It mainly states the action without context on prerequisites or side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_segment_assetRemove segment assetADestructiveInspect
Delete a segment's sound effect or overlay (lower third, title card, callout) — the asset and every scene layer built from it, immediately. These are the only removable assets: the segment's image, video and voiceover are structural. With one SFX/overlay attached, no id needed.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | No | ID of the SFX or overlay asset, from get_segment_assets; needed only when the segment has more than one of them | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already flag destructiveHint=true, the description adds that it removes the asset and every scene layer built from it, immediately. This goes beyond the annotation by revealing cascading effects and the lack of reversal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and scope, no filler. Every phrase adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with no output schema, the description covers the action, the asset types, the condition for asset_id, and the immediate cascading effect. Minor gap: no mention of errors or confirmation, but not necessary given annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 value by explaining when asset_id is optional and where to obtain it (get_segment_assets), which the schema only partially implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action (delete), the resource (segment's sound effect or overlay), and clarifies scope by explicitly excluding structural assets (image, video, voiceover). This clearly differentiates it from siblings like delete_asset and remove_music_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use: for SFX/overlay only, and when not to use (structural assets). It also gives a conditional rule for asset_id (no id needed when only one attached). It doesn't name alternatives explicitly but gives enough contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rescan_voice_blocksRescan voice blocksADestructiveInspect
Re-extract voice blocks from the active script WITHOUT touching assets or their reference images — the non-destructive alternative to scan_script after a script edit. Blocks whose spoken text is unchanged keep their audio; only edited blocks come back empty, so a follow-up generate_voiceover fills just the gaps. Synchronous and free — the split is deterministic. Returns {block_count}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeatedly claims this is 'non-destructive' and that it works 'WITHOUT touching assets or their reference images,' but the annotations set destructiveHint=true. This is a direct contradiction about core side effects, making the description actively misleading rather than transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core behavior and exclusion, then adds only high-value context: re-scan behavior, follow-up guidance, execution mode, cost, and return value. Every sentence earns its place; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is otherwise quite complete: it states the return shape, the behavior on unchanged vs. edited blocks, and the recommended follow-up. However, the destructiveHint contradiction creates a critical gap in safety context, so the description cannot be considered fully trustworthy or complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, project_id, is fully described in the schema, including its source ('as returned by create_project or list_projects'). Schema coverage is 100%, so the description need not add param-level detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Re-extract') and resource ('voice blocks from the active script'), and immediately distinguishes itself from scan_script. Even without reading the schema, an agent understands exactly what this tool does and how it differs from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('after a script edit'), names the alternative it replaces (scan_script), and prescribes the follow-up tool (generate_voiceover) for edited blocks. This is model usage guidance with clear conditions and next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revise_scriptRevise scriptAInspect
AI-rewrite a passage of the active script in the project's narrative
voice (the same in-editor revise the UI offers). selected_text must appear
verbatim in the script; omit it to revise the whole script. [SCENE: ...]
directions in range are preserved exactly, in place, unless the
instruction asks to change them. Synchronous — returns {revised_text},
which is NOT saved: splice it over selected_text (or replace the full
script) and call save_script to keep it.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| instruction | Yes | Natural-language edit instruction, e.g. "make the intro punchier" | |
| selected_text | No | Exact passage to rewrite; must appear verbatim in the active script. Omit to revise the whole script |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that the tool is synchronous, returns {revised_text}, does NOT save changes, preserves [SCENE: ...] directions, and requires explicit follow-up with save_script. This gives the agent a full picture of side effects without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences cover purpose, key constraints, preservation behavior, synchronization, return value, and the required follow-up. Every sentence earns its place, with no redundant elaboration or restating of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 3 parameters, no output schema, and no nested objects, the description fully equips an agent to invoke the tool correctly. It explains return shape, non-persistence, selected_text constraints, scene-direction handling, and the save_script workflow, so no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful context by explaining selected_text's verbatim requirement and that omitting it revises the whole script, plus clarifying the output shape. This goes beyond the schema's terse parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('AI-rewrite a passage') on a specific resource ('the active script') in a defined style ('the project's narrative voice'). It also distinguishes itself from nearby tools like generate_script and save_script by noting it's the same as the in-editor revise UI and explicitly not saved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on how to use the tool: selected_text must match verbatim, omit it for the whole script, and follow up with save_script. It does not explicitly name alternative tools or state when not to use it, but the workflow is unambiguous enough for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_segment_assetRestore previous renderAInspect
Restore a previously rendered version of a segment's image or video — every regeneration archives the render it replaces (last 5), so a regen that came out worse is reversible for free. The current render is archived in its place, making the rollback itself reversible. The frame/clip pair restales as usual: rolling the image back marks a rendered clip out of date.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Which archived render to restore, 0 = the most recent (each asset's config.history in get_segment_assets lists them) | |
| asset_type | Yes | "image" or "video" — which primary to restore; for a video segment, "image" targets its start frame | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only false boolean annotations, the description carries the behavioral burden and does substantial work: it discloses that the last 5 renders are archived, the previous render is archived in place so the rollback itself is reversible, and rolling back an image marks the rendered clip out of date. This goes well beyond the schema and annotations, though it does not describe failure modes or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and each sentence contributes useful behavioral detail. It is slightly wordy and contains a typo ('restales'), but it remains concise and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema and only negative annotation hints, the description is nearly complete: it explains history depth, reversibility, and side effects on rendered clips. It stops short of describing return values or error conditions, but an agent has enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with descriptions for project_id, segment_number, asset_type, and index. The tool description adds little parameter-specific meaning beyond restating that asset_type refers to image or video, so the schema carries the semantic load and the description earns a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Restore a previously rendered version of a segment's image or video.' It clearly identifies what the tool acts on and how it differs from regenerating or updating assets, especially alongside the sibling regenerate_segment_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: a regeneration that turned out worse can be reversed by rolling back to an archived render. It does not explicitly enumerate alternatives or state when not to use it, but the intended use case is strongly implied by the 'regen that came out worse is reversible' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_scriptSave scriptAInspect
Save script text (your own draft, or an edited version of the generated one). Saving UPDATES the active version in place — the previous text is not kept, so show the user the current script (get_script) before overwriting it. New versions are created by generate_script runs, and activate_script_version switches between those. Run scan_script afterwards so assets and voice blocks reflect the new text.
Three notations the script text carries, none of them ever spoken:
SCENE DIRECTIONS — `[SCENE: <visual direction>]` as its OWN paragraph
(blank line before and after; brackets inside a narration paragraph are
never matched). It directs the storyboard for the narration that follows,
until the next direction, and for that span OUTRANKS the director style's
shot choices — say what is on screen, who is in frame, and any on-screen
text to bake in verbatim. It does not constrain how many segments the
span is cut into. scan_script extracts characters/places named only
inside a direction too, under the exact name used.
PAUSES — `<break time="1.5s" />` is the ONLY thing that makes the voice
pause; ellipses, dashes and paragraph breaks produce no silence. Use
~0.5s between thoughts, ~1.0s at act seams, longer where a card needs
reading time; write ONE tag with the total ("4.0s"), never two back to
back. narrator_speed changes how fast words are said; breaks add the
silence between them.
SPEAKERS — a paragraph starting `Name: "..."` assigns that line to a
character, who gets their own voice (set_character_voice) and their own
shot. Narration with no prefix is the narrator's.| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Full script text to save as a new version; plain prose narration, optionally with `[SCENE: ...]` direction paragraphs, `<break time="0.5s" />` pauses, and `Name:` speaker prefixes | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses that the previous text is not kept, which is critical behavioral context beyond the annotations. It also details that scene directions, pauses, and speaker prefixes are never spoken, and it documents how pauses truly behave versus ellipses/dashes. This is highly transparent about side effects and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the length is earned: it is organized into labeled sections with bolded terms and contains no filler. It is front-loaded with the core behavior before diving into notation details, though a slightly tighter presentation would be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is contextually complete for a complex update tool: it covers preconditions, post-actions, destructive overwrite behavior, related sibling tools, and the exact syntax of the three script notations. The lack of an output schema is not a gap because the description fully explains the operation's contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers both parameters, the description substantially enriches the `content` parameter by specifying exact notation syntax and rules: `[SCENE: ...]` paragraphs, `<break time="1.5s" />` tags, and `Name:` speaker prefixes. It also warns against malformed uses like two breaks back-to-back, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states an explicit verb and object: 'Save script text' and clarifies that saving 'UPDATES the active version in place.' It also differentiates itself from related tools like generate_script and activate_script_version by describing their roles in the same workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete workflow guidance: show the user get_script before overwriting, run scan_script afterwards, and notes that new versions come from generate_script while activate_script_version switches between versions. This makes both when-to-use and when-not-to-use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_scriptScan scriptADestructiveInspect
Analyze the active script: extracts character/environment/object assets and splits narration into voice blocks. DESTRUCTIVE on re-run (assets are recreated, not merged — curated descriptions, reference images, and voices are lost; prefer rescan_voice_blocks after script edits).
Extraction reads the narration AND any `[SCENE: ...]` directions — a
character or place named only inside a direction is still extracted,
under the exact name the direction uses. Directions never leak into
voice blocks (they ride onto the blocks they govern as staging instead).
Review list_assets afterwards and create_asset anything the video needs
that neither narration nor directions ever name. Async — returns
{job_id}.| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID to scan with; empty uses the default (see list_models("script_scan")) | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| editable_sections | No | Per-call prompt section overrides, keyed by section name; see get_section_template("script_scan") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds crucial behavioral detail: assets are recreated not merged, curated descriptions/reference images/voices are lost, directions are included in extraction but never leak into voice blocks, and the call is async returning {job_id}. This far exceeds what annotations alone provide and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then the critical destructive warning, then edge-case extraction behavior and post-call steps. Every sentence adds actionable information and none feel redundant or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, async tool with no output schema, the description covers the important operational facts: job_id return, destructive re-run behavior, how directions are handled, and recommended follow-up actions. An agent has enough context to decide whether to call it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds some context about the active script and project scope, but it does not need to explain model or editable_sections because the schema already references list_models and get_section_template.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says exactly what the tool does: 'Analyze the active script: extracts character/environment/object assets and splits narration into voice blocks.' It names a specific verb and resources, and contrasts itself with rescan_voice_blocks, so an agent can distinguish 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly warns that re-running is 'DESTRUCTIVE' and tells the agent to 'prefer rescan_voice_blocks after script edits.' It also gives follow-up guidance: 'Review list_assets afterwards and create_asset anything the video needs that neither narration nor directions ever name.' This is clear when-to-use and otherwise guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_character_voiceSet character voiceAIdempotentInspect
Bind a TTS voice to a character asset — required before generate_voiceover for every character with dialogue (the narrator's voice is separate: set_narrator_voice). Browse ids with list_voices.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | Character asset ID, from list_assets | |
| voice_id | Yes | TTS voice ID, from list_voices (use the provider matching the project's voice_tts_provider) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, which the description doesn't contradict. Description adds context that it's a prerequisite binding, but lacks details on whether binding overwrites existing voices or affects other tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly concise: two sentences that immediately state purpose and prerequisites with no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple binding tool with no output schema, the description covers the essential purpose, prerequisites, and parameter sourcing. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 doesn't add new semantics beyond what's in the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Bind a TTS voice to a character asset'), the resource ('character asset'), and distinguishes from sibling tools like set_narrator_voice by noting the narrator's voice is separate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('required before generate_voiceover for every character with dialogue') and when not to (narrator handled by set_narrator_voice). Also provides guidance on browsing IDs with list_voices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_narrator_voiceSet narrator voiceAIdempotentInspect
Set the project's narrator TTS voice — required before generate_voiceover whenever the script has narration. Browse ids with list_voices. (Character dialogue voices are separate: set_character_voice.)
| Name | Required | Description | Default |
|---|---|---|---|
| voice_id | Yes | TTS voice ID for the narrator, from list_voices (use the provider matching the project's voice_tts_provider) | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the tool's role in the workflow and its prerequisite relationship with generate_voiceover. Annotations already provide idempotentHint and destructiveHint, so the description adds context about ordering and separation from character voices, which is sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences with no fluff. The description is front-loaded with the core action, followed by usage guidance and distinction from sibling tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with complete schema annotations and sibling context, the description covers purpose, usage timing, alternative tool, and source of allowed values. No output schema is needed; the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add new parameter information beyond what the schema already provides (e.g., 'voice_id' description in schema already mentions list_voices and provider matching). Baseline 3 is appropriate as the description does not enhance parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Set the project's narrator TTS voice'. It distinguishes from the sibling tool set_character_voice by noting that character dialogue voices are separate. The verb-resource pairing is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'required before generate_voiceover whenever the script has narration.' It also directs users to browse voice IDs with list_voices and clearly separates narrator voices from character voices, providing a when-not-to-use scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_styleSet project styleAIdempotentInspect
Set the project's default style — the style whose art/narrative/director fields drive its generations. Use after create_style to put a new visual identity into effect, or to switch a project between channel styles.
| Name | Required | Description | Default |
|---|---|---|---|
| style_id | Yes | ID of the style to make the project's default, from create_style or list_styles | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that the set style's fields drive generations, adding behavioral context beyond annotations. Annotations already indicate non-destructiveness and idempotency; the description adds that this affects generation output. A higher score would require explicitly mentioning idempotency or side effects like permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, efficient and direct with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema and good annotations, the description is complete: it explains purpose, usage timing, and effect on generations. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description adds no extra parameter meaning; it repeats that style comes from create_style/list_styles and project from create_project/list_projects, already in schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets a project's default style, specifying that this style's art/narrative/director fields drive generations. This distinguishes it from siblings like create_style (creates a style) and update_style_fields (updates style properties).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: 'Use after create_style to put a new visual identity into effect, or to switch a project between channel styles.' This tells when and why to use it, and implicitly contrasts with alternatives like create_style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_provider_keySet provider keyAIdempotentInspect
Register a BYOK provider API key (encrypted at rest, BYOK plan only). Jobs whose model belongs to this provider then run on YOUR key and charge 0 credits. Providers: openai, gemini, anthropic, fal, elevenlabs, minimax.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The provider API key to register; stored encrypted at rest | |
| provider | Yes | Provider the key belongs to: "openai", "gemini", "anthropic", "fal", "elevenlabs", or "minimax" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive; the description adds that the key is encrypted at rest, providing additional context beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with purpose front-loaded. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with full schema coverage and annotations, the description covers usage context (BYOK plan, zero credits) adequately. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 reiterates the provider list and encryption but adds minimal new meaning; schema already covers param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Register') and resource ('BYOK provider API key'), and distinguishes from sibling tools like 'list_provider_keys' by specifying the operation type and constraints (encrypted at rest, BYOK plan only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes the requirement for a BYOK plan and explains the consequence (jobs charge 0 credits). It lists valid providers. While it doesn't mention alternatives, the context is sufficient for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_segment_continuationSet segment continuationAIdempotentInspect
Make a segment's image render as a continuation of an EARLIER segment's frame (same composition evolving — the storyboard's continues_from_segment, settable after the fact). continues_from is that earlier segment's number; pass 0 to clear the link. Regenerate the segment's image afterwards — the reference is applied at generation time.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| continues_from | No | 1-based number of the EARLIER segment whose frame this one continues; pass 0 to clear the link | |
| segment_number | Yes | 1-based number of the segment whose image should continue an earlier frame, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: the reference is applied at generation time, and image must be regenerated. Annotations indicate idempotentHint=true (safe to retry) and destructiveHint=false, which aligns with the description. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a focused paragraph with all essential information, no filler. It could be slightly more structured (e.g., bullet points), but it is easily readable and front-loads the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and annotations provide idempotentHint, the description covers the core behavior, parameter intent, and post-requisites (regenerate image). It is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining 'continues_from' in practical terms: '1-based number of the EARLIER segment' and 'pass 0 to clear the link'. For 'segment_number', it reiterates the 1-based nature and references 'get_segments'. This clarifies ambiguous numeric values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: making a segment's image render as a continuation of an earlier segment's frame. It mentions key concepts like 'continues_from_segment' and 'settable after the fact', with concrete examples. This distinguishes it from sibling tools like 'split_segment' or 'combine_segments'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: what 'continues_from' represents, how to clear the link with 0, and the need to regenerate the image afterwards. However, it does not explicitly state when not to use the tool or mention alternative tools, though the context makes its niche clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_segmentSplit segmentADestructiveInspect
Split a segment at the given time offsets (ms, 1-3 cuts → 2-4 parts). inherit_index picks which resulting part keeps the original creative data — that part keeps its rendered assets, SFX, overlays and continuation links (a rendered clip goes stale; re-render it). The other parts start fresh. Later segments renumber — re-check get_segments before further edits.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True previews the consequences without changing anything | |
| offsets_ms | Yes | Cut points as millisecond offsets from the segment start, ascending; 1-3 cuts producing 2-4 parts | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| inherit_index | No | 0-based index of the resulting part that keeps the original creative data (default: the first part) | |
| segment_number | Yes | 1-based number of the segment to split, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses important side effects: non-inherited parts start fresh, the inherited part's rendered clip goes stale and must be re-rendered, and later segments renumber. This is exactly the behavioral depth needed for a destructive editing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, information-dense sentences, each carrying distinct value: core action, inheritance behavior, freshness consequence, and renumbering warning. It is front-loaded, with no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the essential operational consequences well: asset inheritance, stale renders, and segment renumbering. The only notable gap is that it doesn't state what the call returns (e.g., updated segment list or preview output), which would be useful since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful semantics to inherit_index by explaining what 'keeps original creative data' actually entails: rendered assets, SFX, overlays, and continuation links, plus the stale-render consequence. This goes beyond the schema without duplicating it excessively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Split a segment at the given time offsets' and quantifies the outcome as 1-3 cuts producing 2-4 parts. This clearly differentiates it from sibling tools like combine_segments or change_segment_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete usage context: cut count constraints, which part inherits creative data, and a warning to re-check get_segments after later segments renumber. It doesn't explicitly name alternative tools or when not to use it, but the guidance is clear enough for an agent to decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_assetUpdate assetAInspect
Rename an asset and/or rewrite its description. If the look changed, regenerate its reference image afterwards so renders match.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New asset name; empty leaves the name unchanged | |
| asset_id | Yes | Asset ID, as returned by list_assets or create_asset | |
| description | No | New generation-facing look description; empty leaves it unchanged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only mutation. The description adds behavioral context by noting the need to regenerate the reference image if the look changes, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the main purpose and include necessary guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool, the description covers the essential action and side effect. It does not explain return values, but the schema covers parameters adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description does not add significant new meaning beyond summarizing the parameters, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renames an asset and/or rewrites its description, using specific verbs and resources. This distinguishes it from siblings like create_asset or delete_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: after updating the look, regenerate the reference image. It does not explicitly state when not to use or list alternatives, but the guidance is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_caption_configUpdate caption configAIdempotentInspect
Merge a patch into the project's burned-in caption config (keys like enabled, plus styling). Read the current value from get_project (caption_config). Applies at the next export — no rebuild needed.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| caption_config | Yes | Partial caption config to merge (keys like enabled, plus styling); read the current value from get_project's caption_config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and not destructive. The description adds that it merges a patch (partial update) and applies at next export, which provides behavioral context beyond annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, no wasted words. Essential information is presented efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description provides necessary context: how to use (read first), what it does (merge patch), and when it takes effect (next export). Missing error handling or return info, but adequate for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description mentions keys like 'enabled' and 'styling' as examples but does not fully specify all possible keys in caption_config. It adds some value over schema by stating 'partial caption config to merge', but not enough to raise above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool merges a patch into the project's burned-in caption config, specifying the resource (project's caption config) and action (merge patch), and distinguishes it from other update tools by referencing get_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises reading the current value from get_project before updating and clarifies that changes apply at next export with no rebuild needed, providing clear usage context. However, it does not explicitly state when not to use this tool or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_music_trackUpdate music trackCInspect
Tweak a music track. fields keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Partial dict of track fields to patch; allowed keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame | |
| track_id | Yes | Music track ID, from list_music_tracks or add_music_track |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) but no destructive hint. The description adds no behavioral context beyond the schema, such as error behavior, idempotency, or side effects. It does not contradict annotations but fails to expand on them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences: the action and the field keys. It is front-loaded but lacks structure like separate sections. It earns its place without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits return values, validation rules, and what constitutes a successful update. Given the nested object parameter and no output schema, the agent lacks critical context for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description is not required to add parameter details. It does repeat the allowed field keys, which are already in the schema, adding minimal value. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Tweak a music track') and lists the updatable fields, making the purpose explicit. However, it does not differentiate from sibling tools like update_asset or update_project, though within its domain (music tracks) it is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as add_music_track or remove_music_track. It does not mention prerequisites (e.g., needing a track_id from list_music_tracks) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectUpdate projectAInspect
Patch project fields. Updatable: title, description, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed, video_format. (The narrator's TTS voice is NOT here — use set_narrator_voice.)
narrator_speed is the narration rate (0.5-2.0, default 1.0; clamped to
0.7-1.2 on ElevenLabs). It changes how fast words are SAID and nothing
else — it adds no silence between them, so "slow this down" usually
wants `<break>` tags in the script text too (see save_script).
video_format ('landscape' | 'portrait') is only changeable until the
storyboard exists — after that the shots and overlays are composed for the
current frame and the patch 409s. Switch it before generate_storyboard.| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Partial dict of fields to patch; allowed keys: title, description, sfx_level ('none'|'minimal'|'frequent'), video_concept, voice_mix ('narrator_only'|'narrator_led'|'balanced'|'character_led'), voice_tts_provider ('minimax'|'elevenlabs'), script_target_minutes, narrator_speed, video_format | |
| project_id | Yes | Project ID, as returned by create_project or list_projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate the tool is not read-only, not idempotent, and not destructive, so the description carries the behavioral burden. It reveals non-obvious behavior: narrator_speed clamped to 0.7-1.2 on ElevenLabs, no silence insertion, video_format 409s after storyboard exists, and the need for script break tags for slower pacing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into focused paragraphs, each earning its place: updatable fields list, narrator_speed nuance, and video_format constraint. There is no filler or repetition of schema boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for invocation: it covers all fields, exclusions, constraints, and cross-tool pointers to set_narrator_voice, save_script, and generate_storyboard. No output schema exists, but for a patch operation the provided behavioral and scheduling context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds practical semantics beyond the schema: enumerates allowed field keys, gives the narrator_speed range and default, explains what narrator_speed does and does not affect, and clarifies video_format's enum and modification window.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Patch project fields', and explicitly lists every updatable field. It also distinguishes itself from a sibling by noting the narrator TTS voice is not here and belongs to set_narrator_voice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not-to-use guidance: narrator TTS voice is excluded and routed to set_narrator_voice. It also gives a lifecycle constraint for video_format and advises switching before generate_storyboard, and points to save_script for silence/break tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_segment_contentRewrite segment contentADestructiveInspect
Rewrite one segment's creative direction from feedback ("make this shot a close-up", "show the machine from above") — an LLM rewrites the shot's prompts; continuation links, SFX, and overlays are preserved. The visual assets reset to not_started: re-render them afterwards (generate_segments or regenerate_segment_asset). When you already know the exact prompt text, use update_segment_prompts instead — it writes your words verbatim with no LLM in the loop.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True previews the consequences (assets recreated, rendered assets lost) without changing anything | |
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| user_input | Yes | Natural-language feedback describing the change to this shot, e.g. "make this a close-up" or "show the machine from above" | |
| segment_number | Yes | 1-based segment number, as reported by get_segments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint=true, and the description adds concrete consequences: visual assets reset to not_started, rendered assets will need regeneration, while continuation links, SFX, and overlays are preserved. It also clarifies that an LLM performs the rewrite, which informs expectations about output variability and the need for a dry_run preview. This goes well beyond the annotation's bare destructive flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: the main purpose comes first, followed by key side effects/next steps, then the alternative tool. Every sentence earns its place and the formatting with em-dashes and parentheticals keeps it readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema, the description covers the essential context: what the tool does, what is preserved, what is reset, what follow-up action is required, and which sibling to choose when appropriate. The parameter semantics are fully handled by the schema and the behavioral context is thoroughly disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with high coverage, so the baseline is 3. The description adds extra meaning beyond the schema by explaining what happens to user_input (an LLM rewrites prompts rather than writing verbatim) and by framing the dry_run consequences in terms of asset resets and re-rendering. This is modest but real added semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Rewrite') and clearly identifies the resource ('one segment's creative direction') and the mechanism (an LLM rewrites the shot's prompts). It also distinguishes itself from the sibling update_segment_prompts by contrasting natural-language feedback with exact prompt text, so an agent can select the right tool without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: when the user provides natural-language feedback about a shot. It also names the alternative update_segment_prompts and tells the agent to use that instead when exact prompt text is already known. It additionally instructs the agent to re-render assets afterward via generate_segments or regenerate_segment_asset, covering the post-invocation workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_segment_promptsUpdate segment promptsAIdempotentInspect
Set one segment's final prompts VERBATIM — no LLM rewrite. The direct counterpart to update_segment_content: your text is written as-is to the segment's creative direction and to the matching asset configs the renderer reads. Asset statuses are untouched: an already-rendered asset stays complete, and generate_segments skips complete assets — so to see the edit rendered, call regenerate_segment_asset on that segment (the ONLY re-render path after a prompt edit). Continuation links, SFX, and overlays are untouched. Pass only the prompt(s) you want to change; media_queries edits a fetched segment's stock-search text the same way.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID, as returned by create_project or list_projects | |
| image_prompt | No | New scene-image prompt (image segments; also the retrieval-miss fallback on real-photo segments). Empty leaves it unchanged. | |
| video_prompt | No | New motion/video prompt (video segments; also the retrieval-miss fallback on real b-roll). Empty leaves it unchanged. | |
| media_queries | No | New stock-search queries for a fetched-media segment (real b-roll / real photo). Replaces the search text verbatim; re-fetch an already-fetched clip with regenerate_segment_asset. Omit to leave the search unchanged. | |
| segment_number | Yes | 1-based segment number, as reported by get_segments | |
| start_frame_prompt | No | New start-frame prompt (generated video segments). Empty leaves it unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains side effects beyond the annotations: it writes verbatim to creative direction and asset configs, leaves asset statuses untouched, preserves continuation links/SFX/overlays, and clarifies the re-render implication. This is valuable behavioral context that the annotations alone (idempotentHint, destructiveHint) do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and distinguishing trait, then efficiently packs necessary side-effect, re-render, and parameter-selection guidance into two dense sentences. Every clause carries information the agent needs, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with 6 parameters and important side effects, the description covers what happens, what does not happen, how re-rendering works, and how partial updates behave. The schema supplies parameter provenance, so nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 useful cross-parameter guidance: passing only the desired prompts is a partial update, and media_queries behaves the same verbatim way as the prompt fields. This consolidates and clarifies semantics beyond the individual schema entries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb and resource ('Set one segment's final prompts VERBATIM') and immediately differentiates from update_segment_content by emphasizing the no-LLM-rewrite behavior. The scope ('one segment') and the mention of asset configs remove ambiguity about what is being modified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names update_segment_content as the direct counterpart and gives the critical routing rule: after an edit, regenerate_segment_asset is the ONLY re-render path because generate_segments skips complete assets. It also tells the agent to pass only the prompts it wants to change, providing clear when-and-how guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_style_fieldsUpdate style fieldsADestructiveInspect
Hand-edit a style's analyzed fields after reviewing them — e.g. tighten the art_style wording or adjust the director_style pacing rules.
`fields` is a PATCH, merged over what the style already has: send only the
keys you are changing and leave the rest out — there is no need to read
the whole dict back with get_style and round-trip it. Pass {key: null} to
delete a user-added key (the well-known art_style / narrative_style /
director_style / script_prompt cannot be deleted, only rewritten, and
cannot be set empty). Editing fields does NOT trigger re-analysis, so your
edits stick.
Real media is switched by the literal `@real-media` tag inside
director_style's prose: add the tag plus prose describing when/how/how
much real media appears to turn it on; remove the tag (or its passage) to
turn it off.| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Sparse patch of style fields, shaped {key: {"value": str, "applies_to": [...]}} — send ONLY the keys you are changing; unlisted keys keep their current value | |
| style_id | Yes | Style ID, as returned by create_style or list_styles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses critical behavior: PATCH-merge semantics, deletion via {key: null}, restrictions on well-known keys, the fact that edits do NOT trigger re-analysis, and the special @real-media tag behavior. This is rich, non-obvious context that an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place. It front-loads the core purpose, then explains patch semantics, deletion rules, re-analysis behavior, and the real-media tag without redundancy. The structure is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, nested-object tool with no output schema, the description covers everything needed to call it correctly: required arguments, how to shape fields, what can and cannot be updated, deletion behavior, and the effect on re-analysis. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: it explains the PATCH merge model, that unlisted keys are preserved, that null deletes user-added keys, and that well-known keys cannot be empty. This materially helps an agent construct valid arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Hand-edit a style's analyzed fields after reviewing them.' It names concrete examples (art_style wording, director_style pacing rules) that distinguish it from sibling tools like update_style_references or analyze_style. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical guidance: use this only for manual edits to analyzed fields, send only changed keys, and avoid round-tripping via get_style. It also warns that edits do NOT trigger re-analysis. It does not explicitly name alternatives such as analyze_style for re-analysis or update_style_references for reference fields, 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.
update_style_referencesUpdate style referencesADestructiveInspect
Replace a style's reference set — add or remove references without touching the analyzed fields.
FULL REPLACE: read the current list with get_style first and send every
entry you're keeping plus the changes. New entries are youtube (video
link, or a channel link/@handle) or text; new image/video FILES can only
be added via the multipart REST endpoint PATCH /styles/{id}, but existing
ones round-trip fine. Optional `contributes_to` scopes an entry to a
subset of the analyzed fields (art_style / narrative_style /
director_style); omit it for all three.
Saving does NOT re-run analysis: the response's `inputs_stale` flips true
and the analyzed fields keep their current text until the user asks for
analyze_style (which rewrites them from the new set).| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | The COMPLETE reference list the style should have after this call, in display order: [{"input_type": "youtube" | "text" | "image" | "video", "value": "<url or text>", "contributes_to": ["art_style", ...]?}]. Include every existing entry you are keeping (copy them from get_style verbatim — public URL values are fine); anything left out is removed | |
| style_id | Yes | Style ID, as returned by create_style or list_styles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description reveals critical non-obvious behaviors: full-replace semantics (anything left out is removed), new entries restricted to youtube/text while files need the REST endpoint, and — most valuably — that saving does NOT re-run analysis, inputs_stale flips true, and analyzed fields keep their text until analyze_style is called. This is exactly the behavioral context an agent cannot infer from annotations or schema alone, and it contradicts nothing in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (~180 words) but every section earns its place: full-replace semantics, entry-type restrictions, contributes_to scoping, and the stale-analysis behavior are all operationally necessary for correct invocation. It is front-loaded with the core purpose and organized into clear paragraphs. Could be tightened slightly, but the density is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and complex semantics, the description covers everything an agent needs: parameters are fully explained, response behavior (inputs_stale) is disclosed, destructive full-replace semantics are stated, and the alternative path for files is given. The order of operations (get_style → update → analyze_style) is specified. No material operational gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — both parameters are documented in the schema, so the baseline is 3. The description adds meaning beyond the schema by explaining that contributes_to scopes an entry to a subset of analyzed fields and can be omitted for all three, and by clarifying which input types are valid for new entries (youtube/text only). This meaningfully supplements the schema's structural example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: "Replace a style's reference set — add or remove references without touching the analyzed fields." This clearly distinguishes the tool from siblings like update_style_fields (which touches analyzed fields) and analyze_style (which rewrites them). The purpose is unambiguous and the resource scope is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete operational guidance: read the current list with get_style first, send every kept entry plus changes, and follow up with analyze_style when analysis should be re-run. It also explicitly excludes one case by directing new image/video files to the multipart REST endpoint. It does not explicitly name update_style_fields as the alternative for changing analyzed fields, though the contrast is implied by "without touching the analyzed fields."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_voice_blockUpdate voice blockAInspect
Override one voice block's voice or playback volume (block ids from list_voice_blocks). Re-run generate_voiceover for the block afterwards if you changed its voice — existing audio is not regenerated automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| volume | No | Playback volume for this block, 0-1; omit to leave unchanged | |
| voice_id | No | New TTS voice ID for this block, from list_voices; empty leaves the voice unchanged | |
| voice_block_id | Yes | Voice block ID, from list_voice_blocks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that existing audio is not regenerated automatically, a behavioral trait beyond the annotations. Annotations indicate non-readOnly, non-destructive, non-idempotent, which aligns with the description. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the action and follow-up. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, required follow-up, and parameter sources. Given no output schema, it could mention return value, but the mutation's effect is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for each parameter. The description adds minimal additional semantics (e.g., source of block IDs). Baseline 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool overrides a voice block's voice or playback volume, using block IDs from list_voice_blocks. It distinguishes itself from siblings like list_voice_blocks (for IDs) and generate_voiceover (for regeneration).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises re-running generate_voiceover after changing voice, providing a clear follow-up action. It does not explicitly state when not to use or list alternatives, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_imageView imageARead-onlyIdempotentInspect
Fetch a rendered Framesail image so you (and your user) can SEE it — pass a URL from get_segment_assets, get_style, or asset endpoints. Returns the image inline. Only Framesail media URLs are allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public Framesail media URL to fetch — a public_url from get_segment_assets, a file_path from list_assets, or a template/preset image URL from get_style / list_style_presets; other hosts are rejected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already define the tool as read-only and idempotent. The description adds that the image is returned inline and only Framesail URLs are allowed, which is useful but not providing significant behavioral insight 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that pack essential information: purpose, input source, output format, and restriction. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no output schema), the description fully covers what the tool does, what input it accepts, and what to expect as output. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage for the single parameter with a detailed description. The description repeats this information without adding new meaning, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a rendered Framesail image for visual inspection, distinguishing it from sibling tools that generate URLs (e.g., get_segment_assets) by specifying it accepts those URLs and returns the image inline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool (after obtaining a URL from specific endpoints) and restricts usage to Framesail media URLs, providing clear context. It does not explicitly state when not to use, but the restriction implicitly excludes other URL types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-onlyIdempotentInspect
Verify the connection: the account email and plan behind the current credential. Call once after connecting — before creating anything — to confirm you're on the right account; costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it is a read-only, idempotent, non-destructive operation (supported by annotations) and returns email/plan. Lacks details on exact response shape but sufficient for a simple verification tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key verb 'Verify', and no extraneous words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and annotations covering behavioral traits, the description fully equips the 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline score of 4 is appropriate. No additional semantic description needed beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool verifies the connection and returns account email and plan. Distinguishes from siblings as no other sibling tool serves an identity/check purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling once after connecting and before creating anything, confirming the right account and noting it costs nothing. Provides clear when-to-use and implies not to call repeatedly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
generate_asset_reference1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Image model ID; empty uses the server default for reference images"New value: +"Image model ID; empty uses the asset's saved drawer choice, else the account default, else the server default"
- Changed
list_models2 fields changed- added
Input schema / properties / lip_syncAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "segment_video only: whether the shot is lip-synced to the narration (the asset's config.lip_sync). Video models split on it, so pass it to get that family's list and the account default for it.", + "title": "Lip Sync" +} - added
Input schema / properties / providerAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "voice_block only: the project's voice_tts_provider (\"minimax\" or \"elevenlabs\"). Voice models split by provider, so pass it to get that family's list and the account default for it.", + "title": "Provider" +}
3 tool updates
- Changed
director_note1 field changed- changed
Input schema / properties / message / descriptionPrevious value: -"Natural-language edit note for this scene, e.g. \"move the caption to the top\" or \"remove the overlay\""New value: +"Natural-language edit note for this scene, e.g. \"move the caption to the top\" or \"calmer motion\""
- Added
remove_segment_asset - Removed
remove_segment_sfx
17 tool updates
- Added
animate_segment - Changed
change_segment_type3 fields changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "True previews the consequences (assets kept / staled / recreated / deleted, rendered assets lost) without changing anything", + "title": "Dry Run", + "type": "boolean" +} - added
Input schema / properties / media_sourceAdded value: +{ + "default": "", + "description": "\"\" keeps the segment's current source; \"real\" makes the visual fetched stock footage / a real photo (b-roll) instead of a generated one; \"generated\" switches back", + "title": "Media Source", + "type": "string" +} - changed
Input schema / properties / segment_type / descriptionPrevious value: -"New visual type: \"image\", \"video\", or \"overlay_scene\""New value: +"New visual type: \"image\", \"video\" (fetched b-roll only — requires media_source \"real\"), or \"overlay_scene\""
- Changed
combine_segments1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "True previews the consequences without changing anything", + "title": "Dry Run", + "type": "boolean" +}
- Changed
generate_segments1 field changed- added
Input schema / properties / asset_scopeAdded value: +{ + "default": "", + "description": "\"\" renders everything actionable; \"no_clips\" is the cheap base pass (images, overlays, fetched b-roll — no generated video clips); \"clips_only\" renders just the generated clips", + "title": "Asset Scope", + "type": "string" +}
- Changed
get_segments2 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 0, + "description": "Maximum segments to return; 0 returns all. Long-form projects can hold 100+ segments — page with offset/limit instead of pulling everything at once.", + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "0-based index of the first segment to return (pagination)", + "title": "Offset", + "type": "integer" +}
- Changed
list_scenes3 fields changed- added
Input schema / properties / include_compositionAdded value: +{ + "default": false, + "description": "Include each scene's full composition JSON (layers, layout) — kilobytes per scene, so page with offset/limit when True; the default summary rows are enough for ids and director notes", + "title": "Include Composition", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "default": 0, + "description": "Maximum scenes to return; 0 returns all", + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "0-based index of the first scene to return (pagination)", + "title": "Offset", + "type": "integer" +}
- Changed
list_voice_blocks1 field changed- added
Input schema / properties / include_subtitle_dataAdded value: +{ + "default": false, + "description": "Include each block's word-level subtitle timings — bulky and rarely needed; omitted by default (subtitle_data reports \"omitted\" when present but stripped)", + "title": "Include Subtitle Data", + "type": "boolean" +}
- Changed
list_voices1 field changed- added
Input schema / properties / groupAdded value: +{ + "default": "", + "description": "Return only this catalogue group (case-insensitive; e.g. \"Narration\", \"Characters\"). Empty returns every group — the ElevenLabs catalogue is 150+ voices, so filter it by group; the response's `groups` lists the valid names with counts.", + "title": "Group", + "type": "string" +}
- Changed
rescan_voice_blocks1 field changed- removed
Input schema / properties / modelRemoved value: -{ - "default": "", - "description": "Model ID for the re-extraction; empty uses the default (see list_models(\"voice_block_scan\"))", - "title": "Model", - "type": "string" -}
- Added
rollback_segment_asset - Changed
save_script1 field changed- changed
Input schema / properties / content / descriptionPrevious value: -"Full script text to save as a new version; plain prose narration, optionally with scene headings"New value: +"Full script text to save as a new version; plain prose narration, optionally with `[SCENE: ...]` direction paragraphs, `<break time=\"0.5s\" />` pauses, and `Name:` speaker prefixes"
- Changed
split_segment1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "True previews the consequences without changing anything", + "title": "Dry Run", + "type": "boolean" +}
- Changed
update_project1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level ('none'|'minimal'|'frequent'), video_concept, voice_mix ('narrator_only'|'narrator_led'|'balanced'|'character_led'), voice_tts_provider ('minimax'|'elevenlabs'), script_target_minutes, narrator_speed, video_format"New value: +"Partial dict of fields to patch; allowed keys: title, description, sfx_level ('none'|'minimal'|'frequent'), video_concept, voice_mix ('narrator_only'|'narrator_led'|'balanced'|'character_led'), voice_tts_provider ('minimax'|'elevenlabs'), script_target_minutes, narrator_speed, video_format"
- Changed
update_segment_content1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "True previews the consequences (assets recreated, rendered assets lost) without changing anything", + "title": "Dry Run", + "type": "boolean" +}
- Added
update_segment_prompts - Changed
update_style_fields1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"FULL flat dict of analyzed fields to write, shaped {key: {\"value\": str, \"applies_to\": [...]}} — fetch with get_style, modify, send the whole dict back"New value: +"Sparse patch of style fields, shaped {key: {\"value\": str, \"applies_to\": [...]}} — send ONLY the keys you are changing; unlisted keys keep their current value"
- Added
update_style_references
3 tool updates
- Changed
director_note7 fields changed- added
Input schema / properties / project_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Project ID; required (with segment_number) when not passing scene_id", + "title": "Project Id" +} - added
Input schema / properties / scene_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / scene_id / defaultAdded value: +null - changed
Input schema / properties / scene_id / descriptionPrevious value: -"ID of the scene to edit, from list_scenes"New value: +"ID of the scene to edit, from a FRESH list_scenes call — scene ids change whenever segments are edited (split/combine/update-content), so never reuse ids saved earlier; prefer project_id + segment_number" - removed
Input schema / properties / scene_id / typeRemoved value: -"string" - added
Input schema / properties / segment_numberAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "1-based segment number of the scene to edit (from list_scenes or get_segments) — preferred over scene_id because it is resolved to the current scene at call time", + "title": "Segment Number" +} - changed
Input schema / requiredPrevious value: -[ - "scene_id", - "message" -]New value: +[ + "message" +]
- Changed
generate_voiceover1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"TTS model ID; empty uses the default (see list_models(\"voice_block\"))"New value: +"TTS model ID; empty uses the default for the project's TTS provider. If set, it must belong to that provider — see list_models(\"voice_block\") for each model's provider"
- Changed
update_project1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed, video_format"New value: +"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level ('none'|'minimal'|'frequent'), video_concept, voice_mix ('narrator_only'|'narrator_led'|'balanced'|'character_led'), voice_tts_provider ('minimax'|'elevenlabs'), script_target_minutes, narrator_speed, video_format"
1 tool update
- Changed
create_style1 field changed- changed
Input schema / properties / inputs / descriptionPrevious value: -"Reference material to analyze, [{\"input_type\": \"youtube\" | \"text\", \"value\": \"<url or description>\"}]; triggers an async analysis job. Mutually exclusive with presets"New value: +"Reference material to analyze, [{\"input_type\": \"youtube\" | \"text\", \"value\": \"<url or description>\"}]; a youtube value can be a video link or a channel link/@handle (resolved to that channel's newest usable upload). Triggers an async analysis job. Mutually exclusive with presets"
1 tool update
- Changed
update_project1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed"New value: +"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed, video_format"
1 tool update
- Changed
create_project1 field changed- added
Input schema / properties / video_formatAdded value: +{ + "default": "landscape", + "description": "Output frame shape: 'landscape' (16:9, the default — YouTube and long-form) or 'portrait' (9:16 — Shorts, Reels, TikTok). Fixed once the storyboard is generated, so pick it up front.", + "enum": [ + "landscape", + "portrait" + ], + "title": "Video Format", + "type": "string" +}
1 tool update
- Changed
generate_style_template1 field changed- added
Input schema / properties / replaceAdded value: +{ + "default": false, + "description": "Set True ONLY to deliberately overwrite an existing template of this type — the user must have asked for a new one. Leave False and the call refuses rather than clobbering a template the style already has", + "title": "Replace", + "type": "boolean" +}
1 tool update
- Changed
add_music_track2 fields changed- changed
Input schema / properties / volume / defaultPrevious value: -0.2New value: +0.12 - changed
Input schema / properties / volume / descriptionPrevious value: -"Playback volume 0-1; the 0.2 default sits at bed level under narration — don't raise it unless asked"New value: +"Playback volume 0-1; the 0.12 default sits at bed level under narration — don't raise it unless asked"
63 tool updates
- Changed
activate_script_version1 field changed- added
Input schema / properties / script_id / descriptionAdded value: +"ID of the script version to activate, from get_script's version list"
- Changed
add_music_track6 fields changed- added
Input schema / properties / library_track_id / descriptionAdded value: +"Audio library track ID, from browse_audio_library(category=\"music\")" - added
Input schema / properties / loop / descriptionAdded value: +"True loops the track under the whole video; false plays it once" - added
Input schema / properties / name / descriptionAdded value: +"Display name for the track on the project's timeline" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / start_frame / descriptionAdded value: +"Timeline frame at which the track starts (0 = start of the video)" - added
Input schema / properties / volume / descriptionAdded value: +"Playback volume 0-1; the 0.2 default sits at bed level under narration — don't raise it unless asked"
- Changed
add_segment_sfx3 fields changed- added
Input schema / properties / library_track_id / descriptionAdded value: +"Audio library track ID, from browse_audio_library(category=\"sfx\")" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments"
- Changed
analyze_style1 field changed- added
Input schema / properties / style_id / descriptionAdded value: +"ID of the style to re-analyze, from create_style or list_styles"
- Changed
await_jobs3 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID whose jobs to wait for; pass exactly one of project_id or style_id" - added
Input schema / properties / style_id / descriptionAdded value: +"Style ID whose analysis/template jobs to wait for; pass exactly one of project_id or style_id" - added
Input schema / properties / timeout_seconds / descriptionAdded value: +"Max seconds to block server-side before returning done=false; keep <= 50 so the client doesn't time out the tool call"
- Changed
browse_audio_library4 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Track kind: \"music\" (background tracks) or \"sfx\" (sound effects); empty returns both" - added
Input schema / properties / genre / descriptionAdded value: +"Filter by the track's genre tag; empty for no filter" - added
Input schema / properties / mood / descriptionAdded value: +"Filter by the track's mood tag; empty for no filter" - added
Input schema / properties / search / descriptionAdded value: +"Free-text search over track names/descriptions; empty for no filter"
- Changed
build_scenes1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
change_segment_type4 fields changed- added
Input schema / properties / carry_frame / descriptionAdded value: +"True reuses the already-rendered frame as the new type's starting visual instead of recreating it from scratch" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments" - added
Input schema / properties / segment_type / descriptionAdded value: +"New visual type: \"image\", \"video\", or \"overlay_scene\""
- Changed
combine_segments4 fields changed- added
Input schema / properties / keep / descriptionAdded value: +"Whose creative data survives the merge: \"this\" (segment_number) or \"other\" (with_segment_number)" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments" - added
Input schema / properties / with_segment_number / descriptionAdded value: +"1-based number of the adjacent segment to merge with (must neighbor segment_number)"
- Changed
create_asset4 fields changed- added
Input schema / properties / asset_type / descriptionAdded value: +"Kind of asset: \"character\", \"environment\", or \"object\"" - added
Input schema / properties / description / descriptionAdded value: +"Generation-facing spec of the asset's look; every shot renders from it, so be specific" - added
Input schema / properties / name / descriptionAdded value: +"Asset name as the script refers to it (e.g. the character's name)" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
create_channel2 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Optional free-text description of the channel's content focus" - added
Input schema / properties / name / descriptionAdded value: +"Display name for the new channel"
- Changed
create_project3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID of the channel to create the project in, from list_channels or create_channel" - added
Input schema / properties / description / descriptionAdded value: +"The video concept/topic; seeds script generation, so make it specific and meaningful" - added
Input schema / properties / title / descriptionAdded value: +"Project title shown in the app"
- Changed
create_style4 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID of the channel to create the style in, from list_channels" - added
Input schema / properties / inputs / descriptionAdded value: +"Reference material to analyze, [{\"input_type\": \"youtube\" | \"text\", \"value\": \"<url or description>\"}]; triggers an async analysis job. Mutually exclusive with presets" - added
Input schema / properties / name / descriptionAdded value: +"Display name for the style" - added
Input schema / properties / presets / descriptionAdded value: +"Preset IDs per axis, {\"art_style\": id, \"narrative_style\": id, \"director_style\": id}, from list_style_presets; instant, no analysis. Mutually exclusive with inputs"
- Changed
delete_asset1 field changed- added
Input schema / properties / asset_id / descriptionAdded value: +"ID of the asset to delete, from list_assets"
- Changed
delete_project1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"ID of the project to permanently delete, from list_projects"
- Changed
delete_style1 field changed- added
Input schema / properties / style_id / descriptionAdded value: +"ID of the style to delete, from list_styles"
- Changed
director_note3 fields changed- added
Input schema / properties / conversation_history / descriptionAdded value: +"Prior chat turns as [{\"role\": ..., \"content\": ...}] to continue an editing conversation on this scene; omit to start fresh" - added
Input schema / properties / message / descriptionAdded value: +"Natural-language edit note for this scene, e.g. \"move the caption to the top\" or \"remove the overlay\"" - added
Input schema / properties / scene_id / descriptionAdded value: +"ID of the scene to edit, from list_scenes"
- Changed
export_video1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
generate_asset_reference4 fields changed- added
Input schema / properties / asset_id / descriptionAdded value: +"ID of the asset to render a reference image for, from list_assets" - added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template for the reference-image job" - added
Input schema / properties / model / descriptionAdded value: +"Image model ID; empty uses the server default for reference images" - added
Input schema / properties / settings / descriptionAdded value: +"Model-specific settings (e.g. image quality/orientation); valid keys come from the model's settings_schema in list_models"
- Changed
generate_script4 fields changed- added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template(\"script\") for the sections this job exposes" - added
Input schema / properties / model / descriptionAdded value: +"Model ID to generate with; empty uses the default (see list_models(\"script\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / settings / descriptionAdded value: +"Model-specific settings; valid keys come from the model's settings_schema in list_models(\"script\")"
- Changed
generate_segments3 fields changed- added
Input schema / properties / dry_run / descriptionAdded value: +"True returns the credit-cost estimate without rendering anything; ALWAYS run true first and get user approval before the real run" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_numbers / descriptionAdded value: +"1-based segment numbers (from get_segments) to render only a subset; omit to render every actionable asset in the project"
- Changed
generate_storyboard4 fields changed- added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template(\"storyboard\")" - added
Input schema / properties / model / descriptionAdded value: +"Model ID to plan with; empty uses the default (see list_models(\"storyboard\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / settings / descriptionAdded value: +"Model-specific settings; valid keys come from the model's settings_schema in list_models(\"storyboard\")"
- Changed
generate_style_template4 fields changed- added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template for the template job" - added
Input schema / properties / model / descriptionAdded value: +"Image model ID; empty uses the template job's default (see list_models)" - added
Input schema / properties / style_id / descriptionAdded value: +"Style ID, as returned by create_style or list_styles" - added
Input schema / properties / template_type / descriptionAdded value: +"Which of the style's two template images to render: \"character\" or \"environment\" — run once for each"
- Changed
generate_voiceover5 fields changed- added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides applied to every selected block; see get_section_template(\"voice_block\")" - added
Input schema / properties / model / descriptionAdded value: +"TTS model ID; empty uses the default (see list_models(\"voice_block\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / settings / descriptionAdded value: +"Model-specific TTS settings applied to every selected block; valid keys come from the model's settings_schema in list_models(\"voice_block\")" - added
Input schema / properties / voice_block_ids / descriptionAdded value: +"Block IDs (from list_voice_blocks) to explicitly REgenerate; omit to fill gaps — only blocks with no audio yet run"
- Changed
get_pipeline_progress1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
get_project1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
get_script1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
get_section_template1 field changed- added
Input schema / properties / job / descriptionAdded value: +"Generation job name, e.g. \"script\", \"script_scan\", \"storyboard\", \"segment_image\", \"segment_video\", \"voice_block\""
- Changed
get_segment_assets2 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments"
- Changed
get_segments1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
get_style1 field changed- added
Input schema / properties / style_id / descriptionAdded value: +"Style ID, as returned by create_style or list_styles"
- Changed
get_video_url1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
get_workflow_status2 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID to scope jobs to; pass exactly one of project_id or style_id" - added
Input schema / properties / style_id / descriptionAdded value: +"Style ID to scope jobs to (style analysis); pass exactly one of project_id or style_id"
- Changed
list_assets2 fields changed- added
Input schema / properties / asset_type / descriptionAdded value: +"Optional filter: \"character\", \"environment\", or \"object\"; empty lists all asset types" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
list_models1 field changed- added
Input schema / properties / job / descriptionAdded value: +"Generation job whose allowed models to list, e.g. \"script\", \"storyboard\", \"segment_image\", \"segment_video\", \"voice_block\""
- Changed
list_music_tracks1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
list_projects1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID of the channel whose projects to list, from list_channels or create_channel"
- Changed
list_scenes1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
list_styles1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID of the channel that owns the styles, from list_channels"
- Changed
list_voice_blocks1 field changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
list_voices1 field changed- added
Input schema / properties / provider / descriptionAdded value: +"TTS engine to list voices for: \"minimax\" (default engine) or \"elevenlabs\"; match the project's voice_tts_provider"
- Changed
project_director_note2 fields changed- added
Input schema / properties / message / descriptionAdded value: +"Project-wide director note in natural language, e.g. \"make the intro punchier\" or \"all captions bigger\"" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
regenerate_segment_asset6 fields changed- added
Input schema / properties / asset_type / descriptionAdded value: +"\"image\" or \"video\"; for a video segment, \"image\" targets its start frame" - added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template(\"segment_image\") or (\"segment_video\")" - added
Input schema / properties / model / descriptionAdded value: +"Model ID to render with; empty uses the job's default (see list_models(\"segment_image\") / list_models(\"segment_video\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments" - added
Input schema / properties / settings / descriptionAdded value: +"Model-specific settings (e.g. image quality, video duration); valid keys come from the model's settings_schema in list_models"
- Changed
remove_music_track1 field changed- added
Input schema / properties / track_id / descriptionAdded value: +"ID of the music track to remove, from list_music_tracks"
- Changed
remove_segment_sfx3 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments" - added
Input schema / properties / sfx_name / descriptionAdded value: +"Name of the SFX asset to remove, as shown by get_segment_assets; needed only when the segment has several SFX attached"
- Changed
rescan_voice_blocks2 fields changed- added
Input schema / properties / model / descriptionAdded value: +"Model ID for the re-extraction; empty uses the default (see list_models(\"voice_block_scan\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
revise_script3 fields changed- added
Input schema / properties / instruction / descriptionAdded value: +"Natural-language edit instruction, e.g. \"make the intro punchier\"" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / selected_text / descriptionAdded value: +"Exact passage to rewrite; must appear verbatim in the active script. Omit to revise the whole script"
- Changed
save_script2 fields changed- added
Input schema / properties / content / descriptionAdded value: +"Full script text to save as a new version; plain prose narration, optionally with scene headings" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
scan_script3 fields changed- added
Input schema / properties / editable_sections / descriptionAdded value: +"Per-call prompt section overrides, keyed by section name; see get_section_template(\"script_scan\")" - added
Input schema / properties / model / descriptionAdded value: +"Model ID to scan with; empty uses the default (see list_models(\"script_scan\"))" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
set_character_voice2 fields changed- added
Input schema / properties / asset_id / descriptionAdded value: +"Character asset ID, from list_assets" - added
Input schema / properties / voice_id / descriptionAdded value: +"TTS voice ID, from list_voices (use the provider matching the project's voice_tts_provider)"
- Changed
set_narrator_voice2 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / voice_id / descriptionAdded value: +"TTS voice ID for the narrator, from list_voices (use the provider matching the project's voice_tts_provider)"
- Changed
set_project_style2 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / style_id / descriptionAdded value: +"ID of the style to make the project's default, from create_style or list_styles"
- Changed
set_provider_key2 fields changed- added
Input schema / properties / key / descriptionAdded value: +"The provider API key to register; stored encrypted at rest" - added
Input schema / properties / provider / descriptionAdded value: +"Provider the key belongs to: \"openai\", \"gemini\", \"anthropic\", \"fal\", \"elevenlabs\", or \"minimax\""
- Changed
set_segment_continuation3 fields changed- added
Input schema / properties / continues_from / descriptionAdded value: +"1-based number of the EARLIER segment whose frame this one continues; pass 0 to clear the link" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based number of the segment whose image should continue an earlier frame, as reported by get_segments"
- Changed
split_segment4 fields changed- added
Input schema / properties / inherit_index / descriptionAdded value: +"0-based index of the resulting part that keeps the original creative data (default: the first part)" - added
Input schema / properties / offsets_ms / descriptionAdded value: +"Cut points as millisecond offsets from the segment start, ascending; 1-3 cuts producing 2-4 parts" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based number of the segment to split, as reported by get_segments"
- Changed
update_asset3 fields changed- added
Input schema / properties / asset_id / descriptionAdded value: +"Asset ID, as returned by list_assets or create_asset" - added
Input schema / properties / description / descriptionAdded value: +"New generation-facing look description; empty leaves it unchanged" - added
Input schema / properties / name / descriptionAdded value: +"New asset name; empty leaves the name unchanged"
- Changed
update_caption_config2 fields changed- added
Input schema / properties / caption_config / descriptionAdded value: +"Partial caption config to merge (keys like enabled, plus styling); read the current value from get_project's caption_config" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
update_music_track2 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"Partial dict of track fields to patch; allowed keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame" - added
Input schema / properties / track_id / descriptionAdded value: +"Music track ID, from list_music_tracks or add_music_track"
- Changed
update_project2 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed" - added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects"
- Changed
update_segment_content3 fields changed- added
Input schema / properties / project_id / descriptionAdded value: +"Project ID, as returned by create_project or list_projects" - added
Input schema / properties / segment_number / descriptionAdded value: +"1-based segment number, as reported by get_segments" - added
Input schema / properties / user_input / descriptionAdded value: +"Natural-language feedback describing the change to this shot, e.g. \"make this a close-up\" or \"show the machine from above\""
- Changed
update_style_fields2 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"FULL flat dict of analyzed fields to write, shaped {key: {\"value\": str, \"applies_to\": [...]}} — fetch with get_style, modify, send the whole dict back" - added
Input schema / properties / style_id / descriptionAdded value: +"Style ID, as returned by create_style or list_styles"
- Changed
update_voice_block3 fields changed- added
Input schema / properties / voice_block_id / descriptionAdded value: +"Voice block ID, from list_voice_blocks" - added
Input schema / properties / voice_id / descriptionAdded value: +"New TTS voice ID for this block, from list_voices; empty leaves the voice unchanged" - added
Input schema / properties / volume / descriptionAdded value: +"Playback volume for this block, 0-1; omit to leave unchanged"
- Changed
view_image1 field changed- added
Input schema / properties / url / descriptionAdded value: +"Public Framesail media URL to fetch — a public_url from get_segment_assets, a file_path from list_assets, or a template/preset image URL from get_style / list_style_presets; other hosts are rejected"
68 tool updates
- First observed
activate_script_version - First observed
add_music_track - First observed
add_segment_sfx - First observed
analyze_style - First observed
await_jobs - First observed
browse_audio_library - First observed
build_scenes - First observed
change_segment_type - First observed
combine_segments - First observed
create_asset - First observed
create_channel - First observed
create_project - First observed
create_style - First observed
delete_asset - First observed
delete_project - First observed
delete_style - First observed
director_note - First observed
export_video - First observed
generate_asset_reference - First observed
generate_script - First observed
generate_segments - First observed
generate_storyboard - First observed
generate_style_template - First observed
generate_voiceover - First observed
get_credit_balance - First observed
get_pipeline_progress - First observed
get_project - First observed
get_script - First observed
get_section_template - First observed
get_segment_assets - First observed
get_segments - First observed
get_style - First observed
get_video_url - First observed
get_workflow_status - First observed
list_assets - First observed
list_channels - First observed
list_models - First observed
list_music_tracks - First observed
list_projects - First observed
list_provider_keys - First observed
list_scenes - First observed
list_style_presets - First observed
list_styles - First observed
list_voice_blocks - First observed
list_voices - First observed
project_director_note - First observed
regenerate_segment_asset - First observed
remove_music_track - First observed
remove_segment_sfx - First observed
rescan_voice_blocks - First observed
revise_script - First observed
save_script - First observed
scan_script - First observed
set_character_voice - First observed
set_narrator_voice - First observed
set_project_style - First observed
set_provider_key - First observed
set_segment_continuation - First observed
split_segment - First observed
update_asset - First observed
update_caption_config - First observed
update_music_track - First observed
update_project - First observed
update_segment_content - First observed
update_style_fields - First observed
update_voice_block - First observed
view_image - First observed
whoami
Related MCP Connectors
Create faceless short and long-form videos: script, stock footage, ElevenLabs voice, captions, MP4.
Create finished AI videos (script, voiceover, scenes, captions, music) for TikTok, Reels and Shorts.
Script in, finished 1080p narrated video out. Pay per call in USDC via x402.
AI video production for marketing and social media: script, scenes, voice-over, subtitles, music.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables autonomous generation of long-form YouTube documentaries (15-25 minutes) with minimal human intervention, focusing on historical niches like Byzantine history.-
- AlicenseNot gradedqualityCmaintenanceTurns text scripts into complete videos with stock footage, AI narration, and subtitles via MCP tools for AI assistants.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to generate animated videos from natural language prompts, handling scriptwriting, voiceover synthesis, and MP4 rendering.MIT

AITuber MCP Serverofficial
AlicenseAqualityBmaintenanceCreate AI-powered videos from any MCP-compatible client. Generate videos with AI narration, visuals, and synced captions for short-form and long-form content.248 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.