Skip to main content
Glama
skeetmtp
by skeetmtp

seedance-mcp

一个 MCP 服务器,让 Claude Code 能够使用 BytePlus ModelArk Dreamina Seedance 2.5 生成视频。

用自然语言向 Claude Code 描述视频需求;它会将任务提交给 BytePlus,轮询直到渲染完成,然后返回视频 URL 以及 BytePlus 报告的元数据。


1. 功能概述

通过 MCP stdio 提供六个工具:

工具

用途

seedance_create_video

提交一个生成任务。立即返回任务 ID——生成是异步的。

seedance_get_video

对某个任务进行一次状态检查;成功后返回视频 URL。

seedance_wait_for_video

带退避策略轮询,直到任务成功、失败或超时。

seedance_download_video

在 24 小时 URL 过期前,将完成的视频保存到本地文件。

seedance_cancel_video

取消一个排队中的任务,或删除已完成任务的记录。

seedance_list_tasks

列出最近的任务,可按状态和模型筛选。

它处理了那些容易出错的部分:将本地图片和音频编码为 API 期望的 Base64 数据 URI 格式,在请求发送前强制检查每个模型的参数限制,用退避策略重试临时故障,以及确保 API 密钥不会出现在任何日志行或错误消息中。

Related MCP server: @lweight/xbrush-api-mcp

2. 前提条件

  • Python 3.11+

  • uv — brew install uv 或 curl -LsSf https://astral.sh/uv/install.sh | sh

  • Claude Code 2.x

  • 一个 BytePlus ModelArk 账户,拥有 API 密钥并已激活 Seedance 模型。

3. BytePlus 配置

  1. 创建 API 密钥:ModelArk 控制台 → API 密钥。

  2. 激活模型。 Seedance 2.5 默认未启用。BytePlus 要求满足以下条件之一:

    • 账户余额超过 30 美元,或

    • 购买了 30 美元或更高档位的 AI 储蓄计划,或

    • 拥有剩余配额的 Seedance 资源包。

    在 ModelArk → 模型激活 → 计算机视觉 下激活。如果没有激活,即使密钥本身有效,任务创建也会因授权错误而失败。

  3. 记下你的区域。下面的默认基础 URL 是 ap-southeast(新加坡)。如果你的账户在其他区域配置,请相应设置 BYTEPLUS_BASE_URL——在一个区域创建的任务在另一个区域不可见。

4. 安装

git clone <this repo> ~/code/seedance-mcp   # or just use the directory you already have
cd ~/code/seedance-mcp
uv sync

验证:

uv run pytest -q          # 93 tests, all offline against mocked HTTP
uv run ruff check .

5. .env 设置

cp .env.example .env

然后填写一个必需的变量:

BYTEPLUS_API_KEY=your-modelark-api-key

其他所有变量都是可选的,并且已有默认值:

BYTEPLUS_BASE_URL=https://ark.ap-southeast.bytepluses.com/api/v3
SEEDANCE_MODEL_ID=dreamina-seedance-2-5-260628

.env 已被 gitignore。密钥仅从环境变量读取——此服务器永远不会将其写入磁盘,不会记录,并且在 API 错误消息到达 Claude 之前会将其清除。

6. 选择 Seedance 2.5 模型 ID

Seedance 2.5 是一个共享的、普遍可用的模型 ID——你不需要创建专用端点。默认值为:

dreamina-seedance-2-5-260628

注意 dreamina- 前缀。这是 BytePlus 命名中一个真实存在的不一致之处:2.x 的 Dreamina 模型带有此前缀,而 1.x 的 ID 则没有(seedance-1-5-pro-251215)。将 1.x 形状的 ID 复制给 2.5 使用是导致“模型未找到”错误的最常见原因。

在 ModelArk 模型列表 中确认你账户的当前 ID。

如果你更喜欢专用端点(用于按端点限速、预付费计费或监控),请在控制台中创建一个,并将其端点 ID 填入 SEEDANCE_MODEL_ID:

SEEDANCE_MODEL_ID=ep-20260817120000-abcde
SEEDANCE_MODEL_PROFILE=seedance-2.5

只有在那种情况下才需要 SEEDANCE_MODEL_PROFILE:一个 ep-... 格式的 ID 并不能说明背后是哪个模型,因此没有它,服务器无法在本地验证参数,而是将所有参数传递给 API 进行验证。

7. 注册到 Claude Code

在此目录下(使用绝对路径——Claude Code 可能从任意工作目录启动服务器):

