Skip to main content
Glama

Server Details

Make AI videos, images, ads and short dramas from a description, priced first. Sign in to create.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
aicontentdrop/aicontentdrop
GitHub Stars
0

TDQS

A3.9/5.0

Scored across 42 tools

Disambiguation4/5

Most tools target a distinct action+resource (add_* card types, generate_video vs generate_image vs generate_ad, estimate_ad_cost vs estimate_credit_cost, get_generation vs get_ad_job). However, refresh_canvas is explicitly documented as returning the same answer as get_canvas, and add_frame partially overlaps group_cards, creating a couple of confusable pairs.

Naming Consistency5/5

Nearly all 42 tools follow a consistent snake_case verb_noun convention (add_*, get_*, list_*, generate_*, estimate_*, search_*). The only minor outlier is ad_to_canvas_card, but the pattern is overwhelmingly predictable.

Tool Count2/5

42 tools is very heavy for the apparent scope, and the set includes clear redundancy (refresh_canvas duplicating get_canvas). While the platform is broad, this surface is bloated and could be consolidated significantly.

Completeness3/5

Coverage is broad across boards, cards, generation, ad analysis, and content lookup, with solid create/read/update paths. But there are no delete operations anywhere (no delete_canvas, delete_card, delete_saved_ad, or delete_brand_profile), leaving lifecycle coverage incomplete.

Available Tools

42 tools
add_frameInspect

Add a labelled frame (a region such as Week 1 or Hooks) to a board. To wrap existing cards in a frame use group_cards instead. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesThe frame's label, up to 200 characters.
widthNoOptional width in pixels; defaults to 480.
heightNoOptional height in pixels; defaults to 360.
positionNoOptional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
canvasYes
next_stepYes
add_generation_cardInspect

Add a draft generation card to a board: a prompt and a model (an id from list_models) that can be rendered later with run_generation_card. Adding it costs nothing; nothing renders until it is run with a quote. Set duration and resolution on the card for a per-second model: the quote for run_generation_card must be taken with them. For a step that builds on an earlier card (a still that becomes a video), pass from_card_id: the new card is connected to that card on the board and, unless it has its own image_url, starts from that card's finished image. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefaults to video.
modelNoA model id from list_models.
widthNoOptional card width in pixels.
heightNoOptional card height in pixels.
promptNoThe generation prompt, up to 4000 characters.
durationNoOptional clip length in seconds, for video models that price by duration.
positionNoOptional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.
image_urlNoOptional public https reference image for image-to-video or image-to-image.
resolutionNoOptional, e.g. 720p, 1080p.
aspect_ratioNoOptional, e.g. 9:16, 16:9, 1:1.
from_card_idNoOptional: an image generation card or an image media card on the same board. The new card is connected to it, and its finished image is the new card's start frame when the new card runs (run the source card first).

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
edgeNoThe connection from from_card_id, when one was given.
canvasYes
next_stepYes
add_media_cardInspect

Add an image or video card to a board from a public https URL (an import_asset result, a finished generation's video_url, or an ad's video_url). Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic https URL of the image or video.
kindYes
titleNoOptional title, up to 200 characters.
widthNoOptional card width in pixels.
heightNoOptional card height in pixels.
sourceNoOptional provenance: where the media came from.
captionNoOptional caption, up to 2000 characters.
positionNoOptional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
canvasYes
next_stepYes
add_text_cardInspect

Add a text card (a note, an idea, a script line) to a board. The server places it on a grid unless a position is given. Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe card's text, up to 4000 characters.
colorNoOptional colour name or hex the website uses for the card.
titleNoOptional title, up to 200 characters.
widthNoOptional card width in pixels.
heightNoOptional card height in pixels.
positionNoOptional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
canvasYes
next_stepYes
ad_to_canvas_cardInspect

Place a saved competitor ad on a board as a media card (its video or image, the advertiser as title, the hook as caption) with its decoded brief attached when it has one. Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesA saved ad's id, from list_saved_ads or save_competitor_ad.
revisionNoThe board revision this change is based on. Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adYes
cardYes
canvasYes
next_stepYes
arrange_cardsInspect

Lay chosen cards (or the whole board) out as a grid, a row or a column. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNoOptional spacing in pixels; defaults to 24.
idsNoCard ids to arrange; omitted means every card.
layoutYes
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
connect_cards
Idempotent
Inspect

Connect two cards on a board with a line from one to the next, so the board reads as a flow: a script card to the card that renders it, an idea to each of its variations. Costs no credits. Refuses a card connected to itself, a frame, and a connection that is already there. To make an image card's result the start frame of a new card, add that card with add_generation_card and from_card_id instead. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional short label drawn on the line, up to 200 characters.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.
to_card_idYesThe card it leads to.
from_card_idYesThe card the line starts from, from cards[] on the board.

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgeYesA connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame.
canvasYes
next_stepYes
create_canvasInspect

Create a new, empty board and return it. Costs no credits. Use one board per plan or campaign; cards are added with the add_* tools. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBoard name, up to 100 characters. Defaults to Untitled Canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
decode_ad
Idempotent
Inspect

Decode a saved competitor ad into a reusable formula: hook, script, scenes, audio, call to action and style, plus a generation-ready recreation prompt. Requires a quote_id from estimate_ad_cost with kind "decode" (a flat price). Credits are charged only when the analysis succeeds; an ad decoded before returns its stored decode and charges nothing. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesA saved ad's id, from list_saved_ads or save_competitor_ad.
quote_idYesThe quote_id from estimate_ad_cost with kind "decode". Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoPresent only when the charge could not be applied to the account.
ad_idYes
cachedYesTrue when a stored decode was returned; nothing was charged.
decodeYesThe ad's formula, layer by layer, plus a generation-ready prompt.
replayedYesTrue when this quote_id had already been submitted and the original result was returned.
next_stepYes
credits_usedYesCredits charged: 0 for a stored decode or when the charge could not be applied (then note says so); null when the figure is not reported.
credits_quotedYesThe price fixed by the quote.
estimate_ad_costA
Read-onlyIdempotent
Inspect

