Skip to main content
Glama

LipDub MCP server

CI npm node licence: MIT

AI 에이전트가 비디오 립싱크(lip-sync)를 할 수 있게 해 주세요.

LipDub 2는 비디오 속 인물이 다른 오디오 트랙을 말하는 것처럼 보이게 하며, 입 움직임도 일치시킵니다. 이는 이 기능을 Claude, Cursor, Gemini CLI, Codex, VS Code 및 기타 MCP 호환 클라이언트에 노출하는 MCP 서버입니다.

LipDub 2는 번역, 전사, 음성 생성을 하지 않습니다. 오디오는 직접 준비해야 합니다. 비디오를 다른 언어로 더빙하려면 먼저 텍스트 음성 변환(TTS) 또는 음성 복제 도구로 그 오디오를 생성하고, 공개 URL로 호스팅한 뒤 해당 URL을 전달하세요. 이 서버는 TTS 서버와 잘 결합되도록 설계되었습니다. 이것이 의도된 워크플로입니다.


사용 예시

You:   Lip-sync https://example.com/keynote.mp4 to https://example.com/spanish.mp3

Claude: I'll use LipDub 2 for that. This will charge credits to your LipDub
        account and can't be refunded — shall I go ahead?

You:   yes

Claude: Started — render_id rnd_88213. This usually takes 7–15 minutes; I'll wait.
        ...
        Done. Here's your video: https://…  (link expires, so grab it soon)

Related MCP server: atsurae

설정

1. API 키 받기

  1. app.lipdub.ai에 로그인합니다.

  2. Settings → API Keys를 엽니다. app.lipdub.ai/settings/api-keys

    계정의 Owner(소유자) 또는 Admin(관리자) 여야 합니다. 다른 역할의 사용자는 안내 없이 대시보드로 리다이렉트됩니다. 해당 링크가 그런 식으로 튕겨 버린다면 팀의 Owner 또는 Admin가게 키 생성을 요청하세요.

  3. 키를 생성하고 복사합니다.

사용자당 하나의 키. LipDub는 사용자당 API 키를 하나만 발급하며, 새 키를 생성하면 이전 키를 교체합니다. 이미 계정 키를 다른 연동에 사용하고 있다면, 새 키를 생성하면 그 연동이 작동하지 않으니 기존 키를 재사용하거나 에이전트 작업용으로 별도의 Owner/Admin 계정을 사용하세요.

2. 서버 추가하기

아직 npm에 없습니다. 아래의 npx 명령어는 패키지가 게시된 후 작동 방식입니다. 그 전까지는 이 섹션 끝의 소스에서 직접 실행 옵션을 사용하세요. 동일하게 작동합니다.

claude mcp add lipdub --env LIPDUB_API_KEY=your_key_here -- npx -y lipdub-mcp
{
  "mcpServers": {
    "lipdub": {
      "command": "npx",
      "args": ["-y", "lipdub-mcp"],
      "env": { "LIPDUB_API_KEY": "your_key_here" }
    }
  }
}
{
  "mcpServers": {
    "lipdub": {
      "command": "npx",
      "args": ["-y", "lipdub-mcp"],
      "env": { "LIPDUB_API_KEY": "your_key_here" }
    }
  }
}
{
  "inputs": [
    { "type": "promptString", "id": "lipdub-key", "description": "LipDub API Key", "password": true }
  ],
  "servers": {
    "lipdub": {
      "command": "npx",
      "args": ["-y", "lipdub-mcp"],
      "env": { "LIPDUB_API_KEY": "${input:lipdub-key}" }
    }
  }
}

이 방식은 커밋할 수 있는 파일에 키가 들어가지 않게 합니다. LipDub가 사용자당 키를 하나만 발급한다는 점을 고려하면, 대부분의 다른 서버와 달리 이것이 더 중요합니다.

