zvex
Click on "Install 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., "@zvexHow 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, 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://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 |
| yes | — |
|
| no |
| API base URL (self-hosted deployments) |
Tools
Tool | Purpose |
| Credit cost and current balance |
| Queue a dubbing job, returns |
| Poll once; final states carry the output URLs |
| 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.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.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | standard | |
| minutes | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses its read-only nature (estimate, not actual dub), the pricing model, and the return contents (credits, balance, sufficiency). It could mention that no credits are consumed, but the term 'estimate' strongly implies that, making this sufficient for a safe read operation.
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 tightly structured: purpose first, then pricing rule, then parameter explanations, then return summary. Every sentence earns its place and there is no fluff. It is long enough to be informative but not bloated.
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 estimation tool with two parameters and a known output (already described), the description covers all necessary aspects: what it does, how pricing works, parameter constraints, and return behavior. The presence of an output schema reduces the need for further detail, but the description already goes beyond it.
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 0%, but the description fully compensates: it explains minutes range (0-600) and valid tier values (fast/standard/professional), plus the flat pricing relationship that ties them together. This adds real meaning beyond the bare schema.
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 clearly states the verb (estimate) and resource (credit cost of dubbing a video), plus a second purpose (checking credit balance). It is inherently distinct from siblings like submit_dubbing_job and get_job_status, so an agent can easily tell them apart.
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 purpose implies the use case: estimating cost and checking balance before submitting a job. While it doesn't explicitly name when not to use it or refer to alternatives, the context (sibling names) makes the intended usage clear. The flat pricing note adds useful whether-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses the four possible statuses, the presence of download URLs on completion, the error field on failure, and the side effect of credit refund on failure. This goes well beyond the schema and covers key behavioral outcomes.
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 brief opening, followed by Args and Returns sections. It is slightly longer than strictly necessary, but every sentence adds useful detail (statuses, URLs, error handling). No redundancy or 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 single-parameter status-check tool with an output schema, the description covers all essential information: possible statuses, what the response contains for each state, and the refund side effect. It is complete enough for an agent to call correctly and interpret results.
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 schema only states job_id is an integer and required. The description adds the critical semantic context that job_id is the value returned by submit_dubbing_job, which fully explains how to obtain a valid input. With 0% schema description coverage, this is essential and well handled.
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 clear verb and resource: 'Check a dubbing job's status.' It explicitly ties job_id to submit_dubbing_job, which distinguishes it from the cost-estimation and submission tools. The resource and action are unambiguous.
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?
It clearly implies the tool is for checking status after submission, and references where job_id comes from. However, it does not explicitly contrast with the wait_for_job sibling or state when to prefer one over the other. The guidance is present but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | standard | |
| video_url | Yes | ||
| target_language | No | ru |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to provide safety or read-only hints, the description carries the full burden of behavioral disclosure. It covers the background execution model, credit charging up front with refund on failure, and the concurrency limit. It does not mention rate limits or idempotency, but it gives a comprehensive picture of the tool's behavior beyond basic input/output. Since the description is very informative despite no annotations, score 4 is appropriate.
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 and detailed without being verbose. It front-loads the core purpose in the first sentence, then explains the pipeline, billing, execution model, and parameters in a logical flow. Each sentence adds value, and the Args and Returns sections are clearly segmented brief. No unnecessary repetition or fluff.
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?
Given the tool's complexity (background job, pricing, concurrency) and the absence of annotations, the description covers all essential aspects: input requirements, parameter semantics, background execution, billing, concurrency, and how to track the job via siblings. The output schema exists and is referenced ('Returns: JSON with job_id, run_id...'), so return values are adequately conveyed. The tool is three parameters, and the description leaves no critical gap for correct invocation.
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 schema description coverage is 0%, so the description must compensate for the lack of parameter details. It does this thoroughly: it explains video_url (publicly reachable, max 500 MB), target_language (dubbing language with examples), and tier (options and default). This is significantly more than the schema provides, giving clear usage semantics for each parameter.
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 clearly states the tool's function: submitting a fully automatic dubbing job with a video URL input and a dubbed video output. It enumerates the processing pipeline (speech recognition, speaker separation, translation, voice cloning/TTS, composition) and distinguishes it from siblings by noting the manual review absence. This is a specific verb-resource pair with comprehensive detail.
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 explicitly mentions sibling tools (get_job_status and wait_for_job) and explains when to use each: polling for background job status versus blocking until completion. It also notes the concurrency constraint (one job per account) and the HTTP 409 response for violations, which is critical for the agent to know. It provides clear context for when this tool should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does a solid job: it discloses blocking behavior, the final-state condition, timeout behavior, and the return shape. It even gives a practical heuristic about dubbing duration to guide timeout configuration. Minor gaps remain around what happens exactly on timeout, but the core behavior is transparent.
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 purpose sentence followed by Args and Returns sections. Every sentence earns its place: the wrapper explanation, the duration heuristic, and the parameter semantics are all useful and there is no filler or redundancy.
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 two-parameter convenience wrapper, the description covers purpose, parameter meaning, timeout guidance, and return content. Since an output schema is present, explaining return values in depth is not required. It could be slightly more explicit about timeout failure behavior or when to fall back to get_job_status, but nothing essential is missing for a correct call.
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 description coverage is 0%, so the description must add meaning beyond the raw schema, and it does. It explains that job_id comes from submit_dubbing_job and gives timeout_seconds a default (1800) and maximum (7200) that are not present in the schema. The only weakness is that it stops short of describing the timeout result behavior in detail.
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 specific verb and resource: 'Block until a dubbing job reaches a final state, then return its result.' It also distinguishes itself from get_job_status by calling itself a 'convenience wrapper' for callers that just want the finished video, which clearly differentiates it from the sibling polling tool.
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 explicitly names get_job_status as the underlying tool and frames wait_for_job as the right choice for callers that 'just want the finished video,' giving clear context for when to use it. It does not explicitly state when to prefer get_job_status (e.g., for incremental polling), but the implied usage is strong and the alternative is named.
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.
4 tool updates
v0.1.1- First observed
estimate_cost - First observed
get_job_status - First observed
submit_dubbing_job - First observed
wait_for_job
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI transcription from URLs or files. 119 languages, diarization, SRT/VTT/text export.
Generate AI talking-head videos with custom characters and voices.
Create AI-powered short-form video clips from YouTube videos. Supports webhook callbacks.
Generate AI UGC video ads from any product URL — avatars, voiceover, OAuth Connect.
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 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.5MIT
- AlicenseAqualityCmaintenanceEnables 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.515MIT