Price a studio job before making it: a finished ad from a brief or storyboard (kind "ad"), a UGC creator video (kind "ugc"), a generated avatar (kind "avatar") or a competitor-ad decode (kind "decode"). Returns the credit lines, the total and a quote_id that generate_ad, generate_ugc_video, generate_avatar and decode_ad require. No account needed. For an ad, quote exactly the fields you will submit.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefaults to ad.
briefNoThe ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.
qualityNoLip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast.
model_tierNocinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.
storyboardNoThe storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.
persona_modeNosynthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.
needs_avatar_genNoTrue when the avatar still has to be generated (billed as a line).
needs_product_genNoTrue when the product still has to be generated (billed as a line).

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes
basisYes
linesYes
quote_idYesSigned quote. Pass it to the matching generate_* tool; it fixes the price and makes a retry safe.
next_stepYes
expires_atYesISO time after which the quote is refused.
credits_totalYesFor an ad, the most it can cost; the charge on success is never higher.
expires_in_secondsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/non-destructive, and the description is consistent with that. It adds genuinely new behavior: it returns credit lines plus a total plus a quote_id, states no account is needed, and discloses that the quote_id is a prerequisite for the generator tools. Return-format detail is limited, but the output schema is the better place for that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler: purpose, kind taxonomy, and return/contract information, all front-loaded. 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only estimator with a full output schema, this covers what is needed: what it prices, the output contract, the quote_id dependency, and the no-auth condition. Nothing essential is missing or left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by expanding the meaning of the kind enum values (what 'ad', 'ugc', 'avatar', 'decode' actually price) and by giving submission guidance ('quote exactly the fields you will submit'). It does not add syntax detail beyond the schema for the nested brief/storyboard objects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Price a studio job before making it') and then enumerates the four job kinds it prices (ad, ugc, avatar, decode). It also names the downstream consumers (generate_ad, generate_ugc_video, generate_avatar, decode_ad), so an agent can place it precisely relative to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the timing ('before making it') and adds the concrete rule 'For an ad, quote exactly the fields you will submit.' That is clear context for when to call it, but it does not address the near-neighbour sibling estimate_credit_cost, which an agent would need to disambiguate between.

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

estimate_credit_costA
Read-onlyIdempotent
Inspect

Price a video or image before making it. Returns the exact credit cost and a quote_id that generate_video and generate_image require. No account needed. Pass the duration and resolution you intend to use; some video models bill per second.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNoVideo length in seconds you intend to generate. Affects the price of per-second models.
model_idYesModel ID, e.g. "kling_3_0" or "veo_3_fast".
quantityNoHow many generations to price. Defaults to 1. Only a quote for exactly 1 can be spent; larger quantities are for planning.
resolutionNoVideo resolution you intend to generate, e.g. "720p" or "1080p". Affects the price of per-second models.
reference_video_secondsNoLength in seconds of the reference video you will pass as reference_video_url (seedance_2_5 up to 30 s, or seedance_2_0_fast up to 15 s at 720p). Reference seconds are billed as input, so they change the price; the server measures the file and refuses a quote whose length does not match.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
typeYes
basisYes
model_idYesNormalized to underscores.
quantityYes
quote_idYesSigned quote. Pass it to generate_video or generate_image; it fixes the price and makes a retry safe.
next_stepYes
resolutionNoThe resolution actually priced, for per-second models.
credits_eachYes
credits_totalYes
duration_secondsNoThe duration actually priced, for per-second models.
quote_expires_atYesISO time after which the quote is refused.
reference_video_secondsNoReference-video seconds priced as input, when a reference was quoted.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds meaningful behavioral context: it returns an exact credit cost and a spendable quote_id, requires no account, and notes that some video models bill per second. This clarifies auth needs and cost behavior beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the purpose, followed by the key output and usage pointers. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, the required output, the no-account condition, and the pricing nuance. Since an output schema exists, return values are sufficiently specified, and the overall combination of description, schema, and annotations is complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description reminds users to pass duration and resolution, but that information is already present in the schema, so it adds little beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Price a video or image before making it." It further distinguishes the tool by stating it returns a quote_id required by generate_video and generate_image, which sets it apart from cost tools like estimate_ad_cost.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly says to use this tool before generating and to pass the intended duration and resolution. It does not explicitly mention alternatives or when not to use it, but the precondition and typical workflow are unambiguous.

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

generate_ad
Idempotent
Inspect

Make a finished video ad — multi-shot, with a speaking creator, product shots, captions and an optional music bed — from a brief or a storyboard plus an avatar image and a product image. Requires a quote_id from estimate_ad_cost for exactly these fields; returns a job_id to poll with get_ad_job. Credits are charged only when the ad succeeds, and never more than the quote. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefNoThe ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.
musicNoOptional music bed.
qualityNoLip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast.
quote_idYesThe quote_id from estimate_ad_cost for these exact fields (kind ad). Required.
canvas_idNoOptional board id (from list_canvases or create_canvas): the ad is placed on it as a generation card that fills in when the render lands.
avatar_urlYesPublic https URL of the creator's reference image (a catalogue portrait, a generate_avatar result, or an import_asset URL).
model_tierNocinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.
project_idNoOptional studio project (uuid) to file the run under.
storyboardNoThe storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.
persona_modeNosynthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.
needs_avatar_genNoTrue when the avatar still has to be generated (billed as a line).
needs_product_genNoTrue when the product still has to be generated (billed as a line).
product_image_urlYesPublic https URL of the product image.
avatar_descriptionNoOptional one-line identity note for the creator (20-500 characters).
product_descriptionNoOptional one-line product note (10-500 characters).

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idYesPoll this with get_ad_job.
statusYes
replayedYesTrue when this quote_id had already been submitted and the original job was returned.
next_stepYes
studio_urlNoThe job's page in the studio on AI Content Drop.
credits_quotedYesThe ceiling fixed by the quote.
poll_after_secondsYes
generate_avatar
Idempotent
Inspect

Generate a creator portrait (Nano Banana) to use as the avatar in generate_ad, checked for hands, face and background defects. Requires a quote_id from estimate_ad_cost with kind "avatar". Finishes within the call; credits are charged only when a portrait comes back. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesWho the creator is: age, look, clothing, setting, mood (20-800 characters).
save_asNoOptional name; saves the portrait on a brand profile for reuse.
quote_idYesThe quote_id from estimate_ad_cost with kind "avatar". Required.
aspect_ratioNoDefaults to 9:16.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoPresent only when the charge could not be applied to the account.
qa_notesYes
replayedYes
next_stepYes
qa_passedYes
avatar_urlYesPass as avatar_url to generate_ad.
credits_usedYesThe charge that landed; 0 when no portrait came back or the charge could not be applied (then note says so).
credits_quotedYes
brand_profile_idNo
generate_imageA
Idempotent
Inspect

Make an AI image: a product still, a thumbnail, a poster, concept art, or a reference frame to animate later. Requires a quote_id from estimate_credit_cost so the price is agreed first; then returns a job id to poll with get_generation (kind "image"). Credits are charged only when the image succeeds. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoImage model ID from list_models with type "image". Must match the quoted model; omitted means the quoted model.
promptYesWhat the image should show.
quote_idYesThe quote_id from estimate_credit_cost for this exact image model. Required.
image_urlNoOptional public reference image (image-to-image). Only these models accept one: gpt_image_2, gpt_image_2_edit, gpt_image_2_5_flare, gpt_image_2_5_sunburst, seedream_5_0_pro.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPoll this with get_generation.
kindYes
modelNo
statusYes
replayedYesTrue when this quote_id had already been submitted and the original job was returned.
image_urlNoNull until the render finishes.
next_stepYesWhat to do next, in words, so a model need not infer it.
unlimitedNo
video_urlNoNull until the render finishes.
credits_usedYes0 until the render succeeds; billing is post-deduct.
credits_quotedYesThe price fixed by the quote.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that credits are charged only on successful generation, that the call returns a job id rather than an immediate image, and that OAuth or an API key is required. These are meaningful behavioral details that an agent needs to manage cost expectations and polling flow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized logically: purpose, workflow prerequisite, return behavior, pricing, then auth. It is dense but every sentence adds needed information, and the primary purpose is front-loaded before the procedural details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters and an output schema, the description covers the full invocation contract: what to prepare (quote_id), what happens next (job id poll via get_generation), cost timing, auth methods, and input constraints. Nothing essential for calling the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all parameters with 100% coverage, so the baseline is 3. The description adds practical semantics by explaining that quote_id must come from estimate_credit_cost, that model must match the quoted model, and that only certain models accept image_url, which goes beyond the schema's individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Make an AI image,' and lists concrete output types such as product still, thumbnail, poster, concept art, and reference frame. It further distinguishes the tool's output channel by noting the job returns a kind of 'image' to poll with get_generation, separating it from video generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the prerequisite workflow: first obtain a quote_id from estimate_credit_cost, then call this tool, then poll with get_generation. It also explains when authentication is needed and how to provide it, but it does not explicitly name a sibling alternative such as generate_video for when video output is desired.

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

