Skip to main content
Glama
aardpro

MCP MeloTTS Audio Generator

by aardpro
README.md
# MCP MeloTTS 语音生成器 (MCP MeloTTS Audio Generator)

本项目是一个 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 服务器,为 AI 助手提供将文本生成语音音频的能力,基于 MeloTTS。

支持自动将长文本按标点与长度分割为不超过 100 字的小段,逐段生成 WAV 文件,并使用 ffmpeg 无损拼接为完整音频。

## ✨ 功能特性

- 文本转语音:使用 MeloTTS 将文本生成高质量语音
- 自动分段:长文本自动分段,避免一次过长导致失败
- 无损拼接:使用 ffmpeg 将分段 WAV 拼接为完整文件
- 可配置语速、语言、设备与说话人
- 跨平台:Windows、Linux、macOS

## 🚀 安装

### 使用 uvx (推荐)

```bash
docker run -d -p 127.0.0.1:9900:8888 kisaragi29/melotts:latest
uvx mcp-melotts@latest
```

### 使用 pip

```bash
pip install mcp-melotts@latest
```

### 从源码安装

```bash
git clone https://github.com/aardpro/mcp-melotts.git
cd mcp-melotts
pip install -e .
```

## ⚙️ 配置

### 配置

#### 前置条件
开发电脑已安装并可用:
- ffmpeg(用于拼接音频)
- MeloTTS(可通过本地 Python 包 melo.api 或 Docker Gradio 服务)

#### 启动前检查
启用 MCP 时会自动检查以下条件:
- 本机 9900 端口是否启动了 MeloTTS HTTP 服务(用于 HTTP 模式)
- 系统是否可调用 ffmpeg(用于无损拼接)
任一不满足将抛出错误并终止启动

#### 配置文件
内置配置文件位于 src/main/config.json,可设置:
- defaultLanguage:默认语言代码(ZH/EN/JP/ES)
- defaultSpeed:默认语速
- defaultDevice:默认设备(cpu 或 cuda:0)
- defaultSpeaker:默认说话人标签
- chunkSizeLimit:分段长度上限(推荐 100)

### MCP 客户端配置

将以下内容添加到你的 MCP 客户端配置中(例如 Claude Desktop, Cursor):

#### 选项 1: 使用 uvx 

```json
{
  "mcpServers": {
    "McpMeloTTS": {
      "command": "uvx",
      "args": ["mcp-melotts"]
    }
  }
}
```

#### 选项 2: 使用 pip

```json
{
  "mcpServers": {
    "McpMeloTTS": {
      "command": "mcp-melotts"
    }
  }
}
```

#### 选项 3: Windows 系统 

```json
{
  "mcpServers": {
    "McpMeloTTS": {
      "command": "cmd",
      "args": [
        "/c",
        "chcp 65001 >nul && uvx mcp-melotts"
      ]
    }
  }
}
```

#### 选项 4: Linux/macOS:

```json
{
  "mcpServers": {
    "McpMeloTTS": {
      "command": "python",
      "args": ["-m", "main"]
    }
  }
}
```

## 🛠️ 可用工具

### `mcp_melotts_generate_audio`

将文本生成语音文件。适用于“根据文本生成音频文件”等请求。支持自动分段与 ffmpeg 无损拼接,支持两种调用模式:本地 melo.api 与 Docker Gradio HTTP 接口。

