Creatify Ad Agent
Server Details
Turn a prompt, product link, or reference ad into a finished video ad — Creatify's Ad Agent MCP plans shots, generates footage, voiceovers and music, then ships the MP4. Free to start.
- Status
- Healthy
- Uptime
- 99.4% over 20 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- Creatify Ad Agent
- Claude
- –
TDQS
Scored across 24 tools
Most tools occupy distinct resource+action slots (read_file/write_file/edit_file, project_create/get/list, generate_clip/generate_music/voice_line, task_status). The genuine overlap is the upload trio (composer_share, upload_file, upload_file_widget), which all yield a CDN URL, and composer_view vs composer_import_asset previews, though the descriptions do steer callers correctly. An agent could still mis-pick among upload/import/share paths on the first try.
The set is dominated by a clean `composer_`_verb_noun_ pattern with consistent snake_case and predictable verb choices (list/get/create/edit/read/write/generate). The only deviations are the two unprefixed outlier names `upload_file` and `upload_file_widget`, which sit outside the composer_ namespace and could look like they belong to a different server.
24 tools is on the heavy side, but the scope is genuinely broad: ad-account reads, project file I/O, shell sandbox, image/clip/music generation, TTS, transcription, shipping and uploads. Each tool maps to a real distinct capability rather than being a redundant variant. A few could be merged, e.g. view vs import_asset or share vs upload_file.
The video-authoring lifecycle is well covered end-to-end (create project, import asset, generate media, edit/compose, ship, share, track tasks), but the ad side is explicitly read-only — no budget/bid/status writes or campaign creation, which is a significant gap for a server named 'Ad Agent'. There is also no project/file delete or take-listing operation, leaving cleanup and take selection partly out of reach.
Available Tools
24 toolscomposer_ads_readARead-onlyInspect
Runs one read-only request against a connected ad account and returns the platform's JSON; composer_ads_reference has the endpoints and fields per platform. Writes (status, budget, bids, creating campaigns) are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Project path for the full result, e.g. data/meta_ads_7d.json. Every page of a Meta or TikTok listing is fetched and merged; analyse it with composer_exec instead of reading it into the conversation. | |
| body | No | JSON body, only for reads the platform defines as POST (TikTok .../get/, Reddit reports and history). | |
| path | No | Endpoint relative to the platform API base (Meta Graph v23.0, TikTok open_api/v1.3, Snapchat v1, Reddit api/v3, OpenAI Ads v1, AppLovin r.applovin.com), e.g. act_123/insights or report/integrated/get/. Not used for Google. | |
| query | No | Google only: a GAQL SELECT query run against account_id (search_stream). | |
| method | No | GET | |
| params | No | Query parameters. Never pass a token: the server attaches it. Page with the platform's cursor (Meta `after`, TikTok `page`). | |
| platform | Yes | ||
| account_id | Yes | account_id from composer_list_ad_accounts. | |
| project_id | No | Ad Agent project to save the result into, with out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/openWorld annotations by naming what is rejected (status, budget, bids, campaign creation) and stating the return is the platform's raw JSON, which tells the agent to analyse the payload elsewhere. Doesn't mention rate limits or the per-platform pagination/merge behaviour that the schema carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, then the reference pointer, then the write rejection. Nothing is repeated or 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 9-parameter, open-world passthrough tool with no output schema, the description supplies the essential mental model: one request, raw platform JSON, writes are refused, consult the reference tool. Missing only rate-limit/error behaviour and the out/project_id persistence workflow, the latter being covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78% and the schema itself documents platform bases, GAQL for Google, body for POST-style reads, and cursor paging, so the description needs little more. It adds no parameter-level meaning of its own beyond implying platform-specific endpoint choice via the reference tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Runs one read-only request against a connected ad account and returns the platform's JSON'), and explicitly names the sibling composer_ads_reference as the source of endpoints/fields, which separates this tool from documentation lookup.
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 routing rule to composer_ads_reference for endpoints and fields, plus a hard exclusion ('Writes ... are rejected'). It doesn't cover the account-discovery prerequisite (that lives only in the account_id schema) or comparisons against other siblings, but the when-to-use guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_ads_referenceARead-onlyInspect
Returns Creatify's ad-platform API reference (endpoints, fields, enums, pitfalls) for querying with composer_ads_read; read SKILL.md and the platform's read reference before the first query. The references are written for Creatify's own agent: where they call requests or the google-ads library with a token from context.json, send the same method, path and params (Google: the GAQL) through composer_ads_read and leave the token out. Writes, launches and action requests are not available here yet: offer the change to the user as advice, or point them to Creatify's Ad Agent.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | A path from `topics`, e.g. references/meta/read.md. Defaults to SKILL.md, the cross-platform rules and index. | SKILL.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real context: the references were written for Creatify's own agent, so where they use `requests` or the google-ads library with a token from context.json, the same method/path/params (Google: the GAQL) go through composer_ads_read with the token omitted. It also discloses that write/launch/action requests are unsupported. Minor gap: no indication of reference size or how to enumerate topics.
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 the pre-query instruction come first, followed by the token/method translation rule and the limitation. Dense but each sentence carries work; the middle sentence is long and slightly tangled, which keeps it below 5.
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-optional-parameter documentation-retrieval tool with annotations and no output schema, this covers purpose, preconditions (read SKILL.md first), how to apply what is returned, and what cannot be done. An agent has enough to call it correctly and know what to do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the topic parameter is already documented with an example path and default. The description mentions 'a path from `topics`' and the SKILL.md default but adds no format or discovery detail beyond the schema, 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: returns Creatify's ad-platform API reference (endpoints, fields, enums, pitfalls). It also explicitly contrasts with the sibling composer_ads_read, which is the tool that performs the actual queries, so the two are distinguishable 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 when-to-use ('read SKILL.md and the platform's read reference before the first query') and when-not-to-use ('Writes, launches and action requests are not available here yet'), plus named alternatives (offer advice to the user, or point to Creatify's Ad Agent). Nothing about routing to this tool vs. composer_ads_read 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.
composer_billing_stateARead-onlyInspect
Returns the workspace's remaining credits, whether takes are watermarked (free plan), and each tool's price.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value by enumerating what the call surfaces (credits, watermark state, tool prices), which matters because there is no output schema. It stops short of noting snapshot freshness, units, or auth expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the three returned items are listed compactly and 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 and no parameters, the description has to carry the return-value burden, and it names three concrete payload fields. It is nearly complete for a trivial read tool, missing only format/units of the credit figure and whether values are workspace-scoped or per-user.
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?
Zero parameters, so there is nothing to disambiguate; the baseline for a no-arg tool applies. Schema description coverage is 100% and no additional parameter meaning is possible.
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 ('Returns') and an exact resource set: remaining credits, watermark status for free plans, and per-tool pricing. Nothing in the sibling list (file/image/exec/project tools) overlaps, so an agent can identify it immediately 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?
No explicit when-to-use or when-not-to-use statement and no named alternatives. Usage is only implied by the content itself — an agent can infer it is the budget/quota check to run before paid generation calls. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_edit_fileBDestructiveInspect
Replaces exact text in a project file. old_string must occur exactly once unless replace_all is true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| new_string | Yes | Replacement text, different from old_string. | |
| old_string | Yes | Exact text to replace, without read_file's line-number prefix; whitespace must match. It must occur once unless replace_all is set. | |
| project_id | Yes | project_id from composer_project_create. | |
| replace_all | No | Replace every occurrence of old_string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=false, so the mutation risk is covered structurally. The description adds a genuinely useful behavioral rule (old_string must match exactly once unless replace_all is set), but says nothing about failure behavior, whether the file must already exist, or whitespace/encoding handling.
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, and the core replacement behavior plus its key constraint are both front-loaded. Nothing can be removed without losing 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 destructive edit tool with full schema coverage and annotations carrying the safety profile, the description supplies the one gotcha an agent most needs (single-occurrence matching). It is nearly complete, with only error/edge-case behavior 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% and every parameter, including replace_all and the uniqueness constraint on old_string, is already documented in the schema. The description repeats that constraint rather than adding new semantics such as format, encoding, or size limits.
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 ('Replaces exact text in a project file'), which distinguishes it from a whole-file operation. It does not name the nearest siblings (composer_write_file, composer_read_file) to route the agent explicitly, so it falls 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?
There is no guidance on when to choose this over composer_write_file or how it relates to composer_read_file, which the schema itself references. The uniqueness rule is an operational constraint, not a when-to-use instruction, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_edit_imageBInspect
Composes or edits a keyframe image (GPT Image 2.5, 2K) as an async task. Returns task_id and the credit cost.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| seed | No | Random seed. An identical request (same seed) within 10 minutes returns the existing task. | |
| images | Yes | Input images, project paths. | |
| prompt | Yes | Edit instruction for the input images. | |
| project_id | Yes | project_id from composer_project_create. | |
| aspect_ratio | No | Defaults to the project's aspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation (readOnlyHint=false) and openWorldHint=true. The description adds valuable context—async execution, returns task_id and credit cost, and the model used—but doesn't cover rate limits or how to retrieve the result.
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 the core action and model, then the return behavior. No wasted text.
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 burden of describing returns, which it partially does (task_id and credit cost). However, it omits how the async task is completed/polled, which is essential for an agent to use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including the seed idempotency note and aspect default are documented in the schema. The description adds nothing about parameters, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (composes/edits keyframe image), names the model and resolution (GPT Image 2.5, 2K), and notes it's async. It doesn't differentiate from siblings like composer_generate_clip, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs composer_generate_clip or other image tools, and no explicit instruction to follow up with composer_task_status. The phrase 'as an async task' hints at polling but leaves it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_execADestructiveInspect
Runs a shell command in the project's network-isolated sandbox (ffmpeg, python, lib.compose check/sheet/strip, lib.beats, lib.audio_check, lib.screen_replace). Files it writes are saved to the project. Returns the output, or a task_id if it runs longer than about 50 s. Billed for sandbox time: 0.1 credit per minute, at least 0.1 per command.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Bash run in the project's working copy, e.g. `ffmpeg -v error -y -sseof -0.2 -i gen/s1.mp4 -frames:v 1 gen/s1_last.png` or `python3 -m lib.compose sheet index.html --at 1,3,5 -o out/check/sheet.jpg`. No network. | |
| timeout | No | Seconds before the command is killed. The timeout is held as credits up front and settled to the measured run. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing billing (0.1 credit/minute, 0.1 minimum per command), that the timeout is held as credits up front, that long runs flip to an async task_id after roughly 50 s, and that files written persist to the project. These are behavioral traits the destructiveHint/readOnlyHint annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and sandbox constraints, with cost and return behavior following logically. Nothing is redundant and 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 correctly explains the return contract ('output, or a task_id'), which is exactly what an agent needs. The only gap is that it doesn't point to composer_task_status for retrieving async results, a minor omission for a tool that can return early.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: the ~50 s threshold explains when the async task_id path (and thus the timeout parameter's practical effect) kicks in, and the credit billing clarifies the cost of longer timeouts. Command and project_id get no extra explanation, hence not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Runs a shell command in the project's network-isolated sandbox') and enumerates the in-sandbox tooling, which cleanly separates it from siblings like composer_edit_file, composer_write_file, and composer_read_file. An agent can identify the tool's scope without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes context (network-isolated sandbox, no network, files saved to the project) that implies when the tool is appropriate, but never states when to prefer it over composer_read_file/composer_write_file or how to follow up on a returned task_id. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_generate_clipAInspect
Generates one clip (5-15 s) into the project as an async task: Boreal H3 for r2v/t2v/i2v, Aurora 2.0 for a2v. Returns task_id and the credit cost; the finished task's result includes the clip's CDN URL.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| mode | Yes | r2v: conditioned on reference images/videos. i2v: animates a given first frame. t2v: text only. These three render on Boreal H3. a2v: lip-syncs a speaker frame to an audio track on Aurora 2.0. | |
| seed | No | Random seed. An identical request (same seed) within 10 minutes returns the existing task without a new charge. | |
| audio | No | a2v dialogue track. | |
| image | No | i2v/a2v first frame. | |
| audios | No | r2v reference audio (voice/sound), project paths. | |
| images | No | r2v reference images (<=9), project paths. | |
| prompt | Yes | Shot description, including camera and subject motion. | |
| videos | No | r2v reference videos, project paths. | |
| duration | No | ||
| last_image | No | i2v end frame. | |
| project_id | Yes | project_id from composer_project_create. | |
| resolution | No | Output tier for r2v/t2v/i2v; 768P costs about a third of 1088P. a2v always renders at 720p. | 1088P |
| aspect_ratio | No | Output aspect. Defaults to the project's aspect for r2v/t2v, and to the keyframe's own aspect for i2v/a2v. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) the description discloses the async task model, credit consumption, and the fact that the CDN URL arrives only in the finished task's result. It does not say whether credits are spent on failure or how long tasks may take.
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 clauses: what it does first, then what it returns. No padding, no restated parameter list, and the async/return information is front-loaded where an agent will read it.
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 14-parameter mutation tool with no output schema, the description supplies the essential missing piece, the return shape (task_id, credit cost, eventual CDN URL). It stops short of describing the follow-up polling step or partial-failure behavior, which would round it out.
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 93%, so nearly every parameter is already documented, and the mode-to-model mapping in the description largely duplicates the schema's own 'mode' description. It adds only the 5-15 s duration bound, 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 ('Generates one clip (5-15 s) into the project as an async task'), names the models used per mode, and names the return artifacts. An agent can separate this from composer_generate_music or composer_voice_line without reading 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?
The mode-to-model routing (Boreal H3 for r2v/t2v/i2v, Aurora 2.0 for a2v) gives clear usage context and the mention of the finished task implies the polling path. However, it never explicitly says when to prefer a sibling such as composer_generate_music or how to chain to composer_task_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_generate_musicAInspect
Generates a music track (Lyria 3 Pro) as an async task. Returns task_id and the credit cost.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| seed | No | Random seed. An identical request (same seed) within 10 minutes returns the existing task. | |
| prompt | Yes | Music description: length, tempo, genre, structure. | |
| duration | No | Target length in seconds. Lyria has no duration control and often overshoots short requests a lot; longer output is trimmed with a fade-out to match. Omit to let the model's natural length stand. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, open-world, non-destructive), so the description carries real weight here and does add value: it discloses async execution, the returned task_id, and a credit cost, none of which the annotations cover. It still omits failure behavior, polling expectations, and where the rendered file lands relative to 'out'.
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, and the key facts (what it produces, the model, async, return shape) are front-loaded. Nothing is redundant with the schema or 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 5-parameter, credit-consuming async generation tool with no output schema, the description covers the return payload at a high level but leaves the async lifecycle unexplained – no pointer to composer_task_status, no note on failure/refund behavior, and no statement of where the artifact is written.
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% – prompt, out, seed, duration and project_id are all documented in-schema, including the seed dedupe window and Lyria's duration overshoot behavior. The description adds no parameter meaning whatsoever, 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 ('Generates a music track'), names the underlying model (Lyria 3 Pro), and flags the async execution mode. It does not explicitly distinguish itself from the closest siblings (composer_generate_clip, composer_voice_line), 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?
There is no when-to-use guidance at all: nothing says when to pick this over composer_generate_clip or composer_voice_line, and no prerequisites are stated beyond the schema's reference to composer_project_create. The async note implies a follow-up poll but never names composer_task_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_import_assetBInspect
Downloads a reference file into assets/. Returns its media probe and a downscaled preview image.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | https URL of a reference (an upload_file cdn_url, a Drive export, a product image). | |
| name | No | Optional file name to keep. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (openWorldHint=true, destructiveHint=false), and with no output schema the description usefully discloses that it returns a media probe and preview image plus writes into assets/. However it omits fetch failure modes, size/type limits, and whether existing assets are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and destination followed by the return value. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The return-value sentence compensates for the absent output schema, which is the right call. But for a write-ish, open-world network fetch, nothing is said about permissions, failure handling, or asset-naming collisions, leaving a gap an agent would want covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so url, name, and project_id are already documented. The description adds no syntax, naming, or format detail beyond the schema, 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 destination resource: 'Downloads a reference file into assets/'. An agent can distinguish it from upload_file and composer_generate_* siblings, 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?
There is no statement of when to use this tool versus alternatives such as upload_file or composer_edit_image. The only contextual hint ('an upload_file cdn_url, a Drive export, a product image') lives in the schema parameter, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_list_ad_accountsARead-onlyInspect
Lists the ad accounts connected to the user's Creatify workspace (Meta, Google, TikTok, AppLovin, OpenAI, Snapchat, Reddit) with currency and timezone. Use an account's platform and account_id with composer_ads_read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and closed-world scope, so safety is covered. The description adds that results are scoped to the user's workspace and discloses the returned fields (platform, account_id, currency, timezone), which is useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the resource and its contents, the second gives the downstream action. Nothing redundant, and the key information 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?
With no parameters, no output schema, and annotations covering the safety profile, the description supplies everything an agent needs: what is listed, what fields come back, and how to use them 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?
Zero parameters, so there is nothing to disambiguate; the schema is empty and fully described. The description still clarifies what each returned account entry carries, which is the only semantics that matter here.
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 (Lists) plus resource (ad accounts connected to the user's Creatify workspace), and it enumerates the supported platforms so the agent knows the scope. It is clearly distinct from read/reference siblings because it is the discovery/listing endpoint.
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 feed an account's platform and account_id into composer_ads_read, which establishes the natural workflow. It does not state exclusions or contrast with composer_ads_reference, but no sibling competes for the same listing job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_list_voicesARead-onlyInspect
Lists eligible library or this workspace's voices with provider voice_id, languages and previews. Select a voice with the user; pass its voice_id to composer_voice_line, never a record UUID. Read-only, no generation or credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| gender | No | ||
| offset | No | ||
| search | No | Search voice name or accent. | |
| source | No | library | |
| language | No | Language code or name, e.g. pl for Polish. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description restates that and adds the useful 'no generation or credits' cost context. It says nothing about pagination behavior (limit/offset exist) or result ordering, so the added behavioral value beyond annotations is modest.
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, zero filler, and the core capability is front-loaded before the handoff instruction. 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 paginated list tool with no output schema and six parameters, the description never addresses pagination, defaults, or the filters an agent would likely want. The handoff and cost notes are valuable, but key operational details are 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 only 33% (search and language only), so the description must compensate, but it explains none of limit, offset, gender, or the source enum values. 'Library or this workspace's voices' loosely gestures at source and 'languages' at the language filter, but four of six parameters remain undocumented in both places.
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 ('Lists ... voices') and delimits scope to 'eligible library or this workspace's voices', while naming the returned fields (provider voice_id, languages, previews). That is enough to separate it from all siblings, including composer_voice_line which it explicitly hands off to.
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 unambiguous workflow: 'Select a voice with the user; pass its voice_id to composer_voice_line, never a record UUID.' It names the downstream tool plus the exact value to supply and one explicit pitfall (don't pass a record UUID). Little 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.
composer_project_createAInspect
Creates an Ad Agent project: a persistent working copy (assets/, gen/, index.html, stage.js) kept across conversations. Returns its project_id.
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | Target seconds; the ship gate holds it to ±0.5s. | |
| resolution | No | Canvas short edge. | |
| aspect_ratio | No | Output aspect. | 9:16 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already fix the safety profile (readOnly=false, destructive=false, openWorld=false), so the bar is lower. The description adds real context the annotations don't: the created artifact is a persistent working copy with a known file layout, and the call returns a project_id. It stops short of noting idempotency, error behavior, or permission 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?
One tight sentence with the scoping detail parenthesized, plus a short return-value clause. Front-loaded and free of filler, though the file-list parenthetical is the only mildly expendable element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 100% schema coverage and no output schema, the description covers what it makes and what it returns. Missing only peripheral information such as error conditions when a project already exists or required context/permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all three parameters fully documented (duration tolerance, resolution, aspect ratio default), so the schema carries the semantics. The description adds nothing about parameters, which is the expected baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates an Ad Agent project') and elaborates on what that means concretely (assets/, gen/, index.html, stage.js). It also names the return value. It does not explicitly contrast itself with composer_project_get/list, but the create-vs-read distinction is self-evident.
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: 'kept across conversations' hints that this is for work that must persist, but there is no explicit when-to-use, when-not-to-use, or mention of the sibling project tools. An agent can infer intent but is given no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_project_getBRead-onlyInspect
Returns a project's files, take count, recent tasks and running tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description is not burdened with that. It does add useful behavioral context by naming the return payload, which matters since no output schema exists, but it says nothing about pagination, ordering, or what 'take count' means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the resource first and the returned payload second, with 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 one-parameter read-only lookup with no output schema, the description covers the essential need by listing what comes back. Minor gaps remain around the meaning of 'take count' and result volume, but nothing blocking.
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 project_id parameter is already documented as originating from composer_project_create. The description adds no parameter-level meaning 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?
The description uses a concrete verb-resource pair ('Returns a project's...') and enumerates the returned content (files, take count, recent tasks, running tasks), which distinguishes it from composer_project_list and composer_project_create. It stops short of explicitly contrasting with those siblings, and 'take count' is unexplained jargon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus composer_project_list or composer_task_status, and no prerequisites mentioned. The agent must infer that this is the single-project detail fetch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_project_listBRead-onlyInspect
Lists this workspace's Ad Agent projects, most recently active first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many projects. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description does add one genuinely useful behavioral fact beyond the annotations: results are sorted by most recent activity. It says nothing about the limit default, truncation, or pagination behavior, which keeps this at a 3.
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, zero waste, with the resource and the sort order front-loaded. Nothing to trim and nothing buried.
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?
This is a simple read-only listing tool with an output schema present, so return-value documentation is unnecessary, and annotations cover safety. The description is complete enough to call correctly; the only minor gap is the absence of any hint about the default page size or what to do when more projects exist than are returned.
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 optional 'limit' parameter and schema description coverage is 100%, so the schema already documents it ('How many projects.'). The description adds no meaning about the parameter, such as what happens when the limit is exceeded or how ordering interacts with it. Baseline 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Lists') and resource ('this workspace's Ad Agent projects'), which clearly separates it from composer_project_get and composer_project_create. It also discloses the ordering ('most recently active first'). It stops short of naming a sibling or restating scope exclusions, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. The description never mentions composer_project_get for fetching a single project, nor any condition under which listing is preferred over another tool. Usage is only inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_read_fileARead-onlyInspect
Returns a text file from the project (index.html, stage.js, ...) with line numbers. Text files only.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| limit | No | Max lines to return. | |
| offset | No | 1-based first line. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: output is line-numbered and restricted to text files. It stays silent on truncation, what happens past EOF, or how missing/binary files are reported, so it adds only moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core behavior and immediately followed by the key constraint. Nothing is wasted 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?
For a simple read operation with no output schema and annotations covering the safety profile, the description says enough to call it: what is returned, its format, and the file-type restriction. Minor gaps remain around large-file truncation and error behavior, but nothing an agent needs to make the call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with path, limit, offset and project_id all self-documented, so the baseline is 3. The description adds no parameter-level detail beyond echoing that content is line-numbered, which loosely relates to offset/limit but does not enrich their 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?
States a specific verb and resource ('Returns a text file from the project') and gives concrete examples (index.html, stage.js), so the agent knows exactly what comes back. It also scopes the tool with 'Text files only', but it does not explicitly contrast with close siblings like composer_view or composer_exec, which also surface project content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'Text files only' restriction tells the agent this is not for binary/asset paths, but no alternative is named and no condition (e.g. 'use composer_view for rendered output') is given. The agent must infer when to pick this over composer_view or composer_exec.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_shipAInspect
Renders index.html, runs the ship gate and uploads the take as an async task (1 credit, refunded if the gate fails). The finished result has video_url, take and library_url.
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | Defaults to the project's duration. | |
| project_id | Yes | project_id from composer_project_create. | |
| ship_failed_gate | No | Reason for shipping over a failed gate (which check failed and why). Recorded with the take. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=false); the description adds genuinely useful behavior: it is async, costs 1 credit, the credit is refunded if the gate fails, and it names the result fields. It still omits how to retrieve the async result (presumably composer_task_status) and what the ship gate checks.
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 no filler; the action pipeline is front-loaded and the cost/refund and return-shape details follow immediately. Every clause carries information the 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?
With no output schema, the description usefully enumerates the result fields (video_url, take, library_url) and covers cost and async semantics. The remaining gap is that it does not say how or when to poll for the async task's completion, which an agent would need to actually finish the workflow.
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 project_id, duration and ship_failed_gate are already documented in the schema with defaults and provenance. The description mentions the gate and the take but adds no syntax or format detail beyond the structured fields, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete actions (renders index.html, runs the ship gate, uploads the take) and the async delivery model, which is a specific verb+resource statement. It is clearly distinct from read-oriented siblings like composer_view or composer_read_file, though it does not explicitly contrast itself with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pipeline wording implies this is the final publish/ship step and it references the ship gate as a precondition, but there is no explicit when-to-use vs when-not statement or pointer to alternatives such as composer_exec or composer_share. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_task_statusARead-onlyInspect
Returns an Ad Agent task's status, waiting up to wait seconds for it to finish. A finished clip's result includes probe and a contact sheet path; show_sheet=true attaches the sheet image.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Seconds to long-poll. | |
| task_id | Yes | composer_task-<uuid> returned by a start tool. | |
| show_sheet | No | Attach a finished clip's contact sheet image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a safe, non-destructive, non-open-world read. The description adds genuinely useful behavior: the call blocks for up to `wait` seconds, and show_sheet=true attaches an image to the response. That blocking semantics is exactly the kind of trait an agent needs to plan around and is not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no waste. The core action and its blocking behavior come first, and the finished-clip result details follow. 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 must carry the return contract, and it only partially does so: it names probe and a contact sheet path for finished clips but never describes the status field itself (e.g. pending/running/failed) or what an incomplete result looks like. Adequate for a simple poll, but an agent cannot fully anticipate the response shape.
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 (wait as long-poll seconds, task_id format, show_sheet effect). The description largely restates wait and show_sheet rather than adding new semantics; baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns an Ad Agent task's status. The long-poll behavior and the finished-clip result contents (probe, sheet path) further pin down what the tool actually does. It does not explicitly name a sibling alternative, but no sibling provides task polling, so differentiation is not a real risk.
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: the description describes waiting for a task to finish, which suggests it is polled after a start tool, and the schema notes task_id comes 'from a start tool'. There is no explicit when-to-use/when-not guidance, no mention of retry or polling cadence, and no stated alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_transcribeAInspect
Transcribes a clip or track (ElevenLabs Scribe) as an async task: word timings, plus differences from the script when one is given. 0.05 credit per minute of media, at least 0.1.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Optional path for the word-timings JSON. | |
| media | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| forced | No | Forced alignment for a PROVIDED voiceover. | |
| script | No | The lines as written, for a word diff. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-destructive, open-world operation, so the safety profile is covered. The description adds genuinely new behavioral context: it runs as an async task, produces word timings and script-difference output, and carries explicit cost (0.05 credit/min, 0.1 minimum) – pricing and async semantics that annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with no filler: the core operation and output are front-loaded, followed by the cost detail. 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?
For a 5-parameter tool with full schema coverage and no output schema, the description covers operation, output shape, async nature, and pricing. The one gap is not indicating how the async result is retrieved (e.g., via composer_task_status), but this is a minor omission rather than a blocking one.
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 all five parameters are already documented in the schema. The description adds only indirect meaning (script diffs, word timings) and does not elaborate on parameter syntax or formats beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Transcribes) and resource (clip or track), names the engine (ElevenLabs Scribe), and specifies the deliverable (word timings plus script diffs). An agent can distinguish this from siblings like composer_voice_line or composer_generate_clip 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?
Usage is implied by the phrasing ("when one is given" for scripts), but it never states when to choose this over alternatives such as composer_voice_line, nor any prerequisite like providing a voiceover first. Adequate context, no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_viewARead-onlyInspect
Returns an image from the project (or a video's first frame), downscaled to max_edge.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| max_edge | No | Longest edge in px. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description still adds genuinely useful behavior: a video path yields the first frame rather than an error or a video, and the output is downscaled to max_edge. That is real context 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?
A single tight sentence with the core action front-loaded and the parenthetical edge case placed immediately after it. Nothing 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's claim that it 'returns an image' leaves the return encoding (inline image content vs. URL vs. file reference) unspecified, which matters for a binary-returning tool. It is otherwise adequate for a 3-parameter read 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 path, max_edge (default 1024, range 256-2048) and project_id are already documented in the schema. The description only re-references max_edge and the video-first-frame behavior, adding no format or syntax detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns an image from the project') plus a non-obvious capability: extracting a video's first frame. An agent can distinguish it from text-reading siblings like composer_read_file and from mutation siblings like composer_edit_image, though it never names an alternative 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?
There is no when-to-use or when-not-to-use guidance, no prerequisites (e.g. that project_id must come from composer_project_create), and no mention of alternatives. Usage is only inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_voice_lineAInspect
Speaks one or more lines using exactly one provider voice_id or authorized like samples. No voice design. Several lines write out_1.wav, out_2.wav, ...; a single line writes out. Each line is checked against its text by transcription; a failed task lists the lines that missed. Returns task_id and credit cost.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| say | No | Pronunciations for names and brands, each "WORD=SPOKEN" (e.g. "Vrbo=Ver-bo"). The voice reads SPOKEN; captions and the voice check keep WORD. Write amounts as digits in text instead. | |
| lead | No | Seconds of silence before the line. | |
| like | No | Clean samples to clone: a character generated in this project, the user's own voice, or a voice they have the rights to use. | |
| seed | No | Random seed. An identical request (same seed) within 10 minutes returns the existing task. | |
| text | Yes | The lines to speak, one clip per line. | |
| describe | No | Removed; always rejected before charging. Use voice_id from composer_list_voices or authorized like samples. | |
| voice_id | No | Provider voice_id from composer_list_voices, not a record UUID. Use exactly one of voice_id or like. | |
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write + openWorld + non-destructive; the description adds substantive behavior: per-line output file naming (out_1.wav, out_2.wav vs. out), a transcription-based verification pass, a failure mode that lists missed lines, and a returned task_id with credit cost. The one notable omission is that it doesn't tell the agent the call is asynchronous and should be polled via composer_task_status.
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, each carrying distinct information, front-loaded with the core action and voice-source constraint. 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 9 parameters, no output schema, and a task-based return, the description covers outputs, cost, and verification adequately, but it never states the async lifecycle (poll composer_task_status) or what the returned task_id is used for. That is the main gap an agent would hit at invocation time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: how the `out` path fans out into numbered files for multiple lines, and that 'describe' is unconditionally rejected. That is genuine clarification beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Speaks one or more lines using exactly one provider voice_id or authorized like samples" gives a concrete verb (speak/render audio), resource (voice lines), and scope (one voice source per call). The clause 'No voice design' additionally excludes a neighboring capability, though no sibling tool is named by name (e.g. composer_generate_music or composer_generate_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 routes the agent to composer_list_voices for the voice_id and states the mutual exclusivity of voice_id vs. like, plus that 'describe' is rejected before charging. It does not say when to prefer this over composer_generate_clip or composer_generate_music, so the when-not guidance is incomplete rather than absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
composer_write_fileBDestructiveInspect
Creates or overwrites a text file in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path relative to the project, e.g. gen/shot1.mp4. | |
| content | Yes | ||
| project_id | Yes | project_id from composer_project_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=false, so the overwrite hazard is partly covered for the agent. The description's 'or overwrites' corroborates the destructive hint and adds the useful qualifier that the target is a text file (versus binary assets handled by upload/import siblings). It says nothing about whether parent directories are created, encoding, size limits, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the destructive verb is introduced first. It is efficient, though arguably under-specified rather than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter mutation tool with annotations but no output schema, the definition covers the basics and correctly signals text-file scope. It omits the create-versus-overwrite semantics that matter most, plus any note on path handling or return value, leaving meaningful gaps 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?
Schema coverage is 67%, mid-range: path carries an example, project_id cross-references composer_project_create, and content is undescribed. The description adds nothing about any parameter, so the undocumented content field is left entirely to inference (presumably the file body). Baseline 3 is appropriate at this coverage level.
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 pair (creates or overwrites) and a specific resource (a text file in the project), which is enough to distinguish it from composer_read_file and composer_edit_file. It stops short of explicitly naming the sibling it differs from or clarifying the create-vs-overwrite 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?
No when-to-use guidance, no conditions, no alternative named. With composer_edit_file in the sibling list, an agent gets no signal about when to write a whole file versus edit one in place, which is the exact decision this tool forces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileAInspect
Upload a file to the workspace CDN — ONLY for callers that can run shell commands / send HTTP requests themselves .
If you are not capable of sending HTTP requests to an endpoint,
call ``upload_file_widget`` instead and ask the user to drop the file into the panel.
Two modes, keyed on ``base64_content``:
- ``base64_content`` OMITTED → **presigned** (preferred, any size): returns
``{"upload_url", "cdn_url", "storage_path", "content_type", "expires_in"}``.
PUT the bytes to ``upload_url`` (sending ``Content-Type: <content_type>``
when provided), then reference ``cdn_url`` from other tools. Bytes stream
client → S3; nothing goes through the model. NOTE: ``cdn_url`` is dead
until your PUT completes — never pass it to other tools before then.
This is the path the upload widget drives. If you cannot send HTTP
requests or the endpoint is blocked, call ``upload_file_widget`` instead.
- ``base64_content`` GIVEN → **inline** (tiny blobs only, <= ~1.5 MB):
decode + upload in one call. ONLY pass bytes you actually hold —
read from a real file or returned by an API. NEVER construct
base64 from an image you can merely see in the chat: you do not
have access to attachment bytes, and fabricated base64 fails
validation or uploads corrupt data. For a file on the user's
machine, call ``upload_file_widget`` instead. Returns
``{"cdn_url", "storage_path", "content_type", "bytes_uploaded"}``. Larger
bodies are rejected and can exceed the transport's request-size limit, so
omit it and use the presigned mode.
Mirrors ``api.views.uploads.ApiUploadView``'s two modes over MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | File name, e.g. 'face.png'. Only the leaf name is used; directory parts are stripped. | |
| content_type | No | MIME type, e.g. 'image/png'. Recommended. In the presigned path it is signed into the URL, so the PUT must send a matching Content-Type header. | |
| base64_content | No | OPTIONAL — only for tiny in-memory blobs (<= ~1.5 MB): the file body, base64-encoded, uploaded in one call. OMIT for anything larger or on-disk; you then get back a presigned `upload_url` to PUT the bytes straight to S3 (no size cap, nothing base64-encoded through the model). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it as a non-read-only, non-destructive write; the description adds far more: the presigned vs inline mode mechanics, the returned field sets, the ~1.5 MB inline cap and transport size limit, and the critical warning that cdn_url is dead until the PUT completes. It also warns that fabricated base64 from chat-visible images will fail.
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 gating capability and the two modes clearly delimited. It is wordy and repeats the 'call upload_file_widget instead' fallback three times, and the closing note about mirroring ApiUploadView is implementation detail of little decision value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in and documents the return payloads for both modes. For a multi-mode, side-effecting upload tool this covers everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents filename, content_type, and base64_content. The description nonetheless adds non-obvious semantics: base64_content's presence toggles the two execution modes, and content_type is signed into the presigned URL so the PUT must match it.
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 ('Upload a file to the workspace CDN') and immediately scopes it to callers that can send HTTP requests. It sharply distinguishes itself from sibling upload_file_widget by naming the exact capability that selects each 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 when-to-use and when-not: use this if you can run shell/HTTP, otherwise call upload_file_widget. It also gives mode-selection guidance keyed on base64_content and explains which path to pick by size and origin of the bytes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_file_widgetAInspect
Opens a panel where the user can pick a local file to upload to their workspace. The panel uploads it from the browser and posts the file's URL into the chat. For clients that cannot send HTTP requests, including files attached to the chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, non-destructive operation. The description adds real behavioral context beyond them: it opens a UI panel, the upload is performed from the browser, and the resulting file URL is posted into the chat. It does not mention auth or size limits, but the added interaction detail is valuable.
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 the core purpose followed by mechanism and usage condition. Mostly efficient, though the final clause 'including files attached to the chat' is grammatically awkward and slightly obscures its meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter widget tool with no output schema, the description covers what happens (panel opens, browser-side upload, URL posted to chat) and when to use it. It is nearly complete, missing only an explicit pointer to the sibling 'upload_file' alternative.
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 and the schema is trivially complete, so there is nothing for the description to disambiguate. The 0-parameter baseline of 4 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 action and mechanism: it 'opens a panel where the user can pick a local file to upload to their workspace' and posts the URL into the chat. This clearly conveys a distinct interaction model, though it does not explicitly name or contrast with the sibling 'upload_file'.
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 a concrete condition for use: 'For clients that cannot send HTTP requests.' This is a clear when-to-use signal that implicitly distinguishes it from an HTTP-based upload path, but it never names the alternative tool explicitly, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
composer_voice_line1 field changed- added
Input schema / properties / sayAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Pronunciations for names and brands, each \"WORD=SPOKEN\" (e.g. \"Vrbo=Ver-bo\"). The voice reads SPOKEN; captions and the voice check keep WORD. Write amounts as digits in text instead.", + "title": "Say" +}
3 tool updates
- Added
composer_ads_read - Added
composer_ads_reference - Added
composer_list_ad_accounts
1 tool update
- Changed
composer_generate_clip1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"r2v: conditioned on reference images/videos. i2v: animates a given first frame. a2v: lip-syncs a speaker frame to an audio track. t2v: text only."New value: +"r2v: conditioned on reference images/videos. i2v: animates a given first frame. t2v: text only. These three render on Boreal H3. a2v: lip-syncs a speaker frame to an audio track on Aurora 2.0."
21 tool updates
- First observed
composer_billing_state - First observed
composer_edit_file - First observed
composer_edit_image - First observed
composer_exec - First observed
composer_generate_clip - First observed
composer_generate_music - First observed
composer_import_asset - First observed
composer_list_voices - First observed
composer_project_create - First observed
composer_project_get - First observed
composer_project_list - First observed
composer_read_file - First observed
composer_share - First observed
composer_ship - First observed
composer_task_status - First observed
composer_transcribe - First observed
composer_view - First observed
composer_voice_line - First observed
composer_write_file - First observed
upload_file - First observed
upload_file_widget
Publisher details
- Operator
- Creatify · Publisher source
- Operator website
- https://creatify.ai
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://creatify.ai/mcp
- Trust center
- Not available
- Restrictions
- Free plan can connect and use it; free-tier video exports are watermarked, upgrading to a paid plan removes the watermark. No separate admin approval needed — access is via standard OAuth sign-in.
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 Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables 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.