返回市场
MCP语音合成服务器

MCP语音合成服务器

作者:blacktop33 星标更新:2025-11-18

项目介绍

<p align="center"> <a href="https://github.com/blacktop/mcp-tts"><img alt="mcp-tts Logo" src="https://raw.githubusercontent.com/blacktop/mcp-tts/main/docs/logo.webp" height="200" /></a> <h1 align="center">mcp-tts</h1> <h4><p align="center">用于TTS(文本转语音)的MCP服务器</p></h4> <p align="center"> <a href="https://github.com/blacktop/mcp-tts/actions" alt="Actions"> <img src="https://github.com/blacktop/mcp-tts/actions/workflows/go.yml/badge.svg" /></a> <a href="https://github.com/blacktop/mcp-tts/releases/latest" alt="Downloads"> <img src="https://img.shields.io/github/downloads/blacktop/mcp-tts/total.svg" /></a> <a href="https://github.com/blacktop/mcp-tts/releases" alt="GitHub Release"> <img src="https://img.shields.io/github/release/blacktop/mcp-tts.svg" /></a> <a href="http://doge.mit-license.org" alt="LICENSE"> <img src="https://img.shields.io/:license-mit-blue.svg" /></a> </p> <br>

什么?🤔

为Claude Desktop和Cursor IDE等添加了文本转语音功能。

它注册了四个TTS工具:

  • say_tts
  • elevenlabs_tts
  • google_tts
  • openai_tts

say_tts

使用macOS内置的say命令,以系统内置的声音朗读文本。

elevenlabs_tts

使用ElevenLabs的文本转语音API,以高级AI声音朗读文本。

google_tts

使用Google的Gemini TTS模型,以30种高质量声音朗读文本。可用的声音包括:

  • Zephyr(明亮),Puck(积极),Charon(信息性)
  • Kore(坚定),Fenrir(兴奋),Leda(年轻)
  • Orus(坚定),Aoede(轻快),Callirhoe(随和)
  • Autonoe(明亮),Enceladus(柔和),Iapetus(清晰)
  • 还有18种具有不同特征的声音

openai_tts

使用OpenAI的文本转语音API,以10种自然声音朗读文本:

  • alloy(温暖,对话式,现代)
  • ash(自信,果断,略带质感)
  • ballad(温柔,旋律,略带抒情)
  • coral(愉快,清新,积极)
  • echo(中立,平静,平衡)
  • fable(讲故事般,富有表现力)
  • nova(清晰,精确,略带正式)
  • onyx(深沉,权威,共鸣)
  • sage(安抚,同情,安慰)
  • shimmer(明亮,活泼,有趣)
  • verse(多才多艺,富有表现力)

支持三种质量模型:

  • gpt-4o-mini-tts - 默认,优化质量和速度
  • tts-1 - 标准质量,生成速度快
  • tts-1-hd - 高清音频,优质

附加功能:

  • 速度控制从0.25x到4.0x(默认:1.0x)
  • 自定义语音指令(例如,“用愉快和积极的语气说话”)通过参数或OPENAI_TTS_INSTRUCTIONS环境变量

配置

顺序与并发TTS

默认情况下,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                    启用详细的调试日志记录

设置Claude Desktop配置

{
  "mcpServers": {
    "say": {
      "command": "mcp-tts",
      "env": {
        "ELEVENLABS_API_KEY": "********",
        "ELEVENLABS_VOICE_ID": "1SM7GgM6IMuvQlz2BwM3",
        "GOOGLE_AI_API_KEY": "********",
        "OPENAI_API_KEY": "********",
        "OPENAI_TTS_INSTRUCTIONS": "Speak in a cheerful and positive tone",
        "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_KEYGEMINI_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操作(可选,默认为顺序)

测试

测试macOS TTS

❱ cat test/say.json | go run main.go --verbose

2025/03/23 22:41:49 INFO Starting MCP server name="Say TTS Service" version=1.0.0
2025/03/23 22:41:49 DEBU Say tool called 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 Executing say command args="[--rate 200 Hello, world!]"
2025/03/23 22:41:49 INFO Speaking text text="Hello, world!"
{"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"正在朗读:Hello, world!"}]}}

测试Google TTS

❱ cat test/google_tts.json | go run main.go --verbose

2025/05/23 18:26:45 INFO Starting MCP server name="Say TTS Service" version=""
2025/05/23 18:26:45 DEBU Google TTS tool called request="{...}"
2025/05/23 18:26:45 DEBU Generating TTS audio model=gemini-2.5-flash-preview-tts voice=Kore text="Hello! This is a test of Google's TTS API. How does it sound?"
2025/05/23 18:26:49 INFO Playing TTS audio via beep speaker bytes=181006
2025/05/23 18:26:53 INFO Speaking via Google TTS text="Hello! This is a test of Google's TTS API. How does it sound?" voice=Kore
{"jsonrpc":"2.0","id":4,"result":{"content":[{"type":"text","text":"正在朗读:Hello! This is a test of Google's TTS API. How does it sound? (通过Google TTS,使用声音Kore)"}]}}

测试OpenAI TTS

❱ cat test/openai_tts.json | go run main.go --verbose

2025/05/23 19:15:32 INFO Starting MCP server name="Say TTS Service" version=""
2025/05/23 19:15:32 DEBU OpenAI TTS tool called request="{...}"
2025/05/23 19:15:32 DEBU Generating OpenAI TTS audio model=tts-1 voice=nova speed=1.2 text="Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed."
2025/05/23 19:15:34 DEBU Decoding MP3 stream from OpenAI
2025/05/23 19:15:34 DEBU Initializing speaker for OpenAI TTS sampleRate=22050
2025/05/23 19:15:36 INFO Speaking text via OpenAI TTS text="Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed." voice=nova model=tts-1 speed=1.2
{"jsonrpc":"2.0","id":5,"result":{"content":[{"type":"text","text":"正在朗读:Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed. (通过OpenAI TTS,使用声音nova)"}]}}

测试互斥行为,使用多个TTS请求

# 顺序模式(默认) - 语音依次播放
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