Skip to main content

voxtral-mcp

Local voice for any MCP client (Claude Code, Claude Desktop, Cursor, etc.) via Mistral Voxtral 4B TTS (MLX 4-bit). Higher voice quality than the lightweight pocket-tts route, at the cost of a larger model and slower TTFA.

  • 9 languages: 🇬🇧 English, 🇫🇷 French, 🇩🇪 German, 🇪🇸 Spanish, 🇮🇹 Italian, 🇵🇹 Portuguese, 🇳🇱 Dutch, 🇮🇳 Hindi, 🇸🇦 Arabic
  • 4 B parameters, 4-bit MLX quantization (~2.5 GB on disk)
  • ~2.4× real-time generation on Apple Silicon M-series
  • TTFA ~1 s thanks to native streaming via mlx-audio stream=True
  • Non-blocking speak(), gap-free playback via sounddevice write-mode
  • ~3 GB resident RAM once the model is loaded

⚠️ Licence: the Voxtral model itself is distributed by Mistral under CC BY-NC 4.0 — non-commercial use only. This wrapper's code is MIT.

Requirements

  • macOS Apple Silicon (M1/M2/M3/M4) — required, MLX doesn't run on Intel
  • ≥16 GB RAM recommended (the 4-bit model keeps ~3 GB resident)
  • Python 3.10 – 3.14

Install

uvx voxtral-mcp --help

Or persistent:

uv tool install voxtral-mcp

Then add to your MCP client's .mcp.json:

{
  "mcpServers": {
    "voxtral": {
      "command": "uvx",
      "args": ["voxtral-mcp"]
    }
  }
}

MCP tools

Tool Purpose
speak(text, voice?, interrupt?) Generate audio for text and queue it for background playback. Returns immediately, streaming generation. By default, calls queue and play sequentially (including across turns). Pass interrupt=True to abort current playback and clear the queue first.
stop_speaking() Stop current playback, drop queue, cancel in-flight generation. Use for explicit "mute" requests. For mid-turn interruption + new speech, use speak(..., interrupt=True) instead.
status() Report model load state, queue depths, sample rate, last error.

Configuration

All env vars (in the env block of .mcp.json):

Variable Default Notes
VOXTRAL_MODEL mlx-community/Voxtral-4B-TTS-2603-mlx-4bit Any Voxtral MLX model on HF (4-bit / 6-bit / bf16)
VOXTRAL_STREAMING_INTERVAL 1.0 Approx. seconds of audio per streaming chunk
VOXTRAL_MAX_TOKENS 4096 Generation cap (in audio tokens, not characters)
VOXTRAL_SAMPLE_RATE 24000 Output sample rate

Voices

Voxtral ships with 20 preset voices across 9 languages. A non-exhaustive sample:

Language Voices
English casual_male, casual_female, cheerful_female, neutral_male, neutral_female
French fr_male, fr_female
Spanish es_male, es_female
German de_male, de_female
Italian it_male, it_female
Portuguese pt_male, pt_female
Dutch nl_male, nl_female
Arabic ar_male
Hindi hi_male, hi_female

Pass voice="fr_female" in your speak() call to switch.

Claude Code users

If you're on Claude Code (CLI, desktop, or via Cursor), install the bundled plugin (MCP wiring + /voice-mode skill) in one shot:

/plugin marketplace add Vincweb/voxtral-mcp
/plugin install voxtral@vincweb-tools

See the main repo for architecture details and a side-by-side comparison with kyutai-tts-mcp (smaller / faster TTFA / permissive licence).

License

MIT for this wrapper. The underlying Voxtral model is CC BY-NC 4.0 (non-commercial) — see Mistral.

Metadata

Release files for voxtral-mcp 0.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for voxtral-mcp 0.7.1
File Size Uploaded
voxtral_mcp-0.7.1.tar.gz 157.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for voxtral-mcp 0.7.1
File Interpreter ABI Platform
voxtral_mcp-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 164.3 kB

Release files / voxtral_mcp-0.7.1.tar.gz

Download URL voxtral_mcp-0.7.1.tar.gz
Size 157.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1353001f0b47b1a34acb36d4199ca991be3e83f19ca1e75813d9b4ce5017fe2a
BLAKE2b-256 checksum
How to use checksums
a4eaa08bf980e44c077b39d91bf72de465ce3d37d7c09cd10dc7853a326b94da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / voxtral_mcp-0.7.1-py3-none-any.whl

Download URL voxtral_mcp-0.7.1-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c3377084980ff2b567c8218f84781579e6cdcca72d941e24985844356ea24318
BLAKE2b-256 checksum
How to use checksums
9ffb2cc3415852d3872d2bb9a8795e545a66aa9cea0653e84ffa754722c54358
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.1 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page