{
  "mcpServers": {
    "lipdub": {
      "command": "npx",
      "args": ["-y", "lipdub-mcp"],
      "env": { "LIPDUB_API_KEY": "your_key_here" }
    }
  }
}
[mcp_servers.lipdub]
command = "npx"
args = ["-y", "lipdub-mcp"]
env = { LIPDUB_API_KEY = "your_key_here" }
git clone https://github.com/marzvfx/lipdub-mcp.git
cd lipdub-mcp
npm ci && npm run build

그런 다음 클라이언트가 빌드된 엔트리 포인트를 가리키게 하세요:

{
  "mcpServers": {
    "lipdub": {
      "command": "node",
      "args": ["/absolute/path/to/lipdub-mcp/dist/index.js"],
      "env": { "LIPDUB_API_KEY": "your_key_here" }
    }
  }
}

Node 20+가 필요합니다. Node를 설치하고 싶지 않다면 ./manage.sh build가 컨테이너 안에서 동일한 작업을 수행합니다.

3. 잘 작동하는지 확인

에이전트에게 "check my LipDub connection" 이라고 물어보세요.

서버를 단독으로도 확인할 수 있습니다:

npx lipdub-mcp --version    # or: node dist/index.js --version

도구

도구

기능

크레딧을 사용하나요?

lipdub_check_connection

키 is 연결 동작하는지 확인하고 계정 이름을 알려줍니다

아니요

lipdub_create_render

비디오 URL과 오디오 URL로 렌더를 시작합니다

네

lipdub_get_render

상태를 확인하고, 준비되면 다운로드 링크를 알려줍니다

아니요

lipdub_wait_for_render

루프에서 폴링하는 대신 렌더가 끝날 때까지 검색합니다

아니요

lipdub_list_renders

최근 렌더 목록 — 분실한 렌더 ID를 복구할 때 사용합니다

아니요

프롬프트를 지원하는 클라이언트에서 슬래시 명령어로 쓸 수 있는 lipdub_quick_dub 프롬프트와, 참조 리소스인 lipdub://guide/quickstart 및 lipdub://guide/troubleshooting도 있습니다.


좋은 소스 비디오란

  • 카메라 한 인물이 있어야 합니다.

  • 얼굴이 선명하게 보이고 조명이 잘 들어와야 합니다.

  • 비디오: .mp4, .mov, .avi, .webm. 오디오: .mp3, .wav, .m4a, .aac.


파일 호스팅

두 입력 모두 공개 URL이며 로컬 파일 경로가 아닙니다. 링크는 미디어 파일 자체를 반환해야 합니다.

다음은 작동하지 않습니다: Google Drive, Dropbox 및 YouTube의 공유 페이지; 로그인이 필요한 모든 것; 만료된 링크.

작동하는 것:

# Amazon S3 — a time-limited direct link
aws s3 presign s3://your-bucket/keynote.mp4 --expires-in 3600

# Google Cloud Storage
gcloud storage sign-url gs://your-bucket/keynote.mp4 --duration=1h

# Any web server
scp keynote.mp4 you@yourserver:/var/www/html/
# → https://yourserver/keynote.mp4

왜 로컬 파일이 아니라 URL인가요? URL 기반 렌더는 API 호출 한 번이면 됩니다. 로컬 파일을 업로드하는 방식은 시간당 약 열 번으로 제한되는 엔드포인트를 여러 번 호출해야 하며, 이는 엔트리 요금제에서 시간당 로컬 파일 렌더 약 2개에 해당합니다. 이 서버가 URL 전용이라는 것은 또한 서버가 어디에서 실행되든 동일하게 동작한다는 뜻입니다. 로컬 파일 지원은 나중에 옵트인(opt-in) 방식으로 추가될 수 있습니다.


소요 시간 및 비용

렌더는 약 7~15분이 걸립니다. 렌더는 LipDub 계정의 크레딧을 소모하며 환불되지 않습니다. 비용은 소스 비디오의 길이에 비례하므로 짧은 클립이 더 저렴합니다.

