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": "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.1
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.1.tar.gz | 6.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zvex-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:12.6 kB
Release files / zvex-0.1.1.tar.gz
| Download URL | zvex-0.1.1.tar.gz |
|---|---|
| Size | 6.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62c7193eb95622eb270e5a3f2a7830d6a52cfaf2feca664b138649a96040621f
|
|
BLAKE2b-256 checksum How to use checksums |
9fb916a9f324d0dc8b6d05d80f89b07afae4b2ec27c7958fe2a8a4efc6badcdf
|
| 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.1-py3-none-any.whl
| Download URL | zvex-0.1.1-py3-none-any.whl |
|---|---|
| Size | 6.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0c066b6aa02337b3e358153c0085b3c8a39bfa43ec8d316e1e1a10054da45e7d
|
|
BLAKE2b-256 checksum How to use checksums |
f3c203980af1f22321265fbdde2287770e3fb8c8ff239643cfcdf174343f720f
|
| 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}
|