TTS Server Deployment¶
In a nutshell
This page covers pointing a live OVOS instance at your TTS Server through the companion client plugin, and running the server itself in Docker. For the server's own usage, CLI options, and HTTP API, see TTS Server.
Companion Plugin¶
Point your OVOS instance at this TTS server with the companion client plugin
(repo ovos-tts-server-plugin, class OVOSServerTTS, entry point and PyPI package
ovos-tts-plugin-server):
Key name: host, not urls
This TTS companion plugin reads the host key. The
STT companion plugin reads a different key,
urls (a list). The two are not interchangeable. If you set the wrong key, the
plugin does not error. It silently ignores the value and falls back to the
public servers described below.
Configuration mycroft.conf:
{
"tts": {
"module": "ovos-tts-plugin-server",
"ovos-tts-plugin-server": {
"host": "http://localhost:9666",
"voice": "xxx",
"v2": true,
"verify_ssl": true,
"tts_timeout": 5
}
}
}
Restart and verify
After editing the config, restart the client so it picks up the change, then confirm it is actually talking to your server:
Ask the assistant to say something and check the voice/audio logs, or watch live traffic
with ovos-busmon, to confirm the configured host server is the one
receiving the request, not a public fallback.
No host configured → public servers, not local failure
If you omit host, the plugin does not fail. It silently falls back to a built-in
list of public OVOS TTS servers run by community members, shuffled and tried in order.
That's fine for a quick test, but every sentence your assistant speaks is sent to a
third-party server by default until you set host yourself. Always set host explicitly
(as in the localhost example above) for any real deployment.
Community servers are best-effort demos
The public OVOS servers exist for easy onboarding and demos only. They are best-effort, not optimized, carry no uptime guarantees, and may vanish at any time. OVOS will be slow and unreliable if you rely on them. The official recommendation is to self-host — or skip servers entirely: fully offline plugins exist for everything.
See TTS plugins for fully offline voices if you'd rather not depend on any server.
MCP¶
The STT, translate, and persona servers all moved to explicit opt-in, and so did this one.
ovos-tts-server mounts its MCP endpoint only when started with the --mcp flag (installing
the mcp extra alone is not enough):
The endpoint lands at /mcp, on the same host and port as the HTTP API. Installing the extra
without the flag does nothing observable at startup — the server starts and the HTTP API works
normally — but /mcp returns 404, which looks like a routing problem rather than a missing
flag. If MCP tool calls 404, check that --mcp was actually passed.
The mcp extra installs fastmcp, not the mcp SDK
The extra keeps the name mcp, but it resolves the third-party fastmcp>=3,<4 package, not
the official mcp SDK. MCP SDK 2.0 removed mcp.server.fastmcp.FastMCP, so a server still
importing that symbol fails to start on the 2.x SDK. This server serves MCP with fastmcp.
A client consuming a different MCP server (like ovos-mcp-toolbox, see
Agent Tool Plugins) uses the official mcp SDK instead.
Config keys:
| Key | Default | Description |
|---|---|---|
host |
public servers | Server base URL, or a list of URLs to try in order. If unset, a built-in list of public OVOS TTS servers is shuffled and used. |
v2 |
true |
Use /v2/synthesize (utterance as a query param); set false to use the legacy /synthesize/{utterance} path. |
voice |
plugin default | Voice name forwarded as a query param (omitted when unset or "default"). |
verify_ssl |
true |
Verify the server's TLS certificate. |
tts_timeout |
5 |
Per-request timeout in seconds. |
Upcoming — universal server adapter
A server_type option (plus first-class api_key support) is planned for the companion
plugin, so a single config shape can target different self-hosted or cloud TTS server APIs
without a dedicated plugin per vendor.
Docker Deployment¶
Plain Docker works today. A working Dockerfile follows below. What is still upcoming is
only a ready-made Docker Compose proxy setup for this server.
An interim path: some TTS plugins ship their own Docker image
A few TTS plugin repositories (for example the eSpeak NG, S.A.M., and Mimic engines)
already ship their own Dockerfile and docker-compose.yml that build a ready-made
container serving that engine behind ovos-tts-server. Until the compose proxy above
lands, check a plugin's own repository for a Dockerfile before building one by hand.
Create a Dockerfile
FROM python:3.11-slim
RUN pip install ovos-tts-server
RUN pip install {YOUR_TTS_PLUGIN}
ENTRYPOINT ["ovos-tts-server", "--engine", "{YOUR_TTS_PLUGIN}"]
Build & Run
Pre-built containers are also available via the ovos-docker-tts repository.
If you cap the container's memory, size the limit well above any voice-cache budget and read
Memory limits and OOM kills before
debugging a server that keeps getting slow while showing Up.
Upcoming — Docker Compose
A default Docker Compose setup and custom-container documentation are Upcoming.
Read next: TTS Server Related: STT Server · TTS Plugins · Server Compatibility Layers