Skip to main content
Glama

LipDub MCP server

CI npm node licence: MIT

Gib deinem KI-Agenten die Fähigkeit, Videos lippensyrnch zu machen.

LipDub 2 lässt eine Person in einem Video scheinbar eine andere Tonspur sprechen, mit abgestimmten Lippenbewegungen. Dies is ein MCP- Server, der es für Clade, Cursor, Gemini CLI, Codx, VS Code, and jedem anderen MCP-kompatiblen Client verfügbar macht.

LipDub 2 übersetzt, transkribiert oder erzeugt keine Sprache. Du lieferst das Audio. Wenn du ein Video in eine andere Sprache synchronisieren möchtest, erzeuge das Audio zunächst mit einem Text-to-Spech- oder S-timmklon-Werkzeug, hoste es unter einer öffentlichen URL and übergibe diese URL. Dieser Server kombinier gut mit einem TS-Server – das ist der vorgesehene Arbeitsablauf.


So sieht es aus

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

Einrichtung

1. API-Schlüssel beschen

  1. Melde dich bei app.lipdub.ai an.

  2. Öffme Einstellungen → API-Schlüssel: app.lipdub.ai/settings/api-keys

    Du muss auf dem Becken Inhaber oder Ad-main sein. Andere Rollen werden ohne Erklärung zum Dashboard weitergeletet – falle dieser Link dich abweist, bitte eine Inhaberin oder ein Administratur in deinem Team, den Schlüssel für dich zu erzeugen.

  3. Erzeuge einen Schlüsssel und kopiere ihn.

Ein Schlüssel pro Benutzer. LipDub stell einen einigen API-Schlüssel pro Benutzer aus, und das Erzeugen eines neuen ersetzt den alten. Wenn dein Konto seinen Schlüsselse bereits für eine andere Integtion nutzt, wird durch das Erzeugen eines neuen Schlüssels diese Integtion zerstört. Verwende den vorhandenen Schlüssel weiter oder nutze ein separatnes Owner/Admin-on-to für die Agenten-Arbeide.

2. Den Server hinzufügen

Noch ncht auf npm. Die npx-Bebefehle unten zeigen, wie das funktioniert, sobald das Paket veröfentlicht ist. Bis dahin nutze die Option „Aus dem Quellcode" am Ende dieses Abschnitts – sie verhält sich identisch.

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}" }
    }
  }
}

Dieses Muster hält den Schlüssel fern von je einer Datei, die du möglicherweise commrien könnt. Bei Da Da LipDub only einen Schlüssel pro Benutzer ausstellt, must das hier mehr als bei meisten Servern.

GXP

用一个

