Skip to main content
Glama
VoiceStudio MCP
by AIM-IT4

VoiceStudio MCP for Desk2Quant

A deployable MCP gateway and private plugin source package for debpalash/VoiceStudio. It keeps inference in VoiceStudio and exposes its existing native tools plus its broader HTTP API over Streamable HTTP or local stdio.

Start here: DEPLOY.md. The ZIP is source, not a running server. After deployment your private MCP endpoint is https://<your-gateway>/<secret>/mcp. No live domain or credentials are embedded in this package.

What is included

Capability

How it is accessed

Speech / narration

Native generate_speech; advanced parameters via HTTP API

Voice cloning / voice design

Native clone_voice, describe_voice, design_voice

Transcription

Native transcribe; multipart API for larger recordings

Voice / personality / language discovery

Native list_voices, list_personalities, list_languages

Video dubbing, translation and subtitles

Discover, inspect and call the live /dub/* and related operations

Audiobooks and long-form production

Live audiobook / longform operations, including finite SSE rendering

Batch jobs, projects, conversion and pronunciation

Live API discovery and execution

Models, engines, watermarking, settings and workers

Live API discovery; upstream permission and hardware rules apply

Audio, video, subtitles and manuscript files

Signed uploads, repeated multipart file fields and timed downloads

Long operations

Bounded background jobs and persistent status without automatic retry

MCP voice/history resources

voicestudio_read_resource

There are 9 native tools + 12 gateway tools in the bundled schema. Native discovery also picks up additional tools exposed by your backend. The source catalog contains 337 HTTP routes inspected at the commit in UPSTREAM.json; actual operation IDs, schemas and availability always come from your running backend's OpenAPI document. This is API coverage, not a claim that every desktop feature or every engine is usable on every host.

Related MCP server: Talkies

Package files

  • Dockerfile, railway.json: deploy the small gateway.

  • docker-compose.yml, docker-compose.gpu.yml: gateway + official backend image.

  • .env.example: configuration; scripts/init_env.py generates fresh secrets.

  • plugin.json, mcp.json: portable local plugin with a real stdio entrypoint.

  • scripts/export_remote_plugin.py: verify your deployed endpoint and make a separate remote plugin ZIP containing its actual URL.

  • scripts/smoke_test.py: safe deployed check of discovery and status.

  • scripts/upload_file.py: upload a local file without putting base64 in a chat.

  • CAPABILITIES.md: coverage and limitations.

  • VERIFICATION.md: what was actually tested.

  • uv.lock: frozen Python dependency resolution.

Important limits

  1. A running VoiceStudio backend and installed models are required. The gateway does not contain model weights and cannot synthesize audio by itself.

  2. A small Railway/Render instance can host the gateway. Running the complete VoiceStudio inference workload there is a separate resource decision; do not assume a 1 GB/free instance will support large speech models or video dubbing.

  3. Native desktop controls (microphone widget, OS hotkeys, native file pickers, reveal-in-folder, desktop runtime management) and continuous WebSocket sessions remain in the original app. Finite HTTP/SSE workflows are supported.

  4. The initial mcp.json is local. A ChatGPT web/mobile connection needs the deployed HTTPS endpoint or the remote plugin exported after verification. Installing a ZIP does not start hosting. Availability depends on the host's current custom-MCP/plugin support; this package does not promise mobile-only installation.

  5. Secret URLs are a private single-user access method. They are not OAuth. Treat the full MCP URL as a password. Use an OAuth gateway for shared/public distribution. Optional bearer authentication is supported for clients that send headers; this package does not implement an OAuth authorization server.

  6. Hosting, GPU resources, optional paid providers, telephony and some models can incur costs. Open source does not make these services free.

  7. Upstream is AGPL-3.0; model licenses differ. This gateway source is provided under the included AGPL-3.0 license. Only clone a speaker's voice with permission.

No changes to Desk2Quant, its repository, payments or existing services are needed to use this separate package.

Development

uv sync --frozen
uv run pytest

For local stdio, set VOICESTUDIO_URL to your backend, then run uv run voicestudio-mcp --transport stdio. Logs go to stderr.

Sources

The package pins MCP SDK 1.28.1 to match the inspected upstream integration; it does not depend on the current SDK main branch's v2 interface.

Available Tools

21 tools
check_healthA

Check if the VoiceStudio backend is running and what GPU device is active.

Inputs: no named parameters. Returns: result

clone_voiceA

Clone a new voice profile from a reference audio sample.

    The new voice is immediately available for use with generate_speech
    (pass the returned profile_id as the profile_id argument). Pass
    exactly one of ref_audio_base64 or ref_audio_path.

    Args:
        name: A human-friendly name for the cloned voice.
        ref_audio_base64: Base64-encoded audio (WAV, MP3, FLAC, etc.) of
            the reference voice — 5-30 seconds of clean single-speaker
            speech.
        ref_text: Optional transcript of the reference audio (improves
            quality for some engines).
        instruct: Optional style instruction (e.g. 'whisper', 'excited').
        language: Language of the reference audio (ISO code or 'Auto').
        ref_audio_path: Path to the reference audio under
            OMNIVOICE_MCP_BASE_PATH (relative to it, or absolute inside
            it); refused when no base path is configured. Prefer this
            lane for LLM agents - the clip never enters the context.

    Returns:
        JSON with the new profile's id, name, and kind.
     For long operations use voicestudio_start_job.

Inputs: name (required), instruct, language, ref_text, +2 more. Returns: result

describe_voiceA

Preview how a voice description maps onto voice-design attributes.

    Nothing is saved. Use this before design_voice to see what the
    description will produce. The design space is small and fixed; only
    these tokens (and close synonyms) are understood:
      Gender: male, female
      Age: child, teenager, young adult, middle-aged, elderly
      Pitch: very low / low / moderate / high / very high pitch
      Style: whisper
      EnglishAccent: american, british, australian, canadian, indian,
        japanese, korean, chinese, russian, portuguese accent
      ChineseDialect (Chinese speech; overrides an English accent):
        sichuan, dongbei / northeastern chinese, henan, shaanxi, gansu,
        guilin, guizhou, jinan, ningxia, qingdao, shijiazhuang, yunnan
        (e.g. "sichuan dialect")
    Timbre words ("gravelly", "raspy") and other accents are ignored and
    reported in `unmatched`. For a voice outside this space, use
    clone_voice with reference audio instead.

    Args:
        description: Free-text description, e.g. "an elderly man with a
            deep voice and a british accent".

    Returns:
        JSON with attrs (category → token or "Auto"), instruct, matched
        and unmatched.
    

Inputs: description (required). Returns: result

design_voiceA

Design and save a new voice profile from a text description.

    The description is mapped onto the same attributes describe_voice
    previews (see its docstring for the vocabulary). The backend tries to
    render a fixed-seed identity sample at save time; if the voice engine
    isn't ready, the profile is still saved and the same sample is
    rendered on first use, so the voice stays stable across
    generate_speech calls either way. Pass the returned profile_id to
    generate_speech. Refuses a description that matches no attribute.

    Args:
        name: A human-friendly name for the new voice.
        description: Free-text description of the voice.
        language: The voice's saved language (ISO code or 'Auto'); used
            for its sample and by generate_speech calls that omit one.

    Returns:
        JSON with the new profile's id, name, kind, the attrs used, and
        any unmatched description fragments.
     For long operations use voicestudio_start_job.

Inputs: name (required), description (required), language. Returns: result

generate_speechA

Generate speech audio from text.

    Args:
        text: The text to synthesize into speech.
        language: Target language (ISO code or 'Auto'). 646 languages
            supported. Omit to use the voice profile's saved language;
            an explicit 'Auto' overrides it.
        profile_id: ID of a saved voice profile to clone. Omit to use this
            agent's bound voice (Settings → MCP), else the default voice.
        instruct: Style instruction (e.g. 'whisper', 'excited', 'narrator').
        speed: Speech speed multiplier (0.5–2.0, default 1.0).
        steps: Diffusion steps (8=fast/draft, 16=balanced, 32=quality).
        format: File and URL format: wav (default), ogg or opus. Both
            ogg and opus carry Opus in Ogg; requires files/both mode and ffmpeg.

    Returns:
        JSON with audio_id, generation_time_s, audio_duration_s and the
        audio shaped by OMNIVOICE_MCP_OUTPUT_MODE: base64 WAV data
        ('resources', the default), a URL plus an optional file ('files'),
        or both ('both'). Prefer 'files' for LLM agents.
     For long operations use voicestudio_start_job.

Inputs: text (required), speed, steps, format, +3 more. Returns: result

list_languagesA

List a sample of supported TTS languages.

VoiceStudio supports 646 languages. This returns the most popular ones plus a note about the full count.

Inputs: no named parameters. Returns: result

list_personalitiesA

List available voice personality presets.

    Returns presets like Narrator, Casual, News Anchor, etc. with their
    instruct text. Use the instruct text with generate_speech.
    

Inputs: no named parameters. Returns: result

list_voicesA

List all saved voice profiles.

Returns a JSON array of voice profiles with id, name, type (clone/design), and personality.

Inputs: no named parameters. Returns: result

transcribeA

Transcribe spoken audio to text.

    Pass exactly one of audio_base64 or audio_path.

    Args:
        audio_base64: Base64-encoded audio bytes (wav/mp3/webm/m4a).
        audio_path: Path to an audio file under OMNIVOICE_MCP_BASE_PATH
            (relative to it, or absolute inside it). The base path is the
            security boundary: with none configured, paths are refused.
            Prefer this lane for LLM agents - the audio never enters the
            agent's context.
        language: Optional language hint; omit for auto-detect.

    Returns:
        JSON with the recognized text, language, and duration.
     For long operations use voicestudio_start_job.

Inputs: language, audio_path, audio_base64. Returns: result

voicestudio_call_apiA
Destructive

Execute one discovered HTTP operation against the configured backend. JSON, forms, repeated multipart files and finite SSE responses are supported. Binary outputs become timed file links. Mutations may delete data, change settings, download models, contact providers or place calls; use only within the user's request. Use start_job for long renders.

Inputs: operation_id (required), form, files, query, +3 more.

voicestudio_call_nativeB
Destructive

Call a discovered native MCP tool with its original arguments. For uploaded reference/audio files use file_arguments={ref_audio_base64:file_id} for clone_voice or {audio_base64:file_id} for transcribe. Large audio uses multipart HTTP API instead.

Inputs: tool_name (required), arguments, file_arguments.

voicestudio_cancel_jobA
Destructive

Cancel the gateway's wait. Backend synthesis may continue. To abort backend work use its discovered cancel/abort HTTP operation.

Inputs: job_id (required).

voicestudio_create_uploadA
Destructive

Create a file slot and a one-use signed PUT URL for direct audio, video, manuscript or subtitle upload. Send raw file bytes to that URL; then use its file_id in API multipart fields. Requires PUBLIC_BASE_URL for remote clients.

Inputs: filename (required), mime_type.

voicestudio_file_infoB
Read-onlyIdempotent

Inspect a staged/generated file and renew its timed download link while retained. Links provide access to anyone holding them; do not publish private recordings.

Inputs: file_id (required).

voicestudio_get_operationA
Read-onlyIdempotent

Get a live operation's exact request parameters, requestBody, responses and referenced component schemas. Inspect this before calling it.

Inputs: operation_id (required).

voicestudio_job_statusB
Read-onlyIdempotent

Poll a gateway background job. Backend batch/dub job IDs are separate; inspect their HTTP operations for progress and cancellation.

Inputs: job_id (required).

voicestudio_read_resourceA
Read-onlyIdempotent

Read a native MCP resource such as voice://<profile_id> or history://recent. Only the backend's advertised resource namespaces are accepted.

Inputs: uri (required).

voicestudio_search_apiB
Read-onlyIdempotent

Search every live VoiceStudio OpenAPI HTTP operation, including dubbing, audiobooks, conversion, models, batch jobs, profiles, pronunciation, projects, watermarking, settings and workers. Offline source catalog is informational only.

Inputs: tags, limit, query, method, +2 more.

voicestudio_start_jobA
Destructive

Start a background operation and immediately return a gateway job ID. For kind=api use the operation ID as name and call_api arguments without operation_id. For kind=native use a native tool name and arguments={arguments:{...},file_arguments:{...}}. Gateway status persists; work is not automatically retried after restart.

Inputs: kind (required), name (required), arguments.

voicestudio_statusB
Read-onlyIdempotent

Check backend health, native MCP discovery, HTTP API operation count and file-transfer configuration.

Inputs: refresh.

voicestudio_upload_base64A
Destructive

Stage a small file (default max 8 MiB) from base64. Prefer direct signed PUT upload for large files; never ask the user to paste base64 into chat.

Inputs: filename (required), content_base64 (required), mime_type.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 21 tools

    Disambiguation3/5

    Most native tools (generate_speech, transcribe, clone_voice, design_voice, describe_voice) have distinct purposes, but check_health and voicestudio_status clearly overlap (both report backend health/GPU), and the generic API layer (search_api/get_operation/call_api/call_native) creates unclear boundaries against the native tools—agents must decide which interface to use. The dual upload paths (create_upload vs upload_base64) are clarified by descriptions but still close.

    Naming Consistency3/5

    Two conventions coexist: a large voicestudio_* prefixed family (status, search_api, call_api, start_job, upload_base64, etc.) and an unprefixed native family (generate_speech, clone_voice, transcribe, list_voices, check_health). Both are snake_case and readable, but the mix—and especially check_health being unprefixed while the overlapping voicestudio_status is prefixed—makes the set feel inconsistent.

    Tool Count3/5

    21 tools sits in the heavy/borderline range for a voice platform. The native voice tools (7) and job/file helpers are justified, but the sizeable generic gateway meta-layer (search/get/call API, call_native, start/status/cancel job, upload, file_info, read_resource) inflates the count and adds surface that largely mirrors what the native tools already do.

    Completeness4/5

    The surface covers the core lifecycle: synthesis, transcription, cloning, design+preview, voice/personality/language listing, file upload, and background job control, plus a dynamic API passthrough for anything unlisted. Minor gaps exist (no explicit delete/update/rename of profiles, history only reachable via read_resource), but these are workable.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables MCP-compatible AI clients to invoke CLI-driven agent tools over Streamable HTTP, including shell execution, file operations, patching, image viewing, web search, and nested agent tasks, with permission modes and real-time progress streaming.
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables agents to access OpenAI-compatible transcription, live ASR, text-to-speech, voice cloning, phoneme recognition, and server-side file staging through streamable HTTP MCP tools.
      7
      Do What The F*ck You Want To Public
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables MCP-compatible clients to generate images and videos, synthesize text-to-speech audio, and clone or design custom voices. It also supports flexible output handling (URLs or local files) and multiple transport modes including stdio, REST, and SSE.
      493 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables MCP-compatible clients such as Claude Desktop and Cursor to generate images and videos, synthesize speech, clone voices, and design custom voices from descriptive prompts. It supports stdio, REST, and SSE transport modes with configurable API hosts, keys, and local or URL-based resource output.
      493 npm
      MIT