claude mcp add \
  --transport stdio \
  --scope user \
  byteplus-seedance \
  -- uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp

--scope user 使其在所有项目中可用。使用 --scope project 可通过 .mcp.json 与仓库协作者共享,或省略 --scope 仅用于当前项目。

服务器会从其自身目录读取 .env,因此无需 -e 标志。如果你更愿意显式传递密钥:

claude mcp add --scope user byteplus-seedance \
  -e BYTEPLUS_API_KEY=your-key \
  -- uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp

8. 验证

claude mcp list

预期会看到类似这样的行:

byteplus-seedance: uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp - ✓ Connected

然后在 Claude Code 中,/mcp 会列出服务器及其六个工具。可以这样问:

列出我最近的 Seedance 任务。

这会测试身份验证和连接性,而不会消耗生成配额——返回空列表也是成功。如果密钥错误,你会收到明确的 HTTP 401 消息。

要进行端到端检查并实际渲染一个文件,请使用 §10 中成本最低的方案。

9. Claude Code 提示示例

Generate a 10-second 1080p cinematic video of Tokyo at night using Seedance 2.5.
Use ./assets/reference.png as the visual reference and generate a slow cinematic push-in shot.
Create the video and wait until generation finishes.
Generate a 15-second 9:16 vertical clip of a surfer at sunrise, no audio, and give me the URL.
Use ./assets/first.png as the first frame and ./assets/last.png as the last frame,
6 seconds, and wait for it.
Check the status of task cgt-20260817... and download the video if it's ready.
Download task cgt-20260818061514-8t2lv into ./renders/ and keep the last frame too.
Cancel task cgt-20260817... — I queued the wrong prompt.

10. 成本与时间

生成按输出秒数计费,并根据分辨率和模型缩放。验证整个流程是否正常工作的最便宜方式是生成一个 4 秒的 480p 片段——4 秒是所有 Seedance 2.x 模型接受的最短时长。

免费检查,不消耗生成配额:

List my recent Seedance tasks.

最便宜的真实生成。 Seedance 2.0 mini 是账户上最便宜的模型;在持续到 2026 年 9 月 7 日的促销活动期间,其 720p 输出起价约为 0.03 美元/秒,480p 则更低:

Using Seedance model seedance-2-0-mini-260615, generate a 4-second 480p video, 16:9, no audio,
prompt: "a red balloon floating up against a blue sky". Then wait for it and give me the URL.

Seedance 2.5 默认路径的最便宜测试——值得单独运行,因为 2.5 是不同的模型激活和不同的价格层级:

Generate a 4-second 480p Seedance 2.5 video, 16:9, no audio,
prompt: "a red balloon floating up against a blue sky". Wait for it and give me the URL.

实测基准

来自 2026-08-18 一次真实的 Seedance 2.5 文本转视频运行:

输出

实际耗时

报告用量

4 秒 · 480p · 16:9 · 24 fps · 无声

~105 秒

38,830 tokens

这是最低值:最短时长、最低分辨率、无参考媒体。这也为 seedance_wait_for_video 设定了预期,其 900 秒的默认超时是针对比此任务重一个数量级的作业设计的。

从该基准进行缩放是外推,而非实测——用量与输出秒数和像素数相关,因此一个 10 秒的 1080p 片段大约是 2.5 倍的秒数和约 5 倍的像素数,即大约为此运行的 10 倍。请将其视为规划估算,并对照你自己的账单进行确认。

duration 的成本陷阱

Seedance 2.5 的 duration 默认值为 -1,这会让模型选择最长 30 秒的任意长度。由于按输出秒数计费,一个未指定时长的请求可能花费约 7 倍于预期的 4 秒测试。在任何对成本敏感的运行中,请显式指定秒数——该工具会直接传递该值,而 4 秒是最低值。

还有两个小提示:480p 和 720p 不享受当前的 2.5 促销折扣(仅 1080p 有折扣),因此 480p 在绝对成本上仍然最便宜——折扣根本不适用于它。另外,no audio 主要缩短生成时间;文档中没有任何内容表明它会降低价格。

11. 故障排除

症状

原因与修复

BYTEPLUS_API_KEY is not set

项目旁边没有 .env 文件,或值为空。服务器在首次工具调用时解析配置,因此这表现为工具错误而非启动失败。

HTTP 401

密钥错误或已撤销,或者密钥来自与模型激活所在账户不同的 BytePlus 账户。

任务 ID 返回 HTTP 404

任务是在不同区域创建的,或者任务已超过 7 天(BytePlus 会在 7 天后清除任务记录)。

