MCP server wrapping Kyutai Pocket TTS for Claude Code (ONNX Runtime, no PyTorch, streaming, gap-free playback, French + English)
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"kyutai-tts-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# kyutai-tts-mcp Local-only voice for any MCP client (Claude Code, Claude Desktop, Cursor, etc.) via [Kyutai Pocket TTS](https://github.com/kyutai-labs/pocket-tts). No cloud, no API keys, no rate limits. - 🇫🇷 French (Estelle) and 🇬🇧 English (Alba), plus 24 other Kyutai voices usable in both - **No PyTorch**: runs on ONNX Runtime with int8 exports of Kyutai's 6-layer model - **TTFA ~20 ms**, ~9× real-time on an Apple Silicon CPU, frame-by-frame streaming - Pass `language=` per `speak()` call; models load lazily and cache - Non-blocking `speak()`, gap-free playback via `sounddevice` write-mode - ~160 MB venv, ~115 MB model per language, ~330 MB RAM ## Install ```bash uvx kyutai-tts-mcp --help ``` Or persistent: ```bash uv tool install kyutai-tts-mcp ``` Then add to your MCP client's `.mcp.json`: ```json { "mcpServers": { "kyutai-tts": { "command": "uvx", "args": ["kyutai-tts-mcp", "--language", "french"] } } } ``` Replace `french` with `english` for your default language. Per-call `language=` overrides this default. Older names such as `french_24l` are accepted as aliases. ## MCP tools | Tool | Purpose | |---|---| | `speak(text, voice?, language?, 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. Pass `language=` (`french` / `english`) to switch model on the fly. | | `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 loaded languages, queue depths, sample rate, last error. | ## Configuration The default language is set via `--language` (CLI) or `KYUTAI_TTS_LANGUAGE` (env var). Other knobs (all env): - `KYUTAI_TTS_VOICE` — default voice name …
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.