Wandura
Server Details
Create video, images and audio from your AI assistant: ad templates, 20 one-photo video effects and 70+ models. Every job is priced first.
- Status
- Healthy
- Uptime
- 99.5% over 23 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 66 tools
Each domain family (cinematic_ads_*, story_*, render_*, billing reports) is internally fairly clear, but the server offers several parallel routes to the same outcome: ad_breakdown vs cinematic_ads_analyze for analysing an ad, clone_template vs cinematic_ads_create_project for starting from a template, and story_quote vs preview_render vs preview_generation vs render_effect's preview flag for pricing. There are also many polling/status tools (get_generation, wait_for_result, story_get_job, story_get_quote, story_get_export, cinematic_ads_get_project) whose boundaries an agent must learn before choosing correctly.
Most names follow snake_case verb_noun with a clear domain prefix (cinematic_ads_*, story_*, list_*, render_*), which is readable and largely predictable. But the pattern breaks in places: ad_breakdown is a bare noun paired with an inverted ad_breakdown_get, while other domains use get_* prefixes; get_generation, clone_template, browse_library and upload_asset lack the prefix used by their neighbouring tools.
66 tools is far too many for a single server, and the surface actually spans four distinct products (Cinematic Ads studio, Story mode, Creative Studio rendering, and Enterprise workspace billing), each of which would merit its own server. An agent must load and reason over ~20 cinematic tools and ~18 story tools before it can even find the two or three it needs.
Lifecycle coverage is deep: both studios have create/read/update/analyse/generate/export paths, rendering covers image, video, audio and effects with pricing previews, and billing exposes runs, ledger, budget, services and members. Gaps are minor but real: no delete/cancel for Story or Cinematic Ads projects, no removal of Story assets, and no privacy-friendly way to poll without overloading the status tools.
Available Tools
66 toolsad_breakdownAIdempotentInspect
Break down a video ad: paste its link (TikTok, Instagram, Facebook, YouTube or Shorts, Meta Ad Library, TikTok Creative Center, or a public .mp4) and get its formula (e.g. 'Hook → Problem → Demo → Call to action'), the hook, message, call to action, pacing, sound, every scene with timings and its job, why it works, tips to remake it, plus a ready-to-send creative brief and a fill-in script template, and a public page link. SPENDS CREDITS: a new ad costs a fixed price by its length band (up to 30 s, 90 s or 3 minutes; the answer's credits field says which), from the personal wallet, charged only when the breakdown is saved; an ad already broken down by anyone is returned free. Ask the user before breaking down a new ad. Ads up to about 3 minutes. Waits up to ~45 s; if the answer is status 'pending', call ad_breakdown_get with the id. To remake the ad for the user's brand afterwards, use cinematic_ads_guide.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Link to the ad: the post/video page, or the video file. | |
| video_url | No | Optional: the video file (https) already found on that page, e.g. by the Wandura Chrome extension. Tried first; the ad is still identified by url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: credit spend is charged from the personal wallet only when the breakdown is saved, priced by length band, cached ads are free, the call blocks ~45 s and may return status 'pending', and there is a hard input limit of ~3 minutes. This reconciles the non-read-only, idempotent hints with real billing semantics.
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 deliverable, then cost, then the pending/alternative workflow — a sensible order. It is dense and reads as one long run-on, with the credit rules packed into a single unwieldy sentence, so a little structure is lost but nothing is redundant.
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-value burden and does so thoroughly (each output artifact, the public page link, the credits field, and the 'pending' status with its follow-up call). Length limits, cost, and handoff to cinematic_ads_guide are all 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% for the two parameters, so the baseline is 3. The description does add useful accepted-source context for 'url' (TikTok, Instagram, Facebook/Shorts, YouTube, Meta Ad Library, TikTok Creative Center, public .mp4) plus the ~3 minute cap, but it never mentions the optional 'video_url' parameter, leaving that half of the parameter surface 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 and resource ('Break down a video ad') and enumerates the concrete artifacts returned: formula, hook, message, CTA, pacing, per-scene timings/jobs, remake tips, creative brief, script template, and public page link. It is clearly distinguishable from ad_breakdown_get (retrieval) and cinematic_ads_guide (remaking), which it names.
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 explicit routing conditions: use ad_breakdown_get when status is 'pending', use cinematic_ads_guide to remake for the brand, and 'Ask the user before breaking down a new ad.' It also states the cost-free case (an ad already broken down by anyone) versus the paid case, so the agent knows when to spend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_breakdown_getARead-onlyIdempotentInspect
Read one Ad Breakdown by the id ad_breakdown returned: status (pending, ready, failed with the reason), and once ready its title, public page link, formula, full analysis (hook, message, CTA, pacing, sound, scenes, why it works, remake tips), a creative brief and a script template. Free. Poll every 20–30 s while pending.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Breakdown id from ad_breakdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive closed-world operation, and the description still adds real value: the async lifecycle (pending/ready/failed with failure reason), the polling cadence, the cost, and the payload shape once ready. Fail-state behavior and timing are exactly what an agent cannot infer from the 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 resource, then the lifecycle, then the polling instruction — good ordering with no filler sentences. The long parenthetical listing the analysis sections is dense but genuinely helps an agent judge whether the payload is worth fetching.
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 no annotations covering returns, so the description must describe the response itself — and it does, including status values, failure reasons, and the full content set once ready. Polling guidance closes the remaining operational gap for a one-parameter async fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as 'Breakdown id from ad_breakdown.', which the description merely restates. Baseline 3 applies since the schema carries the parameter burden.
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 ('Read one Ad Breakdown') and explicitly ties the required id back to the sibling tool ad_breakdown, so an agent can separate this read/fetch step from the creation step. The enumeration of what becomes available once ready further pins down the tool's role.
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 concrete operational guidance: 'Free' and 'Poll every 20–30 s while pending,' which tells the agent exactly when and how to re-invoke. It stops short of naming when not to use it or pointing to an alternative (e.g., a list or batch variant), so it is clear context rather than a full when/when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_libraryARead-onlyIdempotentInspect
Browse what you can build with: shared creators, hooks and scenes, plus your own uploaded products and elements. Call this before render_video when the user wants a specific presenter or a saved product instead of one the model invents. Shared kinds are the same for everyone; product and element are yours alone and never show another account's uploads. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text over name and note. | |
| kind | Yes | creator/hook/scene are shared. product/element are only yours. | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds non-derivable context: shared kinds are identical for all accounts while product/element are account-scoped and 'never show another account's uploads,' plus a 'Free' cost note. It stops short of describing pagination or how the default limit of 30 behaves.
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 purpose, then usage, then scoping and cost, in three tight sentences with no filler. The account-isolation sentence overlaps somewhat with the kind parameter description in the schema, a minor redundancy, but every sentence otherwise earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, closed-world browse tool with no output schema, the description covers what can be listed, when to call it, and account visibility boundaries. It omits the return shape and limit/pagination behavior, which is a modest gap but not blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with q and kind documented but limit carrying only a default and maximum. The description's kind guidance ('shared' vs 'yours alone') largely duplicates the schema's own kind description, so it adds little beyond the structured field. Baseline 3 is appropriate given the schema does most of 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?
States a specific verb (browse) and resource (the creative library), then enumerates exactly what is browsable: shared creators, hooks, scenes, and the caller's own products and elements. It also differentiates itself from render_video by positioning itself as the lookup step that precedes rendering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Call this before render_video when the user wants a specific presenter or a saved product instead of one the model invents.' The alternative (letting the model invent a presenter/product) is named alongside the condition that selects this tool, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_analyzeAInspect
Analyse the original ad and prepare the remake from the user's brief: the cast, products and places (assets) and the clips to make. SPENDS CREDITS (use price_only first to quote). Takes a few minutes; an ad longer than about 2 minutes runs in several stretches of up to ~10 minutes each, moved on by polling cinematic_ads_get_project. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs. If the project is already analysing, this continues the run instead of starting over.
| Name | Required | Description | Default |
|---|---|---|---|
| restart | No | Start a new analysis even if one is running. | |
| llmModel | No | Ignored: the AI model is fixed. Still accepted so older calls keep working. | |
| price_only | No | Only return the price in credits; start nothing, spend nothing. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: it spends credits, takes minutes, can run in multiple stretches up to ~10 minutes, returns {status:'running'} after about a minute, keeps running server-side, and must be polled via cinematic_ads_get_project. It also states that re-invoking while a run is active continues instead of restarting, which is crucial for correct agent 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?
The description is front-loaded with purpose and cost, then gives operational details in a logical order. It is slightly dense but every sentence provides necessary behavioral information (cost, duration, polling, continuation), with no obvious 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 complex, asynchronous, credit-spending tool with no output schema, the description covers what the agent needs: purpose, cost warning, duration expectations, polling mechanism, continuation semantics, and the consequence of long steps. No critical gaps remain for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds practical meaning for price_only ('use price_only first to quote') and implicitly explains the effect of restart by stating that without it the run continues rather than starting over. It does not explain llmModel or project_id, but those are covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Analyse the original ad and prepare the remake from the user's brief: the cast, products and places (assets) and the clips to make.' It clearly distinguishes the analysis phase from project creation or clip updates, but does not explicitly name sibling tools it replaces (other than the polling tool).
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: use price_only first to quote, it spends credits, long runs require polling cinematic_ads_get_project, never restart while running, and if already analysing it continues the run. It lacks explicit comparisons to sibling tools beyond the polling reference, 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.
cinematic_ads_apply_templateADestructiveIdempotentInspect
Fill a project's settings and brand kit from a saved template (template_id) or a built-in brand preset (preset_id). Free. Overwrites the project's settings; refused while an analysis runs. A template with video also brings its original ad, analysis and cast, but only into a project not analysed yet (videoCopied: true); an analysed project keeps its own (videoCopied: false) — use cinematic_ads_create_project with template_id instead.
| Name | Required | Description | Default |
|---|---|---|---|
| preset_id | No | Built-in preset id from cinematic_ads_list_templates → presets, e.g. preset:langla (app name, icon, mascot, end card, watermark). | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| template_id | No | A saved template id from cinematic_ads_list_templates → templates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and idempotent=true, but the description adds important context: it is free, overwrites project settings, is refused during an analysis, and explains the videoCopied behavior depending on whether the project has already been analysed. This meaningfully goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then adds necessary behavioral constraints. Every sentence carries useful information, and the parenthetical details are compact rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema, the description covers the important operational facts: overwrite behavior, refusal during analysis, free status, video-copy semantics, and the alternative sibling for analysed projects. An agent has enough context to use 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 description coverage is 100%, so the schema already documents all three parameters. The description distinguishes saved templates from built-in presets and explains video-copy behavior tied to template contents, but it does not add syntax or deeper parameter-level guidance beyond what the schema supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: filling a project's settings and brand kit from either a saved template or a built-in preset. It distinguishes this from cinematic_ads_create_project by naming that sibling for the case where a video template should be applied to an already-analysed project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage conditions: use template_id or preset_id, apply is refused while an analysis runs, and for video templates in an analysed project use cinematic_ads_create_project with template_id instead. These are explicit when/when-not/alternative rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_brand_scanAInspect
Find the original ad's brand mentions and app screens without planning again (after analysis). SPENDS CREDITS (a small AI step). Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it costs credits, is a small AI step, can return {status:'running'} after ~a minute and continue server-side, requires polling cinematic_ads_get_project, and must not be re-started while running. This directly complements the readOnlyHint=false and idempotentHint=false flags rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Reasonably compact and front-loaded with the purpose before the credit and async-polling details. Three dense clauses; every sentence carries operational information, though the punctuation/abbreviation style is slightly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async, credit-spending tool with no output schema, the description covers cost, expected latency, the running-status response, and the exact recovery action (poll get_project). An agent has everything needed to invoke and follow up 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?
Only one parameter (project_id) with 100% schema coverage, so the schema already fully documents it. The description adds no format or sourcing detail beyond what the schema provides, making the baseline 3 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 a specific verb and resource: it finds the original ad's brand mentions and app screens, with the sequencing qualifier 'after analysis' and 'without planning again'. This clearly separates it from cinematic_ads_analyze, though it doesn't name the sibling alternatives 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?
Gives a clear sequencing context ('after analysis', 'without planning again') that tells the agent when this step is appropriate. It also names cinematic_ads_get_project as the polling target, but offers no explicit when-not-to-use condition beyond the running-state warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_check_clipAInspect
Check a finished clip for burned-in text, logos or app screens the remake must not carry. SPENDS CREDITS (a short AI read). The verdict is stored on the clip.
| Name | Required | Description | Default |
|---|---|---|---|
| clip_id | Yes | Clip id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag readOnlyHint=false but not why; the description supplies the reason (it spends credits and writes a verdict), which is real added value beyond the structured fields. It still omits how many credits, latency, or how to retrieve the stored verdict.
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 short, front-loaded sentences: purpose first, cost warning second, side effect third. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required param, no output schema, and annotations that cover the safety profile, the description covers purpose, cost, and where the result lands. Only the retrieval path for the stored verdict is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single clip_id parameter is already documented, so the description adds nothing parameter-specific. Baseline 3 applies since the schema carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Check') plus a precise resource ('a finished clip') and an explicit detection target (burned-in text, logos, app screens). It does not name or contrast with the potentially confusable sibling cinematic_ads_brand_scan, so an agent must infer which scan to pick.
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 phrase 'the remake must not carry' implies the QA step happens before a remake, which gives workflow context. But there is no explicit when-to-use statement, no prerequisite, and no comparison against brand_scan or analyze.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_create_projectAInspect
Create a Cinematic Ads project (free) and, with original_ad_url, load the original ad to remake (MP4 or MOV, up to 3 minutes and 300 MB, any public https URL). Call cinematic_ads_guide first. Cinematic Ads is open to every Wandura account; everything is paid from the project's wallet — the user's own credits for a personal project (paid steps need a paid Wandura plan), the workspace's credits for a workspace project. Flow (the web studio's steps): cinematic_ads_create_project with original_ad_url → cinematic_ads_analyze → poll cinematic_ads_get_project until project.status is 'ready' → optionally cinematic_ads_update_project (brand kit, language, video model), cinematic_ads_brand_scan, cinematic_ads_refine + cinematic_ads_update_asset → cinematic_ads_make_images → cinematic_ads_make_video → poll until production.done is true → cinematic_ads_export → poll until exports[0].status is 'done' and use exports[0].url. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| preset_id | No | Start from a built-in brand preset (an id from cinematic_ads_list_templates → presets, e.g. preset:langla) when the user names that brand: its app name, icon, mascot, end card and watermark are filled. Check project.brand.preset in the answer (presetApplied false = it was not applied: call cinematic_ads_apply_template {preset_id}). | |
| template_id | No | Start from one of the caller's saved templates (cinematic_ads_list_templates). A template with `video` brings its original ad, analysis and cast: the project starts analysed (status ready, no analysis to pay), named after the template unless a title is given — go straight to the assets. | |
| workspace_id | No | Workspace that owns and pays for the project (from cinematic_ads_list_projects). Omit it for a personal project paid from the user's own credits. | |
| original_ad_url | No | Public https URL of the original ad (MP4/MOV). Can also be set later with cinematic_ads_set_original_ad. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations (readOnly=false, openWorld=true, idempotent=false) by disclosing that creation is free, that paid steps require a paid Wandura plan, and that costs come from either the user's credits or the workspace wallet depending on workspace_id. It also discloses the async contract: long steps return {status:'running'} after about a minute and continue server-side.
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 purpose and cost model, then the flow. It is dense and somewhat long, with the full step list arguably duplicating what cinematic_ads_guide could carry, but every sentence conveys routing or polling information an agent needs.
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, yet the description names the exact polling fields to check (project.status 'ready', production.done, exports[0].status 'done' and exports[0].url) and maps every downstream sibling. Nothing essential to calling this tool correctly within the pipeline 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 80%, so baseline is 3, but the description adds value not in the schema: original_ad_url must be MP4/MOV, up to 3 minutes and 300 MB, public https. It also clarifies the payment semantics of workspace_id (owns and pays) versus omitting it for a personal project.
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 ('Create a Cinematic Ads project') and immediately states its distinguishing behavior: optionally loading an original ad for remaking. Sibling tools are named throughout, so an agent can tell this is the pipeline entry point rather than a project mutator or reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call cinematic_ads_guide first' and lays out the ordered flow from create → analyze → poll get_project → optional refine/brand steps → make_images/make_video → export, with the exact stopping conditions. It also warns never to re-start the same step while it runs, which is a real usage pitfall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_delete_templateBDestructiveIdempotentInspect
Delete one of the caller's saved Cinematic Ads templates. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | From cinematic_ads_list_templates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so safety is covered structurally. The description adds genuinely new context with the caller-scoped ownership ('one of the caller's saved') and the zero-cost note ('Free.'), but says nothing about irreversibility or post-delete state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource; nothing is buried. The trailing 'Free.' is a terse fragment whose meaning (no credit cost) is inferable but not explicit.
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 one-parameter delete whose annotations already convey destructive/idempotent semantics and which needs no output schema, the description is nearly sufficient. It could still state that the deletion cannot be undone, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single required parameter with 100% schema description coverage, which already tells the agent the UUID comes from cinematic_ads_list_templates. The description adds no format, sourcing, or constraint detail beyond the schema, 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?
The description states a specific verb (Delete) and resource (one of the caller's saved Cinematic Ads templates), which is unambiguous and scopes ownership to the caller. It never names a sibling or explains how it relates to list_templates/get_template, but there is no competing delete tool, so confusion risk is low.
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 or when-not-to-use guidance, and no warning that deletion is permanent or how to recover. The only routing hint ('From cinematic_ads_list_templates.') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_duplicate_projectAInspect
Make 1 to 5 copies of a project as it is now, in the same workspace: the original ad, its analysis, the cast and places (images, modes, descriptions), the clip plan, the settings and the final-video choices it last built with. Each copy is a new project with its own id and is already analysed, so it goes on at step 4 — e.g. give one person a different photo in each copy (cinematic_ads_update_asset with that copy's asset ids from cinematic_ads_get_project). Copies are named " (copy n)". Never a clip take, a fix or a final video. Refused while the project is being analysed. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | How many copies, 1 to 5. Near the hourly limit on new projects only the copies it still allows are made (limited: true). | |
| project_id | Yes | The project to copy, from cinematic_ads_list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that copies are new projects with their own ids, that they arrive already analysed and resume at step 4, the naming convention '<name> (copy n)', the analysis-in-progress refusal, and that the operation is free. It also implicitly explains non-idempotency (each call yields fresh copies) and defers partial-limit behavior to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and payload, then constraints and an example. Dense but every sentence carries information; the parenthetical example is useful but slightly bulky relative to the rest.
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 implicitly covers return semantics (new project ids, generated copy names) and the refusals/limits, which is enough to call it correctly. It stops short of stating the exact shape of the response (e.g., a list of new project ids and the 'limited' flag).
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 both parameters. The description still adds meaningful semantics: copies are independent entities with separate asset ids, which explains what 'count' actually produces and motivates the multi-copy use case in the example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make 1 to 5 copies of a project as it is now, in the same workspace') and enumerates exactly what is carried over (ad, analysis, cast/places, clip plan, settings, final-video choices). This clearly separates it from create_project, save_template, and clone_template siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit exclusions are given ('Never a clip take, a fix or a final video') plus a precondition ('Refused while the project is being analysed') and a concrete follow-up workflow routing to cinematic_ads_update_asset with ids from cinematic_ads_get_project. The agent knows when to pick this and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_exportAIdempotentInspect
Build the final video from the finished clips: captions, app mark/watermark, end card, lesson cards, answer marks, cutaways. SPENDS CREDITS (use price_only to quote). Takes a few minutes; the same options twice reuse the build. Fixes of moments that are ready (cinematic_ads_fix_moment) go into the next build. When exports[0].status is 'done', exports[0].url is the video. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | new = the remake; compare = side by side with the source. | new |
| options | No | Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight|karaoke (karaoke: white words, the one being said lit yellow, word by word), position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 in tenths (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill), language (write the captions in another language than the one spoken, e.g. "vi"; translated at build time)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {"<start ms>": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults — or, for a project made with Duplicate or from a video template, the choices its source last built with (a whole section left out takes those). A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving "LangLa", medium speed), so send only what the user asked to change (e.g. {"watermark": {"speed": "fast"}} or {"watermark": {"enabled": false}}). | |
| price_only | No | Only return the price in credits; start nothing, spend nothing. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it spends credits, takes minutes, is idempotent across identical option sets (corroborating idempotentHint), and returns {status:'running'} on long steps that continue server-side. It also documents the completion signal (exports[0].status 'done' → exports[0].url), which annotations alone would never 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 critical operational facts (credit spend, duration, idempotency, polling) are front-loaded in short, punchy sentences. The options passage is long and restates a fair amount of what the nested schema already says, which costs some efficiency, though it is organized and each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fills the gap by explaining the exports array status/url contract and the running/poll pattern. Combined with credit cost, idempotency, and inheritance defaults, an agent has everything needed to call this correctly and to interpret 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 already 100%, yet the description still adds real meaning: it explains that omitted options inherit the project preset/template watermark, that omitting a whole section takes the source build's choices for duplicated/templated projects, and advises sending only the delta the user asked for. That is genuine guidance beyond the field-level schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Build the final video from the finished clips" gives a specific verb and resource, and the enumeration of what it assembles (captions, watermark, end card, lesson cards, answer marks, cutaways) makes the scope concrete. The phrase "from the finished clips" implicitly separates it from the clip-making siblings like cinematic_ads_make_video and cinematic_ads_update_clip.
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 the key routing rule: use price_only to quote before spending, and note that cinematic_ads_fix_moment results flow into the next build rather than prompting a separate call. It also gives the concurrency rule (poll cinematic_ads_get_project, never restart a running step). It does not explicitly say when to prefer this over cinematic_ads_make_video or a template-apply path, so it falls just short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_fix_momentAInspect
Fix one moment of the finished final video: mark a range on the final video's own clock (from_ms to to_ms, 0.5–10 s long, before the end card — production.fixWindow) and say what is wrong there. Only that moment is made again and the rest stays exactly as it is; the range may grow to the nearest camera cut so the change does not show. SPENDS CREDITS (use price_only to quote — it also returns the range that will really change). Needs the whole video made (production.done) and one fix at a time. Follow production.fixes in cinematic_ads_get_project until that fix's status is 'ready', then call cinematic_ads_export again: the next final video has the fix (exports[0].fixIds). Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | What is wrong in that moment and how it should be, in the user's words (for example: 'her hand has six fingers; keep the same gesture with a normal hand'). | |
| to_ms | Yes | End of the moment on the final video, in milliseconds: 0.5–10 s after from_ms and not past production.fixWindow.endMs (the end card). | |
| from_ms | Yes | Start of the moment on the final video, in milliseconds. | |
| price_only | No | Only return the price in credits ({cost}) and the range that would change; while video parts are on sale it also returns listCost, the regular price before the discount. Start nothing, spend nothing. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the call SPENDS CREDITS, that the range may silently grow to the nearest camera cut (a side effect on the output the agent would not otherwise expect), that long steps return {status:'running'} after ~1 minute and continue server-side, and that the fix surfaces later via exports[0].fixIds. The only gap is that it doesn't say what a failed or rejected fix looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the action and its constraint come first, cost warning second, prerequisites and polling loop last. Some clauses (the end-card parenthetical, the repeated polling instruction) could be tightened, but every sentence carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a credit-spending, long-running mutation with no output schema, the description supplies the full lifecycle: prerequisites, cost/quote path, async polling semantics, how to confirm the fix landed, and the retry prohibition. An agent can call this correctly and recover from the async boundary without any outside knowledge.
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 still adds meaning the schema does not: the range becomes the region the system actually re-renders, it may be expanded to a camera cut, and price_only reports the range that will *really* change rather than the one requested. That is genuine semantic value for from_ms/to_ms and price_only.
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 — fix one moment of the finished final video — and defines the moment precisely (a marked range on the final video's own clock, 0.5–10 s, before the end card). It also tells the agent the key property that distinguishes it from `cinematic_ads_refine` and `cinematic_ads_undo_fix`: only that range is remade and the rest stays exactly as it is.
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 preconditions (production.done, one fix at a time), an explicit quoting alternative (price_only), and an explicit follow-up loop: watch production.fixes in cinematic_ads_get_project until status is 'ready', then call cinematic_ads_export again. It also forbids restarting a running step, which is exactly the misuse an agent would otherwise commit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_get_projectARead-onlyIdempotentInspect
One Cinematic Ads project as the studio shows it: project (status draft/uploaded/analyzing/ready/error, analysis progress as a percentage, settings, brand kit), assets (characters, products, places: id, kind, name, description, imageUrl, status, mode), production (the video's progress: percent, done, making, failed; fixes of moments and the range they may take: fixes, fixWindow; the textboxes of the video: lessonCards) and exports (final videos: status, url). Also moves on an analysis that is running (its next stretch; the run is still charged once, when it finishes) and the images and clips that are being made. Free. Poll this every 30–60 s while something runs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/idempotentHint already covering the safety profile, the description still adds non-obvious context: that polling advances a running analysis to its next stretch, that the run is billed only once at completion ("Free"), and that images/clips in flight are reported. It does not cover auth needs or error behavior, and the disclosed job-advancement effect sits in tension with the readOnlyHint label, though it is disclosed rather than contradicted.
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 purpose is front-loaded in the first clause, but the body is one very long sentence that packs four nested payload groupings plus billing and polling notes. The density is justified because no output schema exists and the enumeration substitutes for it, but it is not easy to scan.
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 thoroughly, listing every field group the agent will see plus the status/progress semantics. It also supplies the polling cadence needed to use it correctly, leaving no gap an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter at 100% schema description coverage, and the schema already tells the agent where the project_id comes from (cinematic_ads_list_projects or cinematic_ads_create_project). The description adds no format, default, or constraint information beyond that, 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 — retrieve one Cinematic Ads project — and enumerates the exact payload (project, assets, production, exports), which makes the singular scope unmistakable against cinematic_ads_list_projects and the mutation siblings like cinematic_ads_update_project. An agent can tell what it returns 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?
"Poll this every 30–60 s while something runs" gives explicit operating context and even a cadence, which is exactly the when-to-use guidance an agent needs for a status endpoint. It does not, however, name the alternative for enumerating projects (cinematic_ads_list_projects) or say when not to call it, 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.
cinematic_ads_guideARead-onlyIdempotentInspect
Read this before any other cinematic_ads_* tool: the step-by-step guide for remaking an existing video ad with Cinematic Ads — what to ask the user, the order of the tools, the check that ends each step, the credit estimate to give and the one question to ask before paying, polling and errors. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new context beyond that: the guide covers user prompts, tool order, end-of-step checks, credit estimates, a pre-payment question, and polling/error handling, plus the 'Free' cost signal that annotations do not express.
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 imperative ordering directive, then enumerates the guide's contents in a single compact clause. The em-dash list is dense but every item (tool order, step checks, credit estimate, pre-payment question, polling, errors) is distinct information, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description adequately previews what the guide delivers (sequence, checks, credit estimate, polling/error guidance) so the agent knows what it will get back. For a zero-parameter documentation tool this is essentially complete; only a hint at the guide's format/size is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly spends no words on inputs.
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 resource (a step-by-step guide for remaking an existing video ad with Cinematic Ads) and its positional role relative to every cinematic_ads_* sibling. An agent can immediately tell this is a documentation/orientation tool rather than an action tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Read this before any other cinematic_ads_* tool', giving a hard ordering constraint rather than a vague suggestion, and adds that it is free so there is no cost reason to skip it. Among 50+ siblings this routing instruction is exactly what is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_list_projectsARead-onlyIdempotentInspect
List the caller's Cinematic Ads projects (newest first) and the workspaces whose credits they can spend (id, name, role) — pass a workspace id to cinematic_ads_create_project to have that workspace pay. Free. Call cinematic_ads_guide first. Cinematic Ads is open to every Wandura account; everything is paid from the project's wallet — the user's own credits for a personal project (paid steps need a paid Wandura plan), the workspace's credits for a workspace project. Cinematic Ads remakes an existing video ad for the user's own app or brand: same shots, timing and style, new people, product, language and brand. Flow (the web studio's steps): cinematic_ads_create_project with original_ad_url → cinematic_ads_analyze → poll cinematic_ads_get_project until project.status is 'ready' → optionally cinematic_ads_update_project (brand kit, language, video model), cinematic_ads_brand_scan, cinematic_ads_refine + cinematic_ads_update_asset → cinematic_ads_make_images → cinematic_ads_make_video → poll until production.done is true → cinematic_ads_export → poll until exports[0].status is 'done' and use exports[0].url.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile, so the description only needed to add context — and it does: newest-first ordering, the exact fields returned per workspace, and the fact that this call costs nothing while downstream production steps draw on a project or workspace wallet.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, cost and prerequisite are front-loaded, but roughly two-thirds of the text is a product pitch and an eleven-step cross-tool workflow that duplicates cinematic_ads_guide and does not help an agent call this zero-argument list tool. That tail does not earn its place in this definition.
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 no-parameter, read-only list tool with no output schema, the description covers what is returned (projects, plus workspace id/name/role), the ordering, the cost, and the prerequisite. Only the individual project fields are left unspecified, 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?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly adds no pseudo-parameter guidance.
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 clause states a specific verb+resource and even the ordering and returned fields: 'List the caller's Cinematic Ads projects (newest first) and the workspaces whose credits they can spend (id, name, role)'. That is unambiguous and clearly distinct from cinematic_ads_list_templates or browse_library.
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 actionable routing guidance ('pass a workspace id to cinematic_ads_create_project to have that workspace pay'), a cost signal ('Free'), and a prerequisite ('Call cinematic_ads_guide first'). It stops short of stating when NOT to use this tool, but the context it provides is genuinely operational.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_list_templatesARead-onlyIdempotentInspect
The caller's saved Cinematic Ads templates (templates: settings + brand kit, display summary only; video when the template also keeps an analysed original ad and its cast — its length, how many people and places, a picture) and the built-in brand presets (presets: id like preset:langla, name, appName, iconUrl — a brand's app name, icon, mascot, end card and its own watermark, e.g. LangLa's moving "LangLa" mark). When the user names a brand ("LangLa"), find it in presets and pass its id as preset_id to cinematic_ads_create_project or cinematic_ads_apply_template; a saved template's id goes in template_id. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the readOnly/idempotent/non-destructive profile, so the bar is lower; the description still adds non-obvious context: results are a 'display summary only' (so callers shouldn't expect full settings payloads) and the call is 'Free'. It does not mention auth scope or rate limits, but the cost signal and the summary-only caveat are real value-adds.
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?
There is little wasted content, but the text is delivered as one very long run-on sentence loaded with nested parentheticals and em-dashes, making the field semantics harder to parse on first read. Front-loading what is returned is good; the packaging is dense enough to cost readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden and does so well: it documents both returned keys, representative fields (id format like preset:langla, name, appName, iconUrl), and the conditional `video` object with its contents. Only pagination/empty-result behavior is unaddressed, a minor omission for a zero-param listing.
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?
This tool takes zero parameters, which sets the baseline at 4. The description's mentions of preset_id and template_id correctly describe how the returned ids feed *other* tools rather than misrepresenting this schema, which strengthens rather than confuses parameter understanding.
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 both collections returned (`templates` and `presets`) and enumerates their fields, so an agent knows exactly what this retrieves. It implicitly distinguishes itself from get_template and search_templates by framing results as the caller's saved templates plus built-in presets. It never opens with a verb like 'List', but the content is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete routing: when a user names a brand, look it up in `presets` and pass its id as preset_id to cinematic_ads_create_project or cinematic_ads_apply_template, while a saved template's id goes to template_id. This is explicit downstream usage. It does not state when *not* to call it (e.g., versus search_templates or get_template), leaving a small gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_make_imagesAInspect
Draw the images of the assets (cast, products, places) that need one — or only asset_ids. SPENDS CREDITS (one image each; use price_only to quote). Images are drawn one after another; when too many are being made at once it stops and says which are left — call again later. Follow them with cinematic_ads_get_project. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_ids | No | Only these assets (default: every asset that still needs an image). | |
| price_only | No | Only return the price in credits; start nothing, spend nothing. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=false, openWorld=true; the description adds critical context those do not carry: it spends credits per image, images are rendered sequentially, a concurrency ceiling stops the batch and names what remains, and long steps return {status:'running'} after ~a minute while continuing server-side. This is materially 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-loads the action and immediately follows with the credit warning, which is the highest-value information. It is somewhat run-on in the later clauses (concurrency, polling, and the no-restart rule all packed into one long sentence), but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the interim {status:'running'} shape, the partial-completion stop behavior, and the follow-up tool. It does not describe what a successful response contains (e.g., which assets got images), which leaves a small gap for a credit-spending mutation.
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 asset_ids, price_only, and project_id are already fully documented in the schema. The description reinforces the cost implication of omitting asset_ids ('one image each') but adds no syntax or format detail, and user_request is not mentioned in the description at all despite being an unusual verbatim-quoting requirement. 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 a specific verb+resource ('draw the images of the assets') and narrows the scope to assets that need one or a supplied asset_ids list. An agent can distinguish it from generic siblings like render_image or story_set_asset_image because it is explicitly scoped to a project's cast/product/place assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use alternatives ('use price_only to quote'), sequencing guidance ('Follow them with cinematic_ads_get_project'), and failure handling ('when too many are being made at once it stops... call again later'). It also states the polling rule and the prohibition on restarting a running step, which is exactly the kind of routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_make_videoAInspect
Make the video of the remake: every part that is not finished yet. SPENDS CREDITS (use price_only to quote). It takes several minutes; follow production in cinematic_ads_get_project until production.done is true. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| price_only | No | Only return the price in credits ({cost}); while video parts are on sale it also returns listCost, the regular price before the discount. Start nothing, spend nothing. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behaviors the annotations don't: that credits are consumed, that the operation takes several minutes, that long steps return {status:'running'} after roughly a minute while continuing server-side, and the polling/anti-duplicate protocol. This is exactly the operational context coordinates a mutation tool 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 cost warning and the polling protocol are front-loaded and every clause carries operational weight. It is dense and reads as one long block, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a long-running, credit-spending mutation with no output schema, the description supplies the cost, duration, interim return shape, and completion signal. The only gap is what a successful (non-running) return looks like, but the get_project handoff largely covers that.
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 semantic value for price_only ('start nothing, spend nothing') by tying it to the credit-cost warning. user_request is left to the schema, which documents it thoroughly.
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 the specific verb and resource ('make the video') and scopes it to 'every part that is not finished yet', which distinguishes it from make_images and export. 'Remake' is slightly fuzzy but the rest of the sentence pins the intent down.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use price_only for quoting rather than starting a render, names cinematic_ads_get_project as the polling tool, gives the completion condition (production.done), and warns never to restart a running step. This covers when to use, when not to, and which sibling to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_refineAInspect
Turn a plain-language request ("make the mother younger", "the product is a red sneaker") into proposed changes to the project's assets. SPENDS CREDITS (a small AI step). Nothing is changed: apply the proposals you agree with with cinematic_ads_update_asset (then cinematic_ads_make_images redraws them).
| Name | Required | Description | Default |
|---|---|---|---|
| asset_ids | No | Limit the proposals to these assets. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| instruction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give readOnlyHint=false, non-idempotent, non-destructive, but the description adds the decisive context: it SPENDS CREDITS, produces proposals only, and does not mutate assets. The 'small AI step' cost warning and the non-mutating guarantee are exactly the behavioral facts an agent needs and the annotations alone would not 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?
Front-loads the core transformation, then immediately the cost warning, then the non-mutation guarantee and follow-up tool. Every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden; it conveys that the result is 'proposed changes' and that the agent must apply them, which is sufficient to drive the workflow. It stops short of describing the proposal payload shape, a minor gap for a 3-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with project_id and asset_ids documented but instruction undocumented. The description compensates by showing concrete instruction examples ('make the mother younger'), clarifying what the free-text parameter should contain. It does not clarify the asset_ids scoping, leaving a small gap.
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 ('turn a plain-language request into proposed changes to the project's assets') with two concrete examples, and distinguishes itself from cinematic_ads_update_asset, which applies the changes. 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?
Explicitly defines the when and the what-next: it proposes and changes nothing, cinematic_ads_update_asset applies the accepted proposals, then cinematic_ads_make_images redraws. The alternative tools are named rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_save_templateADestructiveIdempotentInspect
Save a project's settings and brand kit (language, resolution, aspect, app name, icon, mascot, end card, call to action, watermark, app screens, models) as a template, replacing one of the same name. Once the project is analysed it also keeps the original ad, its analysis, the cast and places as they are now (images, modes, descriptions) (saved.video: true): a new project from it skips the analysis — e.g. keep one person's image and give another person a different photo in each new project. Never a clip take or a final video. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Default: the project's title. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true, and the description reinforces the destructive overwrite with 'replacing one of the same name.' It goes beyond annotations by describing exactly what is persisted (original ad, analysis, cast, places, images, modes, descriptions) and the downstream effect that new projects skip analysis. It doesn't cover permissions or error behavior, but the added context is substantial.
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 purpose is front-loaded, and the remaining clauses add useful detail about lifecycle and exclusions. The single long sentence with parenthetical lists is dense and slightly run-on, but every clause carries information relevant to correct use.
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-parameter mutation tool with annotations covering safety and no output schema, the description covers what is saved, what is replaced, and the effect on new projects. It lacks explicit mention of a return value or template identifier, which would help an agent chain calls, but overall it is complete enough to invoke 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 description coverage is 100%, and both parameters (name and project_id) are fully documented in the schema. The description does not elaborate on parameter meaning or formatting beyond what the schema already provides, so it adds no extra value here. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: saving a project's settings and brand kit as a template. It enumerates the saved contents and clarifies the replacement behavior, which distinguishes it from a simple creation tool. It does not explicitly name sibling alternatives like apply_template or duplicate_project, keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear usage context: once the project is analysed, the template retains the original ad, analysis, cast, and places so new projects skip analysis. The example use case (keeping one person's image while changing another's) and the exclusions ('Never a clip take or a final video') give practical guidance. It stops short of explicitly stating when to prefer this over apply_template or clone_template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_set_original_adADestructiveInspect
Load (or replace) the original ad of a project from a public https URL: MP4 or MOV, 1 s to 3 minutes, up to 300 MB. Free. Replacing it clears the previous analysis and clip plan. Then call cinematic_ads_analyze. Long steps answer {status:'running'} after about a minute and keep going on the server — then poll cinematic_ads_get_project; never start the same step again while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| video_url | Yes | Public https URL of the MP4/MOV file. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing the concrete consequence: replacing clears the previous analysis and clip plan. It also documents input limits (1s–3min, ≤300MB), cost (free), and async behavior ({status:'running'} after ~a minute, server keeps working), which an agent needs to avoid duplicate calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose, constraints, then sequencing/polling guidance in order of importance. Every sentence carries weight, though the long-run/polling guidance is somewhat generic boilerplate that could be pushed to a shared guide.
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 still covers the return shape ({status:'running'}), the async lifecycle, the follow-up tool, and the destructive side effect. Nothing needed to invoke or chain this tool 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% and both params are documented in the schema, so the baseline is 3. The description nonetheless adds real semantic value the schema lacks: accepted media formats, duration bounds, size cap, and the requirement that the URL be public https.
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 precise verb+resource ('Load (or replace) the original ad of a project') plus the accepted input forms (public https URL, MP4/MOV). It is clearly distinguishable from siblings like upload_asset and cinematic_ads_create_project, and names the natural follow-up step.
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 sequencing: 'Then call cinematic_ads_analyze' for the next step, 'poll cinematic_ads_get_project' while a long step runs, and 'never start the same step again while it runs.' It also flags the operation as free and describes the replace-vs-load semantics, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_undo_fixADestructiveIdempotentInspect
Undo one fix of a moment (an id from production.fixes): that moment goes back to how it was. Build the final video again with cinematic_ads_export to get a file without it. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| fix_id | Yes | The fix's id from production.fixes in cinematic_ads_get_project. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds the meaningful consequence (the moment returns to its prior state) and the required follow-up export step, plus a 'Free' cost note. It does not cover permissions or rate limits, but the state-change effect is well disclosed.
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, front-loaded with the action and effect, then the follow-up step and cost note. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with full schema coverage and no output schema, the description covers effect, follow-up, and cost. Only permissions/error behavior is left implicit.
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 both fix_id and project_id are already documented with their sources; the description's mention of 'an id from production.fixes' restates the schema rather than adding format or lookup detail.
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 a specific verb (undo) plus the resource (one fix of a moment) and clarifies the resulting state ('that moment goes back to how it was'). It is clearly distinguishable from cinematic_ads_fix_moment, its natural counterpart.
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?
States the use case and tells the agent to run cinematic_ads_export afterward to rebuild the final video without the fix. It lacks an explicit 'when not to use' or a named alternative for reverting in bulk, so it falls just 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.
cinematic_ads_update_assetADestructiveIdempotentInspect
Edit one asset (a character, product, place, mascot…): name, description, voice, mode, or give it the user's own image. Free. mode: keep = remade faithfully from the source; new = redesigned from the description; upload = the user's own image is used (set automatically with image_url). A new image or look sends the clips that show it back to be made again.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| name | No | ||
| voice | No | ||
| asset_id | Yes | Asset id from cinematic_ads_get_project. | |
| image_url | No | Public https URL of the user's own PNG/JPEG/WebP image (up to 20 MB). | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, but the description adds concrete consequence: changing the image or look 'sends the clips that show it back to be made again,' which tells the agent exactly what the destructive action triggers. It also discloses cost ('Free'), which no annotation covers. Auth/permission requirements remain 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?
Front-loaded with the core action and the editable fields, then the mode definitions, then the side-effect warning. Dense but every sentence carries information; the parenthetical examples are slightly loose but earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and partial schema coverage, the description covers field semantics, the mode enum, cost, and the re-render side effect. Missing only auth/permission context and constraint details, which is minor.
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 only 33% (asset_id and image_url documented), so the description must compensate, and it does by explaining all three mode enum values (keep/new/upload) and how upload is set automatically with image_url. It also names the other editable fields (name, description, voice), though maxLength constraints are left 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?
States a specific verb (Edit) and resource (one asset, with examples: character, product, place, mascot) and enumerates the editable fields. The word 'asset' implicitly separates it from siblings like cinematic_ads_update_clip and cinematic_ads_update_project, though no sibling is named 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?
Usage is implied by the resource scope ('Edit one asset') and by the mode breakdown, which helps an agent pick a path. However, there is no explicit when-to-use vs the clip/project update siblings, nor any stated prerequisites beyond the mode semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_update_clipAIdempotentInspect
Change which assets a clip uses (ordered asset_ids) or which app screen shows in each shot (screen_picks: shot id → screen url, null for none, 'auto' to let the build choose). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| clip_id | Yes | Clip id. | |
| asset_ids | No | ||
| screen_picks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, idempotent, non-destructive), so the bar is lower, and the description adds genuinely new behavioral facts: the operation is 'Free' (no credit cost) and screen_picks accepts sentinel values (null = none, 'auto' = let the build choose). It stops short of saying what happens to shots not listed in screen_picks.
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?
One sentence, front-loaded with the action, with parenthetical detail rather than extra sentences. No wasted wording and the sentinel semantics are packed inline where they are needed.
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 and a nested object parameter, the description covers both edit modes and their value semantics adequately; no return-value explanation is required since no output schema exists. It omits failure/permission behavior, but that is a minor gap given the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only clip_id documented), so the description must compensate, and it does: asset_ids is flagged as ordered, and screen_picks is fully decoded as a shot-id → screen-url map with null and 'auto' semantics that the schema's generic additionalProperties does not convey. Minor gaps remain (interaction between the two params, the 12-item cap lives only 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?
States a specific verb-resource pair ('Change which assets a clip uses' / 'which app screen shows in each shot') and enumerates the two modifiable aspects, which distinguishes it from siblings like cinematic_ads_update_asset and cinematic_ads_update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two supported modes (asset_ids vs screen_picks) are implied as the alternatives, but the description never states when to prefer this tool over cinematic_ads_update_asset or when each mode is appropriate. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinematic_ads_update_projectADestructiveIdempotentInspect
Change a Cinematic Ads project's settings: title, aspect, resolution, target language, video model and the brand kit (app name, call to action, app icon, mascot, end card, frames, app screens, the user's brief). Free. Image and video URLs may be any public https URL. Refused while an analysis runs; the video model cannot change once part of the video is made (start a new project for another model).
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Brand kit. Every field optional; image/video URLs may be any public https URL (copied to Wandura storage). | |
| title | No | ||
| aspect | No | ||
| dialogue | No | How the original ad's lines become the remake's: keep_english (the default — a line spoken in English stays in English, only the others are translated: for ads that teach English) or translate_all (every line said in targetLanguage). Same timing rule as targetLanguage. | |
| project_id | Yes | Project id from cinematic_ads_list_projects or cinematic_ads_create_project. | |
| resolution | No | ||
| videoModel | No | The video model: wandura-0-1 = Wandura 0.1 (new projects start on it; the lowest cost), dreamina-seedance-2-5-ref = Seedance 2.5, dreamina-seedance-2-ref = Seedance 2.0. | |
| targetLanguage | No | Language code of the remake's speech and captions (e.g. en, vi, es-MX), or 'source' to keep the original ad's. Set it before cinematic_ads_analyze (the new cast is designed for it); it can still change until the video is being made (then the clips are written again), not after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply destructiveHint, idempotentHint and openWorldHint, so the description only needs to add timing and lifecycle context — and it does: cost ('Free'), refusal during analysis, and the point of no return on the video model. It does not clarify what happens to omitted fields or to already-generated clips, which is the remaining unknown for a destructive update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then cost, then constraints — a sensible order with no filler. The long parenthetical enumerating brand-kit fields is slightly heavy but each item earns its place by defining the mutation's scope.
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, multi-field update tool with no output schema and annotations already carrying safety hints, the description supplies the missing operational context: cost, the analysis lock, and the irreversibility of the video model. An agent has enough to decide when to call it and what to warn the user about.
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 63% and the description largely restates the schema's property list, though it does usefully frame the brand-kit fields as a single group (app name, CTA, icon, mascot, end card, frames, screens, brief). Parameters not covered by either source — notably 'pronunciation' and 'dialogue' — get no help here. Adequate but not additive 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?
Opens with a specific verb+resource ('Change a Cinematic Ads project's settings') and then enumerates exactly which settings, including the full brand kit. An agent can distinguish this project-level mutation from siblings like cinematic_ads_update_asset or cinematic_ads_update_clip 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 concrete when-not conditions: refused while an analysis runs, and the video model is frozen once part of the video is made, with the explicit alternative 'start a new project for another model'. No routing to the update_asset/update_clip siblings for their respective scopes, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_templateAInspect
Clone a template into a real video generation. SPENDS CREDITS. Returns a job id immediately; call get_generation to follow it. The job completes even if nothing polls it.
| Name | Required | Description | Default |
|---|---|---|---|
| avatar | No | Presenter. Omit to keep the template's own. | |
| intent | No | Short description of what the user wants, max 200 chars. NOT a prompt — the server assembles the final prompt. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| product | No | Product to advertise. Omit to keep the template's own product. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| quality | No | Quality tier. Model ids are server-owned and never accepted here. | |
| overrides | No | Only set these to DELIBERATELY deviate from the template. Leaving them out is what makes it a faithful clone — the template decides aspect and duration. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| templateId | Yes | ||
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: it is a credit-spending operation, it is asynchronous ("Returns a job id immediately"), and the job completes even if unobserved. That last point is critical for an agent deciding whether it must poll, and none of it is derivable from readOnlyHint=false / idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all front-loaded with the most consequential fact (credit spend) second. Nothing is redundant or 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?
For a 10-param, nested-object, async mutation tool with no output schema, the description covers the essentials: cost, immediate return value, follow-up tool, and guaranteed completion. It does not state that repeated calls spend credits again, nor where a templateId comes from, but the schema fills most remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 90%, so the schema already carries nearly all parameter meaning (overrides, intent, workspace scoping, user_request verbatim rules). The description contributes nothing parameter-specific, 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?
"Clone a template into a real video generation" states a specific verb (clone) and resource (template → video generation), which separates it from preview/apply-style siblings. It never explicitly names which sibling to use instead (e.g. cinematic_ads_apply_template or preview_render), so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "SPENDS CREDITS" and the hand-off instruction "call get_generation to follow it," which tells the agent the correct follow-up tool. However, there is no explicit statement of when to choose this over render_video, cinematic_ads_apply_template, or the preview tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generationBRead-onlyIdempotentInspect
Status and result URL of a generation you created.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds that the return includes both a status and a result URL, which is useful context, but says nothing about status values, polling cadence, or failure states.
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 compact sentence, front-loaded with the returned data. It is efficient, though its brevity comes at the cost of the missing parameter and behavioral detail noted elsewhere.
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 should explain return values; it partially does (status + result URL) but omits the set of possible status values and how to poll. For a one-parameter status-check tool this is minimally adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for the single jobId parameter, yet it never names or explains it. 'A generation you created' loosely implies jobId identifies the generation, but no format, source, or validation detail is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (a generation you created) and what it returns (status and result URL), letting an agent tell it apart from the render_* creation tools and preview_* tools. It lacks an explicit verb, but the intent — retrieve status/result — is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a generation you created' implies the natural workflow (call after a render_* tool), but there is no explicit statement of when to use this versus preview_generation or the render_* siblings, and no mention of prerequisites like polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateARead-onlyIdempotentInspect
Get one template by id. The generation prompt is intentionally not returned — send an intent to clone_template instead.
| Name | Required | Description | Default |
|---|---|---|---|
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds non-obvious behavioral context the annotations cannot convey: the generation prompt is deliberately omitted from the response, which prevents an agent from assuming a missing field is an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler. The primary action is front-loaded and the caveat about the missing prompt plus the redirect follow immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully discloses that the generation prompt is absent from the returned template, which is the key expectation-setting detail. It does not describe what fields are returned or how an unknown id behaves, but for a single-parameter read tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 0% schema description coverage, so the description carries the burden. 'By id' merely restates the parameter name and adds no format, source, or lookup guidance for templateId. This is the minimum viable level given the coverage gap.
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 (get one template by id), which is clear enough to distinguish from list/search siblings. It does not explicitly contrast with search_templates or browse_library, but it does name clone_template as the alternative 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?
Provides an explicit conditional: if you want the generation prompt, send an intent to clone_template instead. That routes the agent away from this tool for the cloning use case. It stops short of stating when-not to fetch a template at all, but the alternative routing is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_summaryARead-onlyIdempotentInspect
Workspace Analytics & Billing: the RUNS of ONE Enterprise workspace (the same runs as list_generation_events, so its rows added up equal these totals) added up per group. Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner or Admin (every run) or Member (only your own runs). group_by: any of day, week (its Monday), month (YYYY-MM) — cut in Asia/Ho_Chi_Minh — user, team, project, app, model, feature, channel, output_kind, duration_bucket, requested_duration_bucket, resolution, aspect_ratio, status; none = one row for the whole range. Each row: the group's fields (date, week, month, user_id + email, team ("unclassified" = no team; a person's team when the run finished, so a team change splits at that moment), project_id, app_name, model_id + model_name, feature, channel, output_kind, duration_bucket, requested_duration_bucket, resolution, aspect_ratio, status — as in list_generation_events), then: OUTPUT, on the day a run finished (still running: the day it was sent): attempts (runs; a retry is a new run), succeeded, failed, running (still in progress), outputs_image / outputs_video / outputs_audio (files made), gross_debit_credits, refunded_credits, net_credits (= gross − refunded; a run's refund counts with the run even when posted another day), reserved_credits (still held by runs in progress), cost_effective_usd (the runs' net × meta.cost_basis.effective_cents_per_credit, the workspace's one effective price; null when it has none) and cost_list_usd (1 credit = $0.01); queue_time_seconds (started − sent), generation_time_seconds (finished − started), request_to_result_seconds (finished − sent), each {avg, p50, p90, n, n_approximate}: per run, never parallel runs added together; p50 / p90 nearest-rank within the group; n = runs measured (runs still going are left out: they are in running), n_approximate = how many of them were timed from an approximate start; no sample ⇒ avg / p50 / p90 null, never 0. USE, on the day a run was SENT: active_users (people who sent ≥ 1 run), days_used (days with ≥ 1 run sent, free runs included), days_with_spend (days with ≥ 1 run sent that cost credits), last_used_day (rows per person: their last such day in the range; null = none). approved_creatives: Drama Studio only (the one studio with an approval step: an edit or a film a producer approved), on the day it was approved, for the editor who submitted it (else the approver); every other studio has no approved state yet (meta.missing_fields). Filters (user_id, team, project_id, app, model_id, feature, channel, output_kind, duration_bucket, requested_duration_bucket, resolution, status) work as in list_generation_events: only the matching runs are added up. Grouped by user or team, everyone who belonged to the workspace on a day of the range gets a row, with zeros when they did nothing. The credit ledger by the day each movement was posted is list_credit_transactions, a different view: do not mix the two. compare_previous=true adds the same rows for the window of the same length just before, with window = "previous" (and window = "current" on the others). from (first day, included) and to (the day after the last, excluded), YYYY-MM-DD in Asia/Ho_Chi_Minh, at most 366 days; default the last 30 days including today. Paging: up to limit rows (1–1,000, default 1,000); when meta.next_cursor is not null pass it as cursor (same arguments) for the next page. Free; at most 60 calls a minute per key or person. CSV: GET /api/v1/workspaces/{workspace_id}/reports/get_usage_summary?format=csv&group_by=day,user.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The day after the last, excluded (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: tomorrow. At most 366 days after `from`. | |
| app | No | Only runs of this app (app_name: the Cinematic Ads project's app name). | |
| from | No | First day, included (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: 30 days before `to`. | |
| team | No | Only runs of this team, as the report names it ("unclassified" = people with no team). | |
| limit | No | Rows per page. | |
| cursor | No | meta.next_cursor of the previous page, unchanged. | |
| status | No | Only runs in this state. | |
| channel | No | Only runs that came this way. | |
| feature | No | Only runs of this feature (a feature from list_services, or what a step outside jobs was charged for: cinematic_ads_analysis, cinematic_ads_ai, cinematic_ads_export, drama_chat, …). | |
| user_id | No | Only this person's runs (a user id from list_workspace_members). | |
| group_by | No | The dimensions of a row, e.g. ["day", "user"]. None = one row for the whole range. | |
| model_id | No | Only runs of this model (a model_id from list_services; older names of the same model are included). | |
| project_id | No | Only runs of this project (a Cinematic Ads or Drama Studio project id). | |
| resolution | No | Only videos of this measured resolution, e.g. 720p (the shorter side in pixels). | |
| output_kind | No | Only runs making this kind of output. | |
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. | |
| duration_bucket | No | Only videos whose measured length is in this bucket. | |
| compare_previous | No | Also return the window of the same length just before (rows with window = "previous"). | |
| requested_duration_bucket | No | Only videos whose requested length is in this bucket. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds far more: authorization paths and their scope differences, cost ("Free"), a 60-calls-per-minute rate limit per key or person, timezone and 366-day range bounds, cursor paging via meta.next_cursor, and precise semantics for null vs. 0 ("no sample ⇒ avg / p50 / p90 null, never 0"). Member-level row visibility and zero-filled rows for people who did nothing are disclosed up front.
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?
Nearly every clause carries real information, and the purpose is front-loaded in the first sentence. But the body is one enormous run-on paragraph mixing auth, grouping, row schema, metrics, filters, paging, and CSV export, with no headers or line breaks; an agent must parse ~700 dense words to find any single fact.
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 19 parameters and no output schema, the description carries the full burden of describing the return shape, and it does: it enumerates group fields and each metric (attempts, net_credits, reserved_credits, cost_effective_usd, the three latency percentiles with their n and n_approximate semantics) plus the approved_creatives caveat tied to meta.missing_fields. Nothing essential for correct invocation or interpretation appears to be 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%, yet the description still adds meaning the schema cannot: group_by is defined operationally (week starts Monday, month as YYYY-MM, cuts made in Asia/Ho_Chi_Minh, none = a single row), from/to are clarified as first-day-included and day-after-last-excluded with a 30-day default, and compare_previous is explained as producing rows tagged window = "previous". It also explains that filters reduce the runs being summed, not just the returned rows.
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?
"Workspace Analytics & Billing: the RUNS of ONE Enterprise workspace ... added up per group" states a specific verb (aggregate), resource (generation runs), and scope (single workspace), and immediately distinguishes itself from list_generation_events by asserting the rows sum to the same totals. An agent can tell exactly what this tool returns 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?
Explicitly names two alternatives and the conditions that separate them: the same underlying runs as list_generation_events but pre-aggregated, and a different view from list_credit_transactions with the direct instruction "do not mix the two." It also states prerequisites (reporting key or Owner/Admin/Member sign-in) and the Member limitation to own runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_budgetARead-onlyIdempotentInspect
Workspace Analytics & Billing: the budget of ONE Enterprise workspace, read now (not a date range). Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner or Admin (the whole workspace) or Member (only your own numbers: your wallet, held and used credits; granted, sources and pool_available_credits are null). Returns data + meta. data.granted = every grant and top-up that added credits to the workspace since it began: credits (bonus included), usd (what was paid or granted in $; null when any grant has no $ amount) and how many grants. data.sources = the same split by source (apero_budget = a budget from Wandura, topup = a card purchase). data.pool_available_credits = credits in the shared pool not yet given to anyone. data.wallets = each member wallet: available_credits (spendable now) and held_credits (reserved by runs still in progress). data.held_credits = all credits reserved by runs in progress (they may still be refunded). data.used_credits = credits spent since the workspace began: gross_debit (charged), refunded, net = gross_debit − refunded (net includes held_credits). Moving credits between the pool and a wallet (allocate / reclaim) is never counted as cost. Money: effective_cents_per_credit = total $ granted ÷ total credits received, one price for the whole workspace (method v1-binh-quan); list_cents_per_credit = 1 (1 credit = $0.01 list price); used_cost_effective_usd = net × effective price, used_cost_list_usd = net × list price. When a price is unknown it is null (never 0) and meta.missing_fields says why. Times are ISO 8601 in Asia/Ho_Chi_Minh (+07:00): data.computed_at and meta.data_as_of = when this was computed; meta.earliest_available_at = the workspace's first credit movement. Free; at most 60 calls a minute per key or person. The same report as CSV: GET /api/v1/workspaces/{workspace_id}/reports/get_workspace_budget?format=csv.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, and the description goes well beyond them: per-role data visibility differences, auth key requirements, a 60 calls/minute rate limit, 'free' cost, null-never-zero pricing behavior, and Asia/Ho_Chi_Minh time semantics. Even what is not counted as cost (allocate/reclaim) is disclosed.
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 gist is front-loaded in sentence one and every subsequent sentence carries real information, but the middle block is a dense run of field definitions that is hard to scan and would be better served by an output schema. The CSV endpoint note at the end is a useful, compact closer.
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 full burden of documenting the response and does so exhaustively: data.granted, sources, pool_available_credits, wallets, held/used credits, price formulas, missing_fields, and timestamp fields. Nothing an agent needs to interpret the result is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the workspace_id description already explains the key-vs-membership scoping, so the description adds little new meaning for the single parameter. Its role-based visibility notes are behavioral context rather than parameter semantics, 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 first sentence names a specific verb and resource with scope: the budget of ONE Enterprise workspace, read as of now rather than over a date range. The 'read now (not a date range)' clause explicitly separates it from time-series siblings like get_usage_summary or list_credit_transactions without requiring a schema look.
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 the access conditions clearly: a wdr_report_ key made by the workspace Owner, or sign-in as Owner/Admin (whole workspace) versus Member (only your own numbers). What is missing is an explicit pointer to sibling tools when a date-ranged or multi-workspace view is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credit_transactionsARead-onlyIdempotentInspect
Workspace Analytics & Billing: the credit ledger of ONE Enterprise workspace, one row per credit movement, oldest first, by the day it was posted (Asia/Ho_Chi_Minh). Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner, Admin or Member. A Member sees only the movements of their own wallet. Each row of data: transaction_id (stable), posted_at (ISO 8601, +07:00, to the second), kind (topup = a card purchase, apero_budget = a budget from Wandura, allocate = pool → a member wallet, reclaim = a wallet → the pool, spend = a run charged (held or settled), refund = credits given back, adjust = a correction by Wandura), credits (signed: + adds credits to the pool or wallet, − takes them away), wallet_user_id + wallet_email (the member wallet moved; null = the workspace pool), actor_user_id + actor_email (who did it; null = the system), job_id, ref (the movement's own reference), refund_of_ref (refunds only: the ref of the spend it reverses), spend_state (spend rows only: held = the run is still going and its credits may come back, settled, or refunded = all of it given back; as it stands now, so an updated_since sync keeps the state it first saw) and held_credits (spend rows only: credits still held), reason. Net credits used = −Σ credits of spend and refund rows (matches the Usage page); allocate / reclaim only move credits inside the workspace and are never cost. Range: from (first day, included) and to (the day after the last, excluded), YYYY-MM-DD in Asia/Ho_Chi_Minh, at most 366 days; default the last 30 days including today. Paging: up to limit rows (1–1,000, default 1,000); when meta.next_cursor is not null pass it as cursor (with the same range) for the next page. Sync: updated_since = the last posted_at you stored returns only newer rows, never one you already have (ledger rows never change). Free; at most 60 calls a minute per key or person. CSV: GET /api/v1/workspaces/{workspace_id}/reports/list_credit_transactions?format=csv (next page cursor in the X-Next-Cursor header).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The day after the last, excluded (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: tomorrow. At most 366 days after `from`. | |
| from | No | First day, included (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: 30 days before `to`. | |
| limit | No | Rows per page. | |
| cursor | No | meta.next_cursor of the previous page, unchanged. | |
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. | |
| updated_since | No | Only rows posted after this time (to the second), e.g. the last posted_at you stored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description adds substantial context beyond them: the 60-calls-per-minute rate limit, that the call is free, the 366-day range cap, cursor pagination via meta.next_cursor, and the immutability guarantee that ledger rows never change so updated_since cannot produce duplicates. It also documents that spend_state reflects current state rather than the state at posting, which is a non-obvious behavior an agent would otherwise get wrong.
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 no marketing filler, and the field enumeration earns its place because no output schema exists. The main weakness is structural: it is one large unstructured paragraph with no line breaks or headings, so the paging and sync rules are buried mid-block. Labeled segments ('Range:', 'Paging:', 'Sync:', 'CSV:') help but do not fully offset the wall-of-text effect.
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 read tool with no output schema, the description covers everything an agent needs: authentication paths, ordering and timezone, every row field including the refund_of_ref back-reference and held_credits, the cost-accounting formula that reconciles with the Usage page, pagination, incremental sync, and a CSV escape hatch with its header-based cursor. Nothing material about calling it correctly appears to be 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, and the description adds meaning beyond the schema: it clarifies that `to` is exclusive and pairs with `from` under a shared 366-day cap, that the default window is the last 30 days including today, and that `cursor` must be replayed with the same range. The `updated_since` guidance, storing the last posted_at, is the most valuable addition because it defines a sync pattern rather than restating the field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb-plus-resource statement: it returns the credit ledger of one Enterprise workspace, one row per credit movement, ordered oldest-first by posting day. It goes further than the name by defining scope ('ONE Enterprise workspace'), grain ('one row per credit movement'), and sort ('oldest first', Asia/Ho_Chi_Minh), which distinguishes it from summary-level siblings such as get_usage_summary and get_workspace_budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is explicit on prerequisites and permissions: a wdr_report_ key or Owner/Admin/Member sign-in, with Members limited to their own wallet. It also explains which rows count as cost ('Net credits used = −Σ credits of spend and refund rows') and notes that allocate/reclaim are never cost, which steers correct interpretation. It never explicitly names an alternative tool or says when not to use it, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_effectsARead-onlyIdempotentInspect
List the 20 one-photo video effects (e.g. a 360 rotation, a hug, an explode) with a demo clip, poster image and credit price for 5s and 10s. Each effect has a fixed prompt baked in server-side — there is no prompt to write, only a photo and a duration. Call this before render_effect. Free; no credits, no provider call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new operational facts: it is free, consumes no credits, makes no provider call, and the prompt is baked in server-side. That is exactly the kind of cost/side-effect context an agent needs before invoking.
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, front-loaded with what is returned, then the no-prompt constraint, then cost behavior. Every clause carries information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must explain return contents, which it does (demo clip, poster image, credit price at two durations), and it covers cost and side effects. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies no input is required and explains that only a photo and duration matter downstream, adding mild clarifying 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 precise verb+resource (list the 20 one-photo video effects) and enumerates the returned fields (demo clip, poster image, credit price for 5s and 10s). It also distinguishes itself from the sibling render_effect by noting there is no prompt to write, only a photo and a duration.
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?
"Call this before render_effect" gives explicit sequencing guidance and the 'no prompt to write' note clarifies the intended workflow. It does not, however, address when not to use it or how it relates to the other browse/list siblings (browse_library, list_models, get_template).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generation_eventsARead-onlyIdempotentInspect
Workspace Analytics & Billing: every RUN of ONE Enterprise workspace, one row each, oldest first. Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner or Admin (every run) or Member (only your own runs). A run = one generation job (a retry is a new run), or one step charged outside a job (a Cinematic Ads analysis, AI step or export, a Drama Studio chat turn, a recap, a Wan Motion Control step, subtitles, a Frame Studio export…), counted once, so the runs' credits add up to the Usage page. Each row of data: attempt_id (stable: the job id, or the step's ledger ref), job_id (null for a step outside jobs), source_channel (web, api_key, oauth, mcp; api = API key or OAuth before 10/10/2026; null = not recorded), actor_type (always human: every run is made by a person), user_id, team (the person's team when the run finished; "unclassified" = none), project_id and app_name (the Cinematic Ads project's app name), service: feature (a step outside jobs: what it was charged for, e.g. drama_chat), model_id (null for a step outside jobs) and model_name as the web shows them, provider (always "wandura"); output: kind (image / video / audio), count (files made; 0 unless succeeded), video_duration_seconds (measured from the file, not rounded) and duration_bucket, requested_duration_seconds (the length asked for) and requested_duration_bucket — buckets 0-15, 15-30, 30-60, 60-120, 120+ seconds, each upper bound included (15 is 0-15, 15.07 is 15-30), unknown = not measured or not asked; resolution (shorter side, e.g. 720p) and aspect_ratio (e.g. 9:16), both measured; preview_url (the CDN link: anyone with it can open it); status (succeeded, failed, running; there is no cancelled: a run the provider cancelled is failed), error_code, retry_of (the run this one retried); request_submitted_at, generation_started_at (+ generation_started_quality: exact, or approximate for models that do not report a start, which can be off by up to 2 minutes), generation_finished_at (when the result was ready; a run that failed at submit: when it was refunded); queue_time_seconds = started − submitted, generation_time_seconds = finished − started, request_to_result_seconds = finished − submitted, per run (never add parallel runs together); credits: gross_debit, refunded, net (= gross_debit − refunded), reserved (still held by a run in progress); cost_effective_usd = net × meta.cost_basis.effective_cents_per_credit (the workspace's one effective price), cost_list_usd = net × the list price (1 credit = $0.01); updated_at. A missing time is null, never 0, and every wait computed from it is null; meta.missing_fields lists each such field with the number of runs and why (one entry per cause). Range: a run belongs to the day it finished (a run still in progress: the day it was submitted). from (first day, included) and to (the day after the last, excluded), YYYY-MM-DD in Asia/Ho_Chi_Minh, at most 366 days; default the last 30 days including today. Paging: up to limit rows (1–1,000, default 1,000); when meta.next_cursor is not null pass it as cursor (with the same range and filters) for the next page. Sync: updated_since = the latest updated_at you stored returns only runs changed since. Free; at most 60 calls a minute per key or person. CSV: GET /api/v1/workspaces/{workspace_id}/reports/list_generation_events?format=csv (next page cursor in the X-Next-Cursor header).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The day after the last, excluded (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: tomorrow. At most 366 days after `from`. | |
| app | No | Only runs of this app (app_name: the Cinematic Ads project's app name). | |
| from | No | First day, included (YYYY-MM-DD, Asia/Ho_Chi_Minh). Default: 30 days before `to`. | |
| team | No | Only runs of this team, as the report names it ("unclassified" = people with no team). | |
| limit | No | Rows per page. | |
| cursor | No | meta.next_cursor of the previous page, unchanged. | |
| status | No | Only runs in this state. | |
| channel | No | Only runs that came this way. | |
| feature | No | Only runs of this feature (a feature from list_services, or what a step outside jobs was charged for: cinematic_ads_analysis, cinematic_ads_ai, cinematic_ads_export, drama_chat, …). | |
| user_id | No | Only this person's runs (a user id from list_workspace_members). | |
| model_id | No | Only runs of this model (a model_id from list_services; older names of the same model are included). | |
| project_id | No | Only runs of this project (a Cinematic Ads or Drama Studio project id). | |
| resolution | No | Only videos of this measured resolution, e.g. 720p (the shorter side in pixels). | |
| output_kind | No | Only runs making this kind of output. | |
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. | |
| updated_since | No | Only runs changed after this time (to the second), e.g. the latest updated_at you stored. | |
| duration_bucket | No | Only videos whose measured length is in this bucket. | |
| requested_duration_bucket | No | Only videos whose requested length is in this bucket. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses cost (free), throttling (60 calls/minute per key or person), auth paths and scope limits, null-vs-zero time semantics, that preview_url is publicly readable, that 'there is no cancelled' state, that retries are separate runs, and that meta.missing_fields explains gaps. These are exactly the operational facts an agent needs before calling.
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 purpose and auth are front-loaded, but the 'Each row of data' section is a single enormous run-on enumeration that is hard to scan, and paging/limit rules are restated from the schema. Nearly every detail is substantive, but the lack of structure (no breaks by concern) hurts usability.
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 18 parameters, no output schema, and complex billing semantics, the description carries the full burden of documenting the returned row shape, and it does so field by field, including derived cost figures and time-delta definitions. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries baseline meaning, but the description adds real value: bucket boundary inclusivity (15 is 0-15, 15.07 is 15-30), day attribution by finish time (submit time for running runs), from inclusive / to exclusive, and that cursor must be sent with the same range and filters. Some schema-level details (limit bounds, cursor definition) are simply repeated rather than extended.
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 sentence names a specific verb (list), a specific resource (generation runs of one Enterprise workspace), the grain (one row per run), and the ordering (oldest first). It also crisply defines what a 'run' is, including retries and out-of-job steps, so the agent cannot confuse it with get_usage_summary or list_credit_transactions.
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 prerequisites precisely (workspace reporting key from an Owner, or Owner/Admin/Member sign-in with Member limited to own runs), the default range, the 366-day cap, paging via meta.next_cursor, incremental sync via updated_since, and rate limits. What it lacks is explicit routing language naming a sibling (e.g. 'use get_usage_summary for totals'), leaving the Usage-page reconciliation only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-onlyIdempotentInspect
List the models you can generate with, and each one's real caps: how many reference images, videos and audios it takes, and the allowed resolution / duration / aspect values. Pass kind to switch between video, image and audio. Call this before any render so you pick settings that exist instead of guessing. Free. Each row carries prompt ('required'|'optional'|'none') and requires (media you MUST pass) — check both before calling a render tool.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | What the model should produce. Defaults to video. | video |
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 useful non-structured context: 'Free', plus the fact that rows carry `prompt` and `requires` flags that must both be checked before rendering. It doesn't discuss pagination or result size, but the call-before-render contract is the behavior that actually matters 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?
Four sentences, densely packed and front-loaded: purpose first, then parameter hint, then the usage imperative, then the row-contract warning. Slightly overstuffed with dashes and parentheticals, but every clause adds actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return shape, and it does name the key row fields (`prompt`, `requires`) and the capability categories. It stops short of describing the full row structure (model names/ids, exact field names), which an agent would still have to discover empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `kind` enum is already documented with its default in the schema. 'Pass kind to switch between video, image and audio' restates the enum rather than adding format or edge-case detail, 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+resource ('list the models you can generate with') and immediately enumerates what each row contains: reference image/video/audio counts and allowed resolution/duration/aspect values. An agent can distinguish this discovery tool from the render_* 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 an explicit sequencing rule against the alternatives: 'Call this before any render so you pick settings that exist instead of guessing.' It also names the alternative family (render tools) and the condition (before calling a render tool) that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesARead-onlyIdempotentInspect
Workspace Analytics & Billing: what Wandura sells today, one row per price option, the same for every workspace. Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner, Admin or Member. The list is the same for every reader. Each row of data: feature (the tool on the web, e.g. text-to-video) and feature_name, output_kind (image / video / audio), model_id and model_name as the web shows them, provider (always "wandura"), resolution (the price option: a resolution, or a quality mode for models priced by mode), with_sound (true = the price with sound on, for models whose price depends on it), unit (what one unit is: second = per second of video, run = per run, image = per image, megapixel = per output megapixel, 1000_characters = per 1,000 characters of text), list_credits_per_unit and list_usd_per_unit (list price: 1 credit = $0.01). What a run really costs this workspace: credits × meta.cost_basis.effective_cents_per_credit. Metered AI steps (Cinematic Ads analysis, AI steps, export) have no fixed list price and are not listed. Free; at most 60 calls a minute per key or person. CSV: GET /api/v1/workspaces/{workspace_id}/reports/list_services?format=csv.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the rate limit (60 calls per minute per key or person), that the call is free, that output is uniform across readers, that metered AI steps such as Cinematic Ads analysis and export are excluded, and how to derive real per-run cost via meta.cost_basis.effective_cents_per_credit. It also documents the CSV alternate endpoint.
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 what the tool is and the price-option granularity, and every clause afterwards (auth, rate limit, field meanings, cost math, CSV) carries information. It is dense and delivered as one long block rather than structured sections, which makes the output-field enumeration harder to scan than a list would 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?
With no output schema, the description takes on the burden of documenting the return shape and does so field by field: feature, output_kind, model_id, provider, resolution, with_sound, unit, list_credits_per_unit and list_usd_per_unit, plus the credit-to-dollar conversion. Auth, rate limits and known omissions are all covered, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single workspace_id parameter, so the baseline is 3. The description adds meaning by tying the id to auth paths ('the workspace the reporting key belongs to, or one you are a member of') and noting that the reporting key must be minted by that workspace's Owner, which clarifies what a valid value looks like.
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 resource and scope: the workspace's catalogue of sellable services, one row per price option, including feature, model, provider, resolution and unit prices. That distinguishes it from list_models (model catalogue) and get_usage_summary (spend), though it never names those siblings explicitly. An agent can infer the purpose confidently from the field list.
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?
Prerequisite context is strong: it says a wdr_report_ key or Owner/Admin/Member sign-in is required and that the result is identical for every reader. However it never states when to call this versus list_models, get_usage_summary or get_workspace_budget, and gives no exclusions beyond 'metered AI steps are not listed'. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_membersARead-onlyIdempotentInspect
Workspace Analytics & Billing: everyone who belongs or ever belonged to ONE Enterprise workspace, including people who left and people who never ran anything. Needs a workspace reporting key (wdr_report_…, made by the workspace Owner) for that workspace, or your own sign-in as its Owner or Admin (everyone) or Member (only your own row). Returns data (one row per person) + meta. Each row: user_id, email, name (both as they are today), role (owner/admin/member/viewer; for someone who left, the role they had when they left), status (active or left), team = their team now ("unclassified" when they have none), team_history = every team they were put in, oldest first: team, team_id, effective_from (null = their first team, which also covers everything they did before it was set), effective_to (null = still that team), assigned_at, assigned_by (user id); last_used_at = when they last sent a run in this workspace (a job, or a step charged outside jobs; null = never); membership_periods = each period they belonged: joined_at, left_at (null = still a member; joined_at null = they joined before the workspace audit log recorded joins, see meta.missing_fields). A report split by team puts each run in the team its person was in when the run finished. Times are ISO 8601 in Asia/Ho_Chi_Minh (+07:00). Free; at most 60 calls a minute per key or person. The same report as CSV: GET /api/v1/workspaces/{workspace_id}/reports/list_workspace_members?format=csv.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | The workspace: the one the reporting key belongs to, or one you are a member of. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides extensive behavioral details beyond the annotations, including the complete return structure (`data` + `meta`), specific meanings for every field (e.g., `status`, `team_history`, `membership_periods`), rate limits (60 calls a minute), and timezone context (Asia/Ho_Chi_Minh).
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 tool description is an extremely dense, multi-paragraph technical specification that is neither concise nor well-structured for an AI agent. It functions more like a reference manual page than a simple tool explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that no output schema is provided, the description is exhaustively complete. It defines every data point returned, including complex nested objects like `membership_periods` and operational constraints like rate limits and time zones.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description clarifies the critical context of the `workspace_id`, explaining it must be one tied to the reporting key or one the user specifically owns/is a member of. This context is vital for correct invocation and permission handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing workspace members. It distinguishes its scope from a standard list by specifying it includes members who have left and those who never ran anything, indicating a deep auditing function.
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?
While it doesn't name specific alternatives, it defines its use case as a comprehensive, historical report suitable for auditing. This level of scope definition strongly suggests *when* to use it relative to simple member checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_generationARead-onlyIdempotentInspect
Price a clone WITHOUT creating it. Costs nothing, spends no credits, calls no provider. Use this before clone_template so the user knows the price and the resulting aspect/duration first. Returns cost (credits), balance (credits in the wallet that would pay) and sufficientCredit; if sufficientCredit is false, do not submit, tell the user.
| Name | Required | Description | Default |
|---|---|---|---|
| avatar | No | Presenter. Omit to keep the template's own. | |
| intent | No | Short description of what the user wants, max 200 chars. NOT a prompt — the server assembles the final prompt. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| product | No | Product to advertise. Omit to keep the template's own product. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| quality | No | Quality tier. Model ids are server-owned and never accepted here. | |
| overrides | No | Only set these to DELIBERATELY deviate from the template. Leaving them out is what makes it a faithful clone — the template decides aspect and duration. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive; the description goes further by spelling out the practical consequence — costs nothing, spends no credits, calls no provider — which is the fact that actually determines whether an agent should call it speculatively. It also discloses the return payload keys and a decision rule tied to sufficientCredit, since no output schema 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?
Four short sentences, front-loaded with the negation of side effects, then ordering guidance, then return values, then the failure branch. Nothing repeats the schema or the annotations.
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 read-only pricing tool with no output schema, the description covers the no-cost guarantee, the intended call sequence, the returned fields, and the credit-insufficiency action. That is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the schema already documents avatar, product, overrides, workspace and project in detail. The description adds only the indirect hint that aspect/duration can be previewed, without explaining how overrides affect pricing. 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?
"Price a clone WITHOUT creating it" gives a specific verb (price) and resource (clone) and immediately negates the write behavior, which cleanly separates it from clone_template. The scope is unambiguous to an agent skimming sibling names.
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 names the alternative and the ordering: "Use this before clone_template so the user knows the price and the resulting aspect/duration first." It also states a conditional branch (sufficientCredit false → do not submit, tell the user), which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_renderARead-onlyIdempotentInspect
Price a render WITHOUT creating it — video, image or audio alike. Costs nothing, spends no credits, calls no provider. Use this before any render_* tool so the user sees the price first. Returns cost (credits), balance and sufficientCredit; if sufficientCredit is false, do not submit, tell the user. Some models TRANSFORM media instead of generating (upscale, remove-bg, face-swap): they take NO prompt at all. Call list_models first and read prompt ('required'|'optional'|'none') and requires — for prompt:'none' models omit prompt and pass the source media instead.
| Name | Required | Description | Default |
|---|---|---|---|
| audio | No | Native audio. Omit to use the model default (usually on). | |
| model | Yes | Model id from list_models, e.g. dreamina-seedance-2-ref. Required — there is no default. | |
| aspect | No | Only values list_models reports for this model. | |
| audios | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| images | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| prompt | No | Sent to the provider VERBATIM — nothing rewrites it. Provider flags parsed out of prompt text (--seed, --cf, --wm) survive, so they work here. Omit entirely for models whose list_models.prompt is 'none' (upscale, remove-bg) — they take no text. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| videos | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| duration | No | Seconds. Only values list_models reports for this model. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| resolution | No | Only values list_models reports for this model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantive detail: no credits spent, no provider call, the returned fields (cost, balance, sufficientCredit), and the distinct behavior of transform models that accept no prompt. This is well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core price-without-committing statement, then conditional guidance. It is dense with several separate ideas packed in, slightly reducing scannability, but nearly every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the exact return fields and the decision they drive ('do not submit' when insufficient). It also covers the transform-model edge case that would otherwise cause a wrong invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds cross-parameter orchestration guidance — read list_models' `prompt` and `requires` fields before choosing which params to pass, and omit `prompt` for prompt:'none' models. It doesn't cover the workspace/run_id scoping nuances, which the schema handles.
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 ('Price a render WITHOUT creating it') and explicitly covers the media scope (video, image, audio). The negative framing immediately distinguishes it from the render_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Use this before any render_* tool so the user sees the price first' and adds a conditional branch ('if sufficientCredit is false, do not submit, tell the user'). It also names list_models as the prerequisite for transform models, giving a complete call sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_audioAInspect
Generate audio — a voice line, a sound effect, ambience or a music bed. SPENDS CREDITS. The prompt is sent to the provider VERBATIM. Returns a job id; call get_generation to follow it. The resulting URL can be passed into render_video as an audio reference on models that accept one. Some models TRANSFORM media instead of generating (upscale, remove-bg, face-swap): they take NO prompt at all. Call list_models first and read prompt ('required'|'optional'|'none') and requires — for prompt:'none' models omit prompt and pass the source media instead.
| Name | Required | Description | Default |
|---|---|---|---|
| audio | No | Native audio. Omit to use the model default (usually on). | |
| model | Yes | Model id from list_models, e.g. dreamina-seedance-2-ref. Required — there is no default. | |
| aspect | No | Only values list_models reports for this model. | |
| audios | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| images | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| prompt | No | Sent to the provider VERBATIM — nothing rewrites it. Provider flags parsed out of prompt text (--seed, --cf, --wm) survive, so they work here. Omit entirely for models whose list_models.prompt is 'none' (upscale, remove-bg) — they take no text. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| videos | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| duration | No | Seconds. Only values list_models reports for this model. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| resolution | No | Only values list_models reports for this model. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false. The description still adds real value beyond them: it warns SPENDS CREDITS, that the prompt is sent VERBATIM, that the call returns a job id, and that some models transform rather than generate. This is useful context but the annotation set already carries the mutation/open-world profile, so a 3 is appropriate.
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 what it does and the credit warning, then the flow, then the edge case. Every sentence carries actionable information despite the 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 13-param, costly, open-world generation tool with no output schema, the description covers purpose, cost, prompt fidelity, follow-up step, downstream use, and the transforming-model exception. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all 13 params and baseline is 3. The description nevertheless adds selection logic beyond the schema: which models require omitting `prompt`, and that prompt:'none' models need source media instead. It does not explain run_id, project, workspace or user_request semantics, so not a full 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?
States a specific verb and resource ('Generate audio') and enumerates the concrete subtypes (voice line, sound effect, ambience, music bed), which cleanly separates it from render_image and render_video siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: call list_models first and read `prompt`/`requires`, call get_generation to follow the job, pass the resulting URL into render_video. It also carves out the when-not case (prompt:'none' models that transform media and take no prompt).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_effectAInspect
Render a one-photo video effect from list_effects — SPENDS CREDITS. The effect's prompt is fixed and written server-side; you only choose the effect, the photo and the duration. Set preview:true for a costed dry run with no job, no credit spend, no provider call. It returns cost (credits), balance and sufficientCredit. Call it with preview:true before any paid render; if sufficientCredit is false, do not submit the paid render.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | An effect slug from list_effects, e.g. sky-fall. | |
| image | Yes | A photo URL, or an asset:// id returned by upload_asset. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). | |
| preview | No | Costed dry run — returns the credit price, creates no job, spends no credits. | |
| project | No | Optional. A Drama Studio film of the workspace being charged. | |
| duration | No | Clip length in seconds. | |
| workspace | No | Optional. A workspace id, or `personal` — same rule as render_video. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say non-readonly, non-idempotent), the description discloses the credit cost, that the prompt is fixed server-side, and precisely what preview:true suppresses (no job, no credit spend, no provider call). It also names the three fields returned by the dry run, which is the key behavioral contract for a billing-sensitive 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?
Four sentences, front-loaded with the highest-risk fact (credit spend) in caps, then the fixed-prompt constraint, then the preview escape hatch, then the return contract. Nothing is repeated from the schema verbatim and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, it correctly describes the preview return fields — but says nothing about what a paid render returns (job id? how to poll via get_generation/story_get_job?), which is the natural next question after submitting. For an 8-param, credit-spending, open-world tool that is a meaningful remaining gap, though the billing and dry-run guidance is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds real value by scoping the creative inputs to effect/photo/duration and by restating preview's cost semantics in operational terms. It does not clarify run_id, project, workspace, or user_request — those rely entirely on their schema text, and "same rule as render_video" in the schema is a cross-tool dependency the description never resolves.
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?
"Render a one-photo video effect from list_effects — SPENDS CREDITS" gives a specific verb + resource + scope, and immediately distinguishes this from render_video (multi-scene video), render_image (still), and preview_render (generic preview). The source of the `slug` (list_effects) is named in 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?
It explicitly prescribes the workflow — call with preview:true before any paid render — and gives a hard stop condition: "if `sufficientCredit` is false, do not submit the paid render." It also states what the caller does and does not control ("you only choose the effect, the photo and the duration"), so no when-to-use decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_imageAInspect
Generate an image — a product shot, a background, a character reference. SPENDS CREDITS. The prompt is sent to the provider VERBATIM. Returns a job id; call get_generation to follow it, which returns the finished image so it can be shown directly. The resulting URL can be passed straight into render_video as a reference, which is how you build an ad from a product photo you just made. Some models TRANSFORM media instead of generating (upscale, remove-bg, face-swap): they take NO prompt at all. Call list_models first and read prompt ('required'|'optional'|'none') and requires — for prompt:'none' models omit prompt and pass the source media instead.
| Name | Required | Description | Default |
|---|---|---|---|
| audio | No | Native audio. Omit to use the model default (usually on). | |
| model | Yes | Model id from list_models, e.g. dreamina-seedance-2-ref. Required — there is no default. | |
| aspect | No | Only values list_models reports for this model. | |
| audios | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| images | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| prompt | No | Sent to the provider VERBATIM — nothing rewrites it. Provider flags parsed out of prompt text (--seed, --cf, --wm) survive, so they work here. Omit entirely for models whose list_models.prompt is 'none' (upscale, remove-bg) — they take no text. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| videos | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| duration | No | Seconds. Only values list_models reports for this model. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| resolution | No | Only values list_models reports for this model. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read-only, open-world, non-idempotent write; the description adds the consequential facts annotations cannot: it SPENDS CREDITS, the prompt is sent VERBATIM with provider flags surviving, and the call is asynchronous (returns a job id, not an image). These are the details most likely to cause a wrong or wasted invocation.
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 purpose and the credit warning before anything else, then layers the job-id follow-up and model-selection caveat. It is dense and each clause carries information, though the final sentence is long and could be split for faster 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 13-parameter generation tool with no output schema, the description supplies the missing return-value contract (job id → get_generation → finished image shown directly) and the prerequisite discovery step. Nothing an agent needs to avoid a bad call appears absent.
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 cross-tool meaning: `model` must come from list_models and there is no default, and `prompt` must be omitted entirely for prompt:'none' models. The @name-to-@Image1 renumbering and workspace/credit precheck rules live in the schema rather than the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate an image') with concrete examples of output kinds, and distinguishes itself from siblings render_video, render_audio and get_generation by naming them and their relationship. It also flags that some models transform rather than generate, so an agent understands the full scope of the tool.
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 workflow: call list_models first and read `prompt`/`requires`; for prompt:'none' models omit `prompt` and pass source media instead. It also tells the agent the follow-up path (get_generation) and a downstream use (pass the URL into render_video to build an ad), which is exactly the when-and-with-what guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_videoAInspect
Render a video from a raw prompt with any model — the Creative Studio composer as a tool. SPENDS CREDITS. The prompt is sent to the provider VERBATIM, so this is the tool to use when you want exact control rather than a template clone. Returns a job id immediately; call get_generation to follow it. Some models TRANSFORM media instead of generating (upscale, remove-bg, face-swap): they take NO prompt at all. Call list_models first and read prompt ('required'|'optional'|'none') and requires — for prompt:'none' models omit prompt and pass the source media instead.
| Name | Required | Description | Default |
|---|---|---|---|
| audio | No | Native audio. Omit to use the model default (usually on). | |
| model | Yes | Model id from list_models, e.g. dreamina-seedance-2-ref. Required — there is no default. | |
| aspect | No | Only values list_models reports for this model. | |
| audios | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| images | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| prompt | No | Sent to the provider VERBATIM — nothing rewrites it. Provider flags parsed out of prompt text (--seed, --cf, --wm) survive, so they work here. Omit entirely for models whose list_models.prompt is 'none' (upscale, remove-bg) — they take no text. | |
| run_id | No | Optional. Your id for this agent run (1–64 of A-Z a-z 0-9 . _ : -). Stored on every job of the run so they can be found and filed together later. Use the same value for every call of one run. | |
| videos | No | Reference media. Each entry is either a plain URL, or {name, url} so the prompt can address it as @name — the server renumbers those to the @Image1/@Video1 form the provider reads, in the order given, so you never count positions yourself. | |
| project | No | Optional. A Drama Studio film id in the workspace being charged: the finished generation is added to that film's media pool (videos on its timeline, images/audio as references). Workspace generations only; checked before any credit is spent. | |
| duration | No | Seconds. Only values list_models reports for this model. | |
| workspace | No | Optional. The workspace to generate in. Only a workspace API key (Settings → Developer) can spend a workspace — this may only repeat that key's workspace id; omit it and the key's own scope is used. A personal key or a sign-in token stays personal (passing a workspace is refused). | |
| resolution | No | Only values list_models reports for this model. | |
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the call SPENDS CREDITS, that it is asynchronous ('Returns a job id immediately; call get_generation to follow it'), and that the prompt is passed VERBATIM with provider flags (--seed, --cf, --wm) surviving. It also warns that some models transform media rather than generate, which changes the call shape materially.
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 purpose, then cost, then the key verbatim semantic, then the follow-up call, then the routing caveat — a sensible escalation order. Capitalisation is used deliberately for the two facts an agent could get wrong (spending, no-prompt models); 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 13-parameter, credit-spending, async tool with no output schema, the description covers the return contract (job id, follow with get_generation), the model-selection prerequisite, and the empty-prompt edge case. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema baseline is already a 3. The description adds real meaning on top: `model` has no default and must come from list_models, and `prompt` must be omitted entirely for 'none' models. It also frames aspect/duration/resolution as list_models-derived rather than free-form, though it does not re-explain the media-reference `name` convention the schema covers.
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 a specific verb and resource ('render a video') and immediately scopes it as the raw-prompt, verbatim path, explicitly contrasting it with 'a template clone'. That lets an agent separate it from clone_template, render_image, and cinematic_ads_make_video 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 explicit routing: use this when you want exact control rather than a template; call list_models first and read `prompt`/`requires`; call get_generation to follow the job. It also states a when-not case — prompt:'none' models take no prompt and need source media instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_templatesARead-onlyIdempotentInspect
Search the Wandura ad-template catalog. Use this first to find a template to clone. Returns aspect and duration so you can tell the user what shape the ad will be.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text over title, subtitle, product, hook, setting | |
| limit | No | ||
| format | No | e.g. talking_head, unboxing, try_on | |
| industry | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, closed-world read, so the description need not re-establish that. It adds some value by disclosing partial return content ('aspect and duration'), but with no output schema the description should carry more of the return-shape burden (IDs, titles, pagination, rank/order) than it does.
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 short sentences, front-loaded with purpose, then usage, then return shape. Each sentence carries distinct information and there is no filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must cover return values, and it partially does. However, for a 4-param search tool with no required params and half the schema undescribed, an agent still lacks guidance on query semantics, defaults, and result volume.
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 only 50%, and the description says nothing about any of the four parameters. The bare 'limit' and 'industry' params are documented nowhere, and the description does not compensate by explaining search matching, format filtering, or result count behavior.
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 ('Search the Wandura ad-template catalog'), and clarifies its role relative to clone_template ('Use this first to find a template to clone'). It does not distinguish itself from other lookup siblings such as browse_library or get_template, so an agent must still infer the boundary.
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 ordering cue ('use this first') tied to a downstream action (cloning), which is real when-to-use guidance. It stops short of naming alternatives or exclusions, so it never says when to prefer browse_library or get_template instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_member_teamAIdempotentInspect
Put a member of an Enterprise workspace in a team (for example Learn AI, Photo, Fitness) so workspace reports split by team. Only the workspace Owner or an Admin, connected with their own Wandura sign-in (OAuth) that allows teams:write; API keys and workspace reporting keys are refused. The team is given by name: a name the workspace has no active team for makes a new team. A member's FIRST team also covers everything they did before; any later change counts from now on, so earlier reports never change. Every assignment is written to the workspace audit log. Returns userId, teamId, team and changed (false = they were already in that team). Find user ids with list_workspace_members.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team name, 1–60 characters, not "unclassified". Matched without regard to case. | |
| user_id | Yes | The member (a current member of the workspace). | |
| workspace_id | Yes | The workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only say non-read-only, idempotent, non-destructive. The description discloses the auth model and refused credential types, the side effect of auto-creating a team when no active team matches, the retroactive-vs-forward-only semantics of first and subsequent team changes, and that every assignment is audit-logged.
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 action, then prerequisites, then edge-case semantics, then return shape — a sensible order with no filler sentences. It is dense and reads as one long block, which slightly hurts scanability, but every clause carries information an agent needs.
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 compensates by naming the returned fields and explaining changed=false. Combined with the auth requirements, team-creation side effect, report-timing semantics, and audit logging, nothing material is missing for a 3-parameter mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds real meaning: the team is identified by name and a non-matching name creates a new team, and user_id must be obtained via list_workspace_members. It does not restate the length or case-insensitivity rules, which the schema already covers.
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: 'Put a member of an Enterprise workspace in a team', and immediately gives concrete examples of teams (Learn AI, Photo, Fitness) plus the reporting purpose. It is unmistakable against siblings like list_workspace_members, which it names as the id-lookup companion.
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 clear preconditions (Owner or Admin, own Wandura OAuth sign-in with teams:write) and explicitly rules out API keys and workspace reporting keys, which is effectively a when-not. It also routes the agent to list_workspace_members for user ids. No guidance on what to do when the assignment should be removed or reassigned, so it falls short of a full when/when-not/alternatives treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_add_episodeAInspect
Add an episode to the end of a Story mode project. Free. Send script (the episode's screenplay) and Wandura saves it and splits it into scenes in the background — the result says state 'splitting'; read it with story_get_episode until state is 'ready' (about one to two minutes). Or send scenes you already split (ready at once), or neither for an empty episode. One scene is one video clip — do not split a scene into shots.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Empty = taken from the script, or 'Episode N'. | |
| scenes | No | Scenes you already split. Do not send together with script. | |
| script | No | The episode's screenplay. Do not send together with scenes. | |
| logline | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic mutation profile (readOnlyHint=false, idempotentHint=false, openWorldHint=true). The description adds the operation is free, that it is asynchronous with an observable 'splitting' → 'ready' state transition taking one to two minutes, and the concrete polling instruction — all behavior an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, then the three input modes and the polling loop are delivered compactly. Every clause carries information — the cost note, the state machine, and the scene-granularity warning all earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the returned `state` field and how to advance past 'splitting'. It omits what `logline` is for and does not state the result of failure or duplicate-title cases, but for an async append tool it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, the description carries real weight: it explains what `script` does downstream (saved and split into scenes), what `scenes` means (pre-split, ready immediately), and reinforces mutual exclusivity. It leaves `logline` unexplained (the schema leaves it bare too), which is the only gap.
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+placement: 'Add an episode to the end of a Story mode project.' This cleanly separates it from siblings like story_update_script or story_create_project, and the appended-at-the-end semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing for each input mode — send `script` to have it split in the background, send `scenes` if already split, send neither for an empty episode — and tells the agent to poll with story_get_episode until state is 'ready'. It does not name a sibling alternative for editing existing episodes (e.g. story_update_script), so it falls just short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_choose_takeAIdempotentInspect
Choose which finished video take of a scene goes into the episode (same as 'Use in episode' in Wandura). Free and reversible; pass job_id: null to clear.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| scene_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by disclosing that the action is free and reversible, and that a null job_id clears the selection. Annotations already cover non-destructiveness and idempotency, so this is additive context rather than the full burden, but it still omits what happens to previously selected takes or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly packed sentence plus a short clause; the core action is front-loaded and every phrase (UI equivalence, cost, reversibility, clearing) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two simple parameters, no output schema, and annotations covering the safety profile, the description supplies almost everything an agent needs to invoke it correctly. Minor gap: no mention of what the tool returns or any error/edge conditions around an invalid job_id.
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 0%, so the description must carry the load. It explains the null-clearing semantics of job_id, which is genuinely valuable, but says nothing about scene_id beyond its role being inferable from the name, leaving half the parameters underspecified.
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 precise verb+resource: choosing which finished video take of a scene goes into the episode, and anchors it to the equivalent UI action ('Use in episode' in Wandura). This clearly distinguishes it from sibling tools like story_set_scene_assets or story_refresh_scene, which operate on different aspects of a scene.
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?
Implies the context of use (selecting the take that goes into the episode) and gives the clearing case explicitly ('pass job_id: null to clear'). It does not name alternative tools or state when-not to use it, so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_create_assetAInspect
Add a character, background or prop to a Story mode project — for ones the script breakdown did not find. Free. With image_url the picture becomes its reference at once (image_url must be a URL returned by upload_asset). Without it the asset has no picture yet: price asset_images with story_quote to have Wandura draw one, or set one later with story_set_asset_image. A name that already exists is refused — edit that asset instead.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| identity | No | Short phrase added to every prompt that uses it. Default = the name. | |
| image_url | No | Optional reference picture: a URL returned by upload_asset. | |
| project_id | Yes | ||
| description | No | Looks, age, clothing, mood — what its picture is drawn from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write (readOnlyHint=false), non-idempotent, non-destructive, so the description's job is to add context — and it does: the operation is free, image_url must be a URL from upload_asset, a duplicate name is refused, and an asset without image_url has no picture until priced or set. It stops short of describing what is returned or whether the project must already exist, but this is well above what the annotations carry.
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 purpose, then cost, then the two image paths, then the error case — a sensible ordering. Fairly dense with clauses, but every sentence carries an operative fact; nothing is padding.
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 still covers cost, idempotency-adjacent behavior, parameter provenance, and the downstream alternatives for getting an image. The remaining gap is what a successful create yields (e.g. the new asset id) and any project-state prerequisite.
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 only 50%, so the description must compensate, and it does for the highest-risk parameter: image_url's provenance (must come from upload_asset) and immediate effect. It also enumerates the three kind values inline. identity and description are left to the schema, and project_id/name receive no elaboration.
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 (Add) and resource (character/background/prop) scoped to Story mode projects, and the clause 'for ones the script breakdown did not find' separates it from story_update_asset and the script-derived asset flow. An agent can pick this out from siblings 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?
Explicit routing: use with image_url for an existing reference picture, without it price the drawing via story_quote, or set an image later with story_set_asset_image. It also names the exclusion — a duplicate name is refused and you should edit that asset instead — which is exactly the when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_create_projectAInspect
Create a Wandura Story mode project from a screenplay or story text and start the script breakdown (characters, places, props, episodes, scenes). Free, no credits. The breakdown takes a few minutes; then call story_get_project. Story mode flow: create project from a script → wait for the breakdown → asset pictures → storyboards → scene videos → choose takes. Paid steps always go story_quote → the person approves in Wandura → story_run.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| script_text | Yes | The full screenplay or story text. | |
| collection_id | No | Optional folder. | |
| output_language | No | Language for the breakdown and dialogue, e.g. en, vi. Defaults to en. | |
| target_episode_count | No | Optional. Do not combine with target_episode_duration_minutes. | |
| target_episode_duration_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, but the description adds non-obvious behavior: the call is free/no-credits, the breakdown is asynchronous and takes minutes, and downstream paid steps require a human approval gate. It does not say what state the project is left in on partial failure or any rate limit, so it stops short of 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?
Front-loaded with the core action and cost, then the timing caveat, then the pipeline, then the payment rule. Every sentence carries information, though the pipeline and payment sentences make it slightly long for a creation 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?
With no output schema, the description correctly points to story_get_project for retrieving results and explains the async delay so the agent does not expect an immediate payload. Combined with annotations and a mostly-covered schema, an agent has enough to invoke it correctly; minor gaps remain around failure/partial-state 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 67%, so the schema already documents script_text, collection_id, output_language, and the episode-targeting options. The description only implicitly maps 'screenplay or story text' to script_text and adds nothing on collection_id, output_language, or the mutual exclusivity of the two target_episode_* parameters. 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 a specific verb and resource ('Create a Wandura Story mode project from a screenplay or story text') plus the immediate side effect ('start the script breakdown'), and names the concrete artifacts produced (characters, places, props, episodes, scenes). The 'Story mode' qualifier cleanly separates it from cinematic_ads_create_project among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit next step ('The breakdown takes a few minutes; then call story_get_project') and lays out the whole Story-mode pipeline (create → wait → asset pictures → storyboards → scene videos → takes). It also flags the paid path ('story_quote → the person approves in Wandura → story_run'), so an agent knows what to call and in what order after this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_export_episodeAIdempotentInspect
Assemble an episode into one video: the chosen take of every scene, in order, with the episode's music. Free. Every scene needs a finished chosen take, otherwise the call is refused with the scenes that are missing one (story_get_episode shows them; a scene's first finished take is chosen automatically). Runs in the background — poll story_get_export every 20-30 seconds until state is 'done', then share the url.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_id | Yes | ||
| project_id | Yes | ||
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses cost ('Free'), that execution is asynchronous/background with a concrete polling cadence, the exact failure mode and its payload (missing scenes are returned), and the implicit take-selection side effect. The idempotentHint and destructiveHint=false are consistent with the described behavior of assembling without altering takes.
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 dense sentences ordered by importance: what it does, cost, prerequisite/failure, then the async follow-up. No filler and nothing repeated from the schema.
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 still tells the agent where the result appears (poll story_get_export, then share the url) and how failure looks. Minor gap: it does not describe the immediate return payload of this call (e.g. a job/export id to poll with).
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 only 33% — user_request is thoroughly documented in the schema, but project_id and episode_id carry no schema descriptions. The description references 'episode' contextually but adds no format, ownership, or relationship detail for either UUID parameter, so it does not fully compensate for the coverage gap.
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 (assemble an episode into one video) plus the exact composition rule: chosen take of every scene, in order, with the episode's music. This is clearly distinguishable from story_get_export (status polling) and from scene-level render tools in the sibling list.
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 the precondition explicitly (every scene needs a finished chosen take), tells what happens when it is unmet (refused with the list of missing scenes), names story_get_episode as the way to inspect them, and explains the automatic first-take selection. It also prescribes the follow-up loop: poll story_get_export every 20-30s until state is 'done'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_get_episodeARead-onlyIdempotentInspect
Read one episode of a Story mode project: every scene (one scene = one video clip) with its cast, reference assets, storyboard state (and whether it is outdated), video takes with status, and the chosen take. Free. Get episode ids from story_get_project.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds genuinely new context: cost ('Free') and a detailed enumeration of the returned structure, including the non-obvious 'storyboard state (and whether it is outdated)' and take-status semantics.
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 sentences with the core read scope front-loaded and the sourcing hint trailing. Every clause adds information; nothing is redundant 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 the return shape, and it does so concretely (scenes as clips with cast/assets/storyboard/takes/chosen take). Combined with annotations covering safety and the sibling pointer for ids, an agent has what it needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither param is documented in the schema, so the description carries the burden. It explains where episode_id comes from (story_get_project) but says nothing about project_id's origin or the uuid format, leaving half the parameters under-specified.
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 (Read) and resource (one episode of a Story mode project) and enumerates the returned contents (scenes, cast, reference assets, storyboard state, video takes, chosen take). This cleanly separates it from story_get_project, story_list_projects, and story_get_script, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a prerequisite chain: episode ids must come from story_get_project, and notes the call is free. It gives clear context for when to use it but does not name an exclusion or alternative (e.g., when to prefer story_get_project alone).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_get_exportARead-onlyIdempotentInspect
Status of the latest assembled video of an episode: none, assembling, done (with a download url) or error. Free. The url expires after a while; read again for a fresh one.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely new operational context: the call is free, the download url expires, and re-reading yields a fresh url. That is real behavioral value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the core purpose and state enumeration come first, followed by the cost and url-expiry caveat. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small polling tool with no output schema, the description covers the return states, the costly/cheap aspect, and the url lifetime. The main omission is that it never links the polling flow to the sibling that starts the export, but nothing needed to invoke the call 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 description coverage is 0% and the description never mentions project_id or episode_id, so it contributes nothing about the two required parameters. The names are largely self-explanatory UUIDs, which keeps this from being a 1, but for a 0%-coverage schema the description should have identified which episode is being polled.
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: retrieve the status of the latest assembled video for an episode, and enumerates every possible state (none, assembling, done with url, error). An agent can distinguish this polling tool from story_export_episode, which presumably triggers the assembly.
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: it is a status reader you poll, and 'read again for a fresh one' hints at repeat invocation. There is no explicit statement that it should be called after story_export_episode, nor any when-not guidance against alternatives such as story_get_job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_get_jobARead-onlyIdempotentInspect
Status of one Story mode job (asset picture, storyboard or scene video): queued, running, done (with url) or error. Free. Videos take a few minutes — poll every 15-30 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so safety is covered; the description adds genuinely new behavior: no cost ('Free'), latency expectation for video jobs, and the polling cadence. It even notes that 'done' carries a url, hinting at the return payload for a tool with no output schema. Exact error payload shape is the only omission.
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, front-loaded with what the tool returns before the practical polling advice. Every clause carries information (states, cost, latency, cadence) and nothing is repeated from the annotations or schema.
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-only status poll with no output schema, the description covers the status vocabulary, the presence of a url on completion, cost, and timing. Only the structure of the 'error' state is unexplained, which is a minor gap in an otherwise sufficient definition.
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 0% for the single job_id parameter, but the schema itself supplies the uuid format. The description only implies that the id refers to 'one Story mode job' and adds no syntax, sourcing, or format detail beyond that, so it neither compensates for nor worsens the sparse 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?
Names a specific verb+resource ('Status of one Story mode job'), scopes it to Story mode, and enumerates the possible job kinds (asset picture, storyboard, scene video) and states (queued/running/done/error). An agent can distinguish this from story_run, story_get_export, or story_get_episode 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 concrete operational guidance — it is free, videos take a few minutes, and the agent should poll every 15-30 seconds — which tells it exactly when and how often to call this after kicking off a job. It does not name alternatives or state when not to use it, 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.
story_get_projectARead-onlyIdempotentInspect
Start here for an existing project. Returns progress — is the script still being analysed, how many assets lack a picture, which scenes have storyboards and videos — plus next_step (wait_for_script_breakdown, fix_script, generate_asset_images, generate_storyboards, generate_scene_videos, choose_takes, done) and the episode ids. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond them: the full next_step state machine (wait_for_script_breakdown through done), which tells the agent this tool drives workflow routing, and "Free" which discloses there is no generation cost. It does not describe rate limits or auth, 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?
Front-loaded with the entry-point cue, then a dense enumeration of returned fields and an inline next_step enum. No filler sentences; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by listing the returned progress signals, the next_step values, and episode ids. It leaves the exact shape of the response loosely defined and says nothing about the project_id format, but for a single-parameter status tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single project_id parameter, so the description technically carries the burden. However project_id is trivially named and the schema supplies format=uuid and required status; "for an existing project" only loosely implies the id must reference a real project. Marginal value over the schema, so 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Returns progress" for an "existing project") and enumerates exactly what comes back: script analysis status, asset/picture gaps, scene storyboard and video state, plus next_step and episode ids. This is far more concrete than a generic getter and distinguishes it from story_get_job and story_get_episode, though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Start here for an existing project" is an explicit entry-point instruction that routes the agent to this tool first before the finer-grained story tools. It stops short of naming alternatives or when-not-to-use conditions, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_get_quoteARead-onlyIdempotentInspect
Check whether the user approved, declined or let a quote expire, and after a run, which jobs it started. Statuses: pending, approved, declined, expired, running, done, failed. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds real value on top: the full status vocabulary (pending, approved, declined, expired, running, done, failed) and the 'Free' cost signal, which the structured fields do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the core purpose; the status list is compact and the 'Free' fragment is informative despite being terse. No wasted 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?
With no output schema, the description usefully enumerates the status values an agent will receive, and annotations cover the safety profile. The only real gap is not explaining where quote_id comes from or its format.
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 0%, so the description technically should compensate, but it says nothing about quote_id. The single parameter is self-evident (a UUID quote identifier), so the gap is minor rather than damaging.
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 specific verb ('Check') and resource ('a quote'), plus the distinct statuses it reports. It is clearly a read tool, distinguishable by name from story_quote (create) and story_run (execute), though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'after a run, which jobs it started' hints that this follows story_run, but there is no explicit when-to-use or when-not-to-use guidance and no named alternative. The context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_get_scriptARead-onlyIdempotentInspect
Read the analysed script of a Story mode project: title, logline, synopsis, genre and tone, and the episode outline. Pass episode (1-based) to get that episode's scenes with beats and the original dialogue. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| episode | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely new context by noting the call is "Free" (no credit cost) and by disclosing the shape of what comes back, including "beats and the original dialogue" for episode mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The scope/contents sentence is front-loaded and the parameter behavior follows immediately, with the cost hint appended compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating returned fields for both modes, and annotations handle the safety profile. An agent has enough to decide whether to call it and what it will get back.
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 0%, so the description must carry the load. It documents the only non-obvious parameter well — episode is 1-based and changes the response from an outline to scene-level beats and dialogue. project_id is left to context ("a Story mode project"), which is a minor residual gap.
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 specific verb and resource ("Read the analysed script of a Story mode project") and then enumerates the exact contents returned (title, logline, synopsis, genre/tone, episode outline), which lets an agent separate it from story_get_project, story_get_episode, and story_update_script. The two-mode behavior (full script vs. episode-level scenes) is stated up front.
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 clearly states when to supply the optional parameter: "Pass episode (1-based) to get that episode's scenes with beats and the original dialogue," which tells the agent how to switch modes. It does not name alternative tools for related needs (e.g., story_get_episode) or state exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_list_assetsARead-onlyIdempotentInspect
List a Story mode project's assets (characters, backgrounds, props) with their descriptions and whether each has a picture yet. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuinely new behavior information beyond those hints: the operation is free (no credit cost) and it reports picture-status per asset. It omits pagination/ordering behavior for a potentially long list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and scope, with the return contents and the cost note appended — every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states what comes back (asset descriptions and whether each has a picture). For a simple read tool whose annotations already carry safety and idempotency, that is nearly complete; list size/ordering is the only unstated detail.
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?
Only one parameter exists and schema coverage is 0%, so the schema contributes nothing about project_id. The description partially compensates by scoping it to 'a Story mode project', disambiguating from the cinematic-ads project IDs used by sibling tools, but it adds no format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) plus the resource (assets of a Story mode project) and enumerates the asset kinds it returns (characters, backgrounds, props). This clearly separates it from story_create_asset / story_update_asset / story_set_asset_image, which mutate the same resource. It stops short of naming a sibling to use instead, so it's a strong 4 rather than 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?
Usage is only implied: an agent can infer you call this to enumerate a project's assets before creating or updating them. The 'Free' tag gives a real cost-based reason to prefer this over paid generation tools, but there is no explicit when-to-use or when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_list_projectsARead-onlyIdempotentInspect
List the user's Wandura Story mode projects (films made from a script), newest first, with a link to open each one. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 still adds value beyond them: results are ordered newest first, each entry carries a link to open the project, and the operation is Free — cost is a real selection signal for an agent. It does not mention result limits or pagination, keeping it short of 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?
One sentence, front-loaded with the verb and resource, with the qualifying detail and the cost note appended rather than buried. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool with no output schema, the description covers scope, ordering, result contents, and cost — enough to call it correctly. The only minor omission is whether the list is bounded or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema cannot be improved upon; per the baseline this is a 4. The description correctly implies there are no filter arguments, though it does not explicitly say filtering is unavailable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (Story mode projects), and the parenthetical '(films made from a script)' defines the domain precisely. It is clearly separable from cinematic_ads_list_projects and from story_get_project, which retrieves a single project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description but never stated: there is no explicit 'use this when you need to discover a project id before calling story_get_project', and no exclusions or prerequisites. A capable agent can infer the intent, but the definition does not do the routing work for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_quoteAInspect
Price a paid step and ask the user to approve it in Wandura. Free; runs nothing. action: asset_images (asset_ids, or omit for every asset missing a picture), storyboard (scene_ids, or omit for every scene missing one or outdated), scene_video (scene_ids required; variants 1-4 default 1; optional model_id, duration_s 10-30, reference_roles). Returns quote_id, the total in credits and approve_url — give the user that link and wait; then poll story_get_quote and call story_run once it is approved. Call this before every paid story step. total_cost is in credits; balance_at_quote is the balance then, null if unread. If balance_at_quote is a number below total_cost, tell the user.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| model_id | No | ||
| variants | No | ||
| asset_ids | No | ||
| scene_ids | No | ||
| duration_s | No | ||
| project_id | Yes | ||
| reference_roles | No | What an attached reference image plays in these takes, keyed by asset id (e.g. a second look of a character that is another asset). Up to 60 characters; empty drops it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety/identity profile (non-readonly, non-idempotent, non-destructive); the description adds the key behavioral facts an agent cannot infer: it is free and executes nothing, it blocks on human approval, and it returns quote_id, total_cost, approve_url and balance_at_quote, with an instruction to warn the user when balance_at_quote < total_cost. That is materially beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the free/no-execution guarantee, then the action-specific parameters, then the return-and-wait workflow. It is dense and slightly run-on, but each sentence carries usable information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return fields, the approval loop, and the balance check, and pairs each action enum value with its relevant parameters. For an 8-parameter, non-idempotent, human-gated pricing tool this covers everything needed to invoke and follow through 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 description coverage is only 13%, so the description carries the load and mostly does: it maps asset_ids and scene_ids to each action's semantics, including the 'omit for every asset missing a picture / every scene missing one or outdated' defaults, and states variants 1-4 default 1 and duration_s 10-30. model_id and reference_roles get only a name-drop (the schema documents reference_roles itself), so a small gap remains.
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 ('Price a paid step and ask the user to approve it') and immediately delimits it from the adjacent tools: 'Free; runs nothing' plus the explicit handoff to story_get_quote and story_run. An agent can distinguish it from sibling quote/run tools 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 an explicit rule ('Call this before every paid story step') and the full downstream sequence: give the approve_url to the user and wait, then poll story_get_quote and call story_run once approved. Alternatives and their triggering conditions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_refresh_sceneAIdempotentInspect
Bring one scene up to date with the latest script after story_update_script. Free. Refused once the scene has a video.
| Name | Required | Description | Default |
|---|---|---|---|
| scene_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover mutation/idempotency (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds two things they do not: the operation is free, and it is rejected once the scene has a video. It still does not say what state the scene ends in (e.g. whether a re-render is required), which is the main remaining behavioral gap.
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 short sentences, each load-bearing: purpose, cost, failure precondition. Nothing is repeated and the purpose leads.
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 one-parameter mutation with no output schema, the description covers purpose, cost and the refusal condition. It does not describe the result of the refresh or the follow-up workflow (e.g. re-rendering or re-generating the scene's video), leaving the agent to infer what to do next.
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 0% for scene_id, so the description carries the burden but adds no meaning beyond the name. Since scene_id is a self-explanatory UUID, the gap is small, but the description offers no hint about where to obtain a valid scene id.
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 with explicit scope: 'Bring one scene up to date with the latest script.' It also names the sibling it depends on (story_update_script), letting an agent separate it from script-level and project-level tools 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 sequencing rule ('after story_update_script') and an explicit exclusion ('Refused once the scene has a video'), which tells the agent both when this is valid and when it will fail. It does not name an alternative tool for the cases it excludes, so it falls just short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_runAIdempotentInspect
Run a quote the user has approved in Wandura. This spends their credits. Refused while pending or if declined, expired, or the price went up since approval. Safe to call twice — a quote runs once. Follow the started jobs with story_get_episode or story_get_job.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | ||
| user_request | No | The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint=false, idempotentHint=true, openWorldHint=true), but the description adds traits annotations cannot express: this operation spends the user's credits, it has approval-state preconditions that may cause rejection, and it initiates asynchronous work rather than returning the result. That is exactly the extra behavioral context an agent needs before invoking a paid mutation.
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, front-loaded with the primary action and the cost warning, then preconditions, then idempotency, then follow-up. Every sentence carries actionable information with no padding.
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 paid, async, no-output-schema mutation this covers cost, refusal conditions, idempotency, and how to track the resulting jobs. It stops short of stating what the call itself returns (presumably a job identifier), which an agent must infer from the follow-up instructions.
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 50%: user_request is fully documented in the schema, while quote_id is undocumented there. The description adds only indirect meaning for quote_id ('a quote the user has approved'), implying it originates from the approval flow, but gives no format or sourcing detail beyond the schema's uuid type.
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 concrete verb and resource ('Run a quote the user has approved in Wandura') and scopes it precisely against the sibling quote tools by requiring prior approval. An agent can distinguish it from story_quote and story_get_quote without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions for refusal ('pending or if declined, expired, or the price went up since approval') and explicit routing to the follow-up tools story_get_episode and story_get_job. It also states the retry rule ('Safe to call twice — a quote runs once'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_set_asset_imageAIdempotentInspect
Set an asset's reference picture from an image the user gave you. Free — nothing is drawn. The old picture stays in its version history. image_url must be a URL returned by upload_asset. Every storyboard and scene video that features the asset uses this picture.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | ||
| image_url | Yes | A URL returned by upload_asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the old picture is preserved in version history (reversibility), the operation costs nothing and generates nothing, and the change propagates to every storyboard and scene video featuring the asset (blast radius). Those are exactly the traits an agent cannot infer from readOnlyHint/destructiveHint/idempotentHint alone.
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?
Five short sentences, each carrying distinct information (what, cost, reversibility, precondition, downstream effect), with the core action front-loaded. There is no filler or 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 two-parameter mutation with no output schema, the description covers purpose, precondition, side effects, and propagation. Only the response shape is unstated, which is a minor gap given the tool's simplicity.
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?
At 50% schema coverage, the description reinforces the image_url constraint but largely repeats what the schema already says, and asset_id is not explained beyond being 'an asset's' identifier. Baseline 3 is appropriate since the schema plus the first sentence together cover both parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: set an asset's reference picture, and immediately clarifies it is a metadata assignment rather than a generation ('Free — nothing is drawn'). That line also implicitly distinguishes it from sibling generation tools like render_image or cinematic_ads_make_images.
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 (the image must come from the user and its URL must be one returned by upload_asset), which routes the agent to the right upstream sibling. It stops short of explicit exclusions such as when to use story_update_asset instead, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_set_scene_assetsAIdempotentInspect
Choose which assets (reference pictures) a scene's storyboard and video are made from. Pass asset_ids: null to go back to what the script says. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| scene_id | Yes | ||
| asset_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower, and the description still adds value: 'Free' discloses cost behavior (no credits consumed) and the null case discloses a safe, reversible reset. It omits whether changing assets triggers regeneration of an existing storyboard/video.
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 short sentences, each earning its place: effect on storyboard/video first, then the reset path, then cost. Front-loaded and free of 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 two-parameter mutation with no output schema, the description covers the essential call semantics, but it leaves open an agent-relevant question: whether replacing a scene's assets invalidates or re-triggers already-generated storyboard/video output. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameters, and it does explain asset_ids (reference pictures) and its null sentinel meaning well. However, it says nothing about the maxItems=24 constraint, ordering/priority semantics of the list, or scene_id, leaving real gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Choose which assets ... a scene's storyboard and video are made from') and clarifies what an 'asset' is (reference pictures), which separates it from generic siblings like story_list_assets. It does not explicitly contrast itself with the close-sounding story_set_asset_image, so it stops short of full sibling disambiguation.
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 one concrete usage instruction ('Pass asset_ids: null to go back to what the script says'), which is genuinely useful for the reset path, but offers no guidance on when to prefer this over story_set_asset_image or story_update_asset. Usage is implied from context rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
story_update_assetAIdempotentInspect
Edit an asset's name, description or identity phrase. The description is what its next picture is drawn from, so edit before generating. Free; does not redraw anything.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| asset_id | Yes | ||
| identity | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the mutation and safety profile are covered structurally. The description adds two genuinely new facts — that the call is free and does not trigger a redraw — but says nothing about partial vs. full update semantics or what happens to omitted fields. With annotations carrying the safety load, this is a modest addition.
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 short sentences, no filler, with the core action front-loaded and the cost/non-redraw caveat last. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool whose annotations already cover idempotency and non-destructiveness, the description covers what is edited, when to edit it, cost, and the absence of side effects. The remaining gap is update semantics (are omitted fields preserved?) and no mention of the required ID, but overall it is complete enough to call 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 description coverage is 0%, so the description carries the burden and does partially compensate by naming three of the four editable fields (name, description, identity). However it omits the required asset_id entirely and adds no format, length, or partial-update semantics for any parameter, leaving real gaps.
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 ('Edit') and resource ('asset') and enumerates the editable fields (name, description, identity phrase), which makes it distinguishable from story_create_asset and story_set_asset_image. It does not name a sibling alternative explicitly, 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?
Gives a clear conditional: the description feeds the next picture, so edit before generating — useful ordering guidance for an agent. It offers no explicit exclusions or named alternative tools, so it is clear context rather than 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.
story_update_scriptAInspect
Replace a Story mode project's script and analyse it again (a few minutes). Free. Nothing already made is deleted; storyboards and videos of changed scenes are marked outdated. Tell the user what you changed.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| script_text | Yes | ||
| output_language | No | ||
| target_episode_count | No | ||
| target_episode_duration_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), it discloses the time cost ('a few minutes'), the cost ('Free'), and crucially the mutation semantics: nothing is deleted but storyboards/videos of changed scenes are marked outdated. This directly explains how the non-destructive hint actually manifests.
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, front-loaded sentences with no filler; the core action leads and the cost/side-effect caveats follow. The closing 'Tell the user what you changed' is a useful behavioral instruction rather than padding, so structure serves the agent well.
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?
Behavioral context is strong for a mutation tool with no output schema (time, cost, side effects all covered), but with 5 parameters at 0% schema coverage the definition omits any explanation of the three optional parameters, leaving an agent unable to use them confidently.
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 0% and the description names no parameters. The word 'script' loosely connects to script_text, but output_language, target_episode_count, and target_episode_duration_minutes are entirely undocumented in both schema and description, so optional inputs are opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Replace a Story mode project's script') plus the follow-on effect ('analyse it again'), which is unambiguous and readily separable from siblings like story_get_script or story_refresh_scene. An agent knows exactly what operation this performs.
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 by the name and description (rewrite an existing Story project's script), but there is no explicit when-to-use or when-not guidance, nor any routing to alternatives such as story_refresh_scene for scene-only changes. Adequate but leaves selection logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_assetAInspect
Put a local image, video or audio file where a render can reach it, and optionally keep it in your library. Give it a path and the file is read and uploaded for you. Returns a url you can pass straight to render_video. Add saveAs to keep it — otherwise the url works but nothing lists it later. Max 50 MB. Free; uploading costs no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which library to keep it in. | element |
| path | No | Local file path. Works when the server runs on the user's machine (Claude Code, Cursor). Preferred over contentBase64. | |
| saveAs | No | Name to keep it under in your library, so browse_library finds it next time. | |
| contentType | No | e.g. image/jpeg. Guessed from the path extension when you pass path. | |
| contentBase64 | No | Raw base64, no data: URI prefix. For clients with no local filesystem, such as claude.ai. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only mark this as a non-read-only, non-idempotent, non-destructive write) by disclosing the 50 MB size cap, the cost profile (free, no credits), the ephemeral-vs-persistent consequence of `saveAs`, and the shape of the result. These are exactly the traits annotations cannot express.
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 earns its place: capability, mechanics of `path`, the return value's use, the persistence toggle, and two hard limits (size, cost). The core capability is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent the return value (a URL usable in render_video), the size ceiling, and the cost, which is enough to invoke this 5-parameter tool correctly. Nothing call-critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: `path` causes the server to read and upload the file for you, and `saveAs` controls whether the asset is discoverable later. `kind` and `contentType` are left 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?
States a concrete verb and resource — put a local image/video/audio file where a render can reach it — and names the downstream consumer (render_video) and the library concept, which separates it from the render_* siblings and from browse_library. An agent can tell what it does and what it produces (a URL) 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?
Gives explicit conditional guidance for `saveAs` (add it to persist, omit it and the URL still works but nothing lists it later) and ties the output to render calls. It does not explicitly compare `path` vs `contentBase64` in the description, though the schema covers that choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_resultARead-onlyIdempotentInspect
Wait for a generation or a Cinematic Ads project that is still being made, instead of asking again and again: reads it every few seconds until it is done (or failed), at most 50 s per call, then answers what get_generation (jobId) or cinematic_ads_get_project (project_id) answers. Still being made when the time is up: call it again. Waiting makes and charges nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | A generation's job id (from render_*, render_effect, clone_template or get_generation). | |
| project_id | No | A Cinematic Ads project id, instead of jobId. | |
| timeout_seconds | No | At most this long; default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds real behavior: poll interval ('every few seconds'), per-call ceiling ('at most 50 s'), result parity with the two get tools, the retry requirement, and the cost fact that 'Waiting makes and charges nothing.' That last point is decision-relevant and appears nowhere in structured data.
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 purpose and tightly scoped, but the opening sentence is a long run-on with nested parentheses ('(or failed)', '(jobId)', '(project_id)') that slows parsing. Nearly all content earns its place; only the packing is suboptimal.
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 everything needed for a polling wrapper: what it returns (identical to the two get tools, so no output schema is needed), the time budget, the retry loop, and that it is free. Nothing an agent must know before calling 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 baseline is 3; the description still adds meaning by pairing each id with the tool whose output it returns and by stating the 50-second per-call ceiling for timeout_seconds. The mutual exclusivity of jobId/project_id is already in the schema, so the gain is modest rather than decisive.
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 (wait/poll) and resource (a generation or Cinematic Ads project), and explicitly maps each input to the retrieval tool it mirrors: get_generation(jobId) and cinematic_ads_get_project(project_id). That mapping alone distinguishes it from every sibling in the list.
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 the selecting condition ('still being made') and the alternative it replaces ('instead of asking again and again'), plus the continuation rule: 'Still being made when the time is up: call it again.' An agent knows both when to enter the loop and how to exit it.
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.
7 tool updates
- Added
get_usage_summary - Added
get_workspace_budget - Added
list_credit_transactions - Added
list_generation_events - Added
list_services - Added
list_workspace_members - Added
set_member_team
1 tool update
- Added
wait_for_result
2 tool updates
- Added
ad_breakdown - Added
ad_breakdown_get
5 tool updates
- Changed
cinematic_ads_create_project1 field changed- changed
Input schema / properties / template_id / descriptionPrevious value: -"Start from one of the caller's saved templates (cinematic_ads_list_templates)."New value: +"Start from one of the caller's saved templates (cinematic_ads_list_templates). A template with `video` brings its original ad, analysis and cast: the project starts analysed (status ready, no analysis to pay), named after the template unless a title is given — go straight to the assets."
- Added
cinematic_ads_duplicate_project - Changed
cinematic_ads_export1 field changed- changed
Input schema / properties / options / descriptionPrevious value: -"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight|karaoke (karaoke: white words, the one being said lit yellow, word by word), position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 in tenths (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill), language (write the captions in another language than the one spoken, e.g. \"vi\"; translated at build time)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults. A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving \"LangLa\", medium speed), so send only what the user asked to change (e.g. {\"watermark\": {\"speed\": \"fast\"}} or {\"watermark\": {\"enabled\": false}})."New value: +"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight|karaoke (karaoke: white words, the one being said lit yellow, word by word), position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 in tenths (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill), language (write the captions in another language than the one spoken, e.g. \"vi\"; translated at build time)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults — or, for a project made with Duplicate or from a video template, the choices its source last built with (a whole section left out takes those). A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving \"LangLa\", medium speed), so send only what the user asked to change (e.g. {\"watermark\": {\"speed\": \"fast\"}} or {\"watermark\": {\"enabled\": false}})."
- Changed
cinematic_ads_fix_moment1 field changed- changed
Input schema / properties / price_only / descriptionPrevious value: -"Only return the price in credits and the range that would change; start nothing, spend nothing."New value: +"Only return the price in credits ({cost}) and the range that would change; while video parts are on sale it also returns listCost, the regular price before the discount. Start nothing, spend nothing."
- Changed
cinematic_ads_make_video1 field changed- changed
Input schema / properties / price_only / descriptionPrevious value: -"Only return the price in credits; start nothing, spend nothing."New value: +"Only return the price in credits ({cost}); while video parts are on sale it also returns listCost, the regular price before the discount. Start nothing, spend nothing."
1 tool update
- Changed
story_quote1 field changed- added
Input schema / properties / reference_rolesAdded value: +{ + "additionalProperties": { + "maxLength": 60, + "type": "string" + }, + "description": "What an attached reference image plays in these takes, keyed by asset id (e.g. a second look of a character that is another asset). Up to 60 characters; empty drops it.", + "maxProperties": 24, + "type": "object" +}
5 tool updates
- Changed
cinematic_ads_fix_moment1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
cinematic_ads_make_images1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
cinematic_ads_make_video1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
story_export_episode1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
story_run1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
5 tool updates
- Changed
clone_template1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
render_audio1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
render_effect1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
render_image1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
- Changed
render_video1 field changed- added
Input schema / properties / user_requestAdded value: +{ + "description": "The user's ORIGINAL words that led to this render — verbatim, not rewritten, summarised or translated. Stored with the job for quality review; never sent to the provider. Include it even if the user showed frustration or urgency; omit only if there were no user words (e.g. an automated step).", + "type": "string" +}
1 tool update
- Changed
cinematic_ads_export1 field changed- changed
Input schema / properties / options / descriptionPrevious value: -"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight, position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults. A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving \"LangLa\", medium speed), so send only what the user asked to change (e.g. {\"watermark\": {\"speed\": \"fast\"}} or {\"watermark\": {\"enabled\": false}})."New value: +"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight|karaoke (karaoke: white words, the one being said lit yellow, word by word), position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 in tenths (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill), language (write the captions in another language than the one spoken, e.g. \"vi\"; translated at build time)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults. A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving \"LangLa\", medium speed), so send only what the user asked to change (e.g. {\"watermark\": {\"speed\": \"fast\"}} or {\"watermark\": {\"enabled\": false}})."
3 tool updates
- Changed
cinematic_ads_apply_template2 fields changed- changed
Input schema / properties / preset_id / descriptionPrevious value: -"Built-in preset id, e.g. preset:langla."New value: +"Built-in preset id from cinematic_ads_list_templates → presets, e.g. preset:langla (app name, icon, mascot, end card, watermark)." - changed
Input schema / properties / template_id / descriptionPrevious value: -"From cinematic_ads_list_templates."New value: +"A saved template id from cinematic_ads_list_templates → templates."
- Changed
cinematic_ads_create_project1 field changed- changed
Input schema / properties / preset_id / descriptionPrevious value: -"Start from a built-in brand preset id from cinematic_ads_list_templates, e.g. preset:langla."New value: +"Start from a built-in brand preset (an id from cinematic_ads_list_templates → presets, e.g. preset:langla) when the user names that brand: its app name, icon, mascot, end card and watermark are filled. Check project.brand.preset in the answer (presetApplied false = it was not applied: call cinematic_ads_apply_template {preset_id})."
- Changed
cinematic_ads_export2 fields changed- changed
Input schema / properties / options / descriptionPrevious value: -"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight, position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill)}, watermark {enabled, position, size, opacity}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults."New value: +"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight, position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill)}, watermark {enabled, motion static|moving (static: the app icon in a corner; moving: text drifting across the frame), text (the moving words, up to 40 characters; default the app name), speed slow|medium|fast (of a moving mark), position top-left|top-right|bottom-left|bottom-right (of a static mark), size small|medium|large, opacity 0.2-1}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults. A watermark field left out takes the watermark of the brand preset or template applied to the project (project.brand.watermark — e.g. preset:langla: moving \"LangLa\", medium speed), so send only what the user asked to change (e.g. {\"watermark\": {\"speed\": \"fast\"}} or {\"watermark\": {\"enabled\": false}})." - added
Input schema / properties / options / propertiesAdded value: +{ + "watermark": { + "description": "The app mark. Fields left out keep the project's preset/template watermark (project.brand.watermark), else the default (static app icon, top-left).", + "properties": { + "enabled": { + "description": "false = no mark at all.", + "type": "boolean" + }, + "motion": { + "description": "static = the app icon in a corner; moving = text drifting across the frame.", + "enum": [ + "static", + "moving" + ], + "type": "string" + }, + "opacity": { + "maximum": 1, + "minimum": 0.2, + "type": "number" + }, + "position": { + "description": "Corner of a static mark.", + "enum": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "type": "string" + }, + "size": { + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + }, + "speed": { + "description": "How fast a moving mark drifts.", + "enum": [ + "slow", + "medium", + "fast" + ], + "type": "string" + }, + "text": { + "description": "Words of a moving mark (default: the app name).", + "maxLength": 40, + "type": "string" + } + }, + "type": "object" + } +}
20 tool updates
- Added
story_add_episode - Added
story_choose_take - Added
story_create_asset - Added
story_create_project - Added
story_export_episode - Added
story_get_episode - Added
story_get_export - Added
story_get_job - Added
story_get_project - Added
story_get_quote - Added
story_get_script - Added
story_list_assets - Added
story_list_projects - Added
story_quote - Added
story_refresh_scene - Added
story_run - Added
story_set_asset_image - Added
story_set_scene_assets - Added
story_update_asset - Added
story_update_script
2 tool updates
- Added
cinematic_ads_fix_moment - Added
cinematic_ads_undo_fix
1 tool update
- Changed
cinematic_ads_export1 field changed- changed
Input schema / properties / options / descriptionPrevious value: -"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight, position bottom|middle|top, speakerNames}, watermark {enabled, position, size, opacity}, endCard {enabled}, lessonCards {enabled}, answerMarks {enabled}, seams {enabled}. Omit for the defaults."New value: +"Optional finish options, as in the studio: captions {enabled, style clean|boxed|highlight, position top|upper-third|middle|lower-third|bottom, speakerNames, boxOpacity 0.2-1 (the box behind boxed captions), boxRadius 0-1 (its roundness: 0 square, 1 pill)}, watermark {enabled, position, size, opacity}, endCard {enabled}, lessonCards {enabled, size small|medium|large, placements {\"<start ms>\": {x, y, scale}}: textboxes are placed off faces automatically; placements pins one textbox by its start (centre x, y as 0-1 of the frame, scale 0.5-1.5)}, answerMarks {enabled}, seams {enabled}. Omit for the defaults."
1 tool update
- Changed
cinematic_ads_update_project2 fields changed- added
Input schema / properties / dialogueAdded value: +{ + "description": "How the original ad's lines become the remake's: keep_english (the default — a line spoken in English stays in English, only the others are translated: for ads that teach English) or translate_all (every line said in targetLanguage). Same timing rule as targetLanguage.", + "enum": [ + "keep_english", + "translate_all" + ], + "type": "string" +} - changed
Input schema / properties / targetLanguage / descriptionPrevious value: -"Language code of the remake's speech and captions (e.g. en, vi, es-MX), or 'source' to keep the original ad's."New value: +"Language code of the remake's speech and captions (e.g. en, vi, es-MX), or 'source' to keep the original ad's. Set it before cinematic_ads_analyze (the new cast is designed for it); it can still change until the video is being made (then the clips are written again), not after."
1 tool update
- Changed
cinematic_ads_update_project1 field changed- changed
Input schema / properties / videoModel / descriptionPrevious value: -"Wandura 0.1 (default for new projects, cheapest, clips up to 30 s), Seedance 2.5 (clips up to 30 s) or Seedance 2.0 (clips up to 15 s)."New value: +"The video model: wandura-0-1 = Wandura 0.1 (new projects start on it; the lowest cost), dreamina-seedance-2-5-ref = Seedance 2.5, dreamina-seedance-2-ref = Seedance 2.0."
19 tool updates
- Added
cinematic_ads_analyze - Added
cinematic_ads_apply_template - Added
cinematic_ads_brand_scan - Added
cinematic_ads_check_clip - Added
cinematic_ads_create_project - Added
cinematic_ads_delete_template - Added
cinematic_ads_export - Added
cinematic_ads_get_project - Added
cinematic_ads_guide - Added
cinematic_ads_list_projects - Added
cinematic_ads_list_templates - Added
cinematic_ads_make_images - Added
cinematic_ads_make_video - Added
cinematic_ads_refine - Added
cinematic_ads_save_template - Added
cinematic_ads_set_original_ad - Added
cinematic_ads_update_asset - Added
cinematic_ads_update_clip - Added
cinematic_ads_update_project
14 tool updates
- First observed
browse_library - First observed
clone_template - First observed
get_generation - First observed
get_template - First observed
list_effects - First observed
list_models - First observed
preview_generation - First observed
preview_render - First observed
render_audio - First observed
render_effect - First observed
render_image - First observed
render_video - First observed
search_templates - First observed
upload_asset
Publisher details
- Operator
- Apero Technologies Group, Inc.
- Operator website
- https://www.wandura.ai
- Vendor relationship
- First-party
- Documentation
- https://www.wandura.ai/mcp
- Trust center
- Not applicable
- Restrictions
- Requires a free Wandura account (OAuth sign-in). Generations use Wandura credits: new accounts get free starter credits, and more credits come from paid plans or credit packs. No admin approval or regional limit. · Publisher source
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.