Skip to main content
Glama

Why this exists

I asked Claude to make a short series of video reels. 61 clips and four rounds of revisions later it had burned through 10.3 million Seedance tokens. I found out what that meant from the bill: about $100.

The agent did nothing wrong. It reported tokens, and tokens mean nothing to a human. Dollars do.

So this server prices every request in dollars before it is sent, lets the cheap stuff through, and stops to ask you when it matters. Not in a log. Not on the invoice. Before the money is gone.

Related MCP server: Premiere-MCP-BuildX-Exclusive-V3

What you get

Video

Seedance 2.5, 2.0, 2.0 Fast and 2.0 Mini. Text to video, first and last frame, reference images, reference videos, reference audio.

Images

Seedream 5.0 Pro, Flash and Lite (plus 4.5 and 4.0). Up to 10 reference images, up to 15 related images per call.

Spend guard

A dollar estimate on every call, an ask-first limit, a budget per day, week or month, and an optional hard cap.

Real approvals

A dialog drawn by your MCP client that the model can't click for you. A chat fallback everywhere else.

Batch approval

One yes for a whole shoot. Each clip draws from the approved amount and can't go past it.

Whole-key tracking

Counts what your key spent from any tool or script, not just this server.

No babysitting

wait=true blocks until the video is done. save_to keeps a copy before the 24 hour link expires.

Errors with fixes

Face policy, model activation and moderation errors come back with what to do next.

Quick start

1. Get a key. Sign up at BytePlus, open ModelArk, activate the Seedance and Seedream models under Model activation > Media (free, you pay per generation), then create a key under API Key Management.

2. Add the server. For Claude Code:

claude mcp add seedance --scope user -e ARK_API_KEY=your-key -- uvx --from git+https://github.com/atharva3vedi/seedance-mcp seedance-mcp --budget 50

For Claude Desktop, Cursor, Windsurf or any other MCP client, add this to its MCP config:

{
  "mcpServers": {
    "seedance": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/atharva3vedi/seedance-mcp", "seedance-mcp", "--budget", "50"],
      "env": { "ARK_API_KEY": "your-key" }
    }
  }
}

No uv? Run pip install git+https://github.com/atharva3vedi/seedance-mcp and use seedance-mcp as the command.

3. Ask for something.

make a 5 second clip of a cat surfing at sunset, draft quality first

Claude drafts it on Seedance 2.0 Mini at 480p (about $0.17), waits for it, and hands you the file.

The spend guard

Every generation is priced before it leaves your machine. Then:

Situation

What happens

Under your ask-first limit and inside your budget

Goes straight through. The cost is in the result.

Over the ask-first limit

Asks you first.

Would take you past your budget

Asks you first, even for a $0.09 image.

No price on file for the model

Asks you first, and says the cost is unknown.

Would go past your hard cap

Refused. No approval can override it, only a config change.

How it asks

In a dialog when your client supports MCP elicitation (Claude Code 2.1.76 and later, among others). The server asks your client directly, your client shows you the dialog, and the answer comes from you. The model never sees a button it could press.

In chat everywhere else. The tool returns needs_your_ok with a one-time approval_id and the exact sentence to show you. Claude has to ask, and only after you say yes can it call again with that id. Each id is tied to that exact request: change the prompt, the model or the duration and it stops working. It expires after 15 minutes.

Chat approvals rely on the agent following instructions. Dialog approvals don't. Set --approval dialog to forbid the chat path entirely.

Batches

Before a shoot, Claude calls estimate_cost to tell you the total, then preapprove_spend to ask once:

Spend about $2.33 on two surf clips (2x Seedance 2.5, 5s, 720p, with audio)?
This month: $14.20 spent of your $50.00 budget. After this: $16.53.

You get back an approval_id that covers up to that many calls and that many dollars for 3 hours. A third clip, or a pricier one, needs a new yes.

It sees everything on your key

Before deciding, the server pulls your recent tasks from BytePlus, so clips made by scripts, other agents or another Claude window all count toward the budget. Images and older tasks live in a local ledger at ~/.seedance-mcp/ledger.jsonl, which every session shares.

Check your spend from a terminal any time:

