Skip to main content
Glama
skeetmtp
by skeetmtp

seedance-mcp

Claude Code が BytePlus ModelArk Dreamina Seedance 2.5 で動画を生成できるようにする MCP サーバーです。

Claude Code に平文で動画を依頼すると、BytePlus にタスクを送信し、レンダリングが完了するまでポーリングし、BytePlus が報告するメタデータとともに動画 URL を返します。


1. 機能

MCP stdio 上の 6 つのツール:

ツール

目的

seedance_create_video

生成タスクを送信します。タスク ID を即座に返します — 生成は非同期です。

seedance_get_video

タスクのステータスを 1 回確認します。成功すると動画 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

  • API キーと Seedance モデルが有効化された BytePlus ModelArk アカウント。

3. BytePlus の設定

  1. API キーを作成: ModelArk コンソール → API キー。

  2. モデルを有効化します。 Seedance 2.5 はデフォルトでは有効になっていません。BytePlus では次のいずれかが必要です:

    • アカウント残高が USD 30 を超えている、または

    • USD 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

次に、必須の 変数を 1 つ入力します:

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)。2.5 に 1.x 形式の ID をコピーするのが、「モデルが見つからない」エラーの最も一般的な原因です。

アカウントの現在の ID は ModelArk モデルリスト で確認してください。

専用エンドポイントを希望する場合 (エンドポイントごとのレート制限、前払い請求、または監視のため)、コンソールで作成し、そのエンドポイント 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 と入力すると、サーバーとその 6 つのツールが一覧表示されます。次のように依頼します:

最近の 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 出力は約 USD 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 トークン

これが下限です: 参照メディアなしで最短時間、最低解像度です。また、seedance_wait_for_video の期待値を設定します。その 900 秒のデフォルトタイムアウトは、これより一桁重いジョブ向けにサイズ設定されています。

このベースラインからのスケーリングは推定であり、測定ではありません — 使用量は出力秒数とピクセル数に追従するため、10 秒の 1080p クリップは秒数で約 2.5 倍、ピクセル数で約 5 倍、つまりこの実行の約 10 倍になります。計画の見積もりとして扱い、実際の請求と照合してください。

duration のコストの落とし穴

Seedance 2.5 は duration のデフォルトを -1 にしており、モデルが 最大 30 秒 までの任意の長さを選択できるようにします。課金は出力の秒数ごとなので、duration を指定しないリクエストは、意図した 4 秒のテストの約 7 倍のコストになる可能性があります。コストに敏感な実行では、秒数を明示的に指定してください — ツールはそのまま渡し、4 が下限です。

さらに 2 つの小さな注意点: 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 が枯渇していることを意味します。

ローカル動画ファイルはアップロードできません

想定内。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 を使用します。

ダウンロード時に ファイルが既に存在します

以前のレンダリングの上書きを防ぐガード。overwrite: true を渡すか、別の output_path を指定してください。

<ホスト> からのダウンロードを拒否します

seedance_download_video は BytePlus がホストする出力のみを取得します。他の URL はこのサーバーの外部で取得してください。

claude mcp list でサーバーが失敗として表示される

コマンドを手動で実行 — uv --directory /path run python -m seedance_mcp — し、stderr を読んでください。通常は古い venv が原因です。uv sync で修正されます。

12. サポートされている Seedance 2.5 機能

タスクタイプ (相互排他的 — BytePlus は混合を拒否します):

  • テキストから動画へ — プロンプトのみ。

  • 画像から動画へ — first_frame、オプションで last_frame。出力はそれらの画像で正確に開始および終了します。

  • オムニ参照から動画へ — 最大 30 枚の参照画像、10 本の参照動画、10 個のオーディオクリップ。オーディオのみの入力も許可されます。プロンプト内でアセットを @Image 1、@Video 2 として引用します。3 つのサブタスクをカバー: 参照から動画へ、動画編集、動画拡張 — 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を取得することもできます。2つの意図的な制限があります。ダウンロードは独自の認証なし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は、実際の人間の顔を含む参照画像や動画を拒否します。ただし、それらが自分のアカウントからの以前のSeedance出力(30日以内)、プリセットのデジタルキャラクター、または許可された実在人物のアセットである場合は除きます。

  • キューに入ったタスクのみキャンセルできます。 タスクが実行中になると、完了まで実行されます。

  • 出力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