文字转语音 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 目录中声音文件的路径:沉稳的旁白、飞船电脑或游戏角色。免费目录声音无需账号即可下载。请先在声音页面试听并朗读一句测试语。