generate_ugc_videoA
Idempotent
Inspect

Make a UGC-style creator video: a catalogue creator (template from list_ugc_avatars) or a person's own photo (image_url) speaks the script with lip-sync, optional voice choice and ambience. Requires a quote_id from estimate_ad_cost with kind "ugc", and image_rights_consent: true given by the person. Returns an id to poll with get_generation. Credits are charged only on success. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
voiceNoOptional voice id or name.
scriptYesWhat the creator says, up to 1000 characters.
ambienceNoOptional background sound, e.g. cafe, street, none.
languageNoOptional language code, e.g. en.
quote_idYesThe quote_id from estimate_ad_cost with kind "ugc". Required.
templateNoA creator id from list_ugc_avatars. Alternative to image_url.
image_urlNoPublic https URL of the person's photo. Alternative to template.
image_rights_consentYesMust be true, and only after the person confirmed they hold the rights to the face and accept the acceptable-use terms. No default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPoll this with get_generation.
kindYes
statusYes
replayedYes
next_stepYes
credits_usedYes0 until the render succeeds; billing is post-deduct.
credits_quotedYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (non-destructive, idempotent, open-world), and the description adds substantial context beyond them: credits are charged only on success, the call returns an id to poll, an explicit image_rights_consent requirement, and full auth instructions (OAuth or Bearer acd_live_ key with URL). This is genuinely rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and modes, then prerequisites, then cost/polling behavior. The trailing SIGN-IN block is dense but earns its place for an auth-required tool; overall efficient though slightly long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, authorized, credit-charged generation tool, the description covers inputs' provenance, consent gating, cost timing, async polling, and authentication. Since an output schema exists, no return-shape detail is needed, and 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-tool meaning: it names where template comes from (list_ugc_avatars) and where quote_id comes from (estimate_ad_cost with kind "ugc"), clarifying the authoring flow beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Make a UGC-style creator video') and clearly delineates the two modes (catalogue creator via template vs. person's own photo via image_url), distinguishing it from generic siblings like generate_video and generate_avatar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear prerequisites and routes the agent to sibling tools: template 'from list_ugc_avatars', quote_id 'from estimate_ad_cost with kind "ugc"', and polling via get_generation. It implies when to use it (UGC creator content) but doesn't explicitly state when to choose generate_video or generate_avatar instead.

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

generate_videoA
Idempotent
Inspect

Make an AI video: a product ad, a vertical clip for social, a cinematic shot, or animate a photo into video (image-to-video). Requires a quote_id from estimate_credit_cost so the price is agreed first; then returns a job id to poll with get_generation. Credits are charged only when the video succeeds. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel ID from list_models, e.g. "kling_3_0". Must match the quoted model; omitted means the quoted model.
promptYesWhat the video should show. Detailed prompts produce better results.
durationNoLength in seconds. Must match the quoted duration for per-second models.
quote_idYesThe quote_id from estimate_credit_cost for this exact model, duration and resolution. Required.
image_urlNoPublic image URL to animate (image-to-video). Required for models whose list_models entry has needs_start_image; optional for the rest.
resolutionNoe.g. "720p" or "1080p". Must match the quoted resolution for per-second models.
aspect_ratioNoDefaults to 16:9. Use 9:16 for vertical social clips.
reference_video_urlNoOptional public https URL of a reference video (for example a 3D blockout playblast) whose camera movement, shot rhythm and subject motion the generation must follow. seedance_2_5 (30 s max) or seedance_2_0_fast (15 s max, 720p). The quote must have been priced with reference_video_seconds equal to this clip's length rounded up; the server measures the clip and refuses on mismatch.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPoll this with get_generation.
kindYes
modelNo
statusYes
replayedYesTrue when this quote_id had already been submitted and the original job was returned.
image_urlNoNull until the render finishes.
next_stepYesWhat to do next, in words, so a model need not infer it.
unlimitedNo
video_urlNoNull until the render finishes.
credits_usedYes0 until the render succeeds; billing is post-deduct.
credits_quotedYesThe price fixed by the quote.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: states that credits are charged only on success, that an OAuth sign-in or a specific API key header is required, and that a job id is returned for polling. This adds billing, auth and async-job context that the hints (readOnlyHint=false, idempotentHint=true) do not convey, and it is consistent with them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and the required quote_id flow before the auth block, and every sentence carries information. The OAuth/API-key sentence is long and partly host-handled, but it is genuinely needed setup context rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-parameter, async, credit-charging tool with an output schema, the description covers the cost gate, the auth requirement, and the follow-up call (get_generation). 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by naming the sibling that produces quote_id and framing the quote as the agreed price, and by tying reference_video_url to a quote priced with reference_video_seconds. It does not add syntax beyond the schema for the remaining parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Make an AI video') and enumerates concrete output types (product ad, vertical social clip, cinematic shot, image-to-video). It distinguishes the image-to-video mode explicitly, but never differentiates itself from close siblings such as generate_ugc_video or generate_ad.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear required workflow: obtain a quote_id from estimate_credit_cost first, then poll the returned job with get_generation. Prerequisites (quote must exist, price agreed) are stated. No explicit when-not-to-use guidance versus generate_ugc_video or generate_image is offered.

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

get_accountA
Read-onlyIdempotent
Inspect

Check the signed-in account's remaining credits and current plan name before generating, and get the informational page about plans and entitlement. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
planYesfree | starter | professional | ultra | enterprise_max
info_urlYesInformational page describing plans and entitlement options.
usernameNo
can_generateYes
credits_remainingYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is known. The description adds the crucial behavior that sign-in is required)Skip, specifying two authentication methods and a link to create credentials. This adds meaningful context beyond annotations, though it doesn't describe the output format beyond 'informational page'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the primary purpose and then providing essential authentication guidance. Every sentence adds value, with no filler. The critical sign-in requirement is placed prominently after the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema and readOnly annotations, the description is quite complete. It covers purpose, usage timing, and authentication details. The only minor gap is that it doesn't explicitly state that no parameters are required (though the schema shows this), which is trivial. The output schema presumably details the response structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parametersaday, so the description need not explain parameter semantics. It correctly focuses on what the tool returns, which is abundant. With 100% schema coverage (empty schema), the description compensates fully for the lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks the signed-in account's remaining credits and current plan name, and retrieves the informational page about plans and entitlement. It uses specific verbs ('Check', 'get') and a clear resource ('signed-in account', 'informational page'), which distinguishes it from siblings like 'list_models' or 'generate_image'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use this tool before generating, and details the sign-in requirements (OAuth or API key) and where to create the key. It provides necessary context for when to call it, though it doesn't explicitly mention alternatives; however, the use case is so unique that no alternative is implied.

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

