zvex MCP server
AI video dubbing as an MCP tool: hand it a video URL, 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.)
Get an API key
- Sign in at https://tts.xalhar.top
- 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.
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 |
|---|---|---|---|
ZVEX_API_KEY |
yes | — | zvex-… key from the account page |
ZVEX_BASE_URL |
no | https://tts.xalhar.top |
API base URL (self-hosted deployments) |
Tools
| Tool | Purpose |
|---|---|
estimate_cost(minutes, tier) |
Credit cost and current balance |
submit_dubbing_job(video_url, target_language, tier) |
Queue a dubbing job, returns job_id |
get_job_status(job_id) |
Poll once; final states carry the output URLs |
wait_for_job(job_id, timeout_seconds) |
Block until the job finishes |
Typical flow:
submit_dubbing_job("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": "…"}
Notes
video_urlmust be a publicly reachablehttp(s)link, up to 500 MB.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 served from the zvex domain and require being signed in there.
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.server
Release files for zvex 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zvex-0.1.2.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zvex-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:15.7 kB
Release files / zvex-0.1.2.tar.gz
| Download URL | zvex-0.1.2.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f1617aeab1e291e4ab8c2572c29b4ea35b15d55ad089b574ca764740add27dea
|
|
BLAKE2b-256 checksum How to use checksums |
509ce697fdeb65fc550511c06a26dfd4b4b1336b8a6d2e9b299f7568ea940a79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / zvex-0.1.2-py3-none-any.whl
| Download URL | zvex-0.1.2-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
190bceeeb398d0a9b3ee8386a18710a4eb8e67f9c2c709bc6f6785095fe39161
|
|
BLAKE2b-256 checksum How to use checksums |
494cb0877301e4ef4293be125b052944e8a435d5be32d76f8eb48bf9520c862e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|