创建时模型未找到

SEEDANCE_MODEL_ID 错误——检查 dreamina- 前缀——或者 Seedance 2.5 未在账户上激活(参见 §3)。

HTTP 429

请求频率受限。客户端已使用退避策略重试并遵循 Retry-After;持续的 429 表示你的账户 RPM 已耗尽。

Local video files cannot be uploaded

这是预期行为。BytePlus 仅接受以公共 URL 或 asset:// ID 形式提供的参考视频。请先托管文件。

任务失败,错误为 InvalidParameter.TaskTypeConstraint

Seedance 2.5 推断出的任务类型与你的参数不匹配。请显式设置 omni_reference_task_type 为 edit 或 extend,以便在提交时进行验证。

video_url 返回 403

输出 URL 在完成后 24 小时 过期,并且 Seedance 2.5 的 URL 最多允许 100 次下载。请重新生成,或配置 BytePlus TOS 数据订阅以进行持久存储。使用 seedance_download_video 在有效期内保存文件。

下载时 File already exists

防止覆盖之前的渲染结果。传递 overwrite: true,或指定不同的 output_path。

Refusing to download from <host>

seedance_download_video 仅获取 BytePlus 托管的输出。请在此服务器之外获取其他 URL。

服务器在 claude mcp list 中显示为失败

手动运行命令——uv --directory /path run python -m seedance_mcp——并读取 stderr。通常是虚拟环境过时;运行 uv sync 即可修复。

12. 支持的 Seedance 2.5 功能

任务类型(互斥——BytePlus 拒绝混合类型):

  • 文本转视频——仅提示词。

  • 图片转视频——first_frame,可选加上 last_frame。输出将精确以这些图片开始和结束。

  • Omni 参考转视频——最多 30 张参考图片、10 个参考视频和 10 个音频片段,允许仅音频输入。在提示词中使用 @Image 1、@Video 2 引用素材。涵盖三个子任务:参考转视频、视频编辑和视频扩展——通过 omni_reference_task_type 控制。

输出控制

参数

Seedance 2.5 值

resolution

480p, 720p (默认), 1080p

ratio

16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive (默认)

duration

4–30 秒,或 -1 让模型自动选择(默认)

generate_audio

true(默认)——同步语音、音效和音乐

watermark

false(默认)

return_last_frame

false(默认)——返回结尾帧作为 PNG,用于拼接片段

omni_reference_task_type

auto, edit, extend

service_tier

default(在线)或 flex(更便宜的离线推理)

媒体输入

类型

格式

单文件限制

本地文件支持

图像

jpeg, png, webp, bmp, tiff, gif, heic, heif

30 MB

✅ 以 Base64 内嵌

音频

wav, mp3

15 MB

✅ 以 Base64 内嵌

视频

mp4, mov

200 MB

❌ 仅限公开 URL 或 asset://

提示词支持英语、西班牙语、印度尼西亚语、葡萄牙语、日语、马来语、泰语、阿拉伯语、越南语和韩语。建议控制在约 1000 个英语单词以内。

保存输出。 seedance_download_video 接受一个任务 ID,自行查找当前 URL,并将文件流式传输到磁盘。默认保存为 ./<task_id>.mp4;可通过 output_path 指定文件路径或现有目录。除非设置 overwrite: true,否则不会覆盖已有文件;如果下载中断,会自动清理不完整的文件。当任务创建时设置了 return_last_frame,还可以通过 include_last_frame 获取结尾 PNG 图片。有两个明确的限制:下载使用其自身的未认证 HTTP 客户端,因此 ModelArk 密钥永远不会发送到存储服务器;并且 URL 的主机名必须以 .volces.com、.bytepluses.com 或 .byteplus.com 结尾——这是一个专用的 Seedance 输出下载器,而非通用下载工具。

该服务器也支持旧版模型,通过 model 工具参数或 SEEDANCE_MODEL_ID 指定——Seedance 2.0 / 2.0 fast / 2.0 mini、1.5 pro、1.0 pro 和 1.0 pro fast——并针对各自限制进行验证(例如 4K 对 2.0 有效,但对 2.5 无效)。

