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

작업에 대한 상태를 한 번 확인하고, 성공하면 비디오 URL을 반환합니다.

seedance_wait_for_video

작업이 성공, 실패 또는 시간 초과될 때까지 백오프(backoff)하며 폴링합니다.

seedance_download_video

24시간 URL이 만료되기 전에 완성된 비디오를 로컬 파일로 저장합니다.

seedance_cancel_video

대기 중인 작업을 취소하거나, 완료된 작업의 기록을 삭제합니다.

seedance_list_tasks

최근 작업을 나열하며, 상태와 모델로 필터링할 수 있습니다.

쉽게 틀릴 수 있는 부분을 처리합니다: 로컬 이미지와 오디오를 API가 기대하는 Base64 data-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 Savings Plan, 또는

    • 할당량이 남은 Seedance 리소스 팩.

    ModelArk → 모델 활성화 → Computer Vision에서 활성화하세요. 이 작업 없이는 키 자체는 유효하더라도 작업 생성이 인증 오류로 실패합니다.

  3. 지역(region) 을 확인하세요. 아래 기본 base URL은 ap-southeast(싱가포르)입니다. 계정이 다른 곳에 프로비저닝된 경우 BYTEPLUS_BASE_URL을 그에 맞게 설정하세요 — 한 지역에서 생성된 작업은 다른 지역에서 볼 수 없습니다.

4. 설치

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

확인:

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

5. .env 설정

cp .env.example .env

그런 다음 필수 변수 하나를 입력하세요:

BYTEPLUS_API_KEY=your-modelark-api-key

나머지는 모두 선택 사항이며 이미 기본값이 설정되어 있습니다:

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

.env는 gitignore에 포함됩니다. 키는 환경에서만 읽힙니다 — 이 서버에 의해 디스크에 기록되지 않으며, 로그에도 기록되지 않고, Claude에게 도달하기 전에 API 오류 메시지에서 제거됩니다.

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 · 24fps · 무음

~105초

38,830 토큰

이것이 최소치입니다: 참조 미디어 없이 가장 낮은 해상도에서 가장 짧은 지속 시간입니다. 또한 seedance_wait_for_video의 기대치를 설정합니다. 기본 900초 시간 제한은 이보다 한 자릿수 더 무거운 작업에 맞게 조정되었습니다.

그 기준에서 확장하는 것은 측정이 아니라 추정입니다 — 사용량은 출력 초와 픽셀 수를 따르므로, 10초 1080p 클립은 대략 2.5배의 초와 ~5배의 픽셀, 즉 이 실행의 약 10배입니다. 계획 추정치로 취급하고 자체 청구서와 대조하여 확인하세요.

duration 비용 함정

Seedance 2.5는 duration을 기본적으로 -1로 설정하며, 이는 모델이 최대 30초까지 어떤 길이든 선택할 수 있게 합니다. 출력 초당 비용이 청구되므로, 지속 시간을 명시하지 않은 요청은 의도한 4초 테스트보다 약 7배의 비용이 들 수 있습니다. 비용에 민감한 실행에서는 초 수를 명시적으로 명시하세요 — 도구는 이를 그대로 전달하며, 4가 최소값입니다.

두 가지 작은 참고 사항: 480p와 720p는 현재 2.5 프로모션 할인에서 제외되므로 (1080p만 할인됨), 480p는 절대적인 측면에서 여전히 가장 저렴합니다 — 할인이 적용되지 않을 뿐입니다. 그리고 오디오 없음은 주로 생성 시간을 단축합니다. 문서 어디에도 가격을 낮춘다고 표시되지는 않습니다.

11. 문제 해결

증상

원인 및 해결 방법

BYTEPLUS_API_KEY is not set

프로젝트 옆에 .env가 없거나 값이 비어 있습니다. 서버는 첫 번째 도구 호출 시 구성을 확인하므로 시작 실패가 아닌 도구 오류로 나타납니다.

HTTP 401

키가 잘못되었거나 취소되었거나, 모델 활성화가 있는 계정과 다른 BytePlus 계정의 키입니다.

작업 ID에 대한 HTTP 404

작업이 다른 지역에서 생성되었거나 7일보다 오래되었습니다 (BytePlus는 7일 후 작업 기록을 삭제합니다).

생성 시 모델을 찾을 수 없음

SEEDANCE_MODEL_ID가 잘못되었습니다 — dreamina- 접두사를 확인하세요 — 또는 Seedance 2.5가 계정에서 활성화되지 않았습니다 (§3 참조).

HTTP 429

속도 제한입니다. 클라이언트는 이미 백오프로 재시도하고 Retry-After를 존중합니다. 지속적인 429는 계정 RPM이 소진되었음을 의미합니다.

Local video files cannot be uploaded

예상된 동작입니다. BytePlus는 참조 비디오를 공개 URL 또는 asset:// ID로만 허용합니다. 먼저 파일을 호스팅하세요.

