РУКОВОДСТВО

MCP-сервер озвучки текста: пусть ваш AI-агент говорит вслух

Агенты для кода и AI-ассистенты работают минутами, и приходится то и дело поглядывать в окно, не закончили ли они. С маленьким MCP-сервером агент просто скажет это вслух: «Сборка готова, два теста падают».

Model Context Protocol (MCP) — открытый стандарт, через который Claude Code, Claude Desktop, Cursor и другие клиенты вызывают инструменты. В этом руководстве мы соберём инструмент speak примерно в 30 строк Python. Он озвучивает текст офлайн бесплатным движком SuperClonica любым его голосом или через API озвучки SuperClonica — на машине, где не хочется держать модель.

Установка

Нужен Python 3.10 или новее. Установите Python SDK для MCP и движок:

pip install mcp superclonica-cpu

При первом запуске движок скачивает модель Supertonic 3, около 400 МБ, а дальше работает офлайн на обычном процессоре. В Linux сервер играет звук через aplay из пакета alsa-utils; в Windows и macOS ничего дополнительно не нужно.

Сервер

Сохраните это как tts_mcp.py. Файл регистрирует один инструмент, speak: он озвучивает текст, проигрывает его в колонках и сообщает агенту, что готово:

import os, subprocess, sys, tempfile
from mcp.server.mcpserver import MCPServer
from superclonica import Superclonica

VOICE = os.environ.get("TTS_VOICE", "F1")  # M1..M5, F1..F5 or a voice file from the catalog
server = MCPServer("speak")
tts = None

def play(path):
    if sys.platform == "win32":
        import winsound
        winsound.PlaySound(path, winsound.SND_FILENAME)
    elif sys.platform == "darwin":
        subprocess.run(["afplay", path], check=True)
    else:
        subprocess.run(["aplay", "-q", path], check=True)

@server.tool()
def speak(text: str, language: str = "en") -> str:
    """Say a short message out loud to the user, for example when a long task is done."""
    global tts
    tts = tts or Superclonica()
    audio, _ = tts.synthesize(text[:500], voice=VOICE, lang=language)
    path = os.path.join(tempfile.gettempdir(), "mcp-speak.wav")
    tts.save(path, audio)
    play(path)
    return "spoken"

if __name__ == "__main__":
    server.run()

Модель загружается при первом вызове, поэтому агент стартует быстро, а дольше на несколько секунд звучит только первая фраза. Код написан для второй версии пакета mcp, где FastMCP переименован в MCPServer; в первой версии импортируйте FastMCP из mcp.server.fastmcp. Агент решает, когда вызывать инструмент, по его docstring, поэтому опишите там нужный сценарий.

Подключение к Claude Code, Claude Desktop или Cursor

В Claude Code сервер добавляется одной командой:

claude mcp add speak -- python /full/path/to/tts_mcp.py

В Claude Desktop добавьте его в claude_desktop_config.json; Cursor читает такой же блок mcpServers из своего mcp.json. Укажите полный путь к Python, в который установлены пакеты:

{
  "mcpServers": {
    "speak": {
      "command": "/full/path/to/python",
      "args": ["/full/path/to/tts_mcp.py"],
      "env": {"TTS_VOICE": "F1"}
    }
  }
}

Затем скажите агенту, когда говорить, например в инструкциях проекта: «Когда закончишь задачу или тебе нужен мой ответ, вызови speak с одной короткой фразой».

Тот же инструмент через API

На ноутбуке, где не хочется держать модель на 400 МБ, озвучивайте текст через API озвучки SuperClonica: в speak замените две строки синтеза вызовом этой функции и задайте SUPERCLONICA_KEY и VOICE_ID.

import os, requests

API = "https://superclonica.com/api/v1/speech"
VOICE_ID = os.environ["VOICE_ID"]  # the ID on the page of a catalog voice

def voice_to_file(text, language, path):
    answer = requests.post(API, timeout=120,
                           headers={"Authorization": "Bearer " + os.environ["SUPERCLONICA_KEY"]},
                           json={"text": text, "voice": VOICE_ID, "language": language, "format": "wav"})
    answer.raise_for_status()
    with open(path, "wb") as file:
        file.write(answer.content)

Любой голос каталога работает по ID со своей страницы, на любом тарифе. Бесплатный ключ даёт минуту звука в день — с запасом для статусных сообщений в одну фразу.

Выбор голоса

В TTS_VOICE укажите один из десяти встроенных голосов, M1–M5 и F1–F5, или путь к файлу голоса из каталога SuperClonica: спокойного диктора, бортовой компьютер или игрового персонажа. Бесплатные голоса каталога скачиваются без аккаунта. Сначала послушайте голос и озвучьте тестовую фразу на его странице.