get_ad_job
Read-onlyIdempotent
Inspect

Check an ad job: stage and percent while it renders, then the finished video URL, the storyboard sheet, duration, size and the credits charged. Poll every 15 seconds after generate_ad; stop after 15 minutes. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job_id returned by generate_ad.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoPresent only when a succeeded job's charge could not be applied to the account.
errorNo
stageNostoryboard | rendering | done, while known.
job_idYes
statusYes
percentNo
next_stepYes
video_urlNoThe finished ad with burnt-in captions. Present only when succeeded.
size_bytesNo
studio_urlNoThe job's page in the studio on AI Content Drop.
credits_usedYesCredits charged for this job when the record reports them; null when a succeeded job's record does not carry the figure (credits_quoted from generate_ad is the ceiling). 0 while running, when failed, or when the charge could not be applied (then note says so).
duration_secondsNo
retry_after_secondsNoPresent while the job is not terminal.
storyboard_sheet_urlNoThe storyboard sheet image, when the run produced one.
get_articleA
Read-onlyIdempotent
Inspect

Fetch the full text of one published article as markdown, by slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesArticle slug, e.g. "kling-vs-sora-comparison".

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
slugYes
titleYes
markdownYesFull article body.
publishedNo

TDQS

A3.9/5.0
Behavior3/5

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 the 'published' scoping constraint and 'markdown' return format, which is useful but not rich behavioral context. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action, resource, format, and input in about a dozen words. Every element earns its place, with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with a full output schema, annotations covering safety, and no nested objects, the description provides everything an agent needs: what to pass (slug), what it returns (full text as markdown), and the published-only constraint. No missing critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the slug parameter is already documented with a description and example. The description's 'by slug' adds no new meaning beyond the schema, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch'), states the resource ('full text of one published article'), specifies the output format ('as markdown'), and identifies the key identifier ('by slug'). This clearly distinguishes it from sibling tools like search_articles or list_generations without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you have a slug and need the full published text) but does not explicitly state when not to use it or mention alternatives such as search_articles for finding articles. Usage context is implied, not explicitly routed.

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

get_canvas
Read-onlyIdempotent
Inspect

Read one board in full: every card with its type, position, size and data, the edges, and the revision. Generation cards that are still rendering are checked against their jobs on every read. Shows the board as a view; a board already on screen updates itself, so call this to show a board that is not. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
get_generation
Read-onlyIdempotent
Inspect

Check whether a video or image is finished and get its URL. Poll this after generate_video or generate_image; pass kind "image" for an image job. Reports status, the finished file URL, and the credits charged. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe id returned by generate_video or generate_image.
kindNoWhich job type the id belongs to. Defaults to video.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPoll this with get_generation.
kindNo
modelNoModel ID, underscored.
titleNo
statusYesgenerating | processing | completed | failed | timeout
image_urlNo
video_urlNo
credits_usedYesCharged only on success — a failed generation is 0.
error_messageNo
thumbnail_urlNo
get_saved_ad
Read-onlyIdempotent
Inspect

Read one saved competitor ad in full, with its stored decode (the ad's formula and a recreation prompt) when it has one. Costs no credits; never runs a decode. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesA saved ad's id, from list_saved_ads or save_competitor_ad.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adYes
decodeYesThe ad's formula, layer by layer, plus a generation-ready prompt.
next_stepYes
group_cardsInspect

Wrap chosen cards in a labelled frame that encloses them. Returns the board and the new frame. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesThe card ids to enclose.
labelYesThe frame's label, up to 200 characters.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
canvasYes
next_stepYes
import_assetA
Idempotent
Inspect

Copy a public image (JPEG, PNG or WebP, at most 10 MB) onto AI Content Drop so it can be used as an avatar, product or photo reference. Returns the hosted URL. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic https URL of the image.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesThe hosted copy.
bytesYes
widthNo
heightNo
next_stepYes
content_typeYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=true), the description discloses authentication requirements in detail (OAuth prompt or 'Authorization: Bearer acd_live_…' API key), the zero-credit cost, the accepted input formats/size limit, and the hosted-URL result. This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: purpose and constraints first, then return value and cost, then auth. No filler, and the auth prerequisite is clearly flagged for the agent before it attempts the call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain the response, and it still mentions the hosted URL. Combined with explicit auth, cost, and input constraints, an agent has everything needed to invoke this tool successfully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'url' param is already described, so the baseline is 3. The description nevertheless adds validation semantics the schema lacks: only publicly reachable images, restricted to JPEG/PNG/WebP, capped at 10 MB.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Copy a public image ... onto AI Content Drop') plus accepted formats and size cap, and clarifies what the asset is for (avatar, product or photo reference). This clearly differentiates it from generation siblings like generate_image or generate_avatar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use (importing an existing public image as a reference/avatar) and notes 'Costs no credits,' which implicitly steers an agent away from paid generation when an existing image suffices. It does not, however, explicitly name an alternative or state when-not-to-use.

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

import_brand_profileA
Idempotent
Inspect

Read a brand's website and save a brand profile from it: name, value props, CTA, tone and product images. Costs no credits. Low-confidence reads are returned for confirmation instead of being saved. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe brand's product page or app page.
modeNoWhat kind of page it is. Defaults to product.
persistNoSave when the read is confident. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileYesThe saved profile, or null when not saved.
warningsYes
next_stepYes
extractionNoWhat was read from the page.

TDQS

A4/5.0
Behavior4/5

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

Goes well beyond the annotations, which only declare the non-read-only/idempotent/non-destructive profile: it adds credit cost, the low-confidence confirmation branch instead of silent save, and explicit auth mechanics (OAuth prompt or Bearer acd_live_ key). It does not clarify whether saving overwrites or duplicates an existing profile, which matters for a write tool flagged idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is read and saved, then cost/confidence behavior, then the auth requirement last. No filler, and each sentence carries distinct operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers cost, auth, and the confirmation escape hatch. The one gap is the write semantics of persist (create vs overwrite on an existing brand profile), which is material for a tool with destructiveHint=false and idempotentHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so url, mode, and persist are already documented in the schema, including the enum and both defaults. The description adds no parameter-level detail (e.g., what persist=false does to the confirmation flow), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read a brand's website and save a brand profile') and enumerates exactly what the profile contains (name, value props, CTA, tone, product images). An agent can distinguish it from the read-only sibling list_brand_profiles 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful operating context (no credit cost, low-confidence reads returned rather than saved, sign-in required), but never states when to prefer this over alternatives such as list_brand_profiles or refresh_canvas, nor what happens when a profile already exists for the brand.

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

