Kokoro 文本转语音(TTS)MCP 服务器可用于生成 .mp3 文件,并且提供了上传至 S3 的选项,为文本转语音需求提供了便捷的解决方案。
使用链接:https://huggingface.co/spaces/hexgrad/Kokoro-TTS
将项目克隆到本地仓库。
下载 Kokoro Onnx 权重 的 kokoro-v1.0.onnx 和 voices-v1.0.bin,并存储在相同的仓库中。
将以下内容添加到您的 MCP 配置中,并使用您自己的值进行更新:
{
"kokoro-tts-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/toyourlocal/kokoro-tts-mcp",
"run",
"mcp-tts.py"
],
"env": {
"TTS_VOICE": "af_heart",
"TTS_SPEED": "1.0",
"TTS_LANGUAGE": "en-us",
"AWS_ACCESS_KEY_ID": "",
"AWS_SECRET_ACCESS_KEY": "",
"AWS_REGION": "us-east-1",
"AWS_S3_FOLDER": "mp3",
"S3_ENABLED": "true",
"MP3_FOLDER": "/path/to/mp3"
}
}
}
这是将 .wav 转换为 .mp3 文件所需的。对于 Mac 系统,可使用以下命令进行安装:
brew install ffmpeg
要在本地运行,请将相关内容添加到您的 .env 文件中。可参考 env.example 文件,复制到 .env 并根据自己的值进行修改。
| 属性 | 详情 |
|---|---|
AWS_ACCESS_KEY_ID |
您的 AWS 访问密钥 ID |
AWS_SECRET_ACCESS_KEY |
您的 AWS 秘密访问密钥 |
AWS_S3_BUCKET_NAME |
S3 存储桶名称 |
AWS_S3_REGION |
S3 区域(例如,us-east-1) |
AWS_S3_FOLDER |
S3 桶中的文件夹路径 |
AWS_S3_ENDPOINT_URL |
可选的自定义 S3 兼容存储端点 URL |
MCP_HOST |
服务器绑定到的主机(默认:0.0.0.0) |
MCP_PORT |
侦听的端口(默认:9876) |
MCP_CLIENT_HOST |
客户端连接到服务器的主机名(默认:localhost) |
DEBUG |
启用调试模式(设为 "true" 或 "1") |
S3_ENABLED |
启用 S3 上传(设为 "true" 或 "1") |
MP3_FOLDER |
存储 MP3 文件的路径(默认是脚本目录中的 'mp3' 文件夹) |
MP3_RETENTION_DAYS |
在自动删除之前保留 MP3 文件的天数 |
DELETE_LOCAL_AFTER_S3_UPLOAD |
成功上传到 S3 后是否删除本地 MP3 文件(设为 "true" 或 "1") |
TTS_VOICE |
TTS 客户端的默认语音(默认:af_heart) |
TTS_SPEED |
TTS 客户端的默认速度(默认:1.0) |
TTS_LANGUAGE |
TTS 客户端的默认语言(默认:en-us) |
推荐使用 UV 来运行服务器,命令如下:
uv run mcp-tts.py
要使用文本转语音功能,请在终端中运行以下命令:
uv run mcp-client.py --tts text-to-speech
请将 替换为实际的文本内容。
uv run mcp-tts.py
uv run mcp-client.py --tts text-to-speech "你好,Kokoro!"
这将使用 Kokoro 模型将中文文本转换为语音,并生成一个 .mp3 文件。
要自定义 MCP 服务器的行为,请编辑 mcp-tts.py 中的配置参数。例如,您可以调整音频输出格式、采样率或位深度。
要添加更多功能或集成其他服务,请扩展 MCP 服务器的代码,添加新的处理程序和服务。
import uvicorn
from fastapi import FastAPI
from fastapi.responses import FileResponse
from pydub import AudioSegment
import os
app = FastAPI()
@app.get("/text-to-speech/{text}")
async def text_to_speech(text: str):
# 这里假设您有生成语音的逻辑,例如使用科大讯飞或阿里云的 API
# 以下是一个示例,实际实现需要根据具体情况进行调整
audio = AudioSegment.from_text(text, language="zh-CN")
file_path = os.path.join("audio_files", f"output_{len(audio)}_bytes.mp3")
audio.export(file_path, format="mp3")
return FileResponse(file_path)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)