상태 확인은 무료이고 요청 제한도 없습니다 — 원하는 만큼 자주 폴링하세요.

크레딧 잔액은 API로 확인할 수 없습니다. app.lipdub.ai에서 확인하세요.

지출 보호 장치

lipdub_create_render가 비용을 발생시키는 유일한 도구입니다. 기본적으로 에이전트가 confirm_spend 파라미터를 전달할 때까지 실행을 거부하며, 해당 파라미터는 에이전트가 먼저 대가를 사용자에게 명시하도록 강제합니다. 서버는 세션당 5회 렌더 후에 중단됩니다.

변수

기본값

용도

LIPDUB_API_KEY

—

당신의 API 키. 필수.

LIPDUB_API_KEY_FILE

—

변수 대신 키가 든 파일의 경로.

LIPDUB_MAX_RENDERS_PER_SESSION

5

서버 프로세스당 시작할 렌더의 상한.

LIPDUB_REQUIRE_SPEND_CONFIRMATION

true

모니터에 사람이 없는 헤드리스 파이프라인에서만 false로 설정.

LIPDUB_LOG_LEVEL

warn

debug, info, warn, error. 로그는 stderr에 출력됩니다.

이 설정은 보안 기능이 아니라 사용 편의를 위한 안전장치입니다. 어떤 방식으로든 API를 직접 호출하면 이를 우회할 수 있습니다.


문제 해결

증상

해결 방법

"No Lip Dub API key is configured"

Settings → API Keys에서 하나 생성하고 LIPDUB_API_KEY 설정

"LipDub rejected the API key"

키 입력이 잘못되었거나 재발급되었습니다. 새 키를 생성하고 클라이언트를 다시 시작하세요.

"out of credits"

app.lipdub.ai에서 크레딧을 충전하세요.

"could not download one of your source files"

링크가 공유 페이지이거나 로그인이 필요하거나 만료되었습니다. 직접 링크를 사용하세요.

"downloaded your files but could not start the render"

대개 크레딧이 없거나, 뚜렷하게 보이는 말하는 얼굴이 없는 경우입니다.

Wait 도구가 여전히 still_running 반환

정상입니다 — 계속 7~15분 걸립니다. 실패가 아니므로 다시 호출하세요.

다운로드 링크가 더 이상 동작하지 않음

링크에 서명이 있고 수명이 짧습니다. lipdub_get_render를 다시 호출하세요.

전체 API 문서: lipdub.readme.io


개인정보 보호

  • 당신의 API 키는 환경에서 읽히고 https://api.lipdub.ai만 호출하는 데 사용되며, 디스크에 기록하거나 로그에 남기거나 어떤 도구 결과에도 포함되지 않습니다. 모든 로그 줄과 오류 메시지에서 마스킹 처리됩니다.

  • 제공한 비디오 및 오디오 URL은 LipDub API로 전송되어 이 URLs가 파일을 받아 렌더를 만듭니다. LipDub가 처리를 원하지 않는 자료의 URL은 전달하지 마세요.

  • 이 서버는 텔레메트리 생성, 분석 데이터를 수집하지 않습니다.

  • 렌더와 산출 결과물은 Lip Dub 계정에 저장되며, Lip구독의 개인정보 정책 및 약관이 적용됩니다.

허용 용도

LipBud 2는 실제 사람의 합성 영상을 생성합니다. 프로젝트 사용하면, 소스 자료의 초상화과 음성 사용에 필요한 권위와 동의를 보유하고 있음을 보증하게 됩니다. 허락 없인 어떤 사람을 사칭하거나, 실제 인물에 대한 오해를 어필하는 콘텐츠를 만들거나, LipDub의 이용약관이 금지하는 어떤 행위로도 사용하지 마세요.

보안

