ANLEITUNG

Ein Text-to-Speech-MCP-Server: Lassen Sie Ihren KI-Agenten sprechen

Coding-Agenten und KI-Assistenten arbeiten minutenlang, und Sie schauen ständig nach, ob sie fertig sind. Mit einem kleinen MCP-Server sagt der Agent es einfach: „Der Build ist fertig, zwei Tests schlagen fehl.“

Das Model Context Protocol (MCP) ist der offene Standard, über den Claude Code, Claude Desktop, Cursor und andere Clients Werkzeuge aufrufen. Diese Anleitung baut ein speak-Werkzeug in etwa 30 Zeilen Python. Es vertont Text offline mit der kostenlosen SuperClonica-Engine und jeder ihrer Stimmen oder über die Sprach-API von SuperClonica auf einem Rechner, auf dem Sie kein Modell betreiben möchten.

Installation

Sie brauchen Python 3.10 oder neuer. Installieren Sie das MCP-Python-SDK und die Engine:

pip install mcp superclonica-cpu

Beim ersten Start lädt die Engine das Supertonic-3-Modell, etwa 400 MB, und läuft danach offline auf einer normalen CPU. Unter Linux spielt der Server Ton mit aplay aus alsa-utils ab; Windows und macOS brauchen nichts weiter.

Der Server

Speichern Sie dies als tts_mcp.py. Es registriert ein Werkzeug, speak, das den Text vertont, über Ihre Lautsprecher abspielt und dem Agenten meldet, dass es fertig ist:

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()

Das Modell wird beim ersten Aufruf geladen, der Agent startet also schnell, und nur der erste Satz dauert ein paar Sekunden länger. Der Code ist für Version 2 des Pakets mcp, in der FastMCP in MCPServer umbenannt wurde; in Version 1 importieren Sie stattdessen FastMCP aus mcp.server.fastmcp. Der Agent entscheidet anhand des Docstrings, wann er das Werkzeug aufruft, beschreiben Sie dort also den gewünschten Einsatz.

Mit Claude Code, Claude Desktop oder Cursor verbinden

In Claude Code fügen Sie den Server mit einem Befehl hinzu:

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

In Claude Desktop tragen Sie ihn in claude_desktop_config.json ein; Cursor liest denselben mcpServers-Block aus seiner mcp.json. Geben Sie den vollständigen Pfad zu dem Python an, in dem die Pakete installiert sind:

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

Sagen Sie dem Agenten dann, wann er sprechen soll, etwa in den Projektanweisungen: „Wenn du eine Aufgabe beendet hast oder meine Eingabe brauchst, rufe speak mit einem kurzen Satz auf.“

Dasselbe Werkzeug über die API

Auf einem Laptop, auf dem Sie kein 400-MB-Modell halten möchten, vertonen Sie den Text über die Sprach-API von SuperClonica: Ersetzen Sie in speak die zwei Synthesezeilen durch einen Aufruf dieser Funktion und setzen Sie SUPERCLONICA_KEY und 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)

Jede Katalogstimme funktioniert mit der ID von ihrer Seite, in jedem Tarif. Der kostenlose Schlüssel gibt eine Minute Audio pro Tag, reichlich für Statusmeldungen aus einem Satz.

Die Stimme wählen

TTS_VOICE nimmt eine der zehn Standardstimmen M1 bis M5 und F1 bis F5 oder den Pfad einer Stimmdatei aus dem SuperClonica-Katalog: einen ruhigen Erzähler, einen Bordcomputer oder eine Spielfigur. Kostenlose Katalogstimmen gibt es ohne Konto. Hören Sie eine Stimme vorher an und vertonen Sie auf ihrer Seite einen Testsatz.