**参数:**
- `text` (string, 必填): 要转换为语音的文本
- `language` (string, 可选): 语言代码(默认 ZH)
- `speaker` (string, 可选): 说话人标签(默认 ZH)
- `speed` (number, 可选): 语速(默认 1.0)
- `device` (string, 可选): cpu 或 cuda:0(默认 cpu)
- `split_sentences` (boolean, 可选): 是否自动分段(默认 true)
- `output_dir` (string, 必填): 输出目录
- `target_filename` (string, 可选): 最终输出文件名,默认时间戳命名
- `use_http_api` (boolean, 可选): 是否使用 Docker Gradio HTTP 接口(默认 false)
- `api_base_url` (string, 可选): HTTP 接口基础地址(如 http://localhost:9900)
- `fn_index` (number, 可选): Gradio 函数索引(默认 1)
- `session_hash` (string, 可选): Gradio 会话哈希(不提供则自动生成)

**调用示例(本地 melo.api 模式):**

```json
{
  "name": "mcp_melotts_generate_audio",
  "arguments": {
    "text": "我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。",
    "language": "ZH",
    "speaker": "ZH",
    "speed": 1.0,
    "output_dir": "./audio"
  }
}
```

**调用示例(Docker Gradio HTTP 模式):**
```json
{
  "name": "mcp_melotts_generate_audio",
  "arguments": {
    "text": "请将以下内容朗读为音频……",
    "language": "ZH",
    "speed": 1.0,
    "output_dir": "./audio",
    "use_http_api": true,
    "api_base_url": "http://localhost:9900",
    "fn_index": 1
  }
}
```

> 说明:HTTP 模式需要先运行 Docker 容器并开放 9900 端口,脚本会通过 /queue/join 与 /queue/data 监听生成进度并下载音频。

## ⚡ 快速开始

### 使用虚拟环境运行
```bash
python -m venv .venv
.venv/Scripts/python.exe -m pip install -U pip
.venv/Scripts/pip.exe install -r requirements.txt
.venv/Scripts/python.exe -m main
```

### 一键启动(Windows)
双击或执行项目根目录的 start_server.bat,它会自动创建 .venv、安装依赖并在虚拟环境中启动 MCP。

### 生成音频的测试脚本
```bash
.venv/Scripts/python.exe test-generate-audio.py --input test-text.txt --output-dir output --use-http-api --api-base-url http://localhost:9900
```
打印的路径即生成的 wav 文件(如 output/1767514828_93829.wav)。


## 💡 使用示例

配置完成后,你可以直接让 AI 助手:
- "将这段中文生成音频文件"
- "用日语朗读下面这段文字,语速稍慢"
- "把长文拆分生成语音并合并为一个文件"

## 💻 开发

### 设置开发环境

```bash
git clone https://github.com/aardpro/mcp-melotts.git
cd mcp-melotts
pip install -e ".[dev]"
```

### 运行测试

```bash
pytest
```

### 构建包

build && upload
```bash
rm -rf dist && pip install build && python -m build && pip install twine && twine upload dist/*
```

```bash
pip install build
python -m build
```

### 发布到 PyPI

```bash
pip install twine
twine upload dist/*
```

## 修改后的发布步骤

当对项目进行修改后,按照以下步骤发布更新版本:

1. 在 `pyproject.toml` 中增加版本号
2. 安装构建依赖:
   ```bash
   pip install build twine
   ```
3. 构建包:
   ```bash
   python -m build
   ```
4. 本地测试构建的包(可选但推荐):
   ```bash
   pip install dist/mcp_melotts-*.whl
   ```
5. 上传到 PyPI:
   ```bash
   twine upload dist/*
   ```

## 📂 项目结构

```
mcp-melotts/
├── src/
│   └── main/
│       ├── __init__.py
│       ├── __main__.py
│       └── server.py
├── pyproject.toml
├── README.md
└── LICENSE
```

## ❓ 常见问题

### 配置问题

请确保已安装 ffmpeg 与 MeloTTS,并能在 Python 中导入 melo.api。

### 音频生成失败

如果音频生成失败,请检查:
1. 是否已正确安装 MeloTTS(Python 包 melo)
2. 是否已正确设置语言与说话人标签
3. ffmpeg 是否在系统 PATH 中可用

## 📄 许可证

MIT License - 详见 [LICENSE](LICENSE) 文件。

## 🤝 贡献

欢迎提交 Pull Request 来改进这个项目!