lipdub-mcp
OfficialLipDub MCP server
让您的 AI 智能体具备视频唇形同步能力。
LipDub 2 能视频中的人物配合另一条音频轨的唇形,看起来像在说那段音频。这是一个 MCP 服务器,可将其开放给 Claude、Cursor、Gemini CLI、Codex、VS Code 以及任何其他兼容 MCP 的客户端。
LipDub 2 不会翻译、转写或生成语音。 音频由您自行提供。如果您想让一个视频配音成另一种语言,请先用文本转语音或语音克隆工具生成该音频,将其托管到公开 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 密钥
登录 app.lipdub.ai。
打开 设置 → API Keys:app.lipdub.ai/settings/api-keys
您必须是账户的 Owner(所有者)或 Admin(管理员)。其他角色会被直接重定向到仪表盘,没有任何说明——如果这个链接把您弹回,请让 Owner 或 Admin 为您生成密钥。
生成密钥并复制。
每个用户只有一把密钥。 LipDub 为每个用户发放一把 API 密钥,生成新密钥会替换旧密钥。如果您的账户已将其密钥用于其他集成,生成新密钥会破坏该集成。请复用现有密钥,或者用一个单独的 Owner/Admin 账户来运行 agent。
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. 验证是否正常
让您的 ai 执行:“check my LipDub connection”。
您也可以单独对服务器做一次快速检查:
npx lipdub-mcp --version # or: node dist/index.js --version工具
工具 | 作用 | 消耗积分? |
| 确认密钥有效并指出账户名称 | 否 |
| 根据视频 URL 和音频 URL 开始渲染 | 是 |
| 获取状态,以及完成后的下载链接 | 否 |
| 等待渲染完成,而不是循环轮询 | 否 |
| 查看最近的渲染,找回丢失的渲染 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 调用,而上传本地文件的路径需要多次调用,并且这些接口每小时限流约十次,也就是说入门套餐大约每小时只能完成两次本地文件渲染。让此服务器只接受 URL,也意味着它在任何位置上运行的行为都是一样的。本地文件支持可能会在之后作为可选项引入。
时间与费用
一次渲染大约需要 7–15 分钟。渲染会消耗您 LipDub 账户中的积分,且无法退款;成本随源视频长度增长,因此越短的片段越划算。
查看渲染状态是免费且不受限流的 —— 您想多久轮询一次都可以。
积分余额无法通过 API 获取;请访问 app.lipdub.ai。
支出防护
lipdub_create_render 是唯一会消费积分的工具。默认它不会执行,直到 agent 传入 confirm_spend,后者会先向您报出成本。服务器还会在每个会话中限制渲染次数(5 次)后停止。
变量 | 默认值 | 作用 |
| 无 | 您的 API 密钥。必填。 |
| 无 | 如果不用环境变量,可以从该文件读取密钥。 |
|
| 单进程最多可发起的渲染次数。 |
|
| 仅在没有人工值守的无头流水线上设为 |
|
|
|
这些是方便安全守卫,而不是安全机制——任何绕过它们直接调用 API 的代码都可以跳过。
故障排除
症状 | 修复方法 |
“No LipDub API key is configured” | 在 设置 → API Keys 生成一个,并设置 |
“LipDub rejected the API key” | 密钥可能输错,或已被重新生成。请生成新的并重启客户端。 |
“out of credits” | 在 app.lipdub.ai 充值 |
下载链接无法使用 | 链接是带签名的短时链接。请再次调用 |
完整的 API 文档请见:lip.dub.readme.io。
隐私
您的 API 密钥从环境中读取,仅用于调用
https://api.lipdub.ai,永远不会写盘、记录日志或出现在工具结果中。每条日志和错误消息都会自动标记或将其从中间移除。您提供的视频和音频 URL 会发送给 LipDub API,API 会下载它们来生成结果。请不要传送您不希望 Lip 处理的内容的 URL。
此服务器不发送任何遥测,也没有 token 采集。
渲染及产出物会存储在您的 LipDub 账户中,受 Lipub 的隐私政策与条款约束。
可接受的使用
LipDub 2 生成的真实人物的合成视频。使用它即表明您拥有对源素材中影像与声音所须的权利和同意。不要未经本人允许冒充任何人,不要制作误导公众的素材,也不要用于 LipDub 条款禁止的场景。
安全
发现了漏洞?请参考 SECURITY.md。不要公开 issue,也绝不能在 issue 里粘贴 API 密钥。
限制
不进行翻译或语音生成——音频由您给出。
仅支持 URL 输入,不支持本地文件上传。
API 无法提供余额与价格估算。
LipDub 每个账户只有一个 API key,无法仅为本服务限制 key 的权限。
版本策略
API 工具名称是公开契约,不会修改。新能力会以新工具的形式添加,参数变更均为扩展式。参见 CHangelog.md。
许可
MIT。该版权声明覆盖的是本客户端。LipDub 本身是商业服务,以其自己的条款为准。
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| audio_id | No | Advanced. A LipDub audio upload id from a previous upload, instead of audio_url. | |
| video_id | No | Advanced. A LipDub shot id from a previous upload, instead of video_url. | |
| audio_url | No | 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. | |
| video_url | No | URL to the source video (one person, face visible). .mp4, .mov or .avi, or a YouTube link. | |
| callback_url | No | Optional https URL to be called when the render finishes. For automated pipelines; in a chat session use lipdub_wait_for_render instead. | |
| confirm_spend | No | Whether 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_filename | No | Optional 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
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.
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.
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.
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.
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.
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| render_id | Yes | The render_id from lipdub_create_render. A plain number is also accepted. |
TDQS
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.
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.
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.
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.
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.
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many renders to return. |
TDQS
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.
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.
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.
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.
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.
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| render_id | Yes | The render_id from lipdub_create_render. | |
| max_wait_seconds | No | 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. |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.1.1- Changed
lipdub_create_render3 fields changed- changed
Input schema / properties / audio_url / descriptionPrevious 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." - removed
Input schema / properties / transcriptRemoved value: -{ - "description": "Optional. The words spoken in audio_url. Supplying this can improve lip-sync accuracy.", - "maxLength": 4096, - "type": "string" -} - changed
Input schema / properties / video_url / descriptionPrevious 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."
- Changed
lipdub_wait_for_render2 fields changed- changed
Input schema / properties / max_wait_seconds / defaultPrevious value: -240New value: +45 - changed
Input schema / properties / max_wait_seconds / descriptionPrevious 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."
5 tool updates
v0.1.0- First observed
lipdub_check_connection - First observed
lipdub_create_render - First observed
lipdub_get_render - First observed
lipdub_list_renders - First observed
lipdub_wait_for_render
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 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.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables AI agents to create lipsync videos, manage assets, and check generation status via the Sync API.2938 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to edit videos through natural language, providing tools for timeline editing, audio management, rendering, and more.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to create, monitor, cancel, and download cinematic AI video renders through the Future Video Studio Agent API.33 PyPIMIT
- AlicenseNot gradedqualityAmaintenanceEnables 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