13. 已知 API 限制

  • 生成是异步的。 没有任何操作能同步返回视频;一个 5–10 秒的片段通常需要几分钟,在 1080p 下时间更长。

  • Seedance 2.5 上不可设置 seed 或 camera_fixed。 当前的 API 参考仅将这两项列为 Seedance 1.5 pro、1.0 pro 和 1.0 pro fast 的输入参数。此服务器会针对 2.5 版本明确拒绝这些参数,并给出明确提示,而非静默忽略。请在提示词中描述所需的镜头行为。(旧的 Seedance 1.x 教程和第三方示例仍显示这些参数——它们已不再适用于 2.5 版本。)

    在真实的 2.5 运行中观察到:任务的响应仍会报告一个 seed(以 VideoResult.seed 形式呈现,例如 80969),因为模型内部会选择一个。因此,你可以看到是哪个种子生成了该片段,但无法要求重现——2.5 版本的生成是不可复现的。

  • Seedance 2.5 上不支持 frames。 通过帧数控制亚秒级时长是 1.0 pro 的功能。

  • 无法上传本地视频。 图片和音频有 Base64 格式支持;视频则没有。

  • 64 MB 请求体上限。 内嵌多张大图片会达到此限制;服务器会在发送前检查,并提示你改用 URL。

  • 真人面孔受到限制。 Seedance 2.x 会拒绝包含真人面孔的参考图片和视频,除非这些内容来自你自己账户(30 天内)的先前 Seedance 输出、预设的数字角色,或经过授权的真人资产。

  • 只有排队中的任务可以取消。 一旦任务开始运行,它会一直执行到完成。

  • 输出 URL 的有效期为 24 小时,Seedance 2.5 上限为 100 次下载。这两个限制都嵌在签名的 URL 本身中——返回的链接带有 X-Tos-Expires=86400 和 X-Tos-Max-Requests=100。没有重新签发的端点,且 seedance_list_tasks 只能返回仍在有效期内的 URL。请使用 seedance_download_video 保存任何值得保留的内容;一旦窗口关闭,唯一的补救措施是重新生成。

  • 任务记录保存 7 天。

  • 参考媒体的时长限制不会在本地检查。 参考视频和音频的单片段(2–30 秒)和总时长(30 秒)限制需要媒体探测;服务器没有为此添加解码器依赖,因此由 BytePlus 执行这些限制,并在任务错误中报告。

  • 价格和限制会发生变化。 src/seedance_mcp/capabilities.py 中的能力表是根据 2026-08-17 的 BytePlus 文档抄录的;如果 BytePlus 发布新的模型修订版,请重新核对。

14. 项目结构

seedance-mcp/
├── pyproject.toml
├── README.md
├── .env.example
├── .gitignore
├── src/seedance_mcp/
│   ├── __init__.py
│   ├── __main__.py        # stdio entry point
│   ├── server.py          # the six MCP tools
│   ├── client.py          # BytePlus HTTP client: retries, error parsing
│   ├── payload.py         # request building + validation
│   ├── capabilities.py    # per-model limits from the official docs
│   ├── media.py           # local file -> data URI, with validation
│   ├── models.py          # typed request/response models
│   ├── config.py          # environment configuration
│   └── errors.py          # error types + secret redaction
└── tests/

capabilities.py、payload.py 和 media.py 是对概要中所述结构的补充:每个模型约束表、请求构建器和媒体处理都有实际的逻辑和各自的测试,如果将它们折叠到 server.py 或 models.py 中,会使两者都难以阅读。

15. 来源

上述所有 API 细节均已对照当前官方 BytePlus 文档进行验证:

Available Tools

6 tools
seedance_cancel_videoCancel or delete a Seedance taskA

Cancel a Seedance task that is still queued, or delete the record of one that already finished. BytePlus maps both to a single DELETE call. Only queued tasks can actually be cancelled - a task already running cannot be stopped, and the call will fail. Cancelled tasks are purged after 24 hours.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID to cancel or delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
task_idYes
cancelledYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries the full burden. It discloses the underlying HTTP method (DELETE), the fact that only queued tasks can truly be cancelled, that calls on running tasks fail, and the post-cancellation purge delay. It does not cover idempotency or behavior when task_id does not exist, but the output schema likely handles error responses. Overall, good transparency for a simple cancellation 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?

Three sentences total. First sentence immediately states the dual purpose. Second sentence explains the key behavioral limitation. Third sentence adds lifecycle context. No wasted words, front-loaded with essential information.

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 one required parameter and clear cancellation semantics, the description covers the operation's dual nature, failure cases for running tasks, and post-cancellation cleanup. An output schema exists (though not shown), so return value explanation is not needed. The description is complete for the complexity level.

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?

