GUIDE

Un serveur MCP de synthèse vocale : faites parler votre agent IA

Les agents de code et les assistants IA travaillent pendant des minutes, et vous finissez par surveiller la fenêtre pour voir s’ils ont fini. Avec un petit serveur MCP, l’agent le dit simplement : « Le build est terminé, deux tests échouent. »

Le Model Context Protocol (MCP) est le standard ouvert par lequel Claude Code, Claude Desktop, Cursor et d’autres clients appellent des outils. Ce guide crée un outil speak en une trentaine de lignes de Python. Il lit le texte hors ligne avec le moteur gratuit SuperClonica et n’importe laquelle de ses voix, ou via l’API vocale de SuperClonica sur une machine où vous préférez ne pas faire tourner de modèle.

Installation

Il faut Python 3.10 ou plus récent. Installez le SDK Python de MCP et le moteur :

pip install mcp superclonica-cpu

Au premier lancement, le moteur télécharge le modèle Supertonic 3, environ 400 Mo, puis fonctionne hors ligne sur un processeur ordinaire. Sous Linux, le serveur joue le son avec aplay d’alsa-utils ; Windows et macOS n’ont besoin de rien de plus.

Le serveur

Enregistrez ceci sous tts_mcp.py. Il déclare un outil, speak, qui lit le texte, le joue sur vos haut-parleurs et indique à l’agent que c’est fait :

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

Le modèle se charge au premier appel : l’agent démarre vite et seule la première phrase prend quelques secondes de plus. Le code vise la version 2 du paquet mcp, où FastMCP a été renommé MCPServer ; en version 1, importez plutôt FastMCP depuis mcp.server.fastmcp. L’agent décide quand appeler l’outil d’après sa docstring, décrivez-y donc l’usage voulu.

Le brancher à Claude Code, Claude Desktop ou Cursor

Dans Claude Code, ajoutez le serveur en une commande :

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

Dans Claude Desktop, ajoutez-le à claude_desktop_config.json ; Cursor lit le même bloc mcpServers dans son mcp.json. Indiquez le chemin complet du Python où les paquets sont installés :

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

Dites ensuite à l’agent quand parler, par exemple dans les instructions du projet : « Quand tu termines une tâche ou as besoin de ma réponse, appelle speak avec une phrase courte. »

Le même outil via l’API

Sur un portable où vous préférez ne pas garder un modèle de 400 Mo, faites lire le texte par l’API vocale de SuperClonica : dans speak, remplacez les deux lignes de synthèse par un appel à cette fonction et définissez SUPERCLONICA_KEY et 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)

Chaque voix du catalogue fonctionne avec l’ID de sa page, dans toute offre. La clé gratuite donne une minute d’audio par jour, largement assez pour des messages d’état d’une phrase.

Choisir la voix

TTS_VOICE accepte l’une des dix voix de base, M1 à M5 et F1 à F5, ou le chemin d’un fichier de voix du catalogue SuperClonica : un narrateur posé, l’ordinateur d’un vaisseau ou un personnage de jeu. Les voix gratuites du catalogue se téléchargent sans compte. Écoutez d’abord une voix et faites lire une phrase test sur sa page.