list_ad_formatsA
Read-onlyIdempotent
Inspect

See the ad formats the studio can produce — UGC, talking head, unboxing, tutorial, TV spot, product hero, hyper-motion, try-on and more — with a one-line description, the default aspect and the allowed shot count and duration. No account needed. Pick one before writing a brief.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countYes
formatsYes

TDQS

A4.4/5.0
Behavior4/5

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 auth context beyond the annotations ('No account needed') and previews the return payload, which is useful operational detail 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core action and return contents front-loaded, and the usage cue last. The format enumeration (UGC, talking head, unboxing...) is somewhat long but demonstrates catalogue breadth, so it largely earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with an output schema and full annotation coverage, the description supplies everything needed: what it lists, what each entry contains, that no account is required, and when to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters (0 params, empty schema), so the baseline is 4. The description correctly implies there is nothing to supply and instead characterizes the payload rather than inventing parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('See the ad formats the studio can produce') and enumerates the actual catalogue contents, so an agent knows exactly what comes back. It is clearly distinguishable from sibling lists (list_models, list_canvases, list_brand_profiles) and is tied to the ad-writing workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick one before writing a brief' explicitly places the tool in the workflow and signals the downstream consumer (write_ad_storyboard / generate_ad). It gives clear context but names no alternative tool or exclusion condition, 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.

list_brand_profilesA
Read-onlyIdempotent
Inspect

List the account's saved brand profiles — name, site, value props, CTA, tone, product images — so ads for the same brand reuse the same facts. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
profilesYes
next_stepYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so those are covered. The description adds genuinely new operational context the annotations lack: authentication is required, via OAuth or a bearer API key header, with the exact header format and the URL to create the key. It stops short of describing pagination or result limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and its purpose, then the auth requirement. No filler, and the critical blocker (sign-in) is called out in caps rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero params, an output schema, and strong read-only annotations, the only real risk an agent faces is auth failure — and the description covers that thoroughly. The field list is mildly redundant against the output schema, but nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 per the rubric. The description's enumeration of returned fields adds useful shape for an agent even though the output schema already exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (the account's saved brand profiles), then enumerates the fields returned (name, site, value props, CTA, tone, product images). This clearly separates it from the write-side sibling import_brand_profile and from the generation siblings it feeds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so ads for the same brand reuse the same facts' implies why and when to call it, but there is no explicit when-not or named alternative (e.g., how it relates to import_brand_profile or get_account). Usage 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.

list_canvases
Read-onlyIdempotent
Inspect

List the account's boards (visual canvases), newest first: id, name, revision, card count and the board's page link. Costs no credits. Start here to pick a board or to see that none exists yet. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
canvasesYes
next_stepYes
list_generations
Read-onlyIdempotent
Inspect

List the account's recent video generations, newest first, with their status and URLs. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many to return (1-50). Defaults to 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
generationsYes
list_modelsA
Read-onlyIdempotent
Inspect

See which AI video or image models can make a video ad, animate a photo, produce a product clip or generate an image, with the credit cost of one generation. No account needed. The list is live; count is the number of models currently offered.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoModel family to list. Defaults to video.
max_creditsNoOnly return models costing this many credits or fewer.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
typeYes
countYesModels returned after filtering.
modelsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, but the description adds genuinely new behavioral facts: no authentication is required and the list is live (so results change over time). It also clarifies that `count` reflects models currently offered. No safety or rate-limit info, but for a read-only catalog this is solid added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: capability scope first, then the no-account and live-list facts, then the meaning of `count`. No filler and the most decision-relevant information leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 0 required params, 100% schema coverage, and an output schema present, the description need not restate return fields; it still goes further by defining `count` and the live nature of the list. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters (type enum, max_credits threshold) are already fully documented in the schema — the baseline of 3 applies. The description's purpose phrases ('make a video ad, animate a photo, ... generate an image') loosely map to the video/image families but add no syntax or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (see/list) plus resource (AI video or image models) and concrete scope: what each model can produce and its credit cost for one generation. An agent can distinguish it from generate_video, generate_image, or estimate_credit_cost 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for use: it is a live catalog of available models, needs no account, and reports per-generation credit cost — useful before choosing a generator. It stops short of explicitly naming sibling alternatives (e.g., if you already know the model, go straight to generate_video), so usage is strong but not fully routed.

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

list_saved_ads
Read-onlyIdempotent
Inspect

List the competitor ads saved on the account, newest first: id, advertiser, hook, media and whether a decode is stored. Costs no credits. Start here to pick an ad to decode or place on a board. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
adsYes
countYes
next_stepYes
list_ugc_avatarsA
Read-onlyIdempotent
Inspect

See the catalogue creators available for a UGC video — name, style and a portrait URL — and the fields generate_ugc_video accepts. No account needed. A person's own photo can be used instead, with their consent.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countYes
avatarsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely non-annotation context — 'No account needed' (auth requirements) and the consent caveat for using a person's own photo — which is exactly the kind of behavioral detail the schema cannot express. No pagination or catalogue-size behavior is mentioned, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states what the agent gets before the secondary consent note. Efficient with no filler, though the trailing photo/consent clause is slightly tangential to 'list the catalogue'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no further explanation, and the description still volunteers the key fields. Combined with annotations covering safety and a no-parameter schema, the definition is complete enough for correct invocation; only routing alternatives are thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline there is nothing for the description to document. The field mentions (name, style, portrait URL) describe output, not inputs, but do no harm.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (see/list) and resource (catalogue of UGC creators) and enumerates the returned fields (name, style, portrait URL). It also ties itself to the consumer tool generate_ugc_video, which helps separate it from list_models and list_generations. 'See' is a slightly soft verb, keeping it just below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage by naming generate_ugc_video and its accepted fields, so the agent can infer this is the pre-flight lookup for that tool. However, it never states when-not to use it or names alternatives like list_models or generate_avatar explicitly, leaving routing somewhat inferred.

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

move_cardsInspect

Move one or more cards to new positions on a board. The server places new cards itself; this is for the board view's drag. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
movesYesCards and their new positions.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
refresh_canvas
Read-onlyIdempotent
Inspect

Re-read a board (same answer as get_canvas). Call it every 10 seconds while a generation card is rendering; a finished render sets the card's status to done and its media_url. It opens no new view: a board already on screen refreshes itself. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
rename_canvasInspect

Rename a board. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe new name, 1-100 characters.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
canvasYes
next_stepYes
run_generation_card
Idempotent
Inspect

