zvex
Zvex MCP server lets you automatically dub videos into Russian, English, or Spanish with voice cloning via API.
Estimate credit cost and check balance for a given video length and tier.
Upload local video files to get a persistent file_id.
Submit dubbing jobs using a public video URL or an uploaded file_id.
Choose target language (ru/en/es) and tier (fast/standard/professional).
Poll job status or wait until the job finishes.
Retrieve signed, time-limited links to the finished dubbed video and subtitles.
Get full refunds on failed jobs, with flat billing of 10 credits per video minute.
Optionally pay per call via Alipay AI Pay for translation or dubbing without an API key.
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., "@zvex How much would it cost to dub a 10-minute video into Spanish?"
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.
zvex MCP server
AI video dubbing as an MCP tool: hand it a video URL or a local file, get back a fully dubbed video in Russian, English or Spanish — keeping the original speakers' voices through per-speaker voice cloning.
Powered by zvex (声桥).
The server is a thin stdio client over zvex's HTTP API, so it runs anywhere Python does — no GPU, no local models.
Install
uvx zvex # run it without installing anything
# or
uv tool install zvex # install the `zvex` command
# or
pip install zvex(Working from a source checkout instead? Use uv tool install ./mcp/zvex.)
Related MCP server: video-replication-mcp
Get an API key
Sign in at https://zvex.cn
Open Account → API keys and create one
Copy the
zvex-…value — it is shown only once
Jobs are billed from the same credit balance as the web app, at a flat 10 credits per minute of video. A failed job is refunded in full. Top-up supports WeChat Pay, Alipay and PayPal.
Configure your MCP client
Claude Desktop (claude_desktop_config.json) or Cursor (.cursor/mcp.json):
{
"mcpServers": {
"zvex": {
"command": "uvx",
"args": ["zvex"],
"env": {
"ZVEX_API_KEY": "zvex-your-key-here"
}
}
}
}Variable | Required | Default | Meaning |
| yes | — |
|
| no |
| API base URL (self-hosted deployments) |
Tools
Tool | Purpose |
| Credit cost and current balance |
| Upload a local file, returns a |
| Queue a dubbing job, returns |
| Poll once; final states carry the output URLs |
| Block until the job finishes |
Typical flow — public URL:
submit_dubbing_job(video_url="https://example.com/episode-01.mp4", target_language="ru")
→ {"job_id": 42, "credits_cost": 240, "duration_sec": 1441.0, …}
wait_for_job(42)
→ {"status": "completed", "final_video_url": "…", "subtitle_url": "…"}Typical flow — local file (no public URL needed):
upload_video("/home/me/clip.mov")
→ {"file_id": "a1b2c3d4e5f60718", "duration_sec": 92.4, …}
submit_dubbing_job(file_id="a1b2c3d4e5f60718", target_language="ru")
→ {"job_id": 43, …}Notes
submit_dubbing_jobtakes exactly one ofvideo_urlorfile_id.video_urlmust be a publicly downloadablehttp(s)direct link, up to 500 MB — YouTube and other platform pages won't work (they're not direct links; useupload_videofor local files instead).upload_videosends the file to the server (up to 500 MB); the uploaded copy persists, so one upload can back several submissions.target_languagedepends on the deployment (ru,en,eson the hosted service).tierisfast,standardorprofessional— it selects which features are available, not the price.One job per account runs at a time; a second submission returns HTTP 409.
Output links are signed, time-limited URLs (valid ~24 h) — they download without signing in. Re-poll the job to get a fresh link once one expires.
No expert mode over MCP — use the web app for that
The MCP tools are the fully automatic path: you hand over a video URL and get back a finished dub, with no review step in between. That is deliberate — an LLM client has no way to listen to a waveform or judge whether a line landed.
Expert mode is not exposed as an MCP tool. For the full expert mode, go to
zvex.cn and open an order's Review page
(/expert/{run_id}).
What you get there, and why it is worth the trip:
Capability | What it fixes |
Segment-by-segment editing | Edit the source text, the translation, and the start/end timing of every segment — the automatic pass gets the gist right, this gets the details right. |
Waveform timeline | Drag region borders to re-time a line, click a row to jump-play it, right-click to merge or split. Split a run-on sentence or merge two fragments without touching a text file. |
Re-translate after editing | Fix the source line, then re-translate just that segment — no need to rerun the whole job. |
Per-segment dub on/off | Untick "Dub" to keep a segment's original voice. Essential for songs, on-screen text, or a line the clone cannot carry. |
Speaker & gender correction | Fix mis-clustered speakers and wrong gender assignments; the TTS gate respects your manual choice instead of re-deriving it. |
Emotion labels | Tag a segment calm / happy / angry / sad / whisper / excited / steady — the TTS intonation follows it. |
Terminology pre-learning | Extract names and jargon from the script first, so they translate consistently across the whole episode. |
Mixing controls | Dubbing volume, background-music level, dubbing speed, cross-speaker gap, subtitle font size and position — tuned per job instead of accepting the defaults. |
Subtitle removal | Blur or delogo burned-in source subtitles (or mask them with a bar) so you don't end up with double subtitles. |
Optional heavy features | Active-speaker detection, face clustering and cross-episode |
Safety review gate | Low-confidence segments (possible speaker mismatch, singing, uncertain BGM) are flagged and block video generation until you resolve them — the automatic path would have shipped them silently. |
In short: MCP is the "just give me the video" path; the web app's expert mode is where you fix the 5% that a machine cannot judge. Run the automatic pass over MCP first, then open the same order in the web app whenever the result needs a human ear.
Alipay AI Pay agents (zero sign-up)
If your agent is wired into Alipay AI Pay (the A2M 402 protocol — OpenClaw-style clients), you can skip sign-up and top-up entirely and pay per call:
Resource | Endpoint | Pricing |
Text translation |
| ¥0.1 / call |
Video dubbing |
| ¥1 / minute (min ¥2, billed on measured duration) |
Flow: call without credentials → 402 + Payment-Needed signed bill →
pay via Alipay AI Pay → retry with Payment-Proof → resource delivered.
Dubbing is asynchronous; poll /a2m/v1/dubbing/status/{out_trade_no} for
the finished video and subtitles.
Both services are live on the Alipay AI Pay service bazaar (search "声桥" or "zvex"). Protocol details: https://zvex.cn/docs/mcp. Regular MCP clients without 402 support should use the API-key path above.
Development
uv venv --python 3.11 .venv-test
uv pip install --python .venv-test/bin/python -e .
ZVEX_API_KEY=zvex-… .venv-test/bin/python -m zvex.serverAvailable Tools
4 toolsestimate_costA
Estimate the credit cost of dubbing a video and check the credit balance.
Pricing is a flat 10 credits per minute for every tier (a tier only changes which features are available, not the price).
Args: minutes: Video length in minutes (0 < minutes <= 600). tier: "fast", "standard" or "professional".
Returns: JSON with credits, current balance and whether the balance is enough.
Inputs: minutes (required), tier. Returns: result
get_job_statusA
Check a dubbing job's status.
Once the status is "completed" the response also carries the dubbed video and subtitle download URLs. "failed" carries the error and means the credits were refunded.
Args: job_id: The job_id returned by submit_dubbing_job.
Returns: JSON with status ("processing" / "completed" / "failed" / "cancelled") and, for a completed job, final_video_url and subtitle_url.
Inputs: job_id (required). Returns: result
submit_dubbing_jobA
Submit a fully automatic dubbing job: a video URL in, a dubbed video out.
The server downloads the video, then runs speech recognition, speaker separation, translation, voice cloning/TTS and composition — no manual review step. Credits are charged up front based on the server-measured duration and refunded in full if the job fails.
The job runs in the background: use get_job_status to poll it, or wait_for_job to block until it finishes. Only one job per account may run at a time (a second submission returns HTTP 409).
Args: video_url: Publicly reachable http(s) video link (max 500 MB). target_language: Dubbing language, e.g. "ru", "en", "es" (depends on the deployment's supported set). tier: "fast", "standard" or "professional".
Returns: JSON with job_id, run_id, measured duration and the charged credits.
Inputs: video_url (required), tier, target_language. Returns: result
wait_for_jobA
Block until a dubbing job reaches a final state, then return its result.
Convenience wrapper around get_job_status for callers that just want the finished video. Dubbing typically takes a small multiple of the video's own length, so keep the timeout generous.
Args: job_id: The job_id returned by submit_dubbing_job. timeout_seconds: Give up after this long (default 1800, max 7200).
Returns: JSON with the final status and, when completed, the output URLs.
Inputs: job_id (required), timeout_seconds. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: cost estimation, job submission, status polling, and blocking wait. There is no overlap or ambiguity; an agent can easily select the right tool for each step of the workflow.
All tool names follow a consistent verb_noun pattern (estimate_cost, submit_dubbing_job, get_job_status, wait_for_job). The naming is uniform and predictable, making the API easy to learn and use.
With 4 tools, the server is well-scoped for a dubbing service. Each tool covers a necessary step: cost estimation, job submission, status checking, and a convenience wait method. There are no redundant or missing tools that would bloat or underrepresent the functionality.
The core dubbing lifecycle is covered: estimate cost, submit job, poll status, and retrieve output. A minor gap is the lack of a cancel operation (though status mentions 'cancelled'), but it is not a critical dead end. The workflow is fully functional without it.
Maintenance
Related MCP Connectors
Transcribe, subtitle, dub and lip-sync media; create speech, voices, images and thumbnails.
Transcribe, subtitle and dub videos into 100+ languages, and translate text.
Translate your videos, check progress and retrieve dubbed results through your DubSync account.
Generate AI voices, text-to-speech, subtitles, transcription, and video localization.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered translation of YouTube videos into localized versions with synthesized voiceovers and avatar videos. Supports the full content pipeline from transcript extraction and translation to video generation and publishing across social platforms.-
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to create video replicas by providing a product image and a reference video, with status tracking and credit management.-
- 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
- AlicenseAqualityDmaintenanceEnables AI clients like Codex, Claude Code, and Kimi Code to analyze public video URLs by downloading media, uploading it to Gemini, and returning timestamped production breakdowns covering shots, visual design, animation, motion, narration, music, sound effects, and editing, with follow-up Q&A and session management tools.513 npmMIT