内容
# 🔊 TTS MCP 服务器
[](LICENSE)
[](https://www.python.org/)
[](https://modelcontextprotocol.io/)
[](Dockerfile)
一个免费、开源、自我托管的 **文本转语音 MCP 服务器**。它使用 [`edge-tts`](https://github.com/rany2/edge-tts) (微软 Edge 在线语音 —— **无需 API 密钥**)合成语音,并通过 **可流式 HTTP** 将其公开给任何 MCP 客户端(claude.ai、Claude Code、Cursor、…)作为远程连接器。
给你的 AI 助手一个声音:要求它用 **300+ 种声音,跨 70+ 种语言** 大声朗读文本,然后获取一个可播放的 MP3 链接。
## 🌐 在线演示
一个公共实例托管在 **[tts.vurthex.com](https://tts.vurthex.com/)** —— 你可以在不部署任何东西的情况下试用服务器:
| | |
|---|---|
| **MCP 端点** | `https://tts.vurthex.com/mcp` |
| **传输** | 可流式 HTTP |
| **认证** | 无(无认证连接器) |
在不到一分钟内将其添加到 claude.ai:
1. 进入 **设置 → 连接器 → 添加自定义连接器**。
2. **名称**:`TTS`(任意你喜欢的名称)。
3. **远程 MCP 服务器 URL**:`https://tts.vurthex.com/mcp`
4. 留下认证 **为空** 并保存。
然后只需问 Claude:
> *"用 en-US-AriaNeural 声音朗读:Hello world!"*
>
> *"用 tr-TR-EmelNeural 声音朗读:Merhaba dünya"*
Claude 回复一个可播放的 `https://tts.vurthex.com/audio/<uuid>.mp3` 链接。
> [!NOTE]
> 演示实例仅用于测试,基于尽力而为的原则提供。生成的
> 文件将在 24 小时后自动删除。对于生产使用,请
> 自行托管 —— 这需要几分钟(参见下文)。
## 🛠️ 工具
| 工具 | 描述 |
|------|-------------|
| `text_to_speech(text, voice="tr-TR-EmelNeural", rate="+0%", pitch="+0Hz")` | 生成一个 MP3 并返回其公共 URL (`BASE_URL/audio/<uuid>.mp3`)。 |
| `list_voices(language="tr")` | 列出可用的声音(`ShortName`,`Gender`,`Locale`),按本地化前缀过滤。传递 `""` 获取所有声音。 |
## ✨ 功能
- 🎙️ **300+ 种神经声音,70+ 种语言**,通过微软 Edge TTS
- 🔑 **无需 API 密钥** —— edge-tts 使用微软的免费在线端点
- 🌍 **通过可流式 HTTP 的远程 MCP** —— 与 claude.ai 自定义连接器配合使用
- 🐳 **单文件 Docker 部署** —— 包含 Dockerfile,Coolify 友好
- 🧹 **自我清理** —— 自动删除超过 24 小时的生成 MP3
- ⚙️ **可配置** —— 通过环境变量控制速率/音调,保留和清理间隔
## 🚀 本地运行
```bash
git clone https://github.com/ismailcembabaoglu/TtsMcpServer.git
cd TtsMcpServer
pip install -r requirements.txt
export BASE_URL=http://localhost:8000
export AUDIO_DIR=./audio # /app/audio 是容器默认目录
python server.py
```
MCP 端点现在位于 `http://localhost:8000/mcp`。使用正确的
MCP 初始化握手验证它(一个没有 MCP 头部的简单 GET 请求返回 `406`/`400`,
这也确认路由是活动的):
```bash
curl -i -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
```
带有 `event: message` SSE 有效负载的 `200` 响应表示服务器正在运行。
### Docker
```bash
docker build -t tts-mcp-server .
docker run -p 8000:8000 -e BASE_URL=http://localhost:8000 tts-mcp-server
```
## ☁️ 自托管(Coolify 或任何 Docker 主机)
1. 将此仓库 fork 或克隆到你的 Git 提供商。
2. 在 Coolify 中:**+ 新建 → 资源 → 应用程序**,选择你的 Git 仓库。
3. 构建包:**Dockerfile**(自动检测 —— 此仓库自带)。
4. **端口**:将暴露的端口设置为 `8000`。
5. **域名**:分配一个域名(例如 `https://tts.example.com`)。Coolify
通过其反向代理自动配置 HTTPS。
6. **环境变量**:将 `BASE_URL` 设置为你分配的精确域名,
**不带尾部斜杠**。参见 [`.env.example`](.env.example) 获取可选
重写。
7. *(可选但推荐)* 在 `/app/audio` 处添加一个 **持久卷**,
以便生成的 文件在重启后存活。
8. **部署**。一旦健康,MCP 端点就是 `https://tts.example.com/mcp`。
### 配置
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `BASE_URL` | `http://localhost:8000` | 用于构建 MP3 链接的公共基准 URL(不带尾部斜杠) |
| `AUDIO_DIR` | `/app/audio` | 生成的 MP3 存储位置(在 `/audio/*` 处提供) |
| `AUDIO_MAX_AGE_SECONDS` | `86400` (24 小时) | 删除超过此时间的生成 MP3 |
| `CLEANUP_INTERVAL_SECONDS` | `3600` (1 小时) | 清理循环运行的频率 |
## 📝 注意
- edge-tts 需要从容器出站互联网访问(它调用
微软的 Edge TTS 端点)。无需凭证。
- 生成的文件是临时文件:任何超过 24 小时的文件都将被删除。使用
`AUDIO_MAX_AGE_SECONDS` / `CLEANUP_INTERVAL_SECONDS` 进行调整。
- 此服务器按设计是一个 **无认证** 连接器。如果你公开暴露它,
任何知道 URL 的人都可以 使用它 —— 如果这是一个问题,请将其放在具有认证或速率
限制的代理后面。
## 🤝 贡献
欢迎提出问题和拉取请求!如果你发现一个错误或想要一个功能
(语音预设、身份验证支持、其他 TTS 引擎……),请打开一个问题。
## 📄 许可证
[MIT](LICENSE) —— 免费使用、修改和分发。