취약점을 발견했다면 SECURITY.md를 참조하세요. 공개적으로 issue를 열지 말고, API 키를 절대 이슈에 붙여넣지 마세요.

제한사항

  • 번역 및 음성 생성 없음 — 오디오는 직접 제공해야 합니다.

  • URL 입력만 가능; 로컬 파일 업로드 번호.

  • API에서 크레딧 잔액과 가격 예상 정보는 제공되지 않습니다.

  • Lip구독은 각 사용자의 하나의 인증 키만 발급하므로, 이 서버 전용으로 키를 한정할 수 없습니다.

버전 관리

도앱 이름은 공개된 계약이며 변경되지 않습니다. 새로운 기능은 새 도구로 추가됩니다. Schema 변경은 추가 방식입니다. CHANGELOG.md를 참조하세요.

라이선스

MIT. 이 라이선스는 이 클라이언트에 해당합니다. 이 자체는 자체 약관의 적용을 받는 상용 서비스입니다.

Available Tools

5 tools
lipdub_check_connectionCheck LipDub connectionA
Read-onlyIdempotent

Verify that this server can reach LipDub and report which account it is using.

Call this first if any other LipDub tool fails with an authentication error, or when a user asks whether LipDub is set up.

Does not use credits and does not start anything.

Credit balance is not available through the API — direct the user to https://app.lipdub.ai to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive, but the description goes further: it states that the tool does not use credits and does not start anything, and it discloses that credit balance is not available via the API, directing users to the web app. These are behavioral details beyond what annotations capture, providing real value for an agent deciding whether to call it.

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 short paragraphs, each with a distinct purpose: purpose, when to use, and notes. Every sentence earns its place with no filler. The key purpose is front-loaded, and the caveats are placed last without bloating the text.

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 zero-parameter health-check tool with no output schema, the description fully covers what an agent needs: what it does, when to use it, what it doesn't affect, and an important limitation (credit balance). The sibling tools are all about renders, so this check tool is clearly distinct. Nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing to describe. The schema coverage is trivially 100%. Per the baseline rule, a score of 4 is appropriate because the description adds no parameter-specific info, but none is needed. The description correctly avoids inventing unnecessary parameter explanations.

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 opens with a concrete verb+resource: 'Verify that this server can reach LipDub and report which account it is using.' This is unambiguous and clearly distinguishes it from the sibling render-management tools. Even without seeing the siblings, the tool's role is immediately understandable.

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?

Explicitly states when to call it: 'Call this first if any other LipDub tool fails with an authentication error, or when a user asks whether LipDub is set up.' It also clarifies what it does NOT do (uses credits, starts anything), which prevents misuse. This is textbook usage guidance.

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

lipdub_create_renderCreate LipDub render (uses account credits)A

Start a LipDub 2 render: make the person in a source video appear to speak a different audio track, with matched lip movement.

USES CREDITS. Each render charges the account and cannot be undone or refunded. Cost scales with the length of the source video. Confirm with the user first, then call again with confirm_spend set to true.

Supply both sides as direct, publicly downloadable URLs:

  • video_url — a video of ONE person speaking, face clearly visible.

  • audio_url — the audio you want them to appear to say.

LipDub 2 does NOT translate, transcribe or generate speech. If the user wants another language, produce that audio first with a separate text-to-speech or voice tool, host it at a URL, and pass that URL as audio_url.

Links must return the media file itself, with two exceptions: YouTube links work (youtube.com, youtu.be or youtube-nocookie.com), because they are resolved for you. Google Drive and Dropbox share pages, and anything behind a login, will fail.

