Labsco
MCP SERVER

Text-to-Speech (TTS)

by blacktop

Let the assistant speak — through macOS `say`, a local MLX model, ElevenLabs, Gemini or OpenAI.

Speech Synthesis & Transcription
Summary
Five voices, one decision per call.

Because each backend is its own tool, the cheap local one and the expensive hosted one sit side by side and you choose per message. The serialisation is the quiet good idea: several agents speaking at once is unintelligible, so by default they queue.

What it is

A Go MCP server that adds text-to-speech to Claude Desktop, Claude Code, Cursor and others. Five backends are registered as separate tools, so you pick per call whether the voice is local and free or hosted and better.

What you get
  • `say_tts` — the macOS `say` binary and its built-in system voices, with no key of any kind
  • `voice_tts` — Qwen3-TTS through MLX via the local `voice-say` CLI, keeping text and audio on the Mac; it reloads the model each call, so it suits summaries rather than time-critical alerts, and takes `voice`, `tier`, `style` and `describe`
  • `elevenlabs_tts` — ElevenLabs voices, defaulting to the premade voice `EXAVITQu4vr4xnSDxMaL`
  • `google_tts` — Gemini TTS with 30 named voices, from Achernar to Zubenelgenubi
  • `openai_tts` — named voices from `alloy` through `verse` across `gpt-4o-mini-tts`, `tts-1` and `tts-1-hd`, with speed from 0.25x to 4.0x and free-text delivery instructions
  • One voice at a time by default — a mutex serialises speech inside the process and across multiple Claude Desktop windows through a system-wide file lock; `MCP_TTS_ALLOW_CONCURRENT=true` if you want them overlapping
  • Audio saved to disk with `MCP_TTS_OUTPUT_DIR`, and `MCP_TTS_NO_PLAY=true` to save without playing
  • `MCP_TTS_SUPPRESS_SPEAKING_OUTPUT=true` to stop the "Speaking:" line appearing in the transcript
Requirements

A Go binary, with Docker configurations documented too. `say_tts` needs macOS and nothing else. The hosted backends need their keys: `ELEVENLABS_API_KEY`, `GOOGLE_AI_API_KEY` or `GEMINI_API_KEY`, and `OPENAI_API_KEY`. `voice_tts` only registers when `voice-say` is resolvable on `PATH`, and it plays directly rather than writing files. Free-tier ElevenLabs keys are limited to premade voices — Voice Library voices return `402 paid_plan_required`.

Setup effort

One command plus a key — go install github.com/blacktop/mcp-tts@latest, then supply credentials