指南

文字转语音 MCP 服务器:让你的 AI 智能体开口说话

请注意:Supertonic 3 目前不支持中文,本文中的语音可朗读其支持的 31 种语言。编程智能体和 AI 助手一干就是几分钟,你只好不停地看窗口确认它们是否完成。有了一个小小的 MCP 服务器,智能体会直接说出来:“构建完成,有两个测试失败。”

Model Context Protocol(MCP)是 Claude Code、Claude Desktop、Cursor 等客户端调用工具所用的开放标准。本指南用大约 30 行 Python 编写一个 speak 工具。它用免费的 SuperClonica 引擎及其任意声音离线朗读,或者在不想运行模型的机器上通过 SuperClonica 语音合成 API 朗读。

安装

需要 Python 3.10 或更新版本。安装 MCP 的 Python SDK 和引擎:

pip install mcp superclonica-cpu

引擎首次运行时会下载约 400 MB 的 Supertonic 3 模型,之后在普通 CPU 上离线运行。在 Linux 上服务器用 alsa-utils 中的 aplay 播放声音;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 包的第 2 版,其中 FastMCP 已改名为 MCPServer;若使用第 1 版,请改为从 mcp.server.fastmcp 导入 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 也从它的 mcp.json 读取同样的 mcpServers 配置块。请填写已安装这些包的 Python 的完整路径:

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

然后告诉智能体何时说话,例如在项目说明中写:“完成任务或需要我回复时,用一句简短的话调用 speak。”

通过 API 实现同一个工具

在不想存放 400 MB 模型的笔记本上,可以通过 SuperClonica 语音合成 API 朗读:在 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 在任何套餐中使用。免费密钥每天 1 分钟音频,用于一句话的状态提示绰绰有余。

选择声音

TTS_VOICE 可以是十个内置声音(M1–M5、F1–F5)之一,也可以是 SuperClonica 目录中声音文件的路径:沉稳的旁白、飞船电脑或游戏角色。免费目录声音无需账号即可下载。请先在声音页面试听并朗读一句测试语。