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 ~2 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 2.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.0

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.0
File Size Uploaded
voxtral_mcp-0.7.0.tar.gz 157.4 kB Details

Built distribution (wheel)

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

Total release size: 164.3 kB

Release files / voxtral_mcp-0.7.0.tar.gz

Download URL voxtral_mcp-0.7.0.tar.gz
Size 157.4 kB
Tags Source
SHA-256 checksum
How to use checksums
3ee0200ae22f6c5a913878c0e3fe3c140bb93aa8b7a49c242dc99cebe703753c
BLAKE2b-256 checksum
How to use checksums
8cff4aaaf73a136038376d0c25c2168ffb689fcd5efbbb08ffc8c3c40d114e09
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.0-py3-none-any.whl

Download URL voxtral_mcp-0.7.0-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d3c3bc3260b0d02f141a39cf7dc8e1d56f185546fe94357634caddf6bb20c88e
BLAKE2b-256 checksum
How to use checksums
72296d864ab965fed7d45a84bf1251681ae641f1b726b769fd6baa5160d681a2
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

0.7.1

2 release files

This release

0.7.0 This release

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