Returns immediately with a render_id — the render is NOT finished. Rendering takes several minutes for a short clip, and longer for longer videos. Next step: call lipdub_wait_for_render with that render_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
audio_idNoAdvanced. A LipDub audio upload id from a previous upload, instead of audio_url.
video_idNoAdvanced. A LipDub shot id from a previous upload, instead of video_url.
audio_urlNoDirect URL to the audio the person should appear to say (.mp3, .wav, .m4a, .aac, .ogg, .flac, .mp4 or .mov). You must supply finished audio; LipDub 2 does not generate or translate speech.
video_urlNoURL to the source video (one person, face visible). .mp4, .mov or .avi, or a YouTube link.
callback_urlNoOptional https URL to be called when the render finishes. For automated pipelines; in a chat session use lipdub_wait_for_render instead.
confirm_spendNoWhether the user has personally approved spending credits on this render. Defaults to false deliberately, as a safety gate — it is not a misconfiguration. Set it to true only after you have asked the user and they have agreed. Setting it yourself without asking spends their money without consent.
output_filenameNoOptional name for the finished file, e.g. 'ceo-welcome-spanish.mp4'. If omitted, a name is derived from video_url. This name is also shown as the project name in the user's LipDub web app, so make it meaningful.

TDQS

A5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing financial consequences ('USES CREDITS', 'cannot be undone or refunded'), cost scaling with source video length, asynchronous behavior (returns render_id immediately, render not finished), and typical render duration. No contradiction with the annotations; this description adds substantial behavioral context.

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 front-loaded with the most critical information (purpose and cost warning), then organized into clear paragraphs and bullet lists covering inputs, exclusions, and post-call behavior. Every sentence earns its place; the length is justified by the tool's high-stakes, asynchronous, and easily-misused nature.

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 no output schema, the description fully explains what the caller should expect: an immediate render_id, that rendering is asynchronous, how long it may take, and the required next step. It also covers prerequisites, URL constraints, known failure modes, and the spending-confirmation gate, making it complete for correct invocation despite the schema listing all parameters as optional.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds crucial meaning: URLs must be direct, publicly downloadable media files; YouTube links are resolved but Google Drive/Dropbox share pages and login-protected links fail; video must show one person with a clear face; audio must be finished because LipDub does not generate speech. This meaningfully enriches the schema's parameter descriptions.

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?

States a specific verb ('Start a LipDub 2 render') and a clear resource with the intended effect: making the person in a source video appear to speak a different audio track with matched lip movement. This clearly distinguishes it from siblings like lipdub_list_renders, lipdub_get_render, and lipdub_wait_for_render, none of which create a render.

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?

Provides explicit when-to-use and when-not-to-use guidance: confirms credits must be approved by the user first, instructs to call again with confirm_spend=true, warns that LipDub 2 does not translate/transcribe/generate speech, and routes follow-up to lipdub_wait_for_render. It also explains when callback_url is appropriate versus chat-session use.

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

lipdub_get_renderCheck LipDub render statusA
Read-onlyIdempotent

Check a LipDub render once, right now, and return its download link if it has finished. This does NOT wait — it answers immediately with whatever the current status is. To wait for a render to finish, use lipdub_wait_for_render instead.

Takes the render_id from lipdub_create_render.

Free and never rate-limited — check as often as you need.

status is one of:

  • preparing — LipDub is downloading your source files (usually under 2 minutes)

  • queued — waiting for a render slot

  • rendering — generating the video

  • succeeded — done; download_url is included

  • failed — see failure_reason

download_url is a temporary signed link that expires. Give it to the user or download it promptly; do not save it for later.

If the render is not finished yet, prefer lipdub_wait_for_render — it waits for you instead of making you check repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
render_idYesThe render_id from lipdub_create_render. A plain number is also accepted.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover readOnlyHint and idempotentHint, and the description layers genuinely useful context on top: the immediate-non-waiting behavior, the full status enum with meanings, and the critical caveat that download_url is a temporary signed link that must be handed to the user or downloaded promptly. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core single-check purpose and the critical non-waiting distinction, followed by usage, rate limits, status enum, and URL handling in logical order. It is slightly verbose — the status enum and expiry caveat could theoretically live in an output schema — but every section earns its place with no 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?

