Open-source local Windows text-to-speech through SAPI; no API key or cloud service required.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Give your AI assistant a voice β locally, with no API key, no account, and no cloud service.
Text to Speech is an open-source Model Context Protocol (MCP) server that lets AI assistants read text aloud on the user's computer. It uses the speech synthesizer already present on the host operating system, so nothing you ask it to say ever leaves your machine.
Runs on Windows, macOS, and Linux. Install is one line:
The server exposes one model-controlled tool:
Use it for user-provided text, assistant answers, accessibility workflows, or spoken progress updates while an agent works.
Most text-to-speech MCP servers wrap a cloud API, which means an account, a key, per-character billing, and your text leaving the machine. This one uses the speech engine your operating system already ships, so it works offline, costs nothing, and keeps text local β which matters if you work anywhere that regulates where data may go.
It also ships an agent narration skill, so an assistant knows how to narrate, not just that it can.
say, or espeak-ng on Linux.stdio transport through the official Python SDK.The MCP server source is open source under the MIT License. Windows SAPI and the macOS
saycommand are proprietary components of their operating systems; they are not open-source speech engines.espeak-ngis separately licensed open-source software.
uv/uvx is recommended for package-based MCP installation.Per platform, for the zero-configuration default:
| Platform | Synthesis | Playback | Extra install |
|---|---|---|---|
| Windows 10/11 | SAPI via PowerShell | System.Media.SoundPlayer | None |
| macOS | say | afplay | None |
| Linux / other Unix | espeak-ng or espeak | aplay, paplay, play, or ffplay | espeak-ng and one player |
On Debian or Ubuntu that is typically:
Set TEXT_TO_SPEECH_BACKEND or TEXT_TO_SPEECH_PLAYER to override either
choice. If a required command is missing, the server reports which one and how
to install it rather than failing silently.
Configure an MCP client to run the published PyPI package:
For MCP clients that accept command-based server configuration, use:
Some clients use TOML, JSON, or a graphical settings page. Use
uvx text-to-speech-mcp as the server command and restart the client after
changing its configuration.
Then configure the client to run text-to-speech-mcp directly.
Read arbitrary text:
Read the final answer:
Read visible intermediate progress updates in order:
The text_to_speech portion is an example client-side server name. Clients may
display a different namespace while keeping the tool name speak_text.
| Field | Value |
|---|---|
| Tool name | speak_text |
| Input | text, required string, 1-50,000 characters |
| Result | Completion message after local playback finishes |
| Ordering | FIFO, one active playback at a time |
| Queue limit | 32 pending requests |
| Network use with a built-in backend | None |
The tool is model-controlled under MCP. The user decides when to ask the model to call it, and the MCP client may show or require approval for tool calls.
With any of the built-in backends, text is passed from the MCP client to a local
Python process and then to the operating system's speech components. It is not
sent to this project, an external API, or a cloud TTS provider. Generated WAV
files are written to a text-to-speech-mcp directory inside the system
temporary directory (%TEMP% on Windows, /tmp on macOS and Linux) and
deleted after playback unless TEXT_TO_SPEECH_KEEP_AUDIO=true is set.
The http backend is the exception: whether text leaves the machine depends
entirely on the endpoint you configure.
Do not ask an AI assistant to speak secrets, credentials, private keys, hidden reasoning, or sensitive tool output.
The default requires no configuration. TEXT_TO_SPEECH_BACKEND is unset and the
server selects sapi, say, or espeak to match the host platform.
To pin one explicitly, or to use a backend that is not built into the OS, set
TEXT_TO_SPEECH_BACKEND to sapi, say, espeak, piper,
transformers_mms, or http. The last three require their own local model,
binary, Python dependencies, or endpoint. TEXT_TO_SPEECH_FALLBACK_BACKEND
names a second backend to try if the first fails. See
backend configuration.
A speech tool alone does not tell an assistant when or how to speak. Left to improvise, agents narrate hidden reasoning, skip the parts you actually needed, or read a paraphrase instead of what is on screen.
skills/project-tts-responder/SKILL.md
is a ready-made narration policy built on speak_text. Copy it into your
project's .claude/skills/ directory:
| Mode | Behaviour |
|---|---|
| Batch (default) | One playback at the end of a turn, covering every visible update plus the final answer |
| Streaming | Narrate each update as it appears β good for demos and walkthroughs |
| Read on request | Read a named file or block of text verbatim |
It also handles the parts that are easy to get wrong:
The skill applies when you ask for audio. To make a project narrate every response, say so in that project's own agent instructions β for example "narrate every response in Batch mode unless I opt out".
stdioserver.json using the 2025-12-11 schemamcp-name commentio.github.Engr-FaizanAli/text-to-speechMIT. See LICENSE.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/text-to-speech)<a href="https://allmcps.com/mcp/text-to-speech"><img src="https://allmcps.com/api/badge/text-to-speech?style=directory" alt="Text to Speech on AllMCPs" /></a>