byteplus-seedance-mcp
seedance-mcp
Ein MCP-Server, der es Claude Code ermöglicht, Videos mit BytePlus ModelArk Dreamina Seedance 2.5 zu generieren.
Bitten Sie Claude Code in einfacher Sprache um ein Video; es übermittelt die Aufgabe an BytePlus, fragt nach, bis der Render-Vorgang abgeschlossen ist, und gibt die Video-URL zusammen mit den von BytePlus gemeldeten Metadaten zurück.
1. Was es tut
Sechs Tools über MCP stdio:
Tool | Zweck |
| Übermittelt eine Generierungsaufgabe. Gibt sofort eine Aufgaben-ID zurück – die Generierung erfolgt asynchron. |
| Einmalige Statusabfrage für eine Aufgabe; gibt die Video-URL zurück, sobald sie erfolgreich ist. |
| Fragt mit Backoff ab, bis die Aufgabe erfolgreich ist, fehlschlägt oder das Zeitlimit überschreitet. |
| Speichert ein fertiges Video in einer lokalen Datei, bevor seine 24-Stunden-URL abläuft. |
| Bricht eine in der Warteschlange befindliche Aufgabe ab oder löscht den Datensatz einer abgeschlossenen Aufgabe. |
| Listet aktuelle Aufgaben auf, filterbar nach Status und Modell. |
Es kümmert sich um die Teile, die leicht falsch gemacht werden können: Kodieren lokaler Bilder und Audiodaten in die vom API erwartete Base64-Daten-URI-Form, Durchsetzung der modellspezifischen Parameterlimits bevor eine Anfrage gesendet wird, Wiederholung vorübergehender Fehler mit Backoff und das Fernhalten des API-Schlüssels aus jeder Logzeile und Fehlermeldung.
Related MCP server: @lweight/xbrush-api-mcp
2. Voraussetzungen
Python 3.11+
uv —
brew install uvodercurl -LsSf https://astral.sh/uv/install.sh | shClaude Code 2.x
Ein BytePlus ModelArk-Konto mit einem API-Schlüssel und dem aktivierten Seedance-Modell.
3. BytePlus-Konfiguration
Erstellen Sie einen API-Schlüssel: ModelArk-Konsole → API-Schlüssel.
Aktivieren Sie das Modell. Seedance 2.5 ist standardmäßig nicht aktiviert. BytePlus erfordert eine der folgenden Optionen:
Kontoguthaben über USD 30, oder
einen AI-Sparplan der Stufe USD 30 oder höher, oder
ein Seedance-Ressourcenpaket mit verbleibendem Kontingent.
Aktivieren Sie es unter ModelArk → Modellaktivierung → Computer Vision. Ohne dies schlägt die Aufgabenerstellung mit einem Autorisierungsfehler fehl, obwohl der Schlüssel selbst gültig ist.
Notieren Sie Ihre Region. Die Standard-Basis-URL unten ist
ap-southeast(Singapur). Wenn Ihr Konto woanders bereitgestellt ist, setzen SieBYTEPLUS_BASE_URLentsprechend – eine in einer Region erstellte Aufgabe ist von einer anderen aus nicht sichtbar.
4. Installation
git clone <this repo> ~/code/seedance-mcp # or just use the directory you already have
cd ~/code/seedance-mcp
uv syncÜberprüfung:
uv run pytest -q # 93 tests, all offline against mocked HTTP
uv run ruff check .5. .env-Einrichtung
cp .env.example .envFüllen Sie dann eine erforderliche Variable aus:
BYTEPLUS_API_KEY=your-modelark-api-keyAlles andere ist optional und bereits voreingestellt:
BYTEPLUS_BASE_URL=https://ark.ap-southeast.bytepluses.com/api/v3
SEEDANCE_MODEL_ID=dreamina-seedance-2-5-260628.env ist in der gitignore. Der Schlüssel wird nur aus der Umgebung gelesen – er wird von diesem Server nie auf die Festplatte geschrieben, nie protokolliert und aus API-Fehlermeldungen entfernt, bevor sie Claude erreichen.
6. Auswahl der Seedance 2.5-Modell-ID
Seedance 2.5 ist eine gemeinsame, universell verfügbare Modell-ID – Sie müssen keinen dedizierten Endpunkt erstellen. Der Standardwert ist:
dreamina-seedance-2-5-260628Beachten Sie das Präfix dreamina-. Dies ist eine echte Inkonsistenz in der Namensgebung von BytePlus: Die Dreamina-Modelle der 2.x-Reihe tragen es, während die IDs der 1.x-Reihe es nicht tun (seedance-1-5-pro-251215). Das Kopieren einer 1.x-förmigen ID für 2.5 ist die häufigste Ursache für einen Fehler "Modell nicht gefunden".
Bestätigen Sie die aktuelle ID für Ihr Konto in der ModelArk-Modellliste.
Wenn Sie einen dedizierten Endpunkt bevorzugen (für Ratenbegrenzungen pro Endpunkt, Vorauszahlung oder Überwachung), erstellen Sie einen in der Konsole und setzen Sie dessen Endpunkt-ID stattdessen in SEEDANCE_MODEL_ID:
SEEDANCE_MODEL_ID=ep-20260817120000-abcde
SEEDANCE_MODEL_PROFILE=seedance-2.5SEEDANCE_MODEL_PROFILE wird nur in diesem Fall benötigt: Eine ep-...-ID sagt nichts darüber aus, welches Modell dahintersteckt, sodass der Server ohne sie keine Parameter lokal validieren kann und alles zur Validierung an die API weiterleitet.
7. Bei Claude Code registrieren
Führen Sie dies von diesem Verzeichnis aus (verwenden Sie den absoluten Pfad – Claude Code startet den Server aus beliebigen Arbeitsverzeichnissen):
claude mcp add \
--transport stdio \
--scope user \
byteplus-seedance \
-- uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp--scope user macht es in jedem Projekt verfügbar. Verwenden Sie --scope project, um es mit den Mitarbeitern eines Repositorys über .mcp.json zu teilen, oder lassen Sie --scope weg, um es nur für das aktuelle Projekt zu verwenden.
Der Server liest .env aus seinem eigenen Verzeichnis, daher sind keine -e-Flags erforderlich. Wenn Sie den Schlüssel lieber explizit übergeben möchten:
claude mcp add --scope user byteplus-seedance \
-e BYTEPLUS_API_KEY=your-key \
-- uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp8. Überprüfung
claude mcp listErwarten Sie eine Zeile wie:
byteplus-seedance: uv --directory /Users/alban/code/seedance-mcp run python -m seedance_mcp - ✓ ConnectedDann listet /mcp innerhalb von Claude Code den Server und seine sechs Tools auf. Fragen Sie es:
Liste meine aktuellen Seedance-Aufgaben auf.
Das testet Authentifizierung und Konnektivität, ohne Generierungsguthaben zu verbrauchen – eine leere Liste ist ein Erfolg. Wenn der Schlüssel falsch ist, erhalten Sie stattdessen eine explizite HTTP 401-Meldung.
Für eine End-to-End-Überprüfung, die tatsächlich eine Datei rendert, verwenden Sie das Rezept mit den minimalen Kosten in §10.
9. Beispielhafte Claude Code-Eingabeaufforderungen
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. Kosten und Zeitplanung
Die Generierung wird pro Sekunde Ausgabe abgerechnet, skaliert nach Auflösung und Modell. Der günstigste Weg, um zu beweisen, dass die Pipeline funktioniert, ist ein 4-Sekunden-480p-Clip – 4s ist die kürzeste Länge, die jedes Seedance 2.x-Modell akzeptiert.
Kostenlose Überprüfung, keine Generierungsguthaben ausgegeben:
List my recent Seedance tasks.Günstigste echte Generierung. Seedance 2.0 mini ist das günstigste Modell auf dem Konto; während der bis zum 7. September 2026 laufenden Aktion beginnen die Kosten für 720p-Ausgabe bei etwa USD 0,03/Sekunde, und 480p liegt darunter:
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.Günstigster Test des Seedance 2.5-Standardpfads – es lohnt sich, dies separat auszuführen, da 2.5 eine andere Modellaktivierung und eine andere Preisstufe ist:
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.Gemessene Basislinie
Von einem echten Seedance 2.5 Text-zu-Video-Durchlauf vom 18.08.2026:
Ausgabe | Echtzeit | Gemeldete Nutzung |
4s · 480p · 16:9 · 24 fps · stumm | ~105 s | 38.830 Token |
Das ist das Minimum: die kürzeste Dauer bei der niedrigsten Auflösung ohne Referenzmaterial. Es setzt auch die Erwartungen für seedance_wait_for_video, dessen Standard-Timeout von 900 Sekunden für Aufgaben ausgelegt ist, die eine Größenordnung schwerer sind als diese.
Die Skalierung von dieser Basislinie ist eine Extrapolation, keine Messung – die Nutzung folgt den Ausgabesekunden und der Pixelanzahl, daher ist ein 10-Sekunden-1080p-Clip ungefähr 2,5× die Sekunden und ~5× die Pixel, d.h. in der Größenordnung von 10× diesem Durchlauf. Behandeln Sie es als Planungsschätzung und bestätigen Sie es anhand Ihrer eigenen Abrechnung.
Die Kostenfalle duration
Seedance 2.5 setzt duration standardmäßig auf -1, was dem Modell erlaubt, jede Länge bis zu 30 Sekunden zu wählen. Da die Abrechnung pro Sekunde Ausgabe erfolgt, kann eine Anfrage, die keine Dauer angibt, etwa das 7-fache eines beabsichtigten 4-Sekunden-Tests kosten. Geben Sie die Anzahl der Sekunden bei jedem kostenrelevanten Durchlauf explizit an – das Tool leitet sie direkt durch, und 4 ist das Minimum.
Zwei kleinere Anmerkungen: 480p und 720p sind vom aktuellen 2.5-Aktionsrabatt ausgeschlossen (nur 1080p wird rabattiert), daher bleibt 480p in absoluten Zahlen am günstigsten – der Rabatt gilt einfach nicht dafür. Und kein Audio verkürzt hauptsächlich die Generierungszeit; nichts in der Dokumentation zeigt, dass es den Preis senkt.
11. Fehlerbehebung
Symptom | Ursache und Behebung |
| Keine |
| Falscher oder widerrufener Schlüssel oder ein Schlüssel von einem anderen BytePlus-Konto als dem, das die Modellaktivierung besitzt. |
| Die Aufgabe wurde in einer anderen Region erstellt oder ist älter als 7 Tage (BytePlus löscht Aufgabendatensätze nach 7 Tagen). |
Modell-nicht-gefunden bei der Erstellung |
|
| Ratenbegrenzung erreicht. Der Client wiederholt bereits mit Backoff und beachtet |
| Erwartet. BytePlus akzeptiert Referenzvideos nur als öffentliche URL oder |
Aufgabe schlägt fehl mit | Seedance 2.5 hat einen anderen Aufgabentyp abgeleitet, als Ihre Parameter erlauben. Setzen Sie |
| Ausgabe-URLs laufen 24 Stunden nach Abschluss ab, und Seedance 2.5-URLs erlauben maximal 100 Downloads. Generieren Sie neu oder konfigurieren Sie das BytePlus TOS-Datenabonnement für dauerhafte Speicherung. Verwenden Sie |
| Schutz vor dem Überschreiben eines vorherigen Renderings. Übergeben Sie |
|
|
Server wird in | Führen Sie den Befehl von Hand aus – |
12. Unterstützte Seedance 2.5-Funktionen
Aufgabentypen (sich gegenseitig ausschließend – BytePlus lehnt Mischungen ab):
Text-zu-Video – nur Prompt.
Bild-zu-Video –
first_frame, optional pluslast_frame. Die Ausgabe beginnt und endet genau mit diesen Bildern.Omni-Referenz-zu-Video – bis zu 30 Referenzbilder, 10 Referenzvideos und 10 Audioclips, wobei Nur-Audio-Eingabe erlaubt ist. Zitieren Sie Assets im Prompt als
@Bild 1,@Video 2. Umfasst drei Unteraufgaben: Referenz-zu-Video, Videobearbeitung und Videoerweiterung – steuern Sie sie mitomni_reference_task_type.
Ausgabesteuerungen
Parameter | Seedance 2.5-Werte |
|
|
|
|
| 4–30 Sekunden oder |
|
|
|
|
|
|
|
|
|
|
Medieneingaben
Typ | Formate | Limit pro Datei | Unterstützung lokaler Dateien |
Bild | jpeg, png, webp, bmp, tiff, gif, heic, heif | 30 MB | ✅ als Base64 eingebettet |
Audio | wav, mp3 | 15 MB | ✅ als Base64 eingebettet |
Video | mp4, mov | 200 MB | ❌ nur öffentliche URL oder |
Prompts funktionieren auf Englisch, Spanisch, Indonesisch, Portugiesisch, Japanisch, Malaiisch, Thailändisch, Arabisch, Vietnamesisch und Koreanisch. Halten Sie sie unter ~1000 englischen Wörtern.
Ausgabe speichern. seedance_download_video nimmt eine Aufgaben-ID, sucht selbst die aktuelle URL und
streamt die Datei auf die Festplatte. Standardmäßig nach ./<task_id>.mp4; übergeben Sie einen Dateipfad oder ein vorhandenes Verzeichnis
als output_path. Es überschreibt nie ohne overwrite: true, bereinigt Teil-Dateien, wenn ein Download
abbricht, und kann auch das Schluss-PNG mit include_last_frame abrufen, wenn die Aufgabe mit
return_last_frame erstellt wurde. Zwei bewusste Einschränkungen: Downloads erfolgen über einen eigenen
nicht authentifizierten HTTP-Client, sodass der ModelArk-Schlüssel niemals an den Speicherhost gesendet wird, und der URL-Host
muss auf .volces.com, .bytepluses.com oder .byteplus.com enden – dies ist ein Seedance-Ausgabeabrufer,
kein Allzweck-Downloader.
Der Server zielt auch auf ältere Modelle über das model-Tool-Argument oder SEEDANCE_MODEL_ID ab —
Seedance 2.0 / 2.0 fast / 2.0 mini, 1.5 pro, 1.0 pro und 1.0 pro fast — und validiert jedes gegen seine
eigenen Grenzen (z. B. ist 4K bei 2.0 gültig, aber nicht bei 2.5).
13. Bekannte API-Einschränkungen
Die Generierung ist asynchron. Nichts gibt ein Video synchron zurück; ein 5–10 Sekunden langer Clip dauert in der Regel ein paar Minuten, länger bei 1080p.
Kein einstellbarer
seedodercamera_fixedbei Seedance 2.5. Die aktuelle API-Referenz listet beide nur als Eingabeparameter für Seedance 1.5 pro, 1.0 pro und 1.0 pro fast. Dieser Server lehnt sie für 2.5 mit einer expliziten Nachricht ab, anstatt sie stillschweigend zu ignorieren. Drücken Sie das Kameraverhalten stattdessen im Prompt aus. (Ältere Seedance-1.x-Tutorials und Beispiele von Drittanbietern zeigen diese Parameter noch — sie gelten nicht mehr für 2.5.)In einem echten 2.5-Lauf beobachtet: Die Aufgaben-Antwort meldet immer noch einen
seed(angezeigt alsVideoResult.seed, z. B.80969), weil das Modell intern einen auswählt. Sie können also sehen, welcher Seed einen Clip erzeugt hat, aber Sie können ihn nicht zurückfordern — 2.5-Generierungen sind nicht reproduzierbar.Kein
framesbei Seedance 2.5. Unter-Sekunden-Dauern über die Bildanzahl sind ein Feature von 1.0 pro.Lokales Video kann nicht hochgeladen werden. Bilder und Audio haben eine Base64-Form; Video nicht.
64-MB-Anforderungskörper-Obergrenze. Das Einbetten mehrerer großer Bilder wird sie erreichen; der Server prüft vor dem Senden und sagt Ihnen, auf URLs umzusteigen.
Echte menschliche Gesichter sind eingeschränkt. Seedance 2.x lehnt Referenzbilder und -videos mit echten menschlichen Gesichtern ab, es sei denn, es handelt sich um eine frühere Seedance-Ausgabe Ihres eigenen Kontos (innerhalb von 30 Tagen), eine voreingestellte digitale Figur oder eine autorisierte reale Person.
Nur eingereihte Aufgaben können abgebrochen werden. Sobald eine Aufgabe läuft, läuft sie bis zum Ende.
Ausgabe-URLs leben 24 Stunden, mit einer Obergrenze von 100 Downloads bei Seedance 2.5. Beide Grenzen sind in die signierte URL selbst eingebaut – ein zurückgegebener Link trägt
X-Tos-Expires=86400undX-Tos-Max-Requests=100. Es gibt keinen Endpunkt zur Neuausstellung, undseedance_list_taskskann nur eine URL zurückgeben, die sich noch in diesem Fenster befindet. Verwenden Sieseedance_download_video, um alles Erhaltenswerte zu speichern; sobald das Fenster schließt, ist die einzige Abhilfe, erneut zu generieren.Aufgabenaufzeichnungen leben 7 Tage.
Referenz-Medien-Dauerbeschränkungen werden nicht lokal geprüft. Grenzen pro Clip (2–30s) und gesamt (30s) für Referenzvideo und -audio erfordern Medien-Probing; der Server fügt keine Decoder-Abhängigkeit dafür hinzu, daher erzwingt BytePlus diese und meldet sie als Aufgabenfehler.
Preise und Einschränkungen ändern sich. Die Fähigkeitentabelle in
src/seedance_mcp/capabilities.pywurde am 2026-08-17 aus den BytePlus-Dokumenten transkribiert; überprüfen Sie sie erneut, wenn BytePlus eine neue Modellrevision veröffentlicht.
14. Projektstruktur
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 und media.py sind Ergänzungen zur in der Aufgabenbeschreibung skizzierten Struktur:
die dokumentierte modellspezifische Einschränkungstabelle, der Anforderungsgenerator und die Medienverarbeitung tragen jeweils
echte Logik und ihre eigenen Tests, und sie in server.py oder models.py zu integrieren hätte beide
schwer lesbar gemacht.
15. Quellen
Jedes API-Detail oben wurde anhand der aktuellen offiziellen BytePlus-Dokumentation verifiziert:
Available Tools
6 toolsseedance_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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID to cancel or delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| task_id | Yes | |
| cancelled | Yes |
TDQS
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.
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.
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.
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.
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.
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:
text-to-video: prompt only.
image-to-video: first_frame (+ optional last_frame) - the output starts (and ends) on those exact frames.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Randomness seed, -1 to 2147483647. Supported by Seedance 1.5 pro and 1.0 pro only - NOT by Seedance 2.5. | |
| model | No | Override the configured model ID or endpoint ID for this call, e.g. 'dreamina-seedance-2-5-260628'. Omit to use the server default. | |
| ratio | No | Aspect 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. | |
| prompt | No | What 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. | |
| duration | No | Output length in seconds. Seedance 2.5: 4-30, or -1 to let the model pick. Omit to use the model default. | |
| watermark | No | Add an 'AI Generated' watermark in the lower-right corner. | |
| last_frame | No | Image the video must end on. Requires first_frame. | |
| resolution | No | '480p', '720p' or '1080p' on Seedance 2.5. Default 720p. | |
| first_frame | No | Image the video must start on (local path, https:// URL, or asset://<ID>). Mutually exclusive with the *_references parameters. | |
| callback_url | No | HTTPS endpoint BytePlus POSTs to when the task status changes. | |
| camera_fixed | No | Lock 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_tier | No | 'default' for online inference, or 'flex' for cheaper offline runs. | |
| generate_audio | No | Whether the output carries synchronised sound (voices, effects, music). Defaults to true on Seedance 2.5; pass false for a silent video. | |
| audio_references | No | Reference 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_references | No | Reference 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_references | No | Reference 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_frame | No | Also return the final frame as a PNG, so it can seed the next clip's first_frame for a continuous sequence. | |
| omni_reference_task_type | No | Seedance 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
| Name | Required | Description |
|---|---|---|
| model | Yes | |
| status | Yes | Task state at submission time; always pending server-side. |
| request | Yes | |
| task_id | Yes | |
| next_step | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ID of a succeeded task, e.g. 'cgt-20260818061514-8t2lv'. | |
| overwrite | No | Replace the file if it already exists. | |
| output_path | No | Where to save it: a file path, or an existing directory to save <task_id>.mp4 inside. Defaults to the current directory. | |
| include_last_frame | No | Also save the last-frame PNG, if the task was created with return_last_frame. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| source | Yes | |
| size_mb | Yes | |
| task_id | No | |
| file_path | Yes | Absolute path of the saved video. |
| resolution | No | |
| bytes_written | Yes | |
| last_frame_path | No | |
| duration_seconds | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID from seedance_create_video, e.g. 'cgt-20260817...'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fps | No | |
| note | No | |
| seed | No | |
| model | No | |
| polls | No | |
| ratio | No | |
| frames | No | |
| status | Yes | |
| task_id | Yes | |
| video_url | No | Valid for 24 hours; Seedance 2.5 URLs allow 100 downloads. |
| created_at | No | |
| error_code | No | |
| resolution | No | |
| updated_at | No | |
| is_terminal | Yes | |
| total_tokens | No | |
| error_message | No | |
| generate_audio | No | |
| last_frame_url | No | |
| waited_seconds | No | |
| duration_seconds | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Filter by model ID or endpoint ID. | |
| status | No | Filter by state: queued, running, succeeded, failed, cancelled or expired. | |
| page_num | No | 1-based page number. | |
| page_size | No | Results per page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | |
| total | No | |
| page_num | Yes | |
| page_size | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID from seedance_create_video. | |
| timeout_seconds | No | Give up after this many seconds. Default 900 (15 minutes). | |
| raise_on_failure | No | Raise an error when the task ends in failed/cancelled/expired. Set false to get the failure details as a normal result instead. | |
| poll_interval_seconds | No | Initial delay between checks; it backs off from here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fps | No | |
| note | No | |
| seed | No | |
| model | No | |
| polls | No | |
| ratio | No | |
| frames | No | |
| status | Yes | |
| task_id | Yes | |
| video_url | No | Valid for 24 hours; Seedance 2.5 URLs allow 100 downloads. |
| created_at | No | |
| error_code | No | |
| resolution | No | |
| updated_at | No | |
| is_terminal | Yes | |
| total_tokens | No | |
| error_message | No | |
| generate_audio | No | |
| last_frame_url | No | |
| waited_seconds | No | |
| duration_seconds | No |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
seedance_cancel_video - First observed
seedance_create_video - First observed
seedance_download_video - First observed
seedance_get_video - First observed
seedance_list_tasks - First observed
seedance_wait_for_video
TDQS
Scored across 6 tools
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.
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.
With 6 tools, the set is well-scoped for a video generation service. It covers the necessary operations without being too sparse or bloated.
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
Related MCP Connectors
MCP server for ByteDance Seedance AI video generation
MCP server for Hailuo (MiniMax) AI video generation
MCP server for Grok Imagine AI video generation
MCP server for OpenAI Sora AI video generation
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA local MCP server that gives Claude Desktop full video editing capabilities via FFmpeg, Whisper, and yt-dlp.-
- AlicenseAqualityCmaintenanceMCP server for the XBrush AI media generation API, enabling image, video, audio generation, editing, and more directly from Claude Code via async polling.2116 npmMIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that uses Google's Gemini API to analyze videos and convert them to text descriptions that Claude Code can understand and act upon.20 npmMIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables Claude to generate Minecraft structures from natural language descriptions.1MIT