seedance-mcp spend
seedance-mcp: this month
  $14.20 of $50.00  [######..............] 28%
  ask first above $0.50, hard cap none
    Seedance 2.5           11     $13.84
    Seedream 5.0 Pro        4      $0.36

Settings

Pass flags after seedance-mcp, or set environment variables. You can also keep them in ~/.seedance-mcp/.env (see .env.example), which keeps your key out of every repo.

Flag

Environment

Default

--ask-above

SEEDANCE_ASK_ABOVE_USD

0.50

Ask before any single generation above this. 0 asks every time.

--budget

SEEDANCE_BUDGET_USD

20

Ask before anything that crosses this...

--period

SEEDANCE_BUDGET_PERIOD

month

...per day, week or month.

--hard-cap

SEEDANCE_HARD_CAP_USD

none

Never spend past this in a period.

--approval

SEEDANCE_APPROVAL

auto

auto (dialog, else chat), dialog, chat, or off (track only).

--output-dir

SEEDANCE_OUTPUT_DIR

none

Save every finished video and image here.

SEEDANCE_VIDEO_MODEL

mini

Default video model.

SEEDANCE_IMAGE_MODEL

pro

Default image model.

SEEDANCE_PRICES_FILE

none

JSON with extra or corrected prices.

ARK_BASE_URL

Singapore

ModelArk endpoint.

What things cost

BytePlus list prices as of October 2026, for a clip without reference video:

Model

Alias

5s 480p

5s 720p

10s 720p

5s 1080p

Seedance 2.5

2.5

$0.52

$1.17

$2.32

$2.87

Seedance 2.0

2.0

$0.34

$0.76

$1.52

$1.89

Seedance 2.0 Fast

fast

$0.27

$0.61

$1.21

Seedance 2.0 Mini

mini

$0.17

$0.38

$0.76

Seedream 5.0 Pro is $0.045 per image up to 1.5K and $0.09 above. Flash is $0.018, Lite $0.035. Failed and moderated generations are free.

Estimates use the formula BytePlus bills with, (input video seconds + output seconds) x width x height x 24 fps / 1024 tokens plus one frame, and match real usage to the token. Prepaid token packs and discounts aren't reflected. If prices change before this table does, point SEEDANCE_PRICES_FILE at a JSON file:

{
  "video": {
    "dreamina-seedance-2-0-mini-260615": {
      "name": "Seedance 2.0 Mini", "max_input_video_seconds": 15,
      "rates": { "sd": [3.5, 2.1] }
    }
  }
}

rates are USD per million tokens, [without video input, with video input], keyed by sd (480p and 720p), 1080p and 4k.

Tools

Tool

What it does

generate_video

Make a Seedance clip. Plain arguments (prompt, first_frame, reference_videos...), and local image paths work. wait and save_to are optional.

generate_image

Make Seedream images from a prompt and up to 10 references.

video_task

Status of a clip. Once done: the link, the real cost, and the saved file.

list_video_tasks

Recent clips on your key, with what each one cost.

cancel_video_task

Cancel a queued clip.

estimate_cost

Price a plan in dollars without spending anything.

preapprove_spend

One approval for a whole batch.

spend_status

Spent so far, by model, against your budget.

check_setup

Is the key good, can it connect, and will approvals come as a dialog or in chat.

Tips that save money

  • Draft on Mini at 480p, then render the keeper on 2.5. A Mini draft costs about a seventh of a 720p render on 2.5.

  • Reuse instead of re-rendering. Trim, re-time and re-caption clips in an editor. A re-shoot costs the full price again.

  • Faces: Seedance 2.x rejects realistic human faces as image input. To keep one person across clips, make their first clip text to video, then pass that clip's video_url in reference_videos. The server knows that clip's length and prices it exactly.

  • No watermark by default. The BytePlus API stamps one unless told not to, and this server tells it not to. Pass watermark=true if you want it.

  • Let it wait. wait=true costs nothing extra and saves a dozen polling calls.

Development

git clone https://github.com/atharva3vedi/seedance-mcp && cd seedance-mcp
uv venv && uv pip install -e ".[dev]"
pytest

Tests run against a fake ModelArk and a fake human answering dialogs, so they never spend a cent. Billing formulas are pinned to token counts from real tasks.

Credits

Started life as a fork of kienbui-demo/byteplus-mcp and was rewritten from scratch for local use, with a spend guard.

Not affiliated with ByteDance or BytePlus. Seedance and Seedream are their trademarks. You pay BytePlus directly for what you generate.

MIT licensed.

Available Tools

9 tools
cancel_video_taskA

Cancel a queued video task. Running tasks can't be stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden and does disclose the key trait: only queued tasks are affected, running ones are untouched. It says nothing about idempotency, behavior on an invalid or already-completed task_id, or permission requirements, leaving meaningful gaps.

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 short sentences, front-loaded with the action and followed by the limiting constraint. Every sentence earns its place with no filler.

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 single-parameter cancellation tool with an output schema present, the description covers purpose and the critical limitation adequately. The only real omission is the meaning/source of task_id, which the schema also fails to document.

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

Parameters2/5

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

Schema description coverage is 0% for the single task_id parameter, and the description adds no information about its format, where to obtain it (e.g., from list_video_tasks), or whether it accepts a full id or prefix. Low coverage should be compensated here, and it is not.

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+resource ('Cancel a queued video task') and immediately scopes it to queued tasks, so the agent knows exactly what operation this performs versus siblings like generate_video or list_video_tasks. It stops short of explicitly naming an adjacent sibling, so a 4 rather than a 5.

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

Usage Guidelines4/5

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

The second sentence gives a clear negative condition ('Running tasks can't be stopped'), which tells the agent when this tool will not apply. It does not name an alternative path for running tasks, but the usage context is unambiguous.

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

check_setupB

Check the API key, the connection, and how spend approvals will reach the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the diagnostic scope (API key validity, connectivity, approval-delivery routing), which implies a non-mutating operation. It stops short of saying whether it is purely read-only, whether it requires credentials already present, or how failures are surfaced, so the disclosure is partial.

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 compact sentence with the diagnostic target listed up front and no filler. It is as short as it can be while still naming the three things checked.

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 not be described, and the tool is a parameterless read-style check. The description covers the subjects of the check adequately; only the absence of trigger conditions and failure semantics keeps it from being fully complete.

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 schema takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies, and the description correctly does not invent arguments.

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 (check) and enumerates three concrete targets: API key, connection, and spend-approval delivery path. That tells an agent this is a setup/connectivity diagnostic rather than a data-fetching tool. It does not, however, explicitly distinguish itself from the sibling spend_status, which also concerns spend.

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

Usage Guidelines2/5

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

There is no statement of when to run this versus alternatives such as spend_status or preapprove_spend, nor any prerequisites or post-conditions. Usage can only be inferred loosely from the word 'check' and the setup-oriented subject matter.

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

estimate_costB

Price a plan in dollars without spending anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose one important behavioral trait — no cost is incurred — but says nothing about authentication, whether the estimate is authoritative or approximate, rate limits, or how results should be interpreted before calling preapprove_spend.

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 short sentence, front-loaded with the verb and the key differentiator. No wasted words and no buried information.

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

Completeness2/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 explanation, but the tool takes a complex array of batch line items and the description gives no guidance on shaping that input or on how model/duration/reference parameters affect the price. For a nested pricing tool this is under-specified.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the 'items' array, the PlanItem structure, or any of the fields that drive pricing (kind, model, duration, resolution, reference images). The nested schema defines fields internally, but the description contributes no parameter meaning at all.

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 (price) and resource (a plan) and adds the key scope qualifier 'without spending anything', which separates it from the spend/generate siblings. It does not name a specific alternative (e.g. preapprove_spend or spend_status), so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

'Without spending anything' implies a dry-run/preview usage window, which hints at when to call this rather than actually generating or spending. However, it names no alternative tool and gives no explicit when-not condition, leaving the before-vs-after-spend workflow to inference.

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

generate_imageC

Make an image with Seedream. Priced and checked by the spend guard first.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo1K, 2K, 4K or WIDTHxHEIGHT2K
modelNopro (Seedream 5.0 Pro), flash, lite, 4.5, 4.0 or an id
promptYes
save_toNoFile or folder to save images
watermarkNo
max_imagesNoUp to N related images
approval_idNo
output_formatNojpeg
reference_imagesNoUp to 10 image URLs or local paths

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It usefully discloses that spend-guard pricing/checking happens before generation, implying a possible rejection or approval path (matching the approval_id parameter). However it omits everything else: output location side effects (save_to), watermarking behavior, batch semantics, and failure modes.

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?

Two tight sentences, front-loaded with the core action and cost-gate note; nothing is wasted. It is arguably too terse for a 9-parameter paid tool, but as a structure it is clean.

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

Completeness2/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 explanation, but the tool takes 9 parameters, incurs cost, and is gated by an approval flow. An 11-word description cannot make an agent confident about the approval_id/max_images/save_to interactions, leaving it materially incomplete.

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

Parameters2/5

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

Schema coverage is only 56% across 9 parameters, and the description clarifies none of them. Undocumented parameters like approval_id and watermark get no explanation of their role or when they matter, so the description does not compensate for the coverage gap.

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+resource: 'Make an image with Seedream,' which is unambiguous about the operation and the backing model. Sibling tools are all video/spend/status related, so the image-generation purpose is naturally distinguishable, but the description does not explicitly name them.

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

Usage Guidelines2/5

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

No when-to-use guidance, no alternatives, no prerequisites spelled out. The phrase 'checked by the spend guard first' hints that a cost/approval flow is involved but never names estimate_cost or preapprove_spend, nor explains when generation will be blocked.

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

generate_videoC

Make a Seedance video (text-to-video, image-to-video, or with reference media). Priced and checked by the spend guard before anything is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
waitNoBlock until the video is done
modelNo2.5 (best), 2.0, fast, mini (cheap drafts) or a full id
ratioNoadaptive
promptYesWhat happens in the clip
save_toNoFile or folder to save the mp4
durationNoSeconds, 2-15
timeout_sNo
watermarkNo
last_frameNoImage URL or local path
resolutionNo720p
approval_idNoOnly after the user said yes, or from a batch
first_frameNoImage URL or local path
camera_fixedNo
generate_audioNo
reference_audioNoAudio URLs
reference_imagesNoImage URLs or local paths
reference_videosNoPublic video URLs, e.g. an earlier video_url
return_last_frameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It does disclose one valuable trait — pricing and spend-guard gating happen before dispatch — but is silent on async vs blocking behavior, how 'wait' interacts with 'timeout_s', and the approval_id workflow, all of which matter for a 19-parameter generation call.

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?

Two sentences, front-loaded with the action and the key operational guarantee, with zero filler. It is arguably sparse for a 19-parameter tool, but every sentence earns its place.

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

Completeness2/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 explanation. However, for a 19-parameter mutation-style tool with no annotations, the description omits the async/blocking model, the approval flow implied by approval_id, and cost/approval prerequisites — too much is left for the agent to guess.

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 58%, so the schema already documents many parameters. The description adds real value by mapping first_frame/last_frame/reference_images/reference_videos onto the text-to-video, image-to-video, and reference-media modes, but it does not compensate for the undocumented remainder.

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 a Seedance video') and enumerates the three generation modes, which maps directly to the first_frame/last_frame/reference_* parameters. It does not explicitly distinguish itself from siblings like video_task or generate_image, so it stops short of a 5.

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

Usage Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative routing is given. The mention of the spend guard hints at an approval workflow, but the agent is never told when to prefer video_task, cancel_video_task, or preapprove_spend, nor when this tool is the wrong choice.

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

list_video_tasksB

Recent video tasks on this key, newest first, with what each one cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
modelNo
statusNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses ordering ('newest first') and that per-task cost is included, but says nothing about read-only semantics, pagination behavior, default page size, or result limits, which an agent needs for a paged listing.

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 compact sentence with the resource, scope, ordering, and return content front-loaded; no filler whatsoever.

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

Completeness2/5

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

The output schema covers return values and cost, so that is not a gap. However, with no annotations and four entirely undocumented parameters, the description leaves filtering and pagination behavior unexplained for an agent that must decide how to page and filter.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters. The description mentions 'recent' which hints at ordering, but never explains 'page', 'page_size' (with its 100 max), or that 'model' and 'status' act as filters — a significant omission at 0% coverage.

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 ('list ... video tasks'), plus scope ('on this key') and ordering ('newest first'). It clearly differs from the singular siblings 'video_task' and 'generate_video', but never names an alternative explicitly, so sibling differentiation is implicit rather than stated.

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

Usage Guidelines2/5

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

The description implies a browse-recent-history use case but gives no when-to-use guidance, no conditions for choosing it over 'video_task' (single fetch) or 'spend_status' (cost aggregation), and no exclusions or prerequisites.

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

preapprove_spendA

Get one human approval for a whole batch. Returns an approval_id to pass to each generate call; it covers up to the approved dollars and number of calls for 3 hours.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoWhat the batch is for
itemsNo
approval_idNoConfirm a pending batch, only after the user said yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses the human-in-the-loop requirement, the spend scope ('up to the approved dollars and number of calls'), and a concrete 3-hour validity window. It leaves gaps around idempotency, what happens on expiry, and whether calling it commits money, but the expiry and coverage-cap disclosures are exactly the behavioral traits an agent needs for a spend tool.

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 compact sentences, front-loaded with the core action and followed by the mechanism and constraint. Every clause earns its place.

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 not be explained. For a 3-param approval tool, the description covers the two-phase flow (request then confirm) and the validity window. It could say more about failure/expiry behavior and its relationship to estimate_cost, but it is close to complete.

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 67% and the schema itself documents the PlanItem fields well. The description enriches approval_id semantics by tying it to downstream generate calls, which is genuinely useful. It adds nothing for 'note' or 'items', so it sits at the baseline for a partially documented schema.

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+resource (get one human approval for a whole batch) and immediately explains what the tool produces (an approval_id). It is clearly distinguishable from the generate_* siblings because it is an approval/pre-flight step. However, it does not explicitly differentiate itself from the adjacent spend_status or estimate_cost siblings, which also belong to the pre-spend flow.

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?

Usage is implied rather than stated: the reader infers they should call this before generate calls and then reuse the approval_id. The approval_id parameter adds a strong conditional ('only after the user said yes') that clarifies the confirm-phase. But there is no explicit when/when-not guidance or comparison to estimate_cost, which an agent would plausibly confuse this with.

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

spend_statusA

What you've spent this period, by model, against your budget and caps.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It clearly frames this as a reporting/status read, which is the main behavioral fact, but it says nothing about auth requirements, whether the period is configurable, or freshness of the data. For a zero-parameter read tool the risk surface is small, so this is adequate rather than strong.

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 tight sentence with the core value front-loaded ('what you've spent this period') and the qualifiers (by model, against budget and caps) trailing efficiently. Nothing is wasted.

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 not be explained, and the description correctly focuses on what the tool reports. It is nearly complete; only a note on the meaning of 'this period' or read-only status would close the remaining gap.

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 of 4 applies. There is no parameter behavior the description needs to compensate for.

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 resource and scope: current-period spend, broken down by model, measured against budget and caps. That distinguishes it implicitly from estimate_cost (forward-looking) and preapprove_spend (approval), though it never names those siblings directly.

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?

Usage is implied by the content ('what you've spent this period'), but there is no explicit when-to-use statement or routing against the spend-related siblings estimate_cost and preapprove_spend. An agent can infer the context but must do the disambiguation itself.

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

video_taskC

Status of a video task. When it has succeeded: video_url, real cost, saved file.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoBlock until the task finishes
save_toNoFile or folder to save the mp4
task_idYes
timeout_sNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses success outputs (video_url, real cost, saved file) but omits whether the operation is read-only, that save_to causes a file write side effect, how wait/blocking behaves, and what happens on failure or timeout.

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?

The description is two short, front-loaded sentences with no wasted words. The second sentence is telegraphic but still earns its place by summarizing successful outcomes.

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

Completeness3/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 in depth. However, with no annotations, the description leaves important behavioral context unstated—such as read-only nature, save_to side effects, blocking behavior, and error handling—making it minimally adequate for a status tool with a wait parameter.

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

Parameters2/5

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

Schema description coverage is 50%, with task_id and timeout_s undocumented in both schema and description. The description adds no parameter-level meaning beyond hinting at 'saved file' (already covered by the save_to schema description), and does not compensate for the missing semantics of task_id or timeout_s.

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 states a clear verb+resource: retrieving the status of a specific video task. It distinguishes itself from siblings like list_video_tasks (plural) and generate_video (creation) by referring to a singular 'a video task', though it does not explicitly name alternatives.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as list_video_tasks or generate_video. It merely states what it does, leaving the agent to infer context from the name and required task_id.

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. 9 tool updatesv0.1.0
    • First observedcancel_video_task
    • First observedcheck_setup
    • First observedestimate_cost
    • First observedgenerate_image
    • First observedgenerate_video
    • First observedlist_video_tasks
    • First observedpreapprove_spend
    • First observedspend_status
    • First observedvideo_task

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target distinct actions (generate, cancel, estimate, check), and the spend trio of estimate_cost/spend_status/preapprove_spend is clearly differentiated by description. The only mild overlap is video_task (single status) versus list_video_tasks (batch listing), which descriptions resolve adequately.

Naming Consistency4/5

Snake_case is used throughout and most names follow a verb_noun pattern (generate_video, cancel_video_task, estimate_cost, check_setup). Minor deviations are the noun-phrase names video_task and spend_status, which read less like actions than their peers.

Tool Count5/5

Nine tools is well-scoped for a media-generation service with spend controls, covering generation, task lifecycle, and cost management without redundancy. Each tool earns its place.

Completeness4/5

The surface covers generation (video/image), task lifecycle (status, list, cancel), and the full cost-approval loop, which is strong coverage. A minor gap is the asymmetry where video tasks have status/list/cancel lifecycle but images have no equivalent task-status tool.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers