isimud.speakLABSCO SUMMARY
`default_voice` is a voice name, not a provider name.
That is the config mistake the project calls out explicitly, and it is worth knowing before you spend an evening on it: to make OpenAI your default you name a voice block whose provider is OpenAI, not the provider itself. Past that, the design is sensible — agents never see provider voice ids, and the local-only binding plus optional bearer token keeps the speaker on your desk from being addressable by anything else.
What it is
A macOS menu bar app that is also a Streamable HTTP MCP server. An agent sends text; isimud picks the provider behind the named voice, generates the audio and plays it — with a queue, so two agents talking at once do not talk over each other.
What you get
isimud.speak— text plus a voice name and rate; it returns immediately with a job id and the queue depth, or blocks until the utterance finishes if you ask it to waitisimud.status— what the server is doing right nowisimud.list_voices— the voices available, including the built-in OpenAI voice ids- Named voices as the contract: agents ask for narrator or default, and the provider-specific voice id stays in your config
- Three providers — Apple through the system
saycommand with no credentials at all, OpenAI, and Google Cloud Text-to-Speech - Automatic fallback when a voice's provider is unavailable, and a failure event when none is
- A menu bar indicator that pulses while something is being spoken, or
--headlessfor server-only use
Requirements
macOS — the packaged app declares macOS 12.0 or newer — and Rust 1.89 or newer with Cargo to cargo install isimud-text-to-speech. Your MCP client must speak streamable HTTP; the server listens on http://127.0.0.1:3654/mcp and binds loopback only, rejecting any non-loopback address at startup. Apple voices need no key; OpenAI and Google read OPENAI_API_KEY and GOOGLE_API_KEY, or their keys from the config file. Setting ISIMUD_AUTH_TOKEN turns on bearer auth, and requests without the exact token are refused. MIT licensed.
Setup effort
One command — cargo install isimud-text-to-speech
USE CASES
Hearing when a long build finishes
Have the agent speak one line at the end instead of you watching a terminal for ten minutes.
Keeping several agents from talking over each other
Everything goes through one serialized queue, and the call tells you the queue depth it landed at.
Switching voice providers without touching the agent
Repoint a named voice at a different provider in the config; the agent keeps asking for the same name.
4 tools
Listed in project docs. Your client may show a different list.
isimud.stopisimud.list_voicesisimud.statusBEFORE YOU INSTALL
What to know first
Tools you get
4 tools named in the project's documentation. Tool names are dotted, such as isimud.speak; default_voice is a [tts] config setting, not a tool.
Requires
Rust 1.89 or later
INSTALLATION
Connect your client
Server setup
Prerequisites: macOS (12.0+ for the packaged app), Rust 1.89 or newer with Cargo, an MCP client that supports streamable HTTP
cargo install isimud-text-to-speechOr build from the repo: cargo build --release --bin isimud.
Optional: mkdir -p ~/.config/isimud && cp configs/config.sample.toml ~/.config/isimud/config.toml — otherwise isimud writes a default config with a single Apple-backed default voice on first run
Run isimud for the menu bar app + MCP server, or isimud --headless for server only
Point your MCP client at the streamable-HTTP URL http://127.0.0.1:3654/mcp (add Authorization: Bearer <YOUR_TOKEN> only if you set ISIMUD_AUTH_TOKEN or [server].auth_token)