framesail
Server Details
Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.
- Status
- Healthy
- Uptime
- 99.9% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 28 tools
Tools are organized around distinct resources (script, assets, storyboard, segment, style, voiceover, editor, project) with per-resource actions, so most selections are obvious. A few boundaries require reading descriptions to separate: segment_edit vs segment_restructure, storyboard_edit vs segment_edit, and the many 'generate' tools (assets, script, storyboard, style, voiceover) which share a verb but target different resources.
The dominant pattern is consistent snake_case resource_action (assets_edit, script_generate, voiceover_read, etc.), followed by nearly every resource. The main deviations are a handful of action-verb tools (render, delete, view_image, export_video) and the verb_noun retrieval pair get_status/get_generation_options, which mix ordering conventions (read vs get) with the rest of the set.
28 tools is on the heavy side, but the server models a full multi-stage video pipeline (channels/styles, scripts, assets, storyboards, segments, renders, voiceover, editor, export), and each tool maps to a real stage or CRUD operation rather than being redundant. Slightly over the comfortable range but largely earned.
Lifecycle coverage is strong: read/edit/generate for style, script, assets, storyboard, and voiceover; segment restructure and rollback; render, editor, export, status with wait, and a delete tool covering projects, assets, music, and segment extras. Minor gaps remain, such as no channel or style deletion and no dedicated account-settings read (account_edit exists but reads are folded into get_status).
Available Tools
28 toolsaccount_editEdit accountAInspect
The account's default model and settings for one kind of generation, used when neither the call nor the item's prompt editor names one. voice_block needs provider and segment_video needs talking_head: each family keeps its own default.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | set_model_default: a model id from get_generation_options | |
| action | Yes | set_model_default: model, optional settings; clear_model_default | |
| provider | No | voice_block: the voice engine (the project's voice_tts_provider) | |
| settings | No | Model settings: keys of its settings_schema | |
| generation | Yes | script_scan is Analyze Script; *_reference, reference images; voice_block, the voiceover; segment_image, a segment's image; segment_video, a clip; art_style_*_template, the style's template images | |
| talking_head | No | segment_video: true for talking head models, false for clips |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's added value is the fallback semantics (defaults only apply when nothing else names a model) and the per-family independence ('each family keeps its own default'). These are genuine behavioral traits not derivable from the annotations. It stops short of 5 by not addressing what clearing a default reverts to or any auth/scope constraints.
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?
It is short and each sentence carries information, so it is not padded. But the opening is a grammatically incomplete fragment that describes the resource rather than front-loading the action, which slightly obscures the tool's purpose at first read.
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 6-parameter edit tool with full schema coverage, no output schema, and annotations that cover the safety profile, the description supplies the missing semantics: fallback behavior and conditional parameter requirements. It is close to complete, lacking only error/reset behavior when a default is cleared.
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 per-parameter meanings are already documented (baseline 3). The description adds cross-parameter conditional requirements — 'voice_block needs provider' and 'segment_video needs talking_head' — which the flat per-parameter schema descriptions do not express. That is real added value 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 title ('Edit account') and the phrase 'The account's default model and settings for one kind of generation' together convey that this sets account-level defaults for a generation family. It is clearly distinguishable from siblings like editor_edit or segment_edit, which operate on other scopes. The opening is a noun fragment rather than an explicit verb+resource statement, so it stops short of 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?
'used when neither the call nor the item's prompt editor names one' explains the fallback context in which these defaults matter, which is useful. However, it never states when an agent should invoke this tool versus the many *_edit siblings, nor any preconditions for calling it. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_editEdit assetsAInspect
Add a character, environment or object that Analyze Script missed, or rename one or rewrite its description. After a description change, render its reference image again (assets_generate asset_ids).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name the script uses for it | |
| action | Yes | create: project_id, asset_type, name, optional description; update: asset_id and name and/or description | |
| asset_id | No | update: the asset id | |
| asset_type | No | create: the kind | |
| project_id | No | Project id | |
| description | No | What it looks like; every render follows it, so be specific |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose non-readOnly, non-destructive, non-idempotent behavior, so the bar is lower. The description adds genuine workflow context: a description change must be followed by re-rendering the reference image via assets_generate. It omits permission/auth requirements and what the update does to existing renders, but the downstream-invalidation note is real added value.
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: the capability first, then the required follow-up action. Every clause earns its place and nothing is padded.
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 exists, but the description supplies the critical post-edit workflow (regenerate the reference image) that an agent would otherwise miss. For a mutation tool with full schema coverage and annotations, this is complete enough, though it could note what the operation returns.
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 fully documents all six parameters, including the action enum's per-action requirements. The description only restates name/description edits at a high level and adds no syntax or format detail beyond the 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?
States specific verbs (add, rename, rewrite) against a specific resource (assets: character/environment/object), which distinguishes it clearly from assets_read and assets_generate. The reference to 'Analyze Script missed' gives the concrete scenario the tool exists for. An agent can tell it apart from its siblings 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?
Gives a clear when-to-use trigger (when Analyze Script missed an asset) and names the follow-up alternative (assets_generate) for re-rendering reference images. It does not explicitly contrast create vs update behavior in prose, but the schema enum covers that split. Clear context with no strong exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_generateGenerate reference imagesAInspect
Render reference images, which keep each character, environment and object looking the same in every segment. Needs both style template images. Without asset_ids it renders every asset with none, skipping ones already rendering, so a repeat never bills twice. Afterwards, view_image them to check likeness.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id (get_generation_options); omit for the saved choice | |
| dry_run | No | Return the count and credit estimate; start nothing | |
| settings | No | Model settings: keys of its settings_schema | |
| asset_ids | No | Assets to render, again if they have one; omit for every asset without a reference image | |
| project_id | Yes | Project id | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the mutation/safety profile, and the description adds real behavioral value beyond them: the style-template prerequisite, the dedupe of assets already rendering, and the billing guarantee that a repeat never bills twice. It does not describe failure handling or timing, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose before prerequisites and follow-up. Minor redundancy between 'skipping ones already rendering' and 'a repeat never bills twice', but nothing wasted overall.
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 non-destructive mutation with full annotation coverage and no output schema, the description supplies the prerequisite, default-omission behavior, billing/dedupe semantics, and a verification step. It omits only secondary details like timing and error 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 description coverage is 100%, so the baseline is 3. The description restates asset_ids omission behavior (render every asset with none) and adds the style-template requirement, but adds little on model, settings, editable_sections, or dry_run beyond what the schema already says.
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 (render) and resource (reference images) and explains their role: keeping characters/environments/objects consistent across segments. It names the sibling view_image as a follow-up step, though it does not explicitly contrast itself with style_generate or storyboard_generate.
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 a precondition (both style template images needed) and a follow-up workflow (view_image to check likeness), plus the effect of omitting asset_ids. It stops short of naming an explicit alternative tool to use instead for a different case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_readRead assetsARead-onlyIdempotentInspect
The project's characters, environments and objects, each with its description (what every render follows), reference_image (null: not rendered; view_image it) and, for characters, voice_id. Each needs a reference image before the voiceover.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | Only this kind | |
| project_id | Yes | Project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive behavior, so those need not be restated. The description adds genuine value beyond them: it explains that description is 'what every render follows', that a null reference_image means 'not rendered', and that voice_id exists only for characters.
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 compact lines that front-load the resource and then enumerate the returned fields. Every clause carries information; no filler. Slightly dense phrasing, but appropriately sized.
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 return-shape burden and does so well, naming the fields each asset returns and their meaning. For a simple two-parameter read tool this is sufficient for an agent to call and interpret 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%, so project_id and asset_type are already documented by the schema (including the 'Only this kind' filter). The description echoes the three asset kinds but adds no syntax or filtering detail beyond what the schema provides, so the baseline 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 identifies the resource (the project's characters, environments and objects) and what each carries, and combined with the name/title it is clearly the read operation. It does not explicitly name that it reads versus its siblings (assets_edit, assets_generate), but the returned-field detail makes 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?
There is no explicit when-to-use versus assets_generate or assets_edit, but the parenthetical 'reference_image (null: not rendered; view_image it)' routes the agent to a sibling tool conditionally. The closing domain rule ('Each needs a reference image before the voiceover') hints at when this data matters but is not framed as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteDeleteADestructiveInspect
Permanently delete; irreversible, so confirm with the user first. project: it and everything in it. asset: a character, environment or object. music_track: a background music track. segment_extra: a segment's sound effect or overlay, with its scene layers. A segment's image, clip and voiceover can't be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The asset, music track, or segment sound effect or overlay | |
| type | Yes | project: project_id; asset, music_track: id; segment_extra: project_id, segment_number, and id if the segment has several | |
| project_id | No | Project id | |
| segment_number | No | Segment number (1-based, from storyboard_read) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, but the description adds genuinely new behavioral detail: the operation is permanent and irreversible, requires user confirmation, and cascades (deleting a project removes everything in it; segment_extra removes scene layers). It does not discuss failure modes or partial-failure behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical irreversible/confirm warning is front-loaded in the first sentence, and every following clause carries type-specific information. The hard line-wrap formatting (breaks mid-sentence and mid-phrase) makes it slightly harder to scan than a flowing paragraph, but there is no filler 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 destructive, non-idempotent tool with no output schema, the definition covers what gets destroyed, the confirmation requirement, cascade scope, and unsupported targets. What is missing is post-deletion feedback (what the caller receives, how to verify success), which is a modest gap given annotations already flag destructiveness.
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 baseline is 3, but the description goes further by giving semantic meaning to the enum values ('asset: a character, environment or object', 'music_track: a background music track'), which the schema only labels. It still relies on the schema for id/project_id/segment_number mechanics, so it is not a 5.
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?
Opens with a specific verb+resource ('Permanently delete') and then enumerates exactly what each supported type removes (project, asset, music_track, segment_extra). The per-type breakdown lets an agent distinguish this destructive tool from siblings like assets_edit, segment_edit, or storyboard_edit 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?
Gives a clear precondition ('irreversible, so confirm with the user first') and an explicit exclusion ('a segment's image, clip and voiceover can't be deleted'), which steers the agent away from unsupported calls. It stops short of naming alternative tools for removing those unsupported artifacts, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_editEdit the videoADestructiveInspect
Polish the video in the editor; changes show in the next export.
scene_note: edit one scene with a note (move, restyle, add or remove layers and overlays, change the text of a lower third, title card or callout, change motion); spends credits. Returns the changes and skipped_mutations: edits that didn't land (applied=false) or landed differently than asked (applied=true), each with a reason; check them. Scene lengths follow the narration; the image, clip and voiceover layers can't be removed. project_note: a note for the whole video, applied to up to 10 scenes per call; spends credits. captions: merge caption settings. add_sfx: attach a sound effect to a segment. add_music / update_music: background music timed in seconds; a track's duration follows from its trim.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | Loop the music under the whole video | |
| name | No | The music track's name | |
| action | Yes | scene_note: segment_number, message; project_note: message; captions: caption_config; add_sfx: segment_number, library_track_id; add_music: library_track_id, optional name, volume, loop, start_seconds; update_music: track_id and any of name, volume, loop, start_seconds, trim_start_seconds, trim_end_seconds | |
| volume | No | Music volume 0-1; the 0.12 default sits under the narration, so raise it only if asked | |
| message | No | The note in plain words, e.g. "move the caption to the top" | |
| track_id | No | update_music: a track id from editor_read action=music | |
| project_id | No | Project id | |
| start_seconds | No | Where the music starts in the video, in seconds | |
| caption_config | No | captions: keys to merge into the caption settings (get_status shows them) | |
| segment_number | No | Segment number (1-based, from storyboard_read) | |
| library_track_id | No | A track id from editor_read action=audio_library | |
| trim_end_seconds | No | update_music: where playback stops within the track, in seconds | |
| trim_start_seconds | No | update_music: where playback starts within the track, in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive/not idempotent), the description adds substantial behavioral context: edits spend credits, returns include a skipped_mutations list with applied/reason that the agent is told to check, project_note affects up to 10 scenes per call, scene lengths follow narration, and image/clip/voiceover layers cannot be removed. This is exactly the surplus detail the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded before the dense action breakdown, and every clause carries information (credits, return shape, layer constraints). It is a single semicolon-heavy block rather than cleanly separated sections, which slightly hurts scanability but there is little 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 13-parameter, destructive, credit-spending tool with no output schema, the description covers the key gaps: credit cost, the skipped_mutations return and its semantics, per-action limits, and layer constraints. It omits auth/permission requirements and the return shape beyond skipped_mutations, so it is strong but not exhaustive.
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 baseline is 3, but the description adds meaning not fully in the schema: captions act as a merge, music is timed in seconds and a track's duration follows from its trim, and the action-level parameter groupings mirror the enum. That extra semantic framing lifts it above 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 states a specific resource (the video in the editor) and enumerates the six distinct actions it can perform (scene_note, project_note, captions, add_sfx, add_music, update_music), so an agent can tell the scope apart from a read tool. The opening 'Polish the video' is generic, and it never explicitly names sibling tools like editor_read as the reading counterpart, so it stops short of 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?
Each action is tied to a clear condition: scene_note for one scene, project_note for the whole video (10 scenes per call), captions to merge settings, add_sfx to attach a sound effect, add/update_music for background music. However it gives no explicit 'when not to use this' exclusion or direct routing to editor_read/segment_edit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_readRead the editorARead-onlyIdempotentInspect
scenes: the editor timeline, one scene per segment, as {total, offset, returned, scenes}; scenes build on their own from the storyboard. music: {tracks}, timed in seconds. audio_library: tracks to add with editor_edit; when nothing matches, it lists the library's moods and genres.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | audio_library: a mood tag | |
| genre | No | audio_library: a genre tag | |
| limit | No | scenes: how many; 0 returns all | |
| action | Yes | scenes: the timeline (project_id); music: the project's music tracks (project_id); audio_library: music and sound effects to add | |
| offset | No | scenes: first to return, 0-based | |
| search | No | audio_library: free text | |
| category | No | audio_library: music or sfx (sound effects); omit for both | |
| project_id | No | Project id | |
| include_composition | No | scenes: include each scene's full layer JSON (bulky: page it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description still adds real behavior: the paginated scenes shape, music timing in seconds, and the notable fallback where an empty audio_library match returns the library's moods and genres. It does not disclose auth or rate-limit traits, but those are minor here.
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 tight, action-scoped clauses with no filler or repetition. It is slightly under-structured at the front, opening on 'scenes:' rather than a one-line statement of what the tool is, forcing the reader to assemble overall purpose from name and 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?
With 9 parameters and no output schema, the return-shape details (scenes object with total/offset/returned, music tracks, fallback listings) carry useful load, and the action enum covers the three modes. What is missing is only light framing (prerequisites for project_id, pagination guidance) already handled by the 100%-covered 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 description coverage is 100%, so every parameter (including the action enum, mood, genre, limit, offset, search, category, include_composition) is already documented in the schema. The description adds return-format context ('timed in seconds') but little that clarifies the parameters themselves, so the baseline 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 enumerates the three actions and what each returns (scenes timeline, music tracks, audio_library tracks), so the resource is identifiable per action. It never states the top-level verb+resource explicitly (the reader infers 'read editor data' from name/title), and only partially differentiates from siblings by naming editor_edit for the audio_library case.
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?
There is implicit routing: audio_library results are 'tracks to add with editor_edit', which frames this as the read counterpart to the edit tool, and the no-match fallback (listing moods/genres) is noted. But there is no explicit 'use this when you need to inspect X' statement or clear when-not guidance across the three actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_videoExport the videoAInspect
Render the finished video from the editor timeline; free. When the export job completes, get_status carries export_url.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-destructive, non-idempotent, so the safety profile is already covered. The description adds real value beyond that: the operation is asynchronous (an 'export job' that 'completes' later) and the output surfaces through get_status rather than the immediate response, plus it is 'free', a cost signal annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with the action and its source timeline; nothing is padded. The 'free' note and the async follow-up pointer both earn their place, though the sentence could be tightened slightly.
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, and the description correctly fills that gap by telling the agent the export_url arrives via get_status rather than in this call's response. For a single-parameter, non-destructive tool this is nearly complete; only the relationship to the 'render' sibling is 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% with a single required 'project_id', so the schema carries the parameter documentation. The description adds no format, constraint, or sourcing detail for project_id, so the baseline 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?
States a specific verb and resource ('Render the finished video from the editor timeline'), which is clear on its own. However, the sibling list contains a tool literally named 'render', and the description never distinguishes export_video from it, leaving ambiguity about which one produces the final deliverable.
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 is implied rather than stated: call this when you want the finished video. It does name get_status as the follow-up step, which is helpful workflow context, but there are no explicit when-not conditions and no explanation of how it relates to the 'render' sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_optionsGet generation optionsARead-onlyIdempotentInspect
What a generate call can be told to use.
models: the allowed models with credit estimates and settings_schema (the valid settings keys); is_default marks the default (the account's saved choice, else Framesail's). Voice and clip models come in families, each with its own default: pass provider or talking_head for one family.
prompt_sections: sections with entity_backed=false can be overridden with editable_sections; entity_backed=true sections show the item's own content (description, prompts, text, brief): change it with the edit tools.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | models: the allowed models; prompt_sections: the prompt editor's sections | |
| provider | No | voice_block: the voice engine (the project's voice_tts_provider) | |
| generation | Yes | script_scan is Analyze Script; *_reference, reference images; voice_block, the voiceover; segment_image, a segment's image; segment_video, a clip; art_style_*_template, the style's template images | |
| talking_head | No | segment_video: true for talking head models, false for clips |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds substantive context beyond that: credit estimates are returned, settings_schema exposes the valid settings keys, is_default reflects the account's saved choice falling back to Framesail's, and entity_backed=true sections cannot be overridden here and must be changed via edit tools — a real mutability boundary.
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?
It is information-dense and front-loaded with the core purpose, with no filler sentences. The parenthetical packing ('settings_schema (the valid settings keys)') and fragmentary opening slightly reduce readability, but every clause carries useful signal.
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, so the description must explain the return values, and it does: model lists with credit estimates and settings schema, the is_default flag, and prompt_sections with their entity_backed semantics. The top-level response shape is not spelled out, but the fields an agent needs to act on are covered.
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 genuinely elaborates: it explains what is_default means, what settings_schema contains, the model-family concept behind provider/talking_head, and the entity_backed flag that governs editable_sections. That is added meaning beyond the enum descriptions in 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 makes clear this is a discovery/read tool returning the options a generate call can accept (allowed models with credit estimates, settings schema, prompt sections), which cleanly separates it from the many *_generate siblings that actually produce assets. The opening sentence is a fragment ('What a generate call can be told to use') rather than a verb+resource statement, so it is clear but not maximally crisp.
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 conditional guidance tied to the parameters ('pass provider or talking_head for one family') and routes the agent to the alternative tool set for a specific case ('entity_backed=true sections ... change it with the edit tools'). It does not explicitly say when not to use this tool or that it should be called before a generate call, 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_statusGet statusARead-onlyIdempotentInspect
Where things stand and what to do next; start and resume here.
Always reports the account: plan, credits, credits held by running jobs, and credits_available to spend. project_id adds the project's settings, each step's state and web link, jobs with readable errors, export_url and next_step. channel_id reports the channel style instead: analysis_done, inputs_stale, templates, templates_stale and next_step. Without API access it reports only the account and subscription_needed: pass that on to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait up to about 50 seconds for the jobs in scope to finish, then report only credits, jobs, step states and next_step; call again if some still run | |
| channel_id | No | Report this channel's style instead of a project | |
| project_id | No | Project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds real behavioral context beyond them: the degraded no-API-access path returning subscription_needed, and the instruction to pass that on. It does not mention rate limits or pagination, but for a status read the disclosure is solid.
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 text is dense and front-loaded with the entry-point instruction, and each sentence carries new information about a different scope. The opening metaphor is slightly wasteful, but overall there is little 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 must convey return values, and it enumerates the key fields (plan, credits, credits_available, step states, web link, export_url, next_step, subscription_needed). It is nearly complete for the account path; the project and channel paths are described by key names rather than structure, which is a minor gap.
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 further by explaining what each parameter yields (project_id adds settings/step states/jobs/export_url/next_step; channel_id reports channel style keys), giving outcome-level meaning that the terse schema descriptions ('Project id', 'Report this channel's style') do not.
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 opening line is vague and metaphorical ('Where things stand and what to do next'), but the body states a specific resource (account status: plan, credits, credits_available) and distinguishes the three scopes (account, project_id, channel_id). An agent can tell it apart from projects_read or style_read once it reads past the first sentence.
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?
'start and resume here' tells the agent to call this first or to resume a workflow, and the body explains the conditional branches (project_id vs channel_id vs no API access). It stops short of naming explicit alternatives among siblings, but the context of use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_editEdit channels and projectsAInspect
Create a channel or a project, or change a project's title, brief or video format. A new project takes its channel's style; a channel with no style needs one (style_edit action=create) before anything is generated. Share the returned web_url so the user can follow along.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | create_channel: the channel name | |
| title | No | The project title | |
| action | Yes | create_channel: name, optional description; create_project: channel_id, title, optional description, video_format; update_project: project_id and any of title, description, video_format | |
| channel_id | No | create_project: its channel | |
| project_id | No | Project id | |
| description | No | A channel: what it is about. A project: the brief, what the video is about; it seeds the script, so make it specific | |
| video_format | No | landscape (16:9, the default) or portrait (9:16: Shorts, Reels, TikTok); fixed once a storyboard exists |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower. The description adds genuine behavior beyond them: new projects inherit channel style, the style prerequisite, and that a web_url is returned for the user to follow — all useful side-effect 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?
Three tight sentences with the mutation scope front-loaded, followed by the dependency and the follow-up instruction. No repetition or filler, though it could be slightly more ordered around the action enum.
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 multi-action mutation tool with no output schema, the description covers scope, prerequisite, and return signal (web_url). An agent has enough to invoke it correctly; remaining gaps are minor given the rich schema and 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 description coverage is 100%, so the schema already documents every parameter including the action enum semantics. The description only echoes title/brief/video_format, adding no syntax or format detail beyond the schema; baseline 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 gives a concrete verb set (create/change) and the exact resources and fields affected (channel, project, title, brief, video_format). An agent can distinguish it from projects_read by the mutation framing, though it never names the read sibling explicitly.
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 supplies a real workflow prerequisite: a channel with no style needs style_edit action=create before anything is generated, and it tells the agent to surface the returned web_url. No explicit when-not or negative routing to alternatives is given, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_readRead channels and projectsCRead-onlyIdempotentInspect
Your channels, or the projects in one channel.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | channels: your channels; projects: the projects in channel_id | |
| channel_id | No | projects: the channel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond that — no statement of scope, pagination, or what a caller gets back for either action. It is effectively a restatement of the title.
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?
Six words, nothing wasted — but it is a sentence fragment that omits the verb, so brevity comes at the cost of clarity. It is front-loaded but under-specified for a two-action 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 two-parameter read with full schema coverage and rich read-only annotations, the definition is minimally adequate — an agent can call it. What is missing is any guidance on selecting between the channels and projects actions and any hint of the return shape, 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 description coverage is 100%; both action and channel_id are documented with their semantics ('channels: your channels; projects: the projects in channel_id'). The description's clause 'or the projects in one channel' only loosely echoes channel_id and adds no format or constraint detail beyond the schema. Baseline 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 is a noun phrase ('Your channels, or the projects in one channel') rather than a verb+resource statement; the verb is only recoverable from the title. It does identify the two resources (channels, projects) and their nesting relationship, but it does not distinguish itself from sibling projects_edit or projects_read-style operations on its own.
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 when-to-use guidance, no mention of which of the two actions to pick in which situation, and no mention of the sibling projects_edit that operates on the same resource. The only routing signal is buried in the action enum description in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renderRender segmentsAInspect
Render segment images and clips, the biggest spend in the video: always run it with dry_run=true first and get the user's yes on the estimate.
generate: without segment_numbers, everything not yet rendered (items rendering are skipped); with them, those segments, finished renders included, e.g. the first minute before the whole video. Overrides need segment_numbers and what=images or what=clips.
animate: turn one segment's rendered image into a clip; animate only images worth motion. dry_run quotes the default clip or talking head model. A refused render leaves the segment as it was; to go back to the image, segment_restructure change_type to=image keep_image=true.
Check renders with storyboard_read action=segment_assets and view_image.
| Name | Required | Description | Default |
|---|---|---|---|
| what | No | generate: images (everything but clips: images, overlay segments, real photos, B-roll), clips, or all | all |
| model | No | Model id (get_generation_options); omit for the saved choice | |
| action | Yes | generate: optional segment_numbers, what; animate: segment_number, optional talking_head | |
| dry_run | No | Return the count and credit estimate; start nothing | |
| settings | No | Model settings: keys of its settings_schema | |
| project_id | Yes | Project id | |
| talking_head | No | animate: true for a talking head (the person in the image speaks the narration with lip sync, billed on the segment's full length); false for a clip | |
| segment_number | No | Segment number (1-based, from storyboard_read) | |
| segment_numbers | No | generate: only these segments, finished ones included; omit for everything not yet rendered | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety flags (destructiveHint=false, idempotentHint=false). The description adds high-value behavior beyond them: this is the biggest credit spend, dry_run quotes the estimate, animate defaults to a clip or talking-head model, a refused render leaves the segment unchanged, and there is a documented recovery path (segment_restructure change_type=to image keep_image=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?
Front-loaded with the critical instruction to run dry_run first, and each subsequent sentence carries distinct operational content. It is dense, multi-clause prose, but almost 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?
For a 10-parameter mutation tool with no output schema, the description covers cost/estimation behavior, refusal handling, defaults, and post-run verification paths, which is what an agent needs. Nothing essential for correct invocation appears 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 baseline is 3, but the description adds cross-parameter semantics the schema does not: overrides need segment_numbers plus what=images/clips, and animate uses segment_number with optional talking_head. It leaves a few params (model, settings, editable_sections) to the schema alone.
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 (render) and resource (segment images and clips) and immediately distinguishes its two sub-actions, generate and animate, with the scope of each. It also flags the differentiating stakes ('the biggest spend in the video'), which no sibling touches.
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 when-to-use and when-not: dry_run=true first and get user confirmation; generate without segment_numbers = everything not yet rendered, with them = those segments including finished ones; overrides require segment_numbers and what=images/clips. It also routes to verification via storyboard_read action=segment_assets and view_image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_editEdit the scriptADestructiveInspect
Change the script or its settings; only revise spends credits.
save: replace the active version's text (the old text is lost: show the
user the current script first), then run Analyze Script. Notation, never
read aloud: [SCENE: <visual direction>] as its own paragraph directs
the storyboard for the narration after it, until the next one, over the
director style. <break time="1.5s" /> is the only thing that makes the
voice pause (about 0.5s between thoughts, 1.0s between sections; one tag
with the total, never two in a row). A paragraph starting Name: "..."
is that character's dialogue. A delivery cue in square brackets inside
a line ([laughs], [sighs], [whispers]) shapes how it is said; keep
it inline, never on its own line. MiniMax performs sounds such as
laughs, sighs, breathes, gasps and coughs and drops other cues.
activate_version: switch to another version (each generated script is one). revise: an AI rewrite of a passage or the whole script in the narrative voice; returns revised_text without saving it: splice it in and save.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | save: content; activate_version: script_id; revise: instruction, optional selected_text; settings: script_target_minutes and/or voice_mix; set_concept: visual_concept | |
| content | No | save: the full script text | |
| script_id | No | activate_version: a version id from script_read | |
| voice_mix | No | settings: narration versus character dialogue | |
| project_id | Yes | Project id | |
| instruction | No | revise: what to change, e.g. "make the intro punchier" | |
| selected_text | No | revise: the exact passage to rewrite; omit for the whole script | |
| visual_concept | No | set_concept: how the video looks | |
| script_target_minutes | No | settings: length of the next generated script, in minutes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint, non-idempotent) by disclosing the concrete consequence: the old text is lost and should be surfaced first, revise spends credits, and revise returns revised_text without persisting. This is exactly the kind of consequence detail an agent needs before calling a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and the destructive warning are front-loaded in the first two sentences; per-action blocks follow. The notation paragraph is dense and run-on, but its rules are operationally relevant to authoring `content`, so little of it is genuinely 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 9-parameter, 5-action tool with no output schema, the description covers the risky paths (save overwrite, credit-spending revise, non-persisting revise return) well. The remaining gap is that settings and set_concept get no behavioral treatment beyond the schema's action enum mapping.
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 real meaning the schema cannot carry: the notation grammar for `content` (SCENE blocks, break tags, dialogue naming, inline delivery cues) and the revise/selected_text splice workflow. It leaves the settings and set_concept fields to 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 opening line states a specific verb+resource ('Change the script or its settings') and adds a differentiating cost note ('only revise spends credits') that separates it from script_generate/script_read. It does not explicitly name a sibling, so it lands just short of 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?
Gives per-action guidance (save replaces the active text; activate_version switches versions; revise rewrites without saving and must be spliced in then saved) and a prerequisite ('show the user the current script first'). Clear context, though it never explicitly routes to siblings like script_read for ids beyond a passing mention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_generateGenerate the script or analyze itAInspect
generate: write the script from the brief and the narrative style; each run is a new version (review it with script_read).
analyze (Analyze Script): find the script's characters, environments
and objects (including any named only in [SCENE: ...] directions) and
split it into voice blocks. Existing assets are kept as they are
(description, reference image, voice) and new ones added; assets the
script no longer names stay until the user deletes them. Review with
assets_read.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id (get_generation_options); omit for the saved choice | |
| action | Yes | generate: write the script; analyze: Analyze Script | |
| settings | No | Model settings: keys of its settings_schema | |
| project_id | Yes | Project id | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-idempotent, non-destructive, and the description is consistent with them while adding real behavioral detail: each run creates a new version, and analyze preserves existing assets (description, reference image, voice) and adds new ones while stale assets persist until the user deletes them. That side-effect disclosure goes meaningfully beyond the structured fields, though permissions and failure behavior are unstated.
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 two modes are front-loaded and labeled, and the follow-up read tools are attached to the relevant mode. The parenthetical about [SCENE: ...] directions is useful but slightly dense; overall it is tight and earns its length.
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 two-action mutation tool with full schema coverage and no output schema, the description covers what each action does, how versions behave, what analyze does to existing assets, and which read tool verifies each result. 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 description coverage is 100%, so the schema already documents model, settings, project_id, and editable_sections. The description enriches the meaning of the `action` enum values considerably, but says nothing about the other four parameters, so it only marginally exceeds 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 names the two modes explicitly (generate: write the script; analyze: find characters/environments/objects and split into voice blocks), giving a specific verb+resource for each. It also names the sibling tools used to inspect results (script_read, assets_read), so an agent can place it in the workflow without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent what each action is for and how to follow up (review with script_read, review assets with assets_read), plus the important context that each generate run produces a new version. It does not address when to prefer script_edit over re-generating, nor any prerequisites, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_readRead the scriptARead-onlyIdempotentInspect
The active script, its versions, and the script settings (script_target_minutes, voice_mix, visual concept). Show the script to the user before Analyze Script.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description goes beyond them by enumerating the payload contents (active script, versions, settings) — meaningful given there is no output schema — though it says nothing about size, versioning behavior, or what happens when no script exists.
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?
Very short and dense: payload contents first, then the user-facing directive. The parenthetical field list is slightly cluttered but every element carries information; no filler 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?
For a single-parameter read tool with full annotation coverage, the description covers what it returns and when in the workflow to invoke it. With no output schema, a bit more detail on the returned shape (e.g. empty/absent script case) would be needed for a 5, but 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% with a single project_id parameter, so the schema already carries the parameter documentation. The description adds no additional meaning about project_id (format, source, or scoping), which is the expected baseline when the schema does the work.
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?
Names the exact resource returned — the active script, its versions, and script settings with three named setting fields — so an agent knows precisely what this fetches. It is phrased as a noun list rather than a verb+resource statement, but the read intent is unambiguous and it is distinguishable from script_edit and script_generate by naming script content rather than changes.
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?
"Show the script to the user before Analyze Script" supplies one workflow cue and a sequencing constraint, which is real guidance. However, it never names the sibling tools (script_edit, script_generate) or states when-not to use this versus those, so the routing information is only partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segment_editEdit a segmentAInspect
Change one segment without losing renders; only split spends credits. Returns the changed segments.
set_prompts: write prompts verbatim, no AI rewrite. The renders stay as they are: render the segment again to apply the new prompts. set_continuation: make this segment's image continue an earlier one's (same composition, only the change); render the image again. rollback: restore one of the last 5 renders of the image or clip; the current one takes its place, so it can be undone, and the prompt editor's model stays as it is. split: cut into 2-4 parts; the inheriting part keeps the prompts and renders; the others start empty and get prompts written from their narration in the background (spends credits), or give them prompts with set_prompts. Later segments renumber: read the storyboard again before more edits.
| Name | Required | Description | Default |
|---|---|---|---|
| what | No | rollback: restore the image or the clip | |
| index | No | rollback: which earlier render, 0 = the latest | |
| action | Yes | set_prompts: image_prompt, video_prompt and/or media_queries; set_continuation: continues_from; rollback: what, optional index; split: offsets_ms, optional inherit_index | |
| offsets_ms | No | split: 1-3 ascending cut points, in ms from the segment's start; word timings: voiceover_read action=blocks include_subtitle_data=true | |
| project_id | Yes | Project id | |
| image_prompt | No | set_prompts: the image prompt | |
| video_prompt | No | set_prompts: the motion used when the image is animated | |
| inherit_index | No | split: the part (0-based) that keeps the prompts and renders | |
| media_queries | No | set_prompts: searches for a real photo or B-roll | |
| continues_from | No | set_continuation: an EARLIER segment number; 0 clears the link | |
| segment_number | Yes | Segment number (1-based, from storyboard_read) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: 'only split spends credits', set_prompts leaves renders unchanged until re-rendered, rollback is itself undoable and preserves the prompt-editor model, split leaves non-inheriting parts empty and auto-writes prompts from narration (spending credits), and later segments renumber requiring a fresh storyboard read. That is exactly the side-effect and cost disclosure an agent needs.
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 lead sentence front-loads the key constraint (no render loss except split) and the 'Returns the changed segments' clause covers the absent output schema. The action paragraphs are dense but each earns its place; a bulleted structure would read better than the current run-on lines.
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 11-parameter, four-action mutation tool with no output schema, the description covers costs, reversibility, ordering side effects (renumbering), and the return value. The main omission is any routing guidance versus segment_restructure and storyboard_edit.
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, but the description adds meaning the schema does not: it links each action to its parameters conceptually (e.g., the inherited part keeping prompts for inherit_index, continuation meaning 'same composition, only the change') and clarifies that split inheritors 'start empty' until prompts are written.
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+resource ('Change one segment') and then enumerates four distinct actions (set_prompts, set_continuation, rollback, split) with their effects, so an agent understands the tool's scope well. It does not differentiate itself from the sibling segment_restructure, which is the only real gap.
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?
Each action carries its own when-to-use context: set_prompts for verbatim prompt writes with unchanged renders, set_continuation for chaining an earlier image, rollback for undoing to one of the last 5 renders, split for cutting into 2-4 parts. It never names an alternative sibling tool or states when NOT to use this one, 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.
segment_restructureRestructure a segmentADestructiveInspect
Change what a segment is. Every call previews first: when no rendered image or clip would be lost it runs; otherwise it changes nothing and returns what would be lost. Show the user, then call again with confirm=true.
combine: merge with a neighboring segment. The kept segment's renders stay, retimed to the combined length, but go stale: its prompts are rewritten for the combined narration, so render it again after. The other's are deleted (the preview names it).
change_type: to an image, real photo, B-roll (both fetched) or overlay segment. Clips and talking heads come from render action=animate. keep_image turns a clip back into its image, keeping the render. A change between an image, real photo and B-roll keeps the prompts; render the image again.
rewrite: an AI rewrite of the prompts from feedback; render the image and clip again after. For exact text, use segment_edit set_prompts.
combine, rewrite and a change to or from an overlay segment write prompts in the background, and a change to a real photo or B-roll with no searches yet writes its searches (its prompts stay): a small AI step that spends credits (get_status wait=true). Until it finishes, change_type is refused (409). Sound effects and overlays always survive; change an overlay's text with editor_edit scene_note. Later segments may renumber: read the storyboard again.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | change_type: the new kind | |
| keep | No | combine: whose prompts and renders survive | this |
| action | Yes | combine: with_segment_number, optional keep; change_type: to, optional keep_image; rewrite: feedback | |
| confirm | No | Run even though renders are lost; only after the user saw which | |
| feedback | No | rewrite: what to change, e.g. "make this a close-up" | |
| keep_image | No | change_type from a clip to image: keep the rendered image | |
| project_id | Yes | Project id | |
| segment_number | Yes | Segment number (1-based, from storyboard_read) | |
| with_segment_number | No | combine: the neighboring segment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=false): it discloses the preview-first contract, the confirm=true gate, the 409 refusal while background AI runs, credit spend, what renders survive or go stale, retiming of kept renders, and renumbering of later segments.
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?
Long but front-loaded: the preview/confirm workflow comes first before per-action detail. Each paragraph is organized by action and every sentence carries operational content, though the density is close to the upper limit of comfortable scanning.
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 9-parameter destructive mutation with no output schema, the description covers the preview return ('returns what would be lost'), the refusal mode, async background steps, credit cost, and downstream effects. Little 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 the schema already documents each parameter, giving a baseline of 3. The description adds genuine meaning on top: what 'keep' means for surviving prompts/renders and staleness, and what keep_image preserves when converting a clip back to an image.
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?
Opens with a specific verb+resource scoped to a single segment, then names and defines its three sub-actions (combine, change_type, rewrite). An agent can distinguish it from sibling segment_edit or render 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 routes across alternatives: exact text goes to segment_edit set_prompts, clips/talking heads come from render action=animate, overlay text goes to editor_edit scene_note, and renumbering requires re-reading the storyboard. It also states the when-to-confirm condition ('only after the user saw which').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storyboard_editEdit storyboard settingsCInspect
Storyboard settings, used by the next storyboard run.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | settings: sfx_level | |
| sfx_level | Yes | How many sound effects the storyboard plans | |
| project_id | Yes | Project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds one behavioral fact, that settings apply to the next run rather than retroactively, but says nothing about what is overwritten, whether existing settings must be preserved, or auth requirements. Value beyond annotations is minimal.
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?
It is a single short sentence with no padding, which is structurally fine, but the brevity comes at the cost of under-specification rather than efficiency. Nothing is front-loaded beyond a restatement 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?
For a mutation tool with no output schema, the description should at minimum explain the write and its effect on downstream storyboard generation. It gestures at the run dependency but leaves the operation, overwrite behavior, and relationship to storyboard_generate/storyboard_read unexplained, which is too thin for a 3-parameter required-schema edit 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 description coverage is 100%, so action, sfx_level and project_id are each documented at the schema level, including the enum meanings for sfx_level. The description adds no parameter semantics at all, so the baseline 3 for fully covered schemas 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 'Storyboard settings, used by the next storyboard run' restates the title rather than stating an action verb, so it never says what the tool actually does (edit/set). The clause about the next storyboard run is the only added information, and it describes effect timing rather than the operation. Without the name and title, an agent could not tell this mutates settings.
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?
There is no explicit when-to-use guidance and no named alternatives, though the sibling storyboard_generate and storyboard_read exist and are the natural contrast points. The phrase 'used by the next storyboard run' weakly implies invocation prior to generation, but nothing states when not to use it or how it relates to the read/generate siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storyboard_generateGenerate the storyboardADestructiveInspect
Plan the storyboard: every segment, its timing, image and motion
prompts, overlays and continuations, following the channel style and
any [SCENE: ...] directions. Needs the finished voiceover (its timing
drives the cuts). It plans images, plus real photos and B-roll when the
director style has the @real-media tag; clips come later, by animating
rendered images. Running it again replaces the whole plan, edits
included. The longest step (several minutes): get_status wait=true,
repeatedly.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id (get_generation_options); omit for the saved choice | |
| settings | No | Model settings: keys of its settings_schema | |
| project_id | Yes | Project id | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, but the description earns credit by specifying exactly what is destroyed ('Running it again replaces the whole plan, edits included') and disclosing cost/latency ('The longest step (several minutes)') that annotations cannot express. This is behaviorally richer than the structured hints.
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?
Front-loaded with the verb and the plan's contents, then moves to prerequisites, behavior, and runtime. It is dense and slightly run-on with stacked parentheticals ('(its timing drives the cuts)', '(several minutes)'), but every clause carries information rather than 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?
Covers the prerequisite, the conditional media behavior, the destructive re-run semantics, and the monitoring loop, which is substantial for a four-parameter mutation with no output schema. It does not describe the shape of the returned plan, which is the main remaining gap for an agent consuming the result.
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 project_id, model, settings, and editable_sections. The description adds no syntax or format details for any parameter (e.g. nothing on how editable_sections maps to the mentioned [SCENE: ...] directions), so baseline 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?
States a specific verb and resource ('Plan the storyboard') and enumerates the exact artifacts produced: segments, timing, image and motion prompts, overlays, continuations. It also distinguishes itself from the edit/read siblings by noting that clips come later and that re-running replaces the plan, so an agent can separate it from storyboard_edit, render, and storyboard_read without opening a 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?
Gives a concrete prerequisite ('Needs the finished voiceover (its timing drives the cuts)') and conditional scope ('real photos and B-roll when the director style has the @real-media tag'), plus a monitoring instruction ('get_status wait=true, repeatedly'). No sibling tool is named as an alternative, so it stops short of explicit when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storyboard_readRead the storyboardBRead-onlyIdempotentInspect
segments: {total, offset, returned, segments}. Each segment has its segment_number (the handle segment tools take), kind (image, clip, talking head, real photo, B-roll or overlay segment), narration, duration, direction, image_prompt, video_prompt (the motion when animated), media_queries (searches for a real photo or B-roll), the characters, environments and objects it shows, continues_from_segment (its image continues that earlier segment's image) and its assets.
segment_assets: {segment_number, assets}: its image, clip, real photos, overlays and sound effects, each with kind, status, prompt, model, earlier_renders (what a rollback can restore) and public_url (for view_image).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | segments: how many; 0 returns all. Long videos have 100+, so page. | |
| action | Yes | segments: the storyboard, paged; segment_assets: one segment's assets (segment_number) | |
| offset | No | segments: first to return, 0-based | |
| project_id | Yes | Project id | |
| segment_number | No | Segment number (1-based, from storyboard_read) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description adds real cross-tool context beyond them: earlier_renders means 'what a rollback can restore' and public_url is 'for view_image'. Those hints link returned data to segment_edit rollback and view_image usage, though return size/paging behavior is only implied.
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 dense definition-style blocks keyed by the two action values, front-loaded with 'segments:' and 'segment_assets:' and no filler. It is efficient, but the absence of any lead sentence stating the tool's purpose makes the entry feel like a schema dump.
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 response-shape burden and does so thoroughly for both actions (segment fields, asset fields, statuses, URLs, rollback data). It omits only an explicit purpose/usage statement, so an agent knows what comes back but must infer when to call it.
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 every parameter is already documented in the schema; baseline 3 applies. The description adds no parameter syntax or format detail beyond what the schema states (e.g. segment_number as a handle, limit=0 returns all) and instead spends its budget on return fields.
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 never states a purpose sentence; it documents the two returned shapes (segments, segment_assets). Combined with the title 'Read the storyboard' and the action enum, an agent can infer this reads storyboard data, but the description itself never says what the tool does and does not differentiate it from storyboard_edit or segment_edit.
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?
There is no when-to-use or when-not-to-use guidance and no alternative named. The only routing information (segments vs segment_assets, paging via limit/offset) lives in the schema's action/limit descriptions, not the description text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
style_editEdit the channel styleADestructiveInspect
Create or change the channel style (one per channel, used by all its projects).
create: offer the user two real options, never invented ones. (a) References (best): YouTube links of their channel or of videos whose look they like, or a written description. Analysis starts at once and writes the fields: wait with get_status channel_id wait=true, then render both template images (style_generate action=template). A reference informs every axis, narrative included; for its look only, give it contributes_to ["art_style"]. (b) Presets: one per axis, all three; instant, and the art preset brings its template images. Presets and references don't mix.
update_fields: replace fields' text; it never starts an analysis (an
analysis rewrites art_style, narrative_style, director_style and
text_style). Those four and script_prompt can't be removed, every field
needs text, and summaries are written only by analysis. Real photos and
B-roll are turned on by the literal @real-media tag in director_style,
with prose on when and how much; remove it to turn them off.
update_references: replace the references, fields untouched (inputs_stale turns true). File references can only be added in the app.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | create: the style name | |
| action | Yes | create: name, and references or presets; update_fields: fields; update_references: references | |
| fields | No | update_fields: {key: "new text"} for the keys you change; {key: null} removes a key you added | |
| presets | No | create: {"art_style": id, "narrative_style": id, "director_style": id} from style_read action=presets | |
| channel_id | Yes | The channel whose style this is | |
| references | No | [{"input_type": "youtube" | "text", "value": "<link or description>", "contributes_to": ["art_style", ...]?}]. A youtube value is a video link, or a channel link or @handle. update_references: the COMPLETE list in order; copy kept entries from style_read verbatim. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. The description adds real substance on top: exactly what each action replaces (fields' text, the reference list), that four fields plus script_prompt cannot be removed, that analysis silently rewrites art/narrative/director/text styles, and that update_references sets inputs_stale=true. It stops short of permissions/auth scope and what happens when a style already exists on create.
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?
Front-loads the purpose and then segments cleanly by action label (create/update_fields/update_references), with dense, low-waste prose. A few asides such as 'offer the user two real options, never invented ones' read as instruction padding, but nothing is redundant enough to hurt.
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 complex, destructive, multi-action tool with no output schema, the description covers workflow ordering, field-level constraints, tag conventions, and the app-only limitation for file references. Remaining gaps are error/edge behavior (creating over an existing style, validation failures) and what the call returns.
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 3-baseline is met by default; the description goes beyond it by explaining conventions the schema does not: contributes_to ['art_style'] for look-only references, presets being one-per-axis, the literal @real-media tag in director_style, and that references must be the COMPLETE list in order copied verbatim from style_read. This is meaningful added semantic content, not restatement.
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 opening line gives a specific verb+resource with scope: 'Create or change the channel style (one per channel, used by all its projects)'. The three action branches then differentiate this tool from siblings by offloading reads to style_read (action=presets) and template images to style_generate (action=template), so an agent never confuses it with those 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?
Explicit when/when-not is given per action: 'Presets and references don't mix', 'never invented ones', 'update_fields ... never starts an analysis', 'File references can only be added in the app'. It also names the prerequisite workflow (wait via get_status wait=true, then style_generate action=template) and the alternative read tool for source data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
style_generateGenerate for the channel styleAInspect
analyze: read the references again and rewrite art_style, narrative_style, director_style and text_style, replacing hand edits.
template: render one of the style's two template images. Reference images render on them (characters on the character template, environments and objects on the environment one) and segment images fall back on them, so finish both before any reference image. An existing one is refused unless replace=true: replacing it changes the look of everything rendered after.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id (get_generation_options); omit for the saved choice | |
| action | Yes | analyze; template: template_type | |
| replace | No | template: true only when the user asked for a new image (or agreed to render a stale one again) | |
| settings | No | Model settings: keys of its settings_schema | |
| channel_id | Yes | The channel whose style this is | |
| template_type | No | template: which template image; run once for each | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely useful behavior on top: an existing template is refused unless replace=true, and replacing it 'changes the look of everything rendered after'. That downstream-impact warning is exactly the kind of context annotations cannot convey. It does not describe the analyze mutation's reversibility or scope, keeping it below 5.
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?
Every sentence carries information, but the structure is cramped notes-style prose with awkward line breaks and no leading sentence stating the tool's overall purpose. The reader must reconstruct the two-action model from the body rather than getting it front-loaded, which is a genuine structural gap rather than mere length.
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 7-parameter, two-action tool with no output schema and no destructive annotations, the description covers the action semantics, ordering constraints, and the template-replacement consequence well. The remaining parameters (model, settings, editable_sections) are only covered by schema text, and there is no explanation of what analyze returns, but nothing critical to 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 semantics the terse enum descriptions do not: it spells out what 'analyze' actually rewrites (art_style, narrative_style, director_style, text_style, 'replacing hand edits') and ties 'replace' to the user's intent ('true only when the user asked for a new image'). That is meaningful meaning beyond the schema labels.
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 two specific actions and their effects: 'analyze' rewrites the four style fields, and 'template' renders one of the style's two template images. That is a concrete verb+resource statement an agent can act on. It never distinguishes itself from siblings like style_edit or style_read, so it stops short of 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?
Real sequencing guidance is given: finish both template images 'before any reference image', and run template once per type ('run once for each' appears in the schema). It also states the refusal condition and the replace escape hatch. It offers no routing guidance relative to style_edit/style_read alternatives, so it is clear context rather than full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
style_readRead the channel styleARead-onlyIdempotentInspect
get: the channel style: its references, its fields (art_style, narrative_style, director_style, text_style, any added; script_prompt on request), the summary analysis wrote for each, and templates, the character and environment template images (null: not rendered; a URL: it exists, so view_image it rather than render it again). inputs_stale: the references changed since the last analysis (offer style_generate action=analyze). templates_stale: the art style changed since the templates were rendered (offer to render them again).
presets: the preset catalog, one list per axis (art_style, narrative_style, director_style), with labels, descriptions and, for art presets, preview images. Let the user pick one per axis.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | get: the channel style (channel_id or project_id); presets: the preset catalog | |
| channel_id | No | get: the channel (or pass project_id) | |
| project_id | No | Project id | |
| include_script_prompt | No | get: include the long script_prompt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: null vs URL semantics for templates with the implication that re-rendering is wasteful, staleness flags that drive follow-up actions, and the fact that script_prompt is long and only returned on request.
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?
It is dense but nearly every clause carries information (field list, template semantics, staleness behavior, preset contents), and the primary action is front-loaded. The colon-fragmented, typo-laden formatting ('the summary analysis wrote for each') makes it harder to scan than it needs to be.
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, so the description carries the full return-value burden, and it does so thoroughly for both actions: what each style field is, how templates are represented, what the stale flags mean, and what the preset catalog contains per axis. An agent has everything needed to call it and act on the result.
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 real meaning: channel_id and project_id are interchangeable for the get action, and include_script_prompt is characterized as pulling a 'long' field 'on request', telling the agent to avoid it by default. The presets action is also explained rather than left to the enum alone.
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 and opening state a specific verb+resource ('read the channel style'), and the description enumerates exactly what is returned per action (references, style fields, summaries, templates) plus preset catalog contents. It also implicitly separates itself from siblings by pointing to style_generate action=analyze and view_image as distinct operations rather than doing those things itself.
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 conditional routing for follow-ups: offer style_generate action=analyze when inputs_stale, offer to re-render when templates_stale, and view_image instead of re-rendering when a template URL exists. It does not explicitly say when to choose style_read over style_edit or when not to call it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_imageView imageARead-onlyIdempotentInspect
Show a Framesail image inline: a segment image, reference image, style template or preset preview.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | An image URL from a read tool (public_url, reference_image, template or preset); other hosts are refused |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds 'inline' display behavior and accepted image categories, while the schema adds host restriction. These are useful behavioral details 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?
A single front-loaded sentence with no wasted words. It efficiently states the action and gives examples of accepted image types.
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 one-parameter viewer with safety annotations, the description plus schema are nearly complete. 'Show inline' conveys the return behavior in the absence of an output schema, and the schema covers host refusal, though more detail on output format could help.
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?
With 100% schema description coverage, the single URL parameter is already well documented in the schema, including the host restriction. The description's enumeration of image categories overlaps with the schema and adds only slight 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?
States a specific verb ('Show') and resource ('Framesail image inline'), and enumerates image categories (segment, reference, style template, preset preview). It does not explicitly differentiate itself from sibling read tools, but the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for viewing images sourced from read tools, and the schema states that other hosts are refused. However, it gives no explicit when-to-use/when-not guidance and does not name alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voiceover_editEdit voices and voice blocksAInspect
Voices and voice blocks; free. set_voice: the narrator's or a character's voice; every speaker needs one before the voiceover. rescan_blocks: split the active script into voice blocks again after an edit, assets untouched; blocks whose words are unchanged keep their audio. settings: the voice engine and narrator speed.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | set_voice: speaker, voice_id; rescan_blocks; settings: voice_tts_provider and/or narrator_speed | |
| speaker | No | set_voice: "narrator", or a character's name | |
| voice_id | No | set_voice: a voice id from voiceover_read action=voices | |
| project_id | Yes | Project id | |
| narrator_speed | No | settings: speaking rate, 0.5-2.0 (default 1.0); pauses come only from `<break>` tags | |
| voice_tts_provider | No | settings: the voice engine |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false; the description adds cost information ('free'), a prerequisite for set_voice, and specific non-destructive behavior for rescan_blocks ('assets untouched; blocks whose words are unchanged keep their audio'). It does not cover error modes or what happens to blocks whose words did change.
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-loads the action breakdown. The opening phrase 'Voices and voice blocks; free.' is slightly cryptic, but overall it uses space efficiently without unnecessary repetition.
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 multi-action edit tool with no output schema and rich parameter descriptions, the description covers the three actions, prerequisites, and key behavioral effects. A small gap remains around rescan_blocks consequences when block words change, but the core call context 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 description coverage is 100%, so the schema already documents all six parameters and the action enum in detail. The description adds prerequisite and action context but little parameter-specific meaning beyond what the schema provides, which is the baseline-3 case.
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 enumerates three specific actions (set_voice, rescan_blocks, settings) on the voices/voice-blocks resource, making the tool's scope clear. It does not explicitly name or route against sibling tools like voiceover_read or voiceover_generate, so sibling differentiation rests on the title and schema rather than the description itself.
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 usage context for each action: set_voice is needed before a voiceover ('every speaker needs one before the voiceover'), rescan_blocks applies after an edit, and settings controls engine and speed. It stops short of naming alternative tools or stating when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voiceover_generateGenerate the voiceoverAInspect
Generate voice block audio. Every speaker needs a voice first, and every asset a reference image. Without voice_block_ids it fills every block with no audio, skipping ones already generating. A model must match the project's voice engine. An existing storyboard retimes to the new audio on its own.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id (get_generation_options); omit for the saved choice | |
| dry_run | No | Return the count and credit estimate; start nothing | |
| settings | No | Model settings: keys of its settings_schema | |
| project_id | Yes | Project id | |
| voice_block_ids | No | Blocks to generate, again if they have audio; omit for every block without audio | |
| editable_sections | No | Template prompt section overrides, keyed by section id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (write, open-world, non-idempotent, non-destructive); the description adds substantial behavior beyond them: required dependency ordering, the skip of already-generating blocks, the constraint that the model must match the project's voice engine, and the side effect that an existing storyboard retimes automatically.
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 short sentences, the core action front-loaded, and each clause carries a distinct constraint (prerequisites, default scope, model rule, retiming). Slightly terse/fragmented phrasing ('and every asset a reference image') costs a little readability but not 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 six-parameter mutation tool with no output schema, the description covers prerequisites, default behavior, the model constraint, and the storyboard side effect. It leaves out failure modes (e.g. missing voice/reference image handling) and what a successful run returns, but annotations and the dry_run parameter cover most of the remaining ground.
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, but the description adds value the schema lacks: the re-generation semantics of voice_block_ids ('again if they have audio' vs 'omit for every block without audio') and the hard constraint that the chosen model must match the project's voice engine.
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 opening 'Generate voice block audio' gives a specific verb plus resource, and the surrounding constraints (blocks, speakers, reference images, retiming) make clear this is the audio synthesis step rather than a settings edit. It does not name the sibling it should not be confused with (voiceover_edit / voiceover_read), so it stops short of full differentiation.
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 real prerequisites ('Every speaker needs a voice first, and every asset a reference image') and the selection condition for voice_block_ids ('without ... it fills every block with no audio'). No explicit when-not or named alternative is given, so the agent must still infer that voiceover_edit handles post-generation changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voiceover_readRead voices and voice blocksARead-onlyIdempotentInspect
voices: one engine's voice ids, labels and preview audio, as
{groups, voices}. blocks: the voice blocks (narration and dialogue) with
their speaker, voice_id (the speaker's voice), audio and any
[SCENE: ...] direction over them (never spoken), as {blocks,
total_duration_ms, all_complete}.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | voices: one catalog group; each engine has its own (see groups). Filter the large ElevenLabs catalog. | |
| action | Yes | voices: the voice catalog for provider; blocks: the project's voice blocks | |
| provider | No | voices: the voice engine (the project's voice_tts_provider) | minimax |
| project_id | No | Project id | |
| include_subtitle_data | No | blocks: include word-level timings (bulky) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly, idempotent, non-destructive and closed-world hints already declared, the description adds genuinely new context: it spells out the two return shapes in the absence of an output schema, notes that `[SCENE: ...]` directions are 'never spoken', and exposes all_complete/reference-timing fields. It stops short of covering pagination or error behavior.
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 tightly keyed clauses, 'voices:' and 'blocks:', are front-loaded with the action names so an agent can scan the right one immediately. The brace/field notation is compact and slightly telegraphic but wastes no 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?
For a read tool with no output schema, the description usefully enumerates both result shapes and flags the non-spoken scene directions. The main gap is that it never states the project_id requirement for the blocks action or anything about size/limits, but otherwise it covers what an agent needs.
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 input schema already documents every parameter, including the group filter ('large ElevenLabs catalog') and the bulky word-level timings flag. The description adds only marginal meaning (voice_id = the speaker's voice) and does not clarify that project_id is needed for the blocks action.
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 precisely what each of the two read actions yields: voices returns {groups, voices} for an engine, and blocks returns {blocks, total_duration_ms, all_complete}. That is a specific resource description tied to the action enum, though it never names a sibling (e.g. voiceover_edit / voiceover_generate) to differentiate the read path.
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?
There is no explicit when-to-use or when-not guidance and no mention of alternative tools. Usage is only implied by the action enum and its schema descriptions, so an agent can infer that 'voices' is for catalog lookup and 'blocks' for project data, but the description itself does no routing.
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.
98 tool updates
- Added
account_edit - Removed
activate_script_version - Removed
add_music_track - Removed
add_segment_sfx - Removed
analyze_style - Removed
animate_segment - Added
assets_edit - Added
assets_generate - Added
assets_read - Removed
await_jobs - Removed
browse_audio_library - Removed
build_scenes - Removed
change_segment_type - Removed
combine_segments - Removed
create_asset - Removed
create_channel - Removed
create_project - Removed
create_style - Added
delete - Removed
delete_asset - Removed
delete_project - Removed
delete_style - Removed
director_note - Added
editor_edit - Added
editor_read - Changed
export_video3 fields changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Project ID, as returned by create_project or list_projects"New value: +"Project id" - removed
Input schema / properties / project_id / titleRemoved value: -"Project Id" - removed
Input schema / titleRemoved value: -"export_videoArguments"
- Removed
generate_asset_reference - Removed
generate_script - Removed
generate_segments - Removed
generate_storyboard - Removed
generate_style_template - Removed
generate_voiceover - Removed
get_credit_balance - Added
get_generation_options - Removed
get_pipeline_progress - Removed
get_project - Removed
get_script - Removed
get_section_template - Removed
get_segment_assets - Removed
get_segments - Added
get_status - Removed
get_style - Removed
get_video_url - Removed
get_workflow_status - Removed
list_assets - Removed
list_channels - Removed
list_models - Removed
list_music_tracks - Removed
list_projects - Removed
list_provider_keys - Removed
list_scenes - Removed
list_style_presets - Removed
list_styles - Removed
list_voice_blocks - Removed
list_voices - Removed
project_director_note - Added
projects_edit - Added
projects_read - Removed
regenerate_segment_asset - Removed
remove_music_track - Removed
remove_segment_asset - Added
render - Removed
rescan_voice_blocks - Removed
revise_script - Removed
rollback_segment_asset - Removed
save_script - Removed
scan_script - Added
script_edit - Added
script_generate - Added
script_read - Added
segment_edit - Added
segment_restructure - Removed
set_character_voice - Removed
set_narrator_voice - Removed
set_project_style - Removed
set_provider_key - Removed
set_segment_continuation - Removed
split_segment - Added
storyboard_edit - Added
storyboard_generate - Added
storyboard_read - Added
style_edit - Added
style_generate - Added
style_read - Removed
update_asset - Removed
update_caption_config - Removed
update_music_track - Removed
update_project - Removed
update_segment_content - Removed
update_segment_prompts - Removed
update_style_fields - Removed
update_style_references - Removed
update_voice_block - Changed
view_image3 fields changed- changed
Input schema / properties / url / descriptionPrevious 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"New value: +"An image URL from a read tool (public_url, reference_image, template or preset); other hosts are refused" - removed
Input schema / properties / url / titleRemoved value: -"Url" - removed
Input schema / titleRemoved value: -"view_imageArguments"
- Added
voiceover_edit - Added
voiceover_generate - Added
voiceover_read - Removed
whoami
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
Faceless video studio: script, stock footage, voiceover, captions and motion graphics to MP4.
Faceless YouTube videos, Shorts, whiteboard videos, podcasts, thumbnails and channel research.
Turn a script into a hand-drawn animated YouTube video with an AI voice: writes it, then makes it.
Make faceless AI short videos from a topic, product page or image: script, voiceover, captions.
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 gradedqualityDmaintenanceTurns 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.268 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.