For a one-parameter tool with no output schema, the description covers everything an agent needs: the status value set, what download_url contains and its expiry behavior, how render_id is obtained, and routing to the wait sibling. Nothing required for a correct call is missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents render_id thoroughly ('The render_id from lipdub_create_render. A plain number is also accepted.'). The description just restates the source ('Takes the render_id from lipdub_create_render'), adding little beyond the schema. Baseline 3 is appropriate since the schema carries the load.

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 states a precise verb-resource pair — 'Check a LipDub render once, right now' — and distinguishes itself from lipdub_wait_for_render by clarifying what it does NOT do ('does NOT wait'). This makes it trivially distinguishable from its siblings without opening any schema.

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?

Explicit when-to-use and when-not-to-use guidance is given in two places: 'To wait for a render to finish, use lipdub_wait_for_render instead' and the closing 'If the render is not finished yet, prefer lipdub_wait_for_render'. It also states the unthrottled nature ('Free and never rate-limited — check as often as you need'), giving the agent a clear green light for polling.

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

lipdub_list_rendersList recent LipDub rendersA
Read-onlyIdempotent

List recent LipDub renders on this account, newest first.

Use this when:

  • you have lost a render_id, for example because earlier conversation was trimmed away and a render is still running or already finished

  • the user asks what they have rendered recently

Returns a short summary of each. Call lipdub_get_render with one of the returned render_ids to get its download link.

Free and never rate-limited.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many renders to return.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context: it is account-scoped, returns 'a short summary of each', and is 'Free and never rate-limited'. This goes beyond the annotations by disclosing cost and rate-limit behavior, which is genuinely useful for an agent deciding whether to call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear main statement, bullet-pointed 'when to use' triggers, and a note about returns and cost. It is slightly longer than strictly necessary, but every section serves a purpose and no sentence is wasted. The main action is front-loaded.

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

Completeness4/5

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

For a simple listing tool with one optional parameter and no output schema, the description covers the essential information: what it returns (short summary), how to proceed to get a download link (via lipdub_get_render), and cost/free status. It does not describe the exact shape of the summary, but that is not critical for invoking the tool. Overall it is sufficient for correct usage.

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 single parameter 'limit' is fully documented in the input schema (type, default, min, max, description). The tool description adds no additional semantics beyond the schema — it does not mention pagination limits or default behavior. With 100% schema coverage, the baseline of 3 is appropriate; the description does not need to repeat schema details.

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 states a specific verb ('List'), a resource ('LipDub renders'), and a scope ('on this account'), plus an explicit ordering ('newest first'). It clearly distinguishes from siblings like lipdub_get_render (retrieve one) or lipdub_create_render (make new), so an agent can immediately identify the tool's role.

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 'Use this when' conditions: losing a render_id (e.g., after conversation trimming) or when the user asks for recent renders. It also advises the follow-up call to lipdub_get_render, giving clear decision guidance about when this tool is appropriate and what to do next.

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

lipdub_wait_for_renderWait for LipDub render to finishA
Read-onlyIdempotent

Wait for a LipDub render to finish, then return its download link. Use this straight after lipdub_create_render instead of checking in a loop — it uses far less context.

This call blocks for up to max_wait_seconds (default 45, maximum 600) while tracking the render for you. A render takes several minutes for a short clip, and longer for longer videos, so expect to call this several times — that is normal and costs nothing.

If the render is still going when the wait is up, this returns normally with still_running set to true. That is NOT an error and NOT a failure — the render is fine and is still going. When it happens: tell the user it is still in progress, give them the render_id so they can come back to it, and call this tool again to keep waiting.

Waiting and status checks are free and never rate-limited.