Render a generation card: its prompt and model become a video or image job whose result lands in the card. Requires a quote_id from estimate_credit_cost for the card's model and kind (quantity 1), taken with the card's duration and resolution when it has them: per-second models are priced from those, and the quote is verified against the card. A card added with from_card_id and no image_url starts from its source card's finished image; until that card is done the run is refused with nothing charged. Credits are charged only on success; a retry with the same quote_id returns the same job. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idYesA generation card with a model and a prompt.
quote_idYesThe quote_id from estimate_credit_cost for this card's model and kind, quoted with the card's duration and resolution when it has them. Required.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobYes
cardYes
canvasYes
next_stepYes
credits_quotedYesThe ceiling fixed by the quote.
save_competitor_ad
Idempotent
Inspect

Keep one ad from search_competitor_ads on the account so it can be decoded and placed on a board. Pass the row exactly as returned. Costs no credits. Saving the same ad twice returns the existing saved ad. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
adYesOne row from search_competitor_ads results[], copied as is.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adYes
next_stepYes
search_articlesA
Read-onlyIdempotent
Inspect

Search AI Content Drop's published guides and model comparisons about AI video generation, prompting, and ad creative.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results (1-25). Defaults to 10.
queryYesKeywords, e.g. 'kling vs sora' or 'ugc hooks'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryYes
resultsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds content scope but no additional behavioral traits such as pagination, rate limits, or result ordering, so it stays at a baseline 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It packs the verb, resource scope, and topic coverage efficiently, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with two fully documented parameters, safety annotations, and an output schema, the description is largely sufficient. It is slightly incomplete in that it doesn't hint at the recommended flow of searching then fetching an article via get_article, but nothing essential to invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: query and limit are both documented with examples and constraints. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Search AI Content Drop's published guides and model comparisons' about AI video generation, prompting, and ad creative. It clearly differentiates from generation and listing tools, though it does not explicitly distinguish itself from the closely related get_article sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when discovering published content by keyword, such as 'kling vs sora', but it provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives like get_article for retrieving a specific article by ID.

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

search_competitor_adsA
Read-onlyIdempotent
Inspect

Search live competitor ads by keyword on Meta or TikTok: advertiser, copy, hook, call to action, media and run time per ad. Costs no credits. When live data is not available the rows are samples, marked demo: true with a note; never present those as real ads. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoimpressions (default) ranks by reach; recent by start date.
limitNoRows to return, 1-20; defaults to 10.
keywordYesWhat to search for: a product, a category or a competitor, 1-200 characters.
platformNoDefaults to meta.

Output Schema

ParametersJSON Schema
NameRequiredDescription
demoYesTrue when results are sample rows because live data was not available.
noteNoPresent only when demo is true: why, and what the rows are.
sortYes
countYesRows returned.
keywordYes
resultsYes
platformYes
next_stepYes
total_foundYesRows the search produced before limit.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety bar is covered; the description goes further by disclosing that fallback rows are synthetic and flagged demo: true, instructing the agent never to present them as real ads, and spelling out the auth path (OAuth or Authorization: Bearer acd_live_ key).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by cost, data-quality caveat, and auth prerequisite in that priority order. Every sentence carries function; the auth URL is long but necessary and appears last.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% schema coverage, the description need not explain return values, and it covers cost, fallback data semantics, and authentication. The only gap is lack of comparative guidance against sibling ad tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so keyword, platform, sort and limit are already fully documented in the schema; the description's mention of "by keyword on Meta or TikTok" only echoes that. No format or edge-case detail (e.g. keyword syntax caveats) is added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) plus resource (competitor ads) with explicit scope: live ads by keyword on Meta or TikTok. It even enumerates the per-ad fields returned (advertiser, copy, hook, CTA, media, run time), which separates it cleanly from siblings like search_articles and list_saved_ads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Costs no credits" and the demo-sample caveat imply when this is worth calling, and the sign-in requirement is a clear precondition. However, it names no alternative tool (e.g. save_competitor_ad, list_saved_ads) and gives no explicit when-not-to-use guidance, so routing is left partly to inference.

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

update_card
Destructive
Inspect

Change a card: merge fields into its data (text or title on a text card; prompt, model, kind, aspect_ratio, duration, resolution or image_url on a generation card; title or caption on a media card; label on a frame), or move and resize it. Costs no credits. status, job_id, job_kind, quote_id, media_url, thumbnail_url, credits_used and error are set by the server when a card runs and are refused here. A per-second model is priced from the card's duration and resolution, so set them before quoting. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoFields to merge into the card's data; fields not named are kept.
widthNoOptional card width in pixels.
heightNoOptional card height in pixels.
card_idYesThe card id, from cards[] on the board.
positionNoOptional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.
revisionNoThe board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.
canvas_idYesThe board id, from list_canvases or create_canvas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardYes
canvasYes
next_stepYes
write_ad_storyboardA
Read-onlyIdempotent
Inspect

Turn an ad brief into a storyboard: 1-5 shots with framing, the spoken line, the caption and the duration of each. Costs no credits. Show it to the person, edit it if needed, then price it with estimate_ad_cost and submit it with generate_ad. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header "Authorization: Bearer acd_live_…" created at https://aicontentdrop.com/settings/integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYesThe ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.

Output Schema

ParametersJSON Schema
NameRequiredDescription
formatNo
next_stepYes
storyboardYesad { aspect, totalDurationSec, voiceLanguage } and shots[].

TDQS

A4.4/5.0
Behavior4/5

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