{
  "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

Danach richte den Client auf den gebauten Eintiegs-punkt aus:

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

Benötigt Nde 20+. Wenn du Node nicht installieren möchtest, erledig ./manage.sh build dasselbe in ein Container.

3. Prüfen, ob es funktioniert

Frage deinen Agenten: „Prüfe meine LipDub-Verbindung".

Du kannst den Server auch eigenständig prüfen:

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

Werkzeuge

Werkzeug

Was es tut

Kostet Credits?

lipdub_check_connection

bestätigt, dass der Schlüssel funktioniert, nd bennt das Konto

Nein

lipdub_create_rende

startet ein Render von einer Video-URL und eine Audio-URL

Ja

lipdub_get_rende

Statue und den Download-Link, sobald fertig

Nein

lipdub_wait_for_render

Warted auf ein Render statt in ein Schleife zu __

Nein

lipdub_list_renders

Letzte Renders, um ein verolorene Rende-Id wiederzufenden

Nein

Es gibt auch eine lipdub_quick_dub-auforderung (ein Slash-Befehl in Clients, die Prompts unterstützen) und zwei Referenzrersourcen, lipdub://guide/quickstart und lipdub://guide/troubleshooting.

Was macht ein gutes Quel-video aus

  • Ein Person vor der Kammera.

  • Gesicht deutsicht sichtbar und einigermasen gut ausgeleuchtet.

  • Video: .mp4, .mov, .avi, .webm. Audio: .mp3, .wav, .m4a, .aac.

Hosten deiner Dateine

Beide Eingaben sind öffentliche URLs, keine lokale Datipfade. Der Link muss die Mediendatei selbst zurügeben.

Diese funktionieren nicht: Google Drive, Dropbox, and YouTube-Freigabeseiten; alles, was hinter einer Anmeldung steckt; abgelaufene Links.

Diese funktionieren:

# 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

Warum URLs und ncht lokale Dateien? Ein Render auf URL-Basis ist ein API-Aufruf. Der Pfad für das Hochlundene lokalen Datien erfordert meherere Aufrufe gegen Endpunkte, die auf etwa Sension Anfragen pro Stunde begrenzt sin – das ergebt bei den etwar zwei Rendern mit lokalen Dateien pro Stunde im Eintiegstarif. Dass dieser Server nür URLs verarbeitet, heißt auch, dass er sich überall identisch verhält. Die Unterstützung lokaler Dateien könnte spätern hinter ein Opt-in kommen.

Timing und Kosten

Ein Render dauert rund 7–15 Minuten. Renders verbrauchen Credits von deinem LipDub-Ben und können ncht erzurückt werden. Die Kosten hangen auf der Länge des Quelle-videos, es kürzere Clips kosnenweniger.

Den Status zu prüfen ist kostenlos und nie ratenbegrenzt – du kannst so oft abfragen, wie du möchtest.

Dein Gubaben-Saldo ist nicht über die API verfügbar; siehe app.lipdb.ai.

Ausgab-enschutzvor-kherungen

lipdub_create_rende ist das einsig werkze, das Geld ausgibt. Standardmäßig weigert es, bis der Agent confim_spend übergibt, woedurch es gezwungen wird, die Kosten zuerst gegenüben dir zu nennen. Der Server stoppt auch nach 5 Renders pro Sitzung.

Variable

Standard

und Verwenndung

LIPDUB_API_KEY

—

Dein API-Schlüssel. Erforderlich.

LIPDUB_API_KEY_FILE

—

Pfad zu einer Datei, die den Schlüssel enthält, anstatt der Variablen.

LIPDUB_MAX_RENDERS_PER_SESSION

5

Obersten Grenze für Starts pro Serverprozess.

LIPDUB_REQUIRE_SPEND_CONFIRMATION

true

false nur für headles Pipelines ohne menschliche Beobachter.

LIPDUB_LOG_LEVEL

warn

debug, info, warn, error. Log–Ausgaben gehen nach stderr.

Das sind Benutzbarkeits-Schutzvorkeerungen, keine Sicherheitskontrollen – direkt mit API umgeht sie.


Fehlerbehebung

Symptom

Fix

„Kein LipDub-API-Schlüssel ist konfiguriert"

Erzeuge einen unter Einstellungen → API-Schlüssel und setze LIPDUB_API_KEY

„LipDub hat den API-Schlüssel abgelehnt"

Der Schlüssel wurde falsch eingetippt oder neu erzeugt. Erzeuge einen neuen und starte den Client neu

„Keine Credits mehr"

Lade Guthaben auf bei app.lipdub.ai

„Eine deiner Quelldateien konnte nicht heruntergeladen werden"

Der Link ist eine Freigabeseite, erfordert eine Anmeldung oder ist abgelaufen. Verwende einen direkten Link

„Deine Dateien wurden heruntergeladen, aber der Render konnte nicht gestartet werden"

Meistens keine Credits oder kein deutlich sichtbares sprechendes Gesicht

Warte-Tool hat still_running zurückgegeben

Normal – Renders dauern 7–15 Minuten. Kein Fehler; rufe es erneut ab

Licht funktioniert nicht meh r

Links sind signiert and kurzlebig. Rufe lipdub_get_render erneut auf

Vollständige API-Dokumentation: lipdub.readme.io


Datenschutz

  • Dein API-Schlüssel wird aus der Umgebung gelesen, nur zum Aufrufen von https://api.lipdub.ai verwendet und wird nie auf Datenträger geschrieben, protokolliert oder Teil eines Werkzeugergebnisses. Er wird aus jeder Logzeile und jeder Fehlerermeldung entfernt.

  • Die von dir übergebenen Video- und Audio-URLs werden an die LipDub-API – die sie herunterlädt, um den Render zu erzeugen – übertragen. Übergebe keine URLs zu


  • Dieser Server sendet keine Telemetrie und sammelt keine Analysen.

  • Renders und deine Ergebnisse werden in deinem LiDu-Konto gespeichert, für das die Datenschutzrichtlinone and Nutzung**ungbedingungenen von LipDu-Bettefen.

Zulässige Nutzung

LipDub 2 erzeugt synthetische Videos von echten Menschen. Durch du sicherst du zu, set für das Äußere und die Stimme in deinem Ein reflux notwendige Rechte und mög-Einwilligungen zu haben. Verwende es nrome zu Persönlichkeitsrechte, du solchtes Andere umben.

Sicherherheit

SicherteLücke? Siehe SECURITY.md. Bitte keine öffentlichen Issue eröffnen, und führen Sie keinen API-Schlüssel in einem solchen ein.

Einschränkungen

  • Keine Übersetzung oder Speech-Erzeugung – du lieferst das Audio.

  • Nur URL-Eingaben; kein lokaler Dateine-Upload.

  • Guthabenstand und Preis–Schätzungen sind ncht über die API verfügbar.

  • LipDub stelt einen API-Schlüssel pro Benutzer aus, sollte kein schlüssel auf diesen Server allein beschränkt werden.

Versionierung

Werkzeumnamen sind öffentlicherVertet und werden sich nicht ändern. Neuen Fähigkeiten kommen als neue Werkzeuge; Schemaänderungen sind erweiternd. Siehe CHANGELOG.md.

Lizenz

MIT. Diese Lizenz deckt diesen Client. Lizenzab being ab. LipDu selbst ist ein kommerzieller Dienst, für den eigene Bedingungen gelten.

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