MCP server that gives Claude Code a voice via ElevenLabs TTS. Includes 13 voices, configurable voice modes, per-category voice selection, and smart summarization.
Via plugin marketplace:
/plugin install mcp-tts@stitts-plugins
Or via npx (no clone needed):
{
"tts": {
"command": "npx",
"args": ["-y", "github:stitts-dev/mcp-tts"],
"env": {
"ELEVENLABS_API_KEY": "your-api-key"
}
}
}
Or git clone:
cd ~/.claude
git clone https://github.com/stitts-dev/mcp-tts.git mcp-tts
cd mcp-tts && npm install
| Variable | Required | Default | Description |
|---|---|---|---|
ELEVENLABS_API_KEY | Yes | — | Your ElevenLabs API key |
ELEVENLABS_VOICE_ID | No | edward | Override default voice by ID |
ELEVENLABS_MODEL_ID | No | eleven_multilingual_v2 | ElevenLabs model |
Add to ~/.claude.json (or ~/.claude/.mcp.json) inside "mcpServers":
"tts": {
"type": "stdio",
"command": "node",
"args": ["~/.claude/mcp-tts/index.mjs"],
"env": {
"ELEVENLABS_API_KEY": "your-api-key"
}
}
Copy INSTRUCTIONS.md contents into your ~/.claude/CLAUDE.md. This tells Claude when and how to use each voice.
speak| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | Text to speak (markdown stripped automatically) |
voice | string | No | Voice override (server auto-selects from config) |
category | string | No | Response category: completions, errors, questions, status, summaries |
The server decides whether to speak based on voice config mode and category settings. Rate-limited to one speak every 3 seconds.
get_voice_configReturns current voice configuration as JSON. No parameters.
set_voice_config| Parameter | Type | Required | Description |
|---|---|---|---|
config | object | Yes | Full voice config object (replaces entire config) |
Config is stored at ~/.claude/voice-config.json (persists across reinstalls).
Configure via /tts skill or set_voice_config:
| Mode | What speaks |
|---|---|
off | Nothing |
minimal | Task completions, build failures, blocking questions (default) |
ambient | All of minimal + status updates + long-output summaries |
full | Everything — every response gets spoken (summaries for long output) |
| Voice | Tone | Best for |
|---|---|---|
edward | British, deep, composed | Default — task completions, neutral updates |
daniel | Steady broadcaster | Factual summaries, status reports |
donovan | Articulate, strong | Confident recommendations, warnings |
archer | Conversational | Casual updates |
juniper | Grounded, professional | Professional summaries |
cassidy | Crisp, direct | Short alerts |
austin | Deep, raspy, authentic | Informal assessments |
mark-natural | Young, natural | Casual conversation |
mark-casual | Relaxed, light | Low-stakes updates |
jessica | Eloquent, dramatic | Impressive results |
spuds | Wise, approachable | Advice, mentoring |
rob | Tough, gritty | Bad news, hard truths |
adam | Dark, tough | Critical failures |
export ELEVENLABS_API_KEY=sk_...
cd ~/.claude/mcp-tts && node index.mjs --test
afplay for audio playback)Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub stitts-dev/mcp-ttsVoice-first interaction with automatic TTS markers for Claude Code
Voice I/O for Claude Code - speak to users and hear their voice input
Voice conversations with Claude Code using local speech-to-text and text-to-speech
Claude Code skill pack for ElevenLabs (18 skills)
Audio feedback when Claude Code agent completes tasks using pocket-tts
Memory compression system for Claude Code - persist context across sessions