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-audiostream=True - Non-blocking
speak(), gap-free playback viasounddevicewrite-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)
| File | Size | Uploaded | |
|---|---|---|---|
| voxtral_mcp-0.7.1.tar.gz | 157.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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