Annotations (readOnlyHint, idempotentHint, destructiveHint=false) already cover the safety profile, and the description is consistent with them by framing this as a free drafting step. It adds genuinely useful context beyond the annotations: 'Costs no credits' and detailed OAuth/API-key auth instructions with a concrete header format and settings URL.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and output shape, then workflow, then auth. Every sentence carries load, though the trailing auth block is dense and could be split for readability. Still efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained; the description instead covers the input artifact, the downstream workflow, and the sign-in prerequisites. Nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single nested 'brief' object enumerates its fields (brandName, valueProps, shotCount, aspect, etc.) in the schema itself. The description describes the output shape rather than adding input meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (turn an ad brief into a storyboard) and immediately defines the produced artifact: 1-5 shots with framing, spoken line, caption, duration. It also names the sibling tools that follow it in the workflow (estimate_ad_cost, generate_ad), so an agent can place it precisely in the pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and sequencing: show the storyboard to the person, edit if needed, then price with estimate_ad_cost and submit with generate_ad. This routes the agent to the correct alternatives and states the ordering constraint rather than leaving it to inference.

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. 24 tool updates
    • Changedad_to_canvas_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedadd_frame2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedadd_generation_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedadd_media_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedadd_text_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedarrange_cards2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedconnect_cards2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedcreate_canvas2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changeddecode_ad2 fields changed
      • removedOutput schema / properties / decode / properties / decodedAt
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / decode / required
        Previous value: -[
        -  "layers",
        -  "recreationPrompt",
        -  "confidence",
        -  "decodedAt"
        -]New value: +[
        +  "layers",
        +  "recreationPrompt",
        +  "confidence"
        +]
    • Changedgenerate_ad2 fields changed
      • removedOutput schema / properties / run_id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / studio_url
        Added value: +{
        +  "description": "The job's page in the studio on AI Content Drop.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_ad_job2 fields changed
      • removedOutput schema / properties / run_id
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / studio_url
        Added value: +{
        +  "description": "The job's page in the studio on AI Content Drop.",
        +  "type": "string"
        +}
    • Changedget_canvas2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedget_generation1 field changed
      • removedOutput schema / properties / created_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
    • Changedget_saved_ad4 fields changed
      • removedOutput schema / properties / ad / properties / saved_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / ad / required
        Previous value: -[
        -  "id",
        -  "ad_ref",
        -  "platform",
        -  "advertiser_name",
        -  "ad_copy",
        -  "media_url",
        -  "media_type",
        -  "estimated_spend",
        -  "engagement_score",
        -  "running_days",
        -  "hook_text",
        -  "cta_text",
        -  "ad_url",
        -  "demo",
        -  "decoded",
        -  "saved_at"
        -]New value: +[
        +  "id",
        +  "ad_ref",
        +  "platform",
        +  "advertiser_name",
        +  "ad_copy",
        +  "media_url",
        +  "media_type",
        +  "estimated_spend",
        +  "engagement_score",
        +  "running_days",
        +  "hook_text",
        +  "cta_text",
        +  "ad_url",
        +  "demo",
        +  "decoded"
        +]
      • removedOutput schema / properties / decode / properties / decodedAt
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / decode / required
        Previous value: -[
        -  "layers",
        -  "recreationPrompt",
        -  "confidence",
        -  "decodedAt"
        -]New value: +[
        +  "layers",
        +  "recreationPrompt",
        +  "confidence"
        +]
    • Changedgroup_cards2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedlist_canvases2 fields changed
      • removedOutput schema / properties / canvases / items / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvases / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link"
        +]
    • Changedlist_generations1 field changed
      • removedOutput schema / properties / generations / items / properties / created_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
    • Changedlist_saved_ads2 fields changed
      • removedOutput schema / properties / ads / items / properties / saved_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / ads / items / required
        Previous value: -[
        -  "id",
        -  "ad_ref",
        -  "platform",
        -  "advertiser_name",
        -  "ad_copy",
        -  "media_url",
        -  "media_type",
        -  "estimated_spend",
        -  "engagement_score",
        -  "running_days",
        -  "hook_text",
        -  "cta_text",
        -  "ad_url",
        -  "demo",
        -  "decoded",
        -  "saved_at"
        -]New value: +[
        +  "id",
        +  "ad_ref",
        +  "platform",
        +  "advertiser_name",
        +  "ad_copy",
        +  "media_url",
        +  "media_type",
        +  "estimated_spend",
        +  "engagement_score",
        +  "running_days",
        +  "hook_text",
        +  "cta_text",
        +  "ad_url",
        +  "demo",
        +  "decoded"
        +]
    • Changedmove_cards2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedrefresh_canvas2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedrename_canvas2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedrun_generation_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
    • Changedsave_competitor_ad2 fields changed
      • removedOutput schema / properties / ad / properties / saved_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / ad / required
        Previous value: -[
        -  "id",
        -  "ad_ref",
        -  "platform",
        -  "advertiser_name",
        -  "ad_copy",
        -  "media_url",
        -  "media_type",
        -  "estimated_spend",
        -  "engagement_score",
        -  "running_days",
        -  "hook_text",
        -  "cta_text",
        -  "ad_url",
        -  "demo",
        -  "decoded",
        -  "saved_at"
        -]New value: +[
        +  "id",
        +  "ad_ref",
        +  "platform",
        +  "advertiser_name",
        +  "ad_copy",
        +  "media_url",
        +  "media_type",
        +  "estimated_spend",
        +  "engagement_score",
        +  "running_days",
        +  "hook_text",
        +  "cta_text",
        +  "ad_url",
        +  "demo",
        +  "decoded"
        +]
    • Changedupdate_card2 fields changed
      • removedOutput schema / properties / canvas / properties / updated_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / canvas / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "revision",
        -  "card_count",
        -  "updated_at",
        -  "link",
        -  "cards",
        -  "edges"
        -]New value: +[
        +  "id",
        +  "name",
        +  "revision",
        +  "card_count",
        +  "link",
        +  "cards",
        +  "edges"
        +]
  2. 2 tool updates
    • Changedgenerate_video1 field changed
      • changedInput schema / properties / image_url / description
        Previous value: -"Optional public image URL to animate (image-to-video)."New value: +"Public image URL to animate (image-to-video). Required for models whose list_models entry has needs_start_image; optional for the rest."
    • Changedlist_models2 fields changed
      • changedOutput schema / properties / models / items / properties / credits / description
        Previous value: -"Flat cost per generation."New value: +"Cost of one generation at the model's default settings; estimate_credit_cost quotes other lengths."
      • addedOutput schema / properties / models / items / properties / needs_start_image
        Added value: +{
        +  "description": "True when the model only animates an image: pass image_url to generate_video.",
        +  "type": "boolean"
        +}
  3. 3 tool updates
    • Changedestimate_ad_cost1 field changed
      • changedInput schema / properties / brief / description
        Previous value: -"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."New value: +"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."
    • Changedgenerate_ad1 field changed
      • changedInput schema / properties / brief / description
        Previous value: -"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."New value: +"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."
    • Changedwrite_ad_storyboard1 field changed
      • changedInput schema / properties / brief / description
        Previous value: -"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."New value: +"The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats."
  4. 14 tool updates
    • Changedadd_frame2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedadd_generation_card4 fields changed
      • addedInput schema / properties / from_card_id
        Added value: +{
        +  "description": "Optional: an image generation card or an image media card on the same board. The new card is connected to it, and its finished image is the new card's start frame when the new card runs (run the source card first).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / edge
        Added value: +{
        +  "description": "The connection from from_card_id, when one was given.",
        +  "properties": {
        +    "id": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "description": "Text drawn on the line, when it has one."
        +    },
        +    "source": {
        +      "description": "The card the connection starts from.",
        +      "type": "string"
        +    },
        +    "target": {
        +      "description": "The card it leads to.",
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedadd_media_card2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedadd_text_card2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedarrange_cards2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Addedconnect_cards
    • Changedcreate_canvas2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedget_canvas2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedgroup_cards2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedmove_cards2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedrefresh_canvas2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedrename_canvas2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedrun_generation_card2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
    • Changedupdate_card2 fields changed
      • addedOutput schema / properties / canvas / properties / edges / items / description
        Added value: +"A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."
      • addedOutput schema / properties / canvas / properties / edges / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "label": {
        +    "description": "Text drawn on the line, when it has one."
        +  },
        +  "source": {
        +    "description": "The card the connection starts from.",
        +    "type": "string"
        +  },
        +  "target": {
        +    "description": "The card it leads to.",
        +    "type": "string"
        +  }
        +}
  5. 2 tool updates
    • Changedestimate_credit_cost2 fields changed
      • addedInput schema / properties / reference_video_seconds
        Added value: +{
        +  "description": "Length in seconds of the reference video you will pass as reference_video_url (seedance_2_5 up to 30 s, or seedance_2_0_fast up to 15 s at 720p). Reference seconds are billed as input, so they change the price; the server measures the file and refuses a quote whose length does not match.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / reference_video_seconds
        Added value: +{
        +  "description": "Reference-video seconds priced as input, when a reference was quoted.",
        +  "type": "number"
        +}
    • Changedgenerate_video1 field changed
      • addedInput schema / properties / reference_video_url
        Added value: +{
        +  "description": "Optional public https URL of a reference video (for example a 3D blockout playblast) whose camera movement, shot rhythm and subject motion the generation must follow. seedance_2_5 (30 s max) or seedance_2_0_fast (15 s max, 720p). The quote must have been priced with reference_video_seconds equal to this clip's length rounded up; the server measures the clip and refuses on mismatch.",
        +  "type": "string"
        +}
  6. 32 tool updates
    • Addedad_to_canvas_card
    • Addedadd_frame
    • Addedadd_generation_card
    • Addedadd_media_card
    • Addedadd_text_card
    • Addedarrange_cards
    • Addedcreate_canvas
    • Addeddecode_ad
    • Addedestimate_ad_cost
    • Addedgenerate_ad
    • Addedgenerate_avatar
    • Addedgenerate_ugc_video
    • Addedget_ad_job
    • Addedget_canvas
    • Addedget_canvas_link
    • Addedget_saved_ad
    • Addedgroup_cards
    • Addedimport_asset
    • Addedimport_brand_profile
    • Addedlist_ad_formats
    • Addedlist_brand_profiles
    • Addedlist_canvases
    • Addedlist_saved_ads
    • Addedlist_ugc_avatars
    • Addedmove_cards
    • Addedrefresh_canvas
    • Addedrename_canvas
    • Addedrun_generation_card
    • Addedsave_competitor_ad
    • Addedsearch_competitor_ads
    • Addedupdate_card
    • Addedwrite_ad_storyboard
  7. 6 tool updates
    • Changedestimate_credit_cost10 fields changed
      • addedInput schema / properties / duration
        Added value: +{
        +  "description": "Video length in seconds you intend to generate. Affects the price of per-second models.",
        +  "type": "number"
        +}
      • changedInput schema / properties / quantity / description
        Previous value: -"How many generations. Defaults to 1."New value: +"How many generations to price. Defaults to 1. Only a quote for exactly 1 can be spent; larger quantities are for planning."
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "Video resolution you intend to generate, e.g. \"720p\" or \"1080p\". Affects the price of per-second models.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / basis
        Added value: +{
        +  "enum": [
        +    "flat",
        +    "per_second"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / duration_seconds
        Added value: +{
        +  "description": "The duration actually priced, for per-second models.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / quote_expires_at
        Added value: +{
        +  "description": "ISO time after which the quote is refused.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / quote_id
        Added value: +{
        +  "description": "Signed quote. Pass it to generate_video or generate_image; it fixes the price and makes a retry safe.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / resolution
        Added value: +{
        +  "description": "The resolution actually priced, for per-second models.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "model_id",
        -  "name",
        -  "credits_each",
        -  "quantity",
        -  "credits_total",
        -  "type"
        -]New value: +[
        +  "model_id",
        +  "name",
        +  "credits_each",
        +  "quantity",
        +  "credits_total",
        +  "type",
        +  "basis",
        +  "quote_id",
        +  "quote_expires_at",
        +  "next_step"
        +]
    • Addedgenerate_image
    • Changedgenerate_video12 fields changed
      • changedInput schema / properties / aspect_ratio / description
        Previous value: -"Defaults to 16:9."New value: +"Defaults to 16:9. Use 9:16 for vertical social clips."
      • changedInput schema / properties / duration / description
        Previous value: -"Length in seconds. Defaults to 5."New value: +"Length in seconds. Must match the quoted duration for per-second models."
      • changedInput schema / properties / model / description
        Previous value: -"Model ID from list_models, e.g. \"kling_3_0\". Omitted means the platform picks a suitable one."New value: +"Model ID from list_models, e.g. \"kling_3_0\". Must match the quoted model; omitted means the quoted model."
      • addedInput schema / properties / quote_id
        Added value: +{
        +  "description": "The quote_id from estimate_credit_cost for this exact model, duration and resolution. Required.",
        +  "type": "string"
        +}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "e.g. \"720p\" or \"1080p\". Must match the quoted resolution for per-second models.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "prompt"
        -]New value: +[
        +  "prompt",
        +  "quote_id"
        +]
      • addedOutput schema / properties / credits_quoted
        Added value: +{
        +  "description": "The price fixed by the quote.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / credits_used / description
        Previous value: -"0 until the render succeeds — billing is post-deduct."New value: +"0 until the render succeeds; billing is post-deduct."
      • addedOutput schema / properties / image_url
        Added value: +{
        +  "description": "Null until the render finishes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / kind
        Added value: +{
        +  "enum": [
        +    "video",
        +    "image"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / replayed
        Added value: +{
        +  "description": "True when this quote_id had already been submitted and the original job was returned.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "status",
        -  "credits_used",
        -  "next_step"
        -]New value: +[
        +  "id",
        +  "kind",
        +  "status",
        +  "credits_quoted",
        +  "credits_used",
        +  "replayed",
        +  "next_step"
        +]
    • Changedget_account3 fields changed
      • addedOutput schema / properties / can_generate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / info_url
        Added value: +{
        +  "description": "Informational page describing plans and entitlement options.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "plan",
        -  "credits_remaining"
        -]New value: +[
        +  "plan",
        +  "credits_remaining",
        +  "can_generate",
        +  "info_url"
        +]
    • Changedget_generation4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"The id returned by generate_video."New value: +"The id returned by generate_video or generate_image."
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "Which job type the id belongs to. Defaults to video.",
        +  "enum": [
        +    "video",
        +    "image"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / image_url
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / kind
        Added value: +{
        +  "enum": [
        +    "video",
        +    "image"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_generations2 fields changed
      • addedOutput schema / properties / generations / items / properties / image_url
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / generations / items / properties / kind
        Added value: +{
        +  "enum": [
        +    "video",
        +    "image"
        +  ],
        +  "type": "string"
        +}
  8. 3 tool updates
    • Changedget_account1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedlist_generations1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedlist_models1 field changed
      • addedInput schema / required
        Added value: +[]
  9. 8 tool updates
    • First observedestimate_credit_cost
    • First observedgenerate_video
    • First observedget_account
    • First observedget_article
    • First observedget_generation
    • First observedlist_generations
    • First observedlist_models
    • First observedsearch_articles

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Make UGC-style video ads without filming: tell your AI assistant what to say and get a vertical clip of a realistic actor saying it, ready for TikTok, Reels or Shorts. Pick or describe an actor, choose a voice from samples, and see the price before rendering. It also makes faceless videos from a script or a short brief: narration over an opening animated clip and image scenes.
    14
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Generate video from a prompt, from an image, or from up to thirty reference images, routed across the field of AI video models (Sora, Veo, Kling, Seedance, Hailuo, Wan and more). Quotes the credit cost before spending it and refunds a technical failure automatically.
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.