lipdub-mcp
OfficialUse this MCP server to connect an AI client to LipDub and run/monitor LipDub 2 lip-sync renders.
Check that the API key works and identify the LipDub account.
Start a lip-sync render from a public video URL or YouTube link plus a public audio URL; this spends credits and requires user confirmation.
Check a render’s current status and retrieve its temporary download link.
Wait for a render to finish with bounded blocking instead of polling manually.
List recent renders to recover lost render IDs or review recent activity.
Use advanced inputs such as existing LipDub video/audio IDs, callback URL, and output filename.
Create renders is the only paid operation; checking, waiting, and listing renders are free.
The README also exposes a quick-dub prompt and quickstart/troubleshooting resources.
Allows YouTube video URLs to be used as the source video for LipDub renders, with YouTube links resolved automatically so a standard watch URL works as the video input.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lipdub-mcp Lip-sync https://example.com/talk.mp4 to the audio at https://example.com/audio.mp3"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LipDub MCP server
Give your AI agent the ability to lip-sync video.
LipDub 2 makes a person in a video appear to speak a different audio track, with matched lip movement. This is an MCP server that exposes it to Claude, Cursor, Gemini CLI, Codex, VS Code, and any other MCP-compatible client.
LipDub 2 does not translate, transcribe, or generate speech. You bring the audio. If you want a video dubbed into another language, generate that audio first with a text-to-speech or voice-cloning tool, host it at a public URL, and pass that URL. It pairs naturally with a text-to-speech server for that first step.
What it looks like
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. A clip this length takes a few minutes; I'll wait.
...
Done. Here's your video: https://… (link expires, so grab it soon)Related MCP server: OrcaDub MCP Server
Setup
1. Get an API key
Sign in at app.lipdub.ai.
Open Settings → API Keys: app.lipdub.ai/settings/api-keys
You must be an Owner or Admin on the account. Other roles are redirected to the dashboard with no explanation. If that link bounces you, ask an Owner or Admin on your team to generate the key for you.
Generate a key and copy it.
One key per user. LipDub issues a single API key per user, and generating a new one replaces the old one. If your account already uses its key for another integration, generating a fresh key will break it. Reuse the existing key, or use a separate Owner/Admin account for agent work.
2. Point your client at it
Nothing to install: npx fetches it on first run.
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" }
}
}
}The file lives at ~/Library/Application Support/Claude/claude_desktop_config.json on
macOS, and %APPDATA%\Claude\claude_desktop_config.json on Windows. Restart Claude
Desktop after editing it.
{
"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}" }
}
}
}This pattern keeps the key out of a file you might commit. Given that LipDub issues one key per user, that matters more here than it does for most servers.
{
"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 buildThen use "command": "node", "args": ["/absolute/path/to/lipdub-mcp/dist/index.js"]
instead of the npx pair above. Needs Node 20+; ./manage.sh build does the same
inside a container if you have no Node.
3. Check it works
First confirm the server itself runs:
npx -y lipdub-mcp --versionThen ask your agent: "check my LipDub connection". It should reply with your
account id. If it asks you to set an API key, the key is not reaching the server.
Check the env block above and restart the client.
Or test it without an agent
There is a smoke test that drives the published server exactly as a real MCP client does, so a pass means the thing you installed actually works. No clone:
LIPDUB_API_KEY=your_key_here npx -y lipdub-mcp --smokeThat checks the handshake, the tool list and your API key. It renders nothing and costs nothing.
To exercise the whole flow, including a real render. This spends credits:
LIPDUB_API_KEY=your_key_here npx -y lipdub-mcp --smoke --render \
--video=https://example.com/speaker.mp4 \
--audio=https://example.com/speech.mp3It starts the render, waits for it, and prints the download link.
If you already have assets uploaded to LipDub, pass their ids instead of URLs with
--video-id=<shot id> --audio-id=<upload id>, which helps when you have nowhere public
to host them. If a run is interrupted, --render-id=<id> re-attaches to the render
already in flight rather than paying for a second one.
From a git checkout, npm run smoke is the same command.
Tools
Tool | What it does | Costs credits? |
| Confirms the key works and names the account | No |
| Starts a render from a video URL and an audio URL | Yes |
| Status, and the download link once ready | No |
| Waits for a render instead of polling in a loop | No |
| Recent renders, to recover a lost render id | No |
There is also a lipdub_quick_dub prompt (a slash command in clients that support
prompts) and two reference resources, lipdub://guide/quickstart and
lipdub://guide/troubleshooting.
What makes a good source video
One person on camera.
Face clearly visible and reasonably well lit.
Accepted | |
Video |
|
Audio |
|
Size | up to 15 GB per file, or 5 GB on the legacy Basic plan |
Hosting your files
Both inputs are public URLs, not local file paths, and the link must return the media file itself.
YouTube is the exception: youtube.com, youtu.be and youtube-nocookie.com are
resolved for you, so a normal watch URL works as video_url.
These do not work: Google Drive and Dropbox share pages, anything behind a login, and expired links.
For your own files:
# 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.mp4Why URLs and not local files? A URL-based render is one API call. The upload-a-local-file path is several calls against endpoints that are rate-limited to roughly ten requests an hour, which works out at about two local-file renders per hour on the entry plan. Keeping this server URL-only also means it behaves identically wherever it runs. Local-file support may arrive later behind an opt-in.
Timing and cost
Rendering takes several minutes for a short clip, and longer for longer videos, because generation time scales with the length of the source. LipDub also waits up to 15 minutes to download your two source files before giving up, so slow hosting shows up as a timeout rather than a render.
Renders consume credits from your LipDub account and cannot be refunded; cost scales with the length of the source video, so shorter clips cost less.
Checking status is free and is not rate-limited, so poll as often as you like.
Your credit balance is not available through the API; see app.lipdub.ai.
Spending guardrails
lipdub_create_render is the only tool that spends money. By default it refuses to run
until the agent passes confirm_spend, which forces it to state the cost to you first.
The server also stops after 5 renders per session.
Variable | Default | Purpose |
| — | Your API key. Required. |
| — | Path to a file containing the key, instead of the variable. |
|
| Ceiling on renders started per server process. |
|
| Set |
|
|
|
These are usability guardrails, not security controls. Anything calling the API directly bypasses them.
Troubleshooting
Symptom | Fix |
"No LipDub API key is configured" | Generate one at Settings → API Keys and set |
"LipDub rejected the API key" | The key was mistyped or has been regenerated. Generate a fresh one and restart the client |
"out of credits" | Top up at app.lipdub.ai |
"could not download one of your source files" | The link is a share page, needs a login, or has expired. Use a direct link |
"downloaded your files but could not start the render" | Usually no credits, or no clearly visible speaking face |
Wait tool returned | Normal — the render is still going. Not a failure; call it again |
Download link stopped working | Links are signed and short-lived. Call |
Full API documentation: lipdub.readme.io
Privacy
Your API key is read from the environment, is used only to call
https://api.lipdub.ai, and is never written to disk, logged, or included in any tool result. It is redacted from every log line and error message.The video and audio URLs you supply are sent to the LipDub API, which downloads them to produce the render. Do not pass URLs to material you are not willing to have LipDub process.
This server sends no telemetry and collects no analytics.
Renders and their outputs are stored in your LipDub account, governed by LipDub's privacy policy and terms.
Acceptable use
LipDub 2 generates synthetic video of real people. By using it you warrant that you have the rights and consent necessary for the likeness and the voice in your source material. Do not use it to impersonate anyone without their permission, to create misleading content about real people, or for anything prohibited by LipDub's terms.
Security
Found a vulnerability? See SECURITY.md. Please do not open a public issue, and never paste an API key into one.
Limitations
No translation or speech generation. You supply the audio.
URL inputs only; no local file upload.
Credit balance and price estimates are not available through the API.
LipDub issues one API key per user, so a key cannot be scoped to this server alone.
Versioning
Tool names are a public contract and will not change. New capability arrives as new tools; schema changes are additive. See CHANGELOG.md.
Licence
MIT. This licence covers this client. LipDub itself is a commercial service governed by its own terms.
Available Tools
5 toolslipdub_check_connectionCheck LipDub connectionARead-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.
Inputs: no named parameters.
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.
Inputs: audio_id, video_id, audio_url, video_url, +3 more.
lipdub_get_renderCheck LipDub render statusARead-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.
Inputs: render_id (required).
lipdub_list_rendersList recent LipDub rendersARead-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.
Inputs: limit.
lipdub_wait_for_renderWait for LipDub render to finishARead-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.
Inputs: render_id (required), max_wait_seconds.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
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.
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.
Five tools is well-scoped for this server's purpose. Each tool covers a necessary part of the render workflow without redundancy or bloat.
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
Related MCP Connectors
Generate lip-synced talking and singing videos from images or videos and audio.
Transcribe, subtitle, dub and lip-sync media; create speech, voices, images and thumbnails.
Generate and edit images, video, voice, lip-sync and 3D models from your AI agent.
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Related MCP Servers
- AlicenseAqualityBmaintenanceLipsync, dub and make talking videos from your agent. Hosted, OAuth sign-in, no API key.595,396 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI video dubbing from any MCP-capable agent: upload a video or provide a URL, submit a dubbing job, poll progress, and download the finished MP4.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to transcribe and summarize videos and voice messages, translate speech while keeping the speaker's voice, read text aloud in a cloned voice, and produce subtitles, lip-synced dubbing, voice changes, and translated images from links, uploads, or local files. It also handles media downloading and job/account status, with paid operations priced and confirmed before they run.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to turn scripts into narration audio with matching SRT/VTT captions in one tool call, plus voice cloning from a reference clip and transcription of local audio or video into subtitles.MIT