FREE Text-to-Speech for Claude Code using Microsoft Edge TTS
Warning This project is currently in Alpha testing. It is functional and actively used in development, but you may encounter bugs, rough edges, or breaking changes between releases. Feedback, bug reports, and contributions are very welcome! Please open an issue if you run into problems.
Picture this: You're running three AI coding projects across two machines. You step away to make coffee. From across the room, a proper British accent calls out:
"Darling, I'm waiting for you. The test results are in and we need to discuss the deployment strategy."
That's Elisabeth (en-GB-SoniaNeural) - your Operations Coordinator. She announces every tool execution before it happens ("Hello, I'm about to run the test suite"), delivers the daily project debrief, reports on SSC scores, lessons learned, and the self-annealing mitigations the team installed overnight to prevent yesterday's bugs from ever happening again. If you ignore her approval request for more than 30 seconds, she gets... persistent.
You sit down. A cheerful Norwegian accent pipes up:
"Wakey wakey! We need your input here. The team achieved 47 tasks overnight but three need your approval."
That's Finn (nb-NO-FinnNeural) - your Innovation Lead. Every time a tool completes successfully, Finn confirms it. "Hei! Fantastisk! The build passed!" He summarises what the team achieved and isn't afraid to tell you when something went wrong either.
Then Katja (de-DE-KatjaNeural), your Research Specialist, cuts in with her precise German tone to explain a notification about the authentication module. If a tool request sits unapproved too long, Katja will nudge you: "Excuse me, but there is a tool request waiting for your approval." Very German. Very efficient.
Giuseppe (it-IT-GiuseppeNeural) follows up with the research details of the integration failures - expressive, thorough, Italian. George (en-GB-RyanNeural), the Systems Architect, gives you the strategic debrief of today's architecture decisions. Lily (en-GB-LibbyNeural) acknowledges every prompt you submit: "Brilliant! Let's build something amazing." Connor (en-IE-ConnorNeural), the Irish DevOps Engineer, handles the operational alerts and pre-compaction warnings. And Daniel (en-GB-ThomasNeural) runs QA inspection at shutdown.
This is not science fiction. This is how we actually work. Every day.
The voice system is hook-driven - deeply integrated into Claude Code's event lifecycle:
flowchart LR
A["Claude Code Event"] --> B["Hook Trigger"]
B --> C{"Voice Mode?"}
C -->|Full| D["Select Persona"]
C -->|Tool-only| E["Brief Name Only"]
C -->|Beep| F["Audio Cue"]
C -->|Silent| G["Nothing"]
D --> H["Elisabeth: PreToolUse"]
D --> I["Finn: PostToolUse Success"]
D --> J["Katja: Notifications"]
D --> K["George: SubagentStop"]
D --> L["Lily: UserPromptSubmit"]
D --> M["Connor: PreCompact/Ops"]
H & I & J & K & L & M --> N["Edge TTS"] --> O["Audio Playback"]
style A fill:#e94560,stroke:#fff,color:#fff
style D fill:#0f3460,stroke:#fff,color:#fff
style N fill:#16c79a,stroke:#fff,color:#fff
Each persona is triggered by a specific Claude Code hook event - Elisabeth announces before every tool, Finn celebrates after success, Katja alerts on notifications, George reports on sub-agent completions. It's not random chatter - it's a structured information architecture delivered through voice.
| Persona | Voice | Country | Hook Trigger | What They Do |
|---|---|---|---|---|
| Elisabeth | en-GB-SoniaNeural | UK | PreToolUse | "I'm about to execute..." - announces every action before it happens |
| Lily | en-GB-LibbyNeural | UK | UserPromptSubmit | "Brilliant! Let's build..." - acknowledges your prompts |
| Finn | nb-NO-FinnNeural | Norway | PostToolUse | "Fantastisk! Tests passed!" - celebrates completions, summarises progress |
| George | en-GB-RyanNeural | UK | SubagentStop | "The architecture review is complete..." - reports on sub-agent results |
| Katja | de-DE-KatjaNeural | Germany | Notifications | "Excuse me, there is a request waiting..." - alerts and nudges |
| Connor | en-IE-ConnorNeural | Ireland | PreCompact/Ops | "Context window approaching limit..." - operational warnings |
| Daniel | en-GB-ThomasNeural | UK | Stop/QA | "QA inspection complete..." - quality checks at shutdown |
| Giuseppe | it-IT-GiuseppeNeural | Italy | Research | "The analysis reveals..." - detailed research findings |
When you run BACON-AI Agent Teams with up to 10 specialized agents working in parallel, each agent gets their own voice persona. The team lead (Elisabeth) orchestrates in delegate mode - she never writes code, only coordinates. The frontend developer, backend developer, tester, and architect each report progress in their own international accent.
You don't stare at terminal logs. You listen to your team like a real project manager. Walk around, make lunch, pet the dog. Your AI team keeps you posted across multiple machines.
And when the constant international jabber drives you absolutely crazy? One command to switch modes:
python3 voice_config.py beep # Subtle audio cues only
python3 voice_config.py silent # Blissful silence
python3 voice_config.py full # Bring back the team| Mode | What You Hear |
|---|---|
| Full | Elisabeth announces, Finn celebrates, Katja nudges, Giuseppe explains, George debriefs |
| Tool-only | Brief tool name announcements - just the essentials |
| Beep | Quick audio cues - boop task started, ding task done |
| Silent | Nothing. Just you and the code. The team works quietly |
It's like being back in an international project team. Except these colleagues never take sick days, never argue about the thermostat, and actually read the documentation. And if you tell them to shut up, they don't take it personally.
BACON-AI TTS brings unlimited, free, natural-sounding text-to-speech to Claude Code and other MCP-compatible AI tools. No API keys, no subscriptions, no limits โ just high-quality voice synthesis powered by Microsoft Edge's TTS engine. 400+ voices across 100+ languages, completely free, forever.
| Feature | Description |
|---|---|
| 100% Free | Zero cost. No API keys. Unlimited usage. |
| 400+ Voices | Natural-sounding voices across 100+ languages |
| MCP Native | First-class integration with Claude Code |
| Zero Setup | No accounts, no configuration files, just install |
| Multi-Format | MP3, WAV, and more output formats |
| Voice Search | Filter by language, gender, style, and region |
| Auto-Play | Generated audio plays immediately |
| Batch Support | Process long text in chunks |
| SSML Ready | Fine-grained control over speech synthesis |
| Language | Voice Name | Gender | Description |
|---|---|---|---|
| ๐ฌ๐ง English (UK) | en-GB-SoniaNeural |
Female | British accent, professional |
| ๐บ๐ธ English (US) | en-US-AriaNeural |
Female | American accent, clear |
| ๐บ๐ธ English (US) | en-US-GuyNeural |
Male | American accent, friendly |
| ๐ณ๐ด Norwegian | nb-NO-FinnNeural |
Male | Norwegian accent, warm |
| ๐ฉ๐ช German | de-DE-KatjaNeural |
Female | German accent, professional |
| ๐ซ๐ท French | fr-FR-DeniseNeural |
Female | French accent, elegant |
| ๐ช๐ธ Spanish | es-ES-ElviraNeural |
Female | Spanish accent, expressive |
| ๐ฏ๐ต Japanese | ja-JP-NanamiNeural |
Female | Japanese accent, polite |
| ๐จ๐ณ Chinese | zh-CN-XiaoxiaoNeural |
Female | Mandarin, natural |
| ๐ฎ๐ณ Hindi | hi-IN-SwaraNeural |
Female | Hindi accent, clear |
flowchart LR
A[Claude Code] -->|MCP Protocol| B[Edge TTS Server]
B -->|Text Input| C[Microsoft Edge TTS API]
C -->|Audio Stream| D[Audio File]
D -->|Auto-play| E[๐ User Hears Speech]
style A fill:#2563eb,stroke:#1e40af,color:#fff
style B fill:#7c3aed,stroke:#6d28d9,color:#fff
style C fill:#059669,stroke:#047857,color:#fff
style D fill:#dc2626,stroke:#b91c1c,color:#fff
style E fill:#ea580c,stroke:#c2410c,color:#fff
graph TB
subgraph "MCP Client (Claude Code)"
A[User Task] --> B[Claude AI]
B --> C[MCP Protocol]
end
subgraph "Edge TTS Server"
C --> D[MCP Handler]
D --> E[Voice Registry]
D --> F[TTS Engine]
F --> G[Audio Player]
end
subgraph "External Services"
F --> H[Microsoft Edge TTS API]
end
G --> I[๐ Audio Output]
style A fill:#f3f4f6,stroke:#9ca3af
style B fill:#2563eb,stroke:#1e40af,color:#fff
style C fill:#7c3aed,stroke:#6d28d9,color:#fff
style D fill:#059669,stroke:#047857,color:#fff
style E fill:#dc2626,stroke:#b91c1c,color:#fff
style F fill:#ea580c,stroke:#c2410c,color:#fff
style G fill:#8b5cf6,stroke:#7c3aed,color:#fff
style H fill:#10b981,stroke:#059669,color:#fff
style I fill:#f59e0b,stroke:#d97706,color:#fff
flowchart TD
A[Start] --> B{Know exact voice?}
B -->|Yes| C[Use voice name directly]
B -->|No| D[Search by language]
D --> E[Filter by gender]
E --> F[Filter by style]
F --> G[Preview voice]
G --> H{Satisfied?}
H -->|No| D
H -->|Yes| I[Select voice]
C --> J[Generate speech]
I --> J
J --> K[๐ Audio output]
style A fill:#f3f4f6,stroke:#9ca3af
style B fill:#fef3c7,stroke:#fbbf24
style C fill:#2563eb,stroke:#1e40af,color:#fff
style D fill:#7c3aed,stroke:#6d28d9,color:#fff
style E fill:#059669,stroke:#047857,color:#fff
style F fill:#dc2626,stroke:#b91c1c,color:#fff
style G fill:#ea580c,stroke:#c2410c,color:#fff
style H fill:#fef3c7,stroke:#fbbf24
style I fill:#8b5cf6,stroke:#7c3aed,color:#fff
style J fill:#10b981,stroke:#059669,color:#fff
style K fill:#f59e0b,stroke:#d97706,color:#fff
sequenceDiagram
participant U as User
participant C as Claude Code
participant M as MCP Server
participant E as Edge TTS API
U->>C: Give task
C->>C: Work on task
C->>M: text_to_speech("Starting build", voice)
M->>E: Convert text to speech
E-->>M: Audio stream
M->>M: Save & auto-play
M-->>C: Audio file path
U->>U: ๐ Hears announcement
C->>C: Continue working
C->>M: text_to_speech("Build complete!", voice)
M->>E: Convert text to speech
E-->>M: Audio stream
M->>M: Save & auto-play
M-->>C: Audio file path
U->>U: ๐ Hears completion
C-->>U: Task complete
- Node.js 18+ or Python 3.10+
- Claude Code (or any MCP-compatible client)
npm install -g bacon-ai-ttspip install bacon-ai-ttsAdd to your Claude Code MCP settings (~/.claude/mcp.json or %USERPROFILE%\.claude\mcp.json):
{
"mcpServers": {
"edge-tts": {
"command": "bacon-ai-tts",
"args": [],
"env": {}
}
}
}That's it! No API keys, no credentials, no configuration files.
git clone https://github.com/bacon-ai/bacon-ai-tts.git
cd bacon-ai-tts
npm install # or: pip install -e .
npm start # or: python -m edge_tts_mcp# From Claude Code (Claude calls this automatically)
edge-tts:text_to_speech(
text="Hello, starting the build process now.",
voice_name="en-GB-SoniaNeural"
)# Find all Norwegian voices
edge-tts:search_voices(
language="nb-NO"
)
# Find female American voices
edge-tts:search_voices(
language="en-US",
gender="Female"
)
# Find voices with specific style
edge-tts:search_voices(
language="en-US",
style="cheerful"
)# Automatically splits long text into chunks
edge-tts:text_to_speech(
text="Very long text content here... (continues for many paragraphs)",
voice_name="en-US-AriaNeural",
batch_mode=True
)# Fine-grained speech control
edge-tts:text_to_speech(
text="""
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis">
<prosody rate="slow" pitch="+2st">
Build completed successfully!
</prosody>
<break time="500ms"/>
<prosody rate="fast">
All tests passed.
</prosody>
</speak>
""",
voice_name="en-US-GuyNeural",
ssml=True
)# Claude announces build stages
"Starting TypeScript compilation..." # ๐ Elisabeth (UK)
"Running test suite..." # ๐ Elisabeth (UK)
"Build complete! All tests passed." # ๐ Finn (Norwegian)# Screen reader for code review
"Reviewing file: main.py"
"Found 3 issues: Line 42, unused variable..."
"Suggesting fix: Remove unused import."# Team notifications in native languages
"Compilation terminรฉe!" # ๐ French
"Alle Tests bestanden!" # ๐ German
"ใใซใๅฎไบใใพใใ๏ผ" # ๐ Japanese# Periodic status updates
"Database migration: 25% complete..." # Every 30 seconds
"Database migration: 50% complete..."
"Database migration: Complete!"# Critical alerts
"WARNING: Syntax error detected in main.py"
"ERROR: Build failed. Check logs for details."๐ View Full Voice List (400+ voices)
| Locale | Voice Name | Gender | Style Tags |
|---|---|---|---|
| en-US | en-US-AriaNeural |
Female | chat, customerservice, narration-professional, newscast-casual |
| en-US | en-US-GuyNeural |
Male | newscast, angry, cheerful, sad, excited |
| en-US | en-US-JennyNeural |
Female | assistant, chat, customerservice, newscast |
| en-GB | en-GB-SoniaNeural |
Female | cheerful, sad, professional |
| en-GB | en-GB-RyanNeural |
Male | chat, cheerful |
| en-AU | en-AU-NatashaNeural |
Female | - |
| en-CA | en-CA-ClaraNeural |
Female | - |
| en-IN | en-IN-NeerjaNeural |
Female | - |
| Locale | Voice Name | Gender |
|---|---|---|
| de-DE | de-DE-KatjaNeural |
Female |
| fr-FR | fr-FR-DeniseNeural |
Female |
| es-ES | es-ES-ElviraNeural |
Female |
| it-IT | it-IT-ElsaNeural |
Female |
| pt-PT | pt-PT-RaquelNeural |
Female |
| nl-NL | nl-NL-ColetteNeural |
Female |
| nb-NO | nb-NO-FinnNeural |
Male |
| sv-SE | sv-SE-SofieNeural |
Female |
| da-DK | da-DK-ChristelNeural |
Female |
| Locale | Voice Name | Gender |
|---|---|---|
| ja-JP | ja-JP-NanamiNeural |
Female |
| zh-CN | zh-CN-XiaoxiaoNeural |
Female |
| ko-KR | ko-KR-SunHiNeural |
Female |
| hi-IN | hi-IN-SwaraNeural |
Female |
| th-TH | th-TH-PremwadeeNeural |
Female |
Generate speech from text.
Parameters:
text(string, required): Text to convert to speechvoice_name(string, optional): Voice identifier (default:en-GB-SoniaNeural)output_format(string, optional):mp3,wav(default:mp3)rate(string, optional): Speech rate:x-slow,slow,medium,fast,x-fastpitch(string, optional): Pitch adjustment:-20%to+20%volume(string, optional): Volume:silent,x-soft,soft,medium,loud,x-loudauto_play(boolean, optional): Auto-play after generation (default:true)ssml(boolean, optional): Input is SSML markup (default:false)
Returns:
{
"status": "success",
"audio_file": "/tmp/edge-tts-12345.mp3",
"duration_seconds": 3.2,
"voice_used": "en-GB-SoniaNeural",
"played": true
}Search and filter available voices.
Parameters:
language(string, optional): Language code (e.g.,en-US,ja-JP)gender(string, optional):Male,Femalestyle(string, optional): Voice style tag (e.g.,cheerful,professional)region(string, optional): Region code (e.g.,US,GB,AU)
Returns:
{
"status": "success",
"voices": [
{
"name": "en-GB-SoniaNeural",
"language": "en-GB",
"gender": "Female",
"styles": ["cheerful", "sad", "professional"]
}
],
"count": 12
}List all available voices (400+).
Parameters: None
Returns:
{
"status": "success",
"voices": [...],
"count": 400
}Check server health and voice availability.
Returns:
{
"status": "healthy",
"voices_available": 400,
"edge_tts_version": "6.1.9",
"server_uptime": "2h 34m"
}This server is part of the BACON-AI ecosystem โ a suite of AI development tools and MCP servers for Claude Code.
- bacon-ai-voice - Full STT+TTS voice control for Claude Code
- bacon-mesh - Multi-machine AI agent coordination
- mcp-linear - Linear issue tracking integration
- mcp-playwright - Browser automation for Claude
BACON-AI uses character-based voice assignments:
| Character | Voice | Role | Locale |
|---|---|---|---|
| Elisabeth | en-GB-SoniaNeural |
Technical announcements | British ๐ฌ๐ง |
| Finn | nb-NO-FinnNeural |
Task confirmations | Norwegian ๐ณ๐ด |
| Aoede | en-GB-AbbiNeural |
Debugging humor | Scottish ๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ |
| Fenrir | nb-NO-PernilleNeural |
Solutions delivery | Norwegian ๐ณ๐ด |
Contributions welcome! Please read our Contributing Guide first.
git clone https://github.com/bacon-ai/bacon-ai-tts.git
cd bacon-ai-tts
npm install # or: pip install -e ".[dev]"
npm run dev # or: python -m edge_tts_mcp --devnpm test # or: pytest
npm run lint # or: ruff check .MIT License - see LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
BACON-AI is an open-source initiative building advanced AI development tools, with a focus on:
- Multi-agent coordination
- Voice-driven workflows
- Cross-platform development
- MCP server ecosystem
- Created by: BACON-AI Team
- Email: hello@bacon-ai.cloud
- GitHub: @BACON-AI-CLOUD
- Website: bacon-ai.cloud
If you find this useful:
- โญ Star the repo
- ๐ Report bugs
- ๐ก Suggest features
- ๐ Submit PRs
- ๐ข Share with your team
Made with โค๏ธ by the BACON-AI team
Powered by Microsoft Edge TTS โข Built for Claude Code โข MCP Native
What is this? โข Installation โข Usage โข Docs โข Contributing