The input schema has 100% description coverage—task_id is described as 'Task ID to cancel or delete.' The tool description does not add any additional semantics (e.g., format, source, or validation). Since the schema already provides the meaning, the description offers no extra value, meeting the baseline of 3.

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 it cancels queued tasks or deletes finished records, using the verb 'cancel or delete' and the resource 'Seedance task'. It distinguishes between the two states, providing specific scope. The sibling tools (create, get, wait, download, list) further clarify this is the cancellation tool.

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?

Explicitly says when to use: for queued tasks (cancel) or finished ones (delete). Provides a critical caveat that running tasks cannot be stopped and the call will fail. Mentions that cancelled tasks are purged after 24 hours. Lacks explicit alternatives (e.g., no mention of what to do if you need to stop a running task), but the tool set doesn't include such an option, so the guidance is adequate.

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

seedance_create_videoCreate a Seedance video generation taskA

Start a Seedance video generation task on BytePlus ModelArk and return its task ID. Generation is ASYNCHRONOUS and takes minutes: this tool returns immediately without a video. Follow it with seedance_wait_for_video (blocks until the video is ready - use this when the user just wants the video) or seedance_get_video (single status check).

Choose exactly ONE input shape; BytePlus rejects mixtures:

  1. text-to-video: prompt only.

  2. image-to-video: first_frame (+ optional last_frame) - the output starts (and ends) on those exact frames.

  3. omni reference-to-video: image_references / video_references / audio_references - the model borrows subjects, style, motion or sound from them. Seedance 2.5 accepts up to 30 images, 10 videos and 10 audio clips, and can run on audio alone. Refer to them in the prompt as '@Image 1', '@Video 2' etc. first_frame/last_frame cannot be combined with the *_references parameters.

Media may be a local file path, a public https:// URL, or an asset://. Local images (jpeg, png, webp, bmp, tiff, gif, heic, heif; max 30 MB) and local audio (wav, mp3; max 15 MB) are inlined automatically. Local VIDEO files cannot be uploaded - BytePlus takes reference video only as a public URL, so host it first.