InvalidParameter.TaskTypeConstraint로 작업 실패

Seedance 2.5가 매개변수가 허용하는 것과 다른 작업 유형을 추론했습니다. omni_reference_task_type을 edit 또는 extend로 명시적으로 설정하여 제출 시 검증이 이루어지도록 하세요.

video_url이 403 반환

출력 URL은 완료 후 24시간 후에 만료되며, Seedance 2.5 URL은 최대 100회 다운로드를 허용합니다. 다시 생성하거나, 지속적인 저장을 위해 BytePlus TOS 데이터 구독을 구성하세요. 창 안에서 파일을 저장하려면 seedance_download_video를 사용하세요.

다운로드 시 File already exists

이전 렌더링을 덮어쓰지 않도록 보호합니다. overwrite: true를 전달하거나 다른 output_path를 지정하세요.

<host>에서 다운로드 거부

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로 인용하세요. 세 가지 하위 작업을 포함합니다: 참조-비디오, 비디오 편집, 및 비디오 확장 — omni_reference_task_type으로 제어하세요.

출력 제어

매개변수

Seedance 2.5 값

resolution

480p, 720p (기본값), 1080p

ratio

16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive (기본값)

duration

4–30초, 또는 모델이 선택하도록 -1 (기본값)

generate_audio

true (기본값) — 동기화된 음성, 효과 및 음악

watermark

false (기본값)

return_last_frame

false (기본값) — 마지막 프레임을 PNG로 반환하여 클립을 연결

omni_reference_task_type

auto, edit, extend

service_tier

default (온라인) 또는 flex (더 저렴한 오프라인 추론)

미디어 입력

유형

형식

파일당 제한

로컬 파일 지원

이미지

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

30 MB

✅ Base64로 인라인됨

오디오

wav, mp3

15 MB

✅ Base64로 인라인됨

비디오

mp4, mov

200 MB

❌ 공개 URL 또는 asset://만 가능

프롬프트는 영어, 스페인어, 인도네시아어, 포르투갈어, 일본어, 말레이어, 태국어, 아랍어, 베트남어 및 한국어로 작동합니다. 프롬프트를 ~1000 영어 단어 미만으로 유지하세요.

출력 저장. seedance_download_video는 작업 ID를 받아 현재 URL을 직접 조회한 후 파일을 디스크로 스트리밍합니다. 기본값은 ./<task_id>.mp4이며, output_path에 파일 경로나 기존 디렉터리를 전달할 수 있습니다. overwrite: true 없이는 덮어쓰지 않으며, 다운로드가 중단되면 부분 파일을 정리하고, 작업이 return_last_frame으로 생성된 경우 include_last_frame으로 마지막 PNG도 가져올 수 있습니다. 의도된 두 가지 제한: 다운로드는 자체 인증되지 않은 HTTP 클라이언트를 통해 이루어지므로 ModelArk 키가 저장 호스트로 전송되지 않으며, URL 호스트는 .volces.com, .bytepluses.com 또는 .byteplus.com로 끝나야 합니다. 이는 범용 다운로더가 아닌 Seedance 출력 페처입니다.

서버는 또한 model 도구 인자 또는 SEEDANCE_MODEL_ID를 통해 이전 모델도 대상으로 합니다 — Seedance 2.0 / 2.0 fast / 2.0 mini, 1.5 pro, 1.0 pro 및 1.0 pro fast — 각 모델을 자체 한도에 대해 검증합니다 (예: 4K는 2.0에서는 유효하지만 2.5에서는 유효하지 않습니다).

13. 알려진 API 제한 사항

  • 생성은 비동기적입니다. 어떤 것도 동기적으로 비디오를 반환하지 않습니다. 5–10초 클립은 일반적으로 몇 분이 걸리며, 1080p에서는 더 오래 걸립니다.

  • Seedance 2.5에서는 설정 가능한 seed 또는 camera_fixed가 없습니다. 현재 API 참조에는 둘 다 Seedance 1.5 pro, 1.0 pro 및 1.0 pro fast 전용 입력 매개변수로 나열되어 있습니다. 이 서버는 2.5에 대해 이를 자동으로 무시하지 않고 명시적 메시지와 함께 거부합니다. 카메라 동작은 프롬프트로 표현하세요. (이전 Seedance 1.x 튜토리얼과 타사 예제에는 여전히 이러한 매개변수가 나와 있지만, 2.5에는 더 이상 적용되지 않습니다.) 실제 2.5 실행에서 관찰된 바: 작업 응답은 여전히 seed를 보고합니다 (VideoResult.seed로 표시됨, 예: 80969). 모델이 내부적으로 하나를 선택하기 때문입니다. 따라서 어떤 시드가 클립을 생성했는지 볼 수는 있지만 다시 요구할 수는 없습니다. 2.5 생성은 재현할 수 없습니다.

  • Seedance 2.5에는 frames가 없습니다. 프레임 수를 통한 1초 미만 길이는 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