Observed since 20 Oct, 21:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Give your AI agent a voice — an MCP server for text-to-speech
Give your AI agent a voice.
An MCP server that lets AI coding agents speak to you via text-to-speech. The agent decides when and what to say — like a colleague tapping your shoulder.
No cloud API. No API keys. Runs locally on CPU.
# Add to Claude Code
claude mcp add agent-fm -- uvx agent-fm
# Pre-download models + verify setup (~340MB, one-time)
uvx agent-fm warmup
That's it. Your agent can now talk to you.
# sounddevice needs PortAudio
sudo apt install libportaudio2
macOS and Windows need zero system dependencies.
agent-fm gives your AI agent a speak() tool. Instead of you polling the terminal to check if your agent is done, it tells you:
The agent decides when to speak based on instructions you can customize. You just work — it interrupts you only when it matters.
speak, list_voices, and set_voice toolsclaude mcp add agent-fm -- uvx agent-fm
Add to .cursor/mcp.json:
{
"mcpServers": {
"agent-fm": {
"command": "uvx",
"args": ["agent-fm"]
}
}
}
Add to .vscode/mcp.json:
{
"servers": {
"agent-fm": {
"command": "uvx",
"args": ["agent-fm"]
}
}
}
Same "command": "uvx", "args": ["agent-fm"] pattern in your platform's MCP config.
pip install agent-fm
python -m agent_fm
| Tool | Description |
|---|---|
speak | Speak a message aloud. Params: message, urgency (info/warning/critical), voice, speed |
list_voices | List available voices, filterable by language |
set_voice | Change the default voice and speed for the session |
agent-fm ships with an AGENTS.md you can drop into your project or ~/.claude/CLAUDE.md:
## Voice (agent-fm)
You have a `speak` tool. Use it to talk aloud — the user may not be watching the screen.
When to speak:
- Finished a task: speak("Done with the auth refactor. All tests pass.")
- Need input: speak("Quick question — should I use Redis or an in-memory cache here?")
- Found a problem: speak("Heads up, there's a circular import in the payments module.")
- About to do something big: speak("Starting the full test suite, this'll take a minute.")
Don't speak for trivial ops, every step, or to repeat what's already on screen.
1-2 sentences max. Talk like a colleague, not a robot.
This is what makes agent-fm different from a simple TTS wrapper — it teaches the agent judgment about when to interrupt you.
54 voices across 9 languages:
| Language | Voices |
|---|---|
| English (US) | 20 (11 female, 9 male) |
| English (UK) | 8 (4 female, 4 male) |
| Japanese | 5 |
| Mandarin | 8 |
| Hindi | 4 |
| Spanish | 3 |
| French | 1 |
| Italian | 2 |
| Portuguese | 3 |
Default voice: am_fenrir. Change anytime:
Use the set_voice tool to switch to af_heart
agent-fm # Run MCP server (stdio transport)
agent-fm warmup # Download models + test setup
agent-fm --version # Show version
| Platform | System deps | Notes |
|---|---|---|
| macOS | None | Just works |
| Windows | None | Just works |
| Linux | sudo apt install libportaudio2 | PortAudio for audio playback |
Python 3.10-3.12 recommended. espeak-ng is bundled automatically via espeakng-loader.
Models auto-download to ~/.agent-fm/models/ on first use (~340MB).
# 1. Remove from Claude Code
claude mcp remove agent-fm
claude mcp remove agent-fm -s user # if added globally
# 2. Remove package
uv tool uninstall agent-fm # if installed with uvx
# or: pip uninstall agent-fm # if installed with pip
# 3. Remove cached models (~340MB)
rm -rf ~/.agent-fm/
MIT
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 20 Apr 2026 | 5 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:19510c54333e5ea4ba092a7b06042736473a48ed3128711ac1e4485e1601e2be