Seedance 2.5 supports resolution 480p/720p/1080p, ratio 16:9/4:3/1:1/3:4/9:16/21:9/adaptive, and duration 4-30 seconds (or -1 to let the model choose). It does NOT support seed or camera_fixed - describe camera moves in the prompt instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandomness seed, -1 to 2147483647. Supported by Seedance 1.5 pro and 1.0 pro only - NOT by Seedance 2.5.
modelNoOverride the configured model ID or endpoint ID for this call, e.g. 'dreamina-seedance-2-5-260628'. Omit to use the server default.
ratioNoAspect ratio: '16:9', '4:3', '1:1', '3:4', '9:16', '21:9' or 'adaptive'. Default 'adaptive'. Must be 'adaptive' for first_frame/last_frame tasks and for video edit/extend tasks.
promptNoWhat to generate: subject, action, setting, camera movement, lighting, mood. Put spoken dialogue in double quotes to drive the generated audio. Keep it under ~1000 English words. Required unless media references are supplied.
durationNoOutput length in seconds. Seedance 2.5: 4-30, or -1 to let the model pick. Omit to use the model default.
watermarkNoAdd an 'AI Generated' watermark in the lower-right corner.
last_frameNoImage the video must end on. Requires first_frame.
resolutionNo'480p', '720p' or '1080p' on Seedance 2.5. Default 720p.
first_frameNoImage the video must start on (local path, https:// URL, or asset://<ID>). Mutually exclusive with the *_references parameters.
callback_urlNoHTTPS endpoint BytePlus POSTs to when the task status changes.
camera_fixedNoLock the camera. Supported by Seedance 1.5 pro and 1.0 pro only - NOT by Seedance 2.5, where camera behaviour belongs in the prompt.
service_tierNo'default' for online inference, or 'flex' for cheaper offline runs.
generate_audioNoWhether the output carries synchronised sound (voices, effects, music). Defaults to true on Seedance 2.5; pass false for a silent video.
audio_referencesNoReference audio (wav/mp3) to drive speech, music or timing. Seedance 2.5: up to 10, each 2-30s, 30s total, and audio-only input is allowed.
image_referencesNoReference images for an omni reference-to-video task (subject, character or style guidance). Seedance 2.5: up to 30. Cite them in the prompt as '@Image 1'.
video_referencesNoReference videos, as public https:// URLs or asset://<ID> only (local video files cannot be uploaded). Seedance 2.5: up to 10, each 2-30s, 30s total. Cite them in the prompt as '@Video 1'.
return_last_frameNoAlso return the final frame as a PNG, so it can seed the next clip's first_frame for a continuous sequence.
omni_reference_task_typeNoSeedance 2.5 only, and only with reference media. 'edit' to modify a reference video (requires ratio 'adaptive' and duration -1), 'extend' to continue one (requires ratio 'adaptive'), or 'auto'. Setting it moves validation to submit time instead of failing asynchronously mid-generation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modelYes
statusYesTask state at submission time; always pending server-side.
requestYes
task_idYes
next_stepYes

TDQS

A4.6/5.0
Behavior4/5

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

Without any annotations provided, the description carries full burden and does well: declares asynchronous gen, delays minutes, returns task ID immediately. It explains that BytePlus rejects mixed input shapes, details media upload rules (local images inlined, local videos not supported), and notes model-specific behaviors (Seedance 2.5 doesn't support seed/camera_fixed). Minor gap: doesn't describe error behavior if a reference is invalid.

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?

Description is well-structured with clear sections: async behavior first, then three input shapes, then media constraints, then parameter notes. It front-loads the most critical info (async return, sibling tool guidance). It is somewhat long but every sentence earns its place for a complex tool with 18 parameters. Could be slightly tighter by combining repeated mentions of model version constraints.

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 high-complexity tool with 18 parameters and no annotations, the description covers all essential aspects: the three input shapes and mutual exclusivity, the async behavior, sibling tool workflow, media upload rules per type, model-specific limitations (Seedance 2.5 param constraints, max counts), citation syntax, and special parameters (return_last_frame chaining). The output schema exists, so return values are covered separately.

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 baseline is 3; the description adds significant value by grouping parameters into three mutually exclusive shapes, explaining relationships (first_frame mutually exclusive with *_references), detailing citation syntax (@Image 1, @Video 2), specifying upload constraints per parameter type, and clarifying model-specific constraints (seed, camera_fixed not for 2.5). Some schema descriptions already include individual parameter details, but the description's structural insight exceeds schema alone.

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 it starts a Seedance video generation task, returns a task ID, and explicitly distinguishes the asynchronous nature from sibling tools like seedance_wait_for_video. It precisely describes three input shapes (text-to-video, image-to-video, omni reference-to-video) with exact parameter combinations, making it unambiguous what the tool does.

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?

The description provides explicit guidance on when to use this tool vs. alternatives: states it is asynchronous and returns immediately, then instructs agents to follow with seedance_wait_for_video (when user wants video) or seedance_get_video (single check). It also explains that media fields have different constraints (local images vs. public URLs for videos), which directly affects tool selection and parameter setup.

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

seedance_download_videoDownload a finished Seedance videoA

Save a finished Seedance video to a local file. Use this whenever the user wants to keep the video rather than just see a link: output URLs expire 24 hours after the task completes and allow only 100 downloads, and BytePlus cannot re-issue them. Pass the task_id - the tool looks up the current URL itself, so it works on any task that succeeded within the last 24 hours. The task must be in 'succeeded' state. Without output_path the file is written to the current directory as <task_id>.mp4. An existing file is never overwritten unless overwrite is true. Set include_last_frame to also save the closing PNG, which is only available if the task was created with return_last_frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesID of a succeeded task, e.g. 'cgt-20260818061514-8t2lv'.
overwriteNoReplace the file if it already exists.
output_pathNoWhere to save it: a file path, or an existing directory to save <task_id>.mp4 inside. Defaults to the current directory.
include_last_frameNoAlso save the last-frame PNG, if the task was created with return_last_frame.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
sourceYes
size_mbYes
task_idNo
file_pathYesAbsolute path of the saved video.
resolutionNo
bytes_writtenYes
last_frame_pathNo
duration_secondsNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden. It discloses critical behaviors: output URLs expire after 24 hours and allow only 100 downloads (no reissue), the tool looks up the current URL itself, file is written to current directory if no path given, existing files are never overwritten unless overwrite=true, and include_last_frame requires the task to have been created with return_last_frame.

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 about 100 words, well-structured with the primary purpose first, followed by usage context and parameter details. Every sentence adds value, no redundancy 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?

Given the 4 parameters and full schema coverage, the description is complete. It explains prerequisites (task must be succeeded, within 24h), file handling rules, optional behavior (include_last_frame condition), and the self-service nature of URL resolution. An output schema exists but the description correctly focuses on usage context rather than return format.

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 description coverage is 100%, giving a baseline of 3. The description adds value beyond the schema by explaining that output_path defaults to current directory for <task_id>.mp4, that existing files are never overwritten without explicit overwrite=true, and that include_last_frame requires the original task to have return_last_frame. These details clarify default behavior and preconditions not obvious from parameter descriptions alone.

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 saves a finished Seedance video to a local file, with the specific verb 'Save' and resource 'finished Seedance video'. It distinguishes from siblings like seedance_get_video (just view link) by explaining when to use it for permanent storage rather than just seeing a link.

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 explicitly says to use this when the user wants to keep the video rather than just a link, and mentions URL expiration and download limits. It also states the task must be in 'succeeded' state. While it doesn't explicitly name alternative tools, the context of sibling names and the 'use this whenever' phrasing provides clear guidance.

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

seedance_get_videoCheck a Seedance taskA

Check a Seedance generation task once and return its current state. Use this for a quick status poll; if the user is waiting for the finished video, use seedance_wait_for_video instead of calling this in a loop. Status is one of queued, running, succeeded, failed, cancelled, expired. On success the result carries video_url (valid 24 hours), plus the resolution, aspect ratio, duration and frame rate BytePlus actually produced. On failure it carries error_code and error_message. Task records are kept for 7 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID from seedance_create_video, e.g. 'cgt-20260817...'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fpsNo
noteNo
seedNo
modelNo
pollsNo
ratioNo
framesNo
statusYes
task_idYes
video_urlNoValid for 24 hours; Seedance 2.5 URLs allow 100 downloads.
created_atNo
error_codeNo
resolutionNo
updated_atNo
is_terminalYes
total_tokensNo
error_messageNo
generate_audioNo
last_frame_urlNo
waited_secondsNo
duration_secondsNo

TDQS

A4.7/5.0
Behavior4/5

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

Although no annotations are provided, the description fully discloses the tool's behavior: it performs a single check, returns current state, and lists all possible statuses. It details the result structure (on success: video_url with 24h validity, resolution, aspect ratio, duration, frame rate; on failure: error_code and error_message). It also mentions task retention policy (7 days). The only minor gap is no explicit mention of whether it's a mutation or read-only operation, but the context strongly implies a safe read.

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 three sentences, each earning its place: the first states the core purpose, the second provides usage guidance and an alternative, and the third details the response format and lifecycle. No fluff, perfectly front-loaded.

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?

Given the low complexity (1 parameter, all required, no enums, 100% schema coverage), the tool is simple. The description covers the input (task_id), behavior (single poll, no looping), output (with detailed success/failure fields, plus video URL validity), and retention policy. An output schema exists, but the description still summarizes the key fields, which is helpful. No gaps remain for an agent to misinterpret.

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 description coverage is 100% (the only parameter task_id has a clear description in the schema). The description adds limited additional semantic value beyond the schema, as the schema already explains it's the task ID from seedance_create_video with an example format. However, the description could have elaborated on how to obtain the task_id, but it's mostly sufficient.

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 'Check a Seedance generation task once and return its current state.' It specifies the verb (check), resource (Seedance generation task), and action scope (once). The tool is well-differentiated from siblings like seedance_wait_for_video, which is explicitly mentioned as the alternative for polling.

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?

The description explicitly tells when to use this tool ('quick status poll') and when not to ('if the user is waiting for the finished video, use seedance_wait_for_video instead of calling this in a loop'). It provides clear guidance on avoiding loops, which is critical for agent behavior.

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

seedance_list_tasksList recent Seedance tasksA

List recent Seedance generation tasks for this account, newest first, optionally filtered by status or model. Useful to recover a task ID that was lost, to check what is still queued, or to re-fetch a video URL for a task that finished within the last 24 hours. BytePlus keeps task records for 7 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoFilter by model ID or endpoint ID.
statusNoFilter by state: queued, running, succeeded, failed, cancelled or expired.
page_numNo1-based page number.
page_sizeNoResults per page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tasksYes
totalNo
page_numYes
page_sizeYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It clearly states the tool is read-only (listing tasks), notes the data retention period (7 days), and explains that finished tasks' video URLs are only fetchable within 24 hours. The only gap is that it doesn't explicitly mention it's non-destructive, but the listing action implies this.

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 three sentences long and front-loaded with the core purpose. The first sentence states action, scope, ordering, and optional filters. The second provides concrete use cases. The third covers data retention. Every sentence serves a distinct informative purpose 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?

Given the tool has no required parameters, a fully described schema (4 params, 100% coverage), an output schema (not shown but present), and clear behavioral context (retention, ordering, use cases), the description leaves no critical gaps. It is complete for an agent to decide when and how to invoke the tool.

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 each parameter's description is clear (model ID/endpoint ID filtering, status enum, page number/page size with bounds). The description adds context by noting common use cases (filter by status, model) but does not elaborate beyond what the schema provides. Since coverage is high, baseline 3 is appropriate, and the additional context bumps it to 4.

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 specifies the action ('List recent Seedance generation tasks'), the scope ('for this account'), ordering ('newest first'), and optional filtering by status or model. It also explicitly distinguishes the tool from siblings like seedance_create_video or seedance_get_video by focusing on listing tasks rather than creating or retrieving individual videos.

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?

The description provides explicit guidance on when to use this tool: to recover a lost task ID, check queued tasks, or re-fetch a video URL within 24 hours. It also mentions the retention policy (7 days), setting clear boundaries on expected results. No sibling tool duplicates this list behavior, so exclusion criteria are implied.

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

seedance_wait_for_videoWait for a Seedance video to finishA

Poll a Seedance task until it succeeds, fails, or the timeout elapses, then return the final result including the video URL. Call this right after seedance_create_video whenever the user wants the finished video rather than a task ID. Polling backs off automatically. A 5-10 second clip usually lands within a few minutes; long or 1080p jobs take longer, so raise timeout_seconds for those. A timeout does not cancel anything - the task keeps running and can be waited on again.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID from seedance_create_video.
timeout_secondsNoGive up after this many seconds. Default 900 (15 minutes).
raise_on_failureNoRaise an error when the task ends in failed/cancelled/expired. Set false to get the failure details as a normal result instead.
poll_interval_secondsNoInitial delay between checks; it backs off from here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fpsNo
noteNo
seedNo
modelNo
pollsNo
ratioNo
framesNo
statusYes
task_idYes
video_urlNoValid for 24 hours; Seedance 2.5 URLs allow 100 downloads.
created_atNo
error_codeNo
resolutionNo
updated_atNo
is_terminalYes
total_tokensNo
error_messageNo
generate_audioNo
last_frame_urlNo
waited_secondsNo
duration_secondsNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers key behaviors: polling with automatic backoff, timeout behavior (doesn't cancel), typical time estimates, and return of final result including video URL. It does not mention rate limits or auth requirements, but for a polling tool this is reasonable. The description adds value beyond what structured metadata could provide.

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 three sentences long, each earning its place: the first states the core action, the second specifies when to use it, and the third provides critical usage guidance. It is front-loaded with the most important information and contains no filler or redundant phrases.

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?

The description covers the main purpose, usage context, timeout behavior, and auto-backoff. An output schema exists, so return value details are handled there. However, it does not explicitly differentiate from 'seedance_get_video' (if that tool exists for non-polling status checks). Given the tool's polling nature and the presence of other sibling tools, the description is nearly 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?

The input schema has 100% description coverage, so each parameter already has a clear explanation. The description adds some context (e.g., 'task ID from seedance_create_video', timing guidance for timeout_seconds) but does not significantly enhance understanding of parameters beyond what the schema provides. Baseline of 3 is appropriate since the schema does most of the work.

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

Purpose5/5

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

The description clearly states that the tool polls a Seedance task until completion or timeout and returns the final result including the video URL. It explicitly differentiates from siblings by specifying when to call it: 'right after seedance_create_video whenever the user wants the finished video rather than a task ID.' The title also reinforces the purpose.

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 provides explicit guidance on when to use the tool ('Call this right after seedance_create_video...') and includes practical advice about adjusting timeout for longer jobs. It also clarifies that a timeout does not cancel the task and that the task can be waited on again. However, it does not explicitly state when not to use it or mention alternative sibling tools for different use cases.

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. 6 tool updatesv0.1.0
    • First observedseedance_cancel_video
    • First observedseedance_create_video
    • First observedseedance_download_video
    • First observedseedance_get_video
    • First observedseedance_list_tasks
    • First observedseedance_wait_for_video

TDQS

A4.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool serves a distinct purpose: creating, checking status, waiting, downloading, canceling, and listing tasks. There is no overlap, and the descriptions clearly differentiate their use cases.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern prefixed with 'seedance_': create_video, get_video, wait_for_video, download_video, cancel_video, list_tasks. No mixing of conventions.

Tool Count5/5

With 6 tools, the set is well-scoped for a video generation service. It covers the necessary operations without being too sparse or bloated.

Completeness5/5

The tool surface covers the full lifecycle: creation, monitoring (with two convenient patterns), output retrieval, cancellation/deletion, and history listing. No obvious gaps for the intended domain.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers