The first launch downloads and initialises the model, and a synthesis request during that window looks like a failure rather than a wait — which is exactly why there is a status tool reporting elapsed time and retry count. Once the weights are cached, the whole path is local: no key, no upload, no per-character cost.
A local speech server. The Kokoro model is downloaded and initialised on first start and then does the synthesis on your machine, so text never goes to a speech vendor and there is nothing to bill per character.
- Text converted to speech with the default settings, optionally naming a voice — `text_to_speech`
- The same with a speed multiplier between 0.5 and 2.0 — `text_to_speech_with_options`
- Every available voice listed — `list_voices`
- The model's initialisation state, which matters on first start while the weights download: `uninitialized`, `initializing`, `ready` or `error`, with retry information included — `get_model_status`
No API key. Node.js, since it is launched with `npx -y speech-mcp-server`; the package is `speech-mcp-server` (1.1.2). Two optional environment variables set the defaults: `MCP_DEFAULT_SPEECH_SPEED`, which defaults to 1.1 and accepts 0.5 to 2.0, and `MCP_DEFAULT_VOICE`, which defaults to `af_bella`. The model downloads itself on first launch and the server retries initialisation up to 3 times with a cleanup between attempts.
One command — npm install speech-mcp-server
