Labsco
MCP SERVER

Isimud

by bnomei

Lets an agent speak out loud on macOS: a menu bar app and local MCP server that resolves a named voice, synthesises through Apple, OpenAI or Google, and plays it through one serialized queue.

Speech Synthesis & Transcription
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 wait
  • `isimud.status` — what the server is doing right now
  • `isimud.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 `say` command 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 `--headless` for 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