mcp-say
@blacktop
MCP Server for Text to Speech
Overview
What is mcp-say?
mcp-say is an MCP server that adds text-to-speech capabilities to AI assistants like Claude Desktop and Cursor IDE. It provides four tools: say_tts (macOS built-in), elevenlabs_tts, google_tts, and openai_tts, each offering different voices and options.
How to use mcp-say?
Install via go install github.com/blacktop/mcp-tts@latest. Configure in Claude Desktop's claude_desktop_config.json or via command line for Claude Code, Codex CLI, or Gemini CLI. Set required API keys as environment variables. Invoke by calling the appropriate TTS tool (e.g., say_tts, openai_tts) through the MCP protocol.
Key features of mcp-say
- Four TTS providers: macOS say, ElevenLabs, Google Gemini, OpenAI
- Sequential (default) or concurrent speech via
--sequential-ttsflag - Save audio to disk with
MCP_TTS_OUTPUT_DIRand optional--no-play - Suppress "Speaking:" output with
MCP_TTS_SUPPRESS_SPEAKING_OUTPUT - OpenAI TTS supports speed control (0.25x–4.0x) and custom voice instructions
- Multi-instance protection prevents overlapping speech across Claude Desktop instances
Use cases of mcp-say
- Enable an AI assistant to read responses aloud for accessibility
- Add voice feedback to automated workflows or agents
- Generate audio files programmatically from text
- Test and compare different TTS providers in one tool
FAQ from mcp-say
Which API keys are required?
ElevenLabs API key for elevenlabs_tts, Google AI API key for google_tts, and OpenAI API key for openai_tts. The say_tts tool uses macOS built-in and requires no API key.
Can I use mcp-say on Windows or Linux?
The say_tts tool relies on the macOS say binary and works only on macOS. The other three cloud-based tools (ElevenLabs, Google, OpenAI) are platform-independent.
How do I prevent overlapping speech?
By default, TTS requests are sequential—only one plays at a time. Set MCP_TTS_ALLOW_CONCURRENT=true or use --sequential-tts=false to allow concurrent speech.
Can I save the audio to a file instead of playing it?
Yes. Set MCP_TTS_OUTPUT_DIR to a directory path. Optionally set MCP_TTS_NO_PLAY=true to skip playback and only save the file. Files are named tts_{timestamp}_{hash}.{ext} with formats AIFF (say), MP3 (ElevenLabs/OpenAI), WAV (Google).
What is the behavior for free-tier ElevenLabs API keys?
Free-tier ElevenLabs API keys can only use premade voices. Voice Library (community/professional) voices will return a 402 paid_plan_required error.