为Claude Desktop和Cursor IDE等添加了文本转语音功能。
它注册了四个TTS工具:
say_ttselevenlabs_ttsgoogle_ttsopenai_ttssay_tts使用macOS内置的say命令,通过系统内置的声音来朗读文本。
elevenlabs_tts使用ElevenLabs的文本转语音API,通过高级AI声音来朗读文本。
google_tts使用Google的Gemini TTS模型,通过30种高质量的声音来朗读文本。可用的声音包括:
openai_tts使用OpenAI的文本转语音API,通过10种自然声音来朗读文本:
支持三种质量模型:
附加功能:
OPENAI_TTS_INSTRUCTIONS环境变量默认情况下,TTS服务器强制执行顺序语音操作——一次只能播放一个TTS请求。这可以防止多个代理同时说话,造成难以理解的噪音。后续请求将在队列中等待,直到当前语音完成。
多重实例保护:互斥锁在单个MCP服务器进程内以及多个Claude Desktop实例之间都有效。当运行多个Claude Desktop终端时,它们会通过系统范围内的文件锁进行协调,以防止重叠的语音。
允许并发TTS操作(多个语音同时播放):
环境变量:
export MCP_TTS_ALLOW_CONCURRENT=true
命令行标志:
mcp-tts --sequential-tts=false
注意:并发TTS可能会导致难以理解的重叠音频。仅在明确需要多个TTS操作同时运行时使用此选项。
默认情况下,TTS工具在语音完成后返回类似“正在朗读:[文本]”的消息。这可能干扰LLM响应。要抑制此输出:
环境变量:
export MCP_TTS_SUPPRESS_SPEAKING_OUTPUT=true
命令行标志:
mcp-tts --suppress-speaking-output
启用后,工具返回“语音完成”而不是回显所读文本。
go install github.com/blacktop/mcp-tts@latest
❱ mcp-tts --help
TTS(文本转语音)MCP服务器。
通过MCP协议提供多种文本转语音服务:
• say_tts - 使用macOS内置的'say'命令(仅限macOS)
• elevenlabs_tts - 使用ElevenLabs API进行高质量语音合成
• google_tts - 使用Google的Gemini TTS模型进行自然语音
• openai_tts - 使用OpenAI的TTS API,具有多种声音选项
每个工具支持不同的声音、速率和配置选项。
需要适当的API密钥以使用基于云的服务。
设计用于与MCP(模型上下文协议)一起使用。
用法:
mcp-tts [flags]
标志:
-h, --help mcp-tts的帮助
--sequential-tts 强制顺序TTS(防止并发语音)(默认为true)
--suppress-speaking-output 抑制“正在朗读:”文本输出
-v, --verbose 启用详细的调试日志
{
"mcpServers": {
"say": {
"command": "mcp-tts",
"env": {
"ELEVENLABS_API_KEY": "********",
"ELEVENLABS_VOICE_ID": "1SM7GgM6IMuvQlz2BwM3",
"GOOGLE_AI_API_KEY": "********",
"OPENAI_API_KEY": "********",
"OPENAI_TTS_INSTRUCTIONS": "以愉快和积极的语气说话",
"MCP_TTS_SUPPRESS_SPEAKING_OUTPUT": "true",
"MCP_TTS_ALLOW_CONCURRENT": "false"
}
}
}
}
ELEVENLABS_API_KEY:您的ElevenLabs API密钥(对于elevenlabs_tts是必需的)ELEVENLABS_VOICE_ID:ElevenLabs声音ID(可选,默认为内置声音)GOOGLE_AI_API_KEY 或 GEMINI_API_KEY:您的Google AI API密钥(对于google_tts是必需的)OPENAI_API_KEY:您的OpenAI API密钥(对于openai_tts是必需的)OPENAI_TTS_INSTRUCTIONS:OpenAI TTS的自定义语音指令(可选,例如,“以愉快和积极的语气说话”)MCP_TTS_SUPPRESS_SPEAKING_OUTPUT:设置为“true”以抑制“正在朗读:”输出(可选)MCP_TTS_ALLOW_CONCURRENT:设置为“true”以允许并发TTS操作(可选,默认为顺序)❱ cat test/say.json | go run main.go --verbose
2025/03/23 22:41:49 INFO 开始MCP服务器 name="Say TTS Service" version=1.0.0
2025/03/23 22:41:49 DEBU 调用了Say工具 request="{Request:{Method:tools/call Params:{Meta:<nil>}} Params:{Name:say_tts Arguments:map[text:Hello, world!] Meta:<nil>}}"
2025/03/23 22:41:49 DEBU 执行say命令 args="[--rate 200 Hello, world!]"
2025/03/23 22:41:49 INFO 正在朗读文本 text="Hello, world!"
{"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"正在朗读:Hello, world!"}]}}
❱ cat test/google_tts.json | go run main.go --verbose
2025/05/23 18:26:45 INFO 开始MCP服务器 name="Say TTS Service" version=""
2025/05/23 18:26:45 DEBU 调用了Google TTS工具 request="{...}"
2025/05/23 18:26:45 DEBU 生成TTS音频 model=gemini-2.5-flash-preview-tts voice=Kore text="Hello! 这是Google TTS API的测试。听起来怎么样?"
2025/05/23 18:26:49 INFO 通过beep扬声器播放TTS音频 bytes=181006
2025/05/23 18:26:53 INFO 通过Google TTS朗读 text="Hello! 这是Google TTS API的测试。听起来怎么样?" voice=Kore
{"jsonrpc":"2.0","id":4,"result":{"content":[{"type":"text","text":"正在朗读:Hello! 这是Google TTS API的测试。听起来怎么样?(通过Google TTS,使用声音Kore)"}]}}
❱ cat test/openai_tts.json | go run main.go --verbose
2025/05/23 19:15:32 INFO 开始MCP服务器 name="Say TTS Service" version=""
2025/05/23 19:15:32 DEBU 调用了OpenAI TTS工具 request="{...}"
2025/05/23 19:15:32 DEBU 生成OpenAI TTS音频 model=tts-1 voice=nova speed=1.2 text="Hello! 这是OpenAI文本转语音API的测试。我正在使用nova声音,速度为1.2倍。"
2025/05/23 19:15:34 DEBU 从OpenAI解码MP3流
2025/05/23 19:15:34 DEBU 初始化OpenAI TTS扬声器 sampleRate=22050
2025/05/23 19:15:36 INFO 通过OpenAI TTS朗读 text="Hello! 这是OpenAI文本转语音API的测试。我正在使用nova声音,速度为1.2倍。" voice=nova model=tts-1 speed=1.2
{"jsonrpc":"2.0","id":5,"result":{"content":[{"type":"text","text":"正在朗读:Hello! 这是OpenAI文本转语音API的测试。我正在使用nova声音,速度为1.2倍。(通过OpenAI TTS,使用声音nova)"}]}}
# 顺序模式(默认)- 语音依次播放
cat test/sequential.json | go run main.go --verbose
# 并发模式 - 允许重叠语音
cat test/sequential.json | go run main.go --verbose --sequential-tts=false
MIT 版权所有 (c) 2025 blacktop