ParametersJSON Schema
NameRequiredDescriptionDefault
render_idYesThe render_id from lipdub_create_render.
max_wait_secondsNoHow long to wait before returning. Returning early with still_running set to true is normal, not a failure. The default of 45 stays under the 60-second request timeout most MCP clients use; only raise it if your client is configured to wait longer.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, but the description adds critical behavioral detail beyond these: the blocking nature, the max_wait_seconds cap, the normal return with still_running, and the explicit statement that it is not an error. No contradiction with annotations.

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 efficiently organized: purpose first, then usage, then behavior, then user guidance. Every sentence earns its place—no fluff. It front-loads the core purpose and the key differentiator, and the length is appropriate for the complexity of the tool.

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?

Despite lacking an output schema, the description fully covers what an agent needs: how to call it, what to expect (including partial results), how to handle still_running, and cost/rate-limit implications. It leaves no gaps for correct invocation and follow-up.

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% (both parameters documented). The description adds context beyond the schema, such as explaining that renders take several minutes and it's normal to call repeatedly, which informs how to set max_wait_seconds. However, the schema already covers the key semantics of max_wait_seconds and still_running, so the description's extra value is limited but present.

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 opens with a precise verb-resource pair: 'Wait for a LipDub render to finish, then return its download link.' It explicitly differentiates from alternatives by stating to use it 'straight after lipdub_create_render instead of checking in a loop,' making the tool's purpose unambiguous and distinct from siblings.

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 gives explicit when-to-use guidance: 'Use this straight after lipdub_create_render instead of checking in a loop.' It also instructs what to do when still_running is true: tell the user, provide the render_id, and call again. It even notes that repeated calls are normal and free, covering both timing and cost expectations.

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. 2 tool updatesv0.1.1
    • Changedlipdub_create_render3 fields changed
      • changedInput schema / properties / audio_url / description
        Previous value: -"Direct https URL to the audio the person should appear to say. You must supply finished audio; LipDub 2 does not generate or translate speech."New value: +"Direct URL to the audio the person should appear to say (.mp3, .wav, .m4a, .aac, .ogg, .flac, .mp4 or .mov). You must supply finished audio; LipDub 2 does not generate or translate speech."
      • removedInput schema / properties / transcript
        Removed value: -{
        -  "description": "Optional. The words spoken in audio_url. Supplying this can improve lip-sync accuracy.",
        -  "maxLength": 4096,
        -  "type": "string"
        -}
      • changedInput schema / properties / video_url / description
        Previous value: -"Direct https URL to the source video (one person, face visible). .mp4, .mov, .avi or .webm."New value: +"URL to the source video (one person, face visible). .mp4, .mov or .avi, or a YouTube link."
    • Changedlipdub_wait_for_render2 fields changed
      • changedInput schema / properties / max_wait_seconds / default
        Previous value: -240New value: +45
      • changedInput schema / properties / max_wait_seconds / description
        Previous value: -"How long to wait before returning. Returning early with still_running set to true is normal, not a failure."New value: +"How long to wait before returning. Returning early with still_running set to true is normal, not a failure. The default of 45 stays under the 60-second request timeout most MCP clients use; only raise it if your client is configured to wait longer."
  2. 5 tool updatesv0.1.0
    • First observedlipdub_check_connection
    • First observedlipdub_create_render
    • First observedlipdub_get_render
    • First observedlipdub_list_renders
    • First observedlipdub_wait_for_render

TDQS

A4.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: connection check, listing, creating, one-shot status check, and blocking wait. The overlap between get_render and wait_for_render is explicitly disambiguated in their descriptions.

Naming Consistency5/5

All tools follow the same lipdub_ prefix with a consistent verb_noun pattern: check_connection, list_renders, create_render, get_render, wait_for_render. There are no naming style deviations.

Tool Count5/5

Five tools is well-scoped for this server's purpose. Each tool covers a necessary part of the render workflow without redundancy or bloat.

Completeness5/5

The tool surface covers the full render lifecycle: verify setup, create a render, wait for completion, retrieve the result, and list past renders. No obvious missing operation is needed for the stated domain.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers