返回市场
MCP鱼类音频服务器

MCP鱼类音频服务器

作者:da-okazaki10 星标更新:2025-11-18

项目介绍

Fish Audio MCP Server

<div align="center"> <img src="./dcos/icon_fish-audio.webp" alt="Fish Audio Logo" width="300" height="300" /> </div>

npm version License: MIT

这是一个MCP(模型上下文协议)服务器,它提供了Fish Audio的文本转语音API与像Claude这样的大型语言模型之间的无缝集成,从而实现自然语言驱动的语音合成。

Fish Audio是什么?

Fish Audio 是一个前沿的文本转语音平台,提供以下功能:

  • 🌊 最先进的语音合成,具有自然的声音输出
  • 🎯 语音克隆能力,创建自定义语音模型
  • 🌍 多语言支持,包括英语、日语、中文等
  • 低延迟流式传输,适用于实时应用
  • 🎨 精细控制,对语音韵律和情感进行控制

此MCP服务器将Fish Audio的强大功能直接带入您的大型语言模型工作流程中。

特性

  • 🎙️ 高质量TTS:利用Fish Audio的最先进TTS模型
  • 🌊 流式传输支持:实时音频流式传输,适用于低延迟应用
  • 🎨 多种语音:通过参考ID支持自定义语音模型
  • 🎯 智能语音选择:通过ID、名称或标签选择语音
  • 📚 语音库管理:配置和管理多个语音参考
  • 🔧 灵活配置:基于环境变量的配置
  • 📦 多种音频格式:支持MP3、WAV、PCM和Opus
  • 🚀 简单集成:与任何兼容MCP的客户端简单设置

快速开始

安装

您可以直接使用npx运行此MCP服务器:

npx @alanse/fish-audio-mcp-server

或者全局安装:

npm install -g @alanse/fish-audio-mcp-server

配置

  1. Fish Audio获取您的Fish Audio API密钥。
  2. 设置环境变量:
export FISH_API_KEY=your_fish_audio_api_key_here
  1. 添加到您的MCP设置配置中:

单一语音模式(简单)

{
  "mcpServers": {
    "fish-audio": {
      "command": "npx",
      "args": ["-y", "@alanse/fish-audio-mcp-server"],
      "env": {
        "FISH_API_KEY": "your_fish_audio_api_key_here",
        "FISH_MODEL_ID": "speech-1.6",
        "FISH_REFERENCE_ID": "your_voice_reference_id_here",
        "FISH_OUTPUT_FORMAT": "mp3",
        "FISH_STREAMING": "false",
        "FISH_LATENCY": "balanced",
        "FISH_MP3_BITRATE": "128",
        "FISH_AUTO_PLAY": "false",
        "AUDIO_OUTPUT_DIR": "~/.fish-audio-mcp/audio_output"
      }
    }
  }
}

多种语音模式(高级)

{
  "mcpServers": {
    "fish-audio": {
      "command": "npx",
      "args": ["-y", "@alanse/fish-audio-mcp-server"],
      "env": {
        "FISH_API_KEY": "your_fish_audio_api_key_here",
        "FISH_MODEL_ID": "speech-1.6",
        "FISH_REFERENCES": "[{'reference_id':'id1','name':'Alice','tags':['female','english']},{'reference_id':'id2','name':'Bob','tags':['male','japanese']},{'reference_id':'id3','name':'Carol','tags':['female','japanese','anime']}]",
        "FISH_DEFAULT_REFERENCE": "id1",
        "FISH_OUTPUT_FORMAT": "mp3",
        "FISH_STREAMING": "false",
        "FISH_LATENCY": "balanced",
        "FISH_MP3_BITRATE": "128",
        "FISH_AUTO_PLAY": "false",
        "AUDIO_OUTPUT_DIR": "~/.fish-audio-mcp/audio_output"
      }
    }
  }
}

环境变量

变量描述默认值是否必需
FISH_API_KEY您的Fish Audio API密钥-
FISH_MODEL_ID使用的TTS模型(s1, speech-1.5, speech-1.6)s1可选
FISH_REFERENCE_ID默认语音参考ID(单个参考模式)-可选
FISH_REFERENCES多个语音参考(见下文)-可选
FISH_DEFAULT_REFERENCE使用多个参考时的默认参考ID-可选
FISH_OUTPUT_FORMAT默认音频格式(mp3, wav, pcm, opus)mp3可选
FISH_STREAMING启用流式传输模式(HTTP/WebSocket)false可选
FISH_LATENCY延迟模式(normal, balanced)balanced可选
FISH_MP3_BITRATEMP3比特率(64, 128, 192)128可选
FISH_AUTO_PLAY自动播放音频并启用实时播放false可选
AUDIO_OUTPUT_DIR音频文件输出目录~/.fish-audio-mcp/audio_output可选

配置多个语音参考

您可以以两种方式配置多个语音参考:

JSON数组格式(推荐)

使用FISH_REFERENCES环境变量与JSON数组:

FISH_REFERENCES='[
  {"reference_id":"id1","name":"Alice","tags":["female","english"]},
  {"reference_id":"id2","name":"Bob","tags":["male","japanese"]},
  {"reference_id":"id3","name":"Carol","tags":["female","japanese","anime"]}
]'
FISH_DEFAULT_REFERENCE="id1"

单独格式(向后兼容)

使用编号的环境变量:

FISH_REFERENCE_1_ID=id1
FISH_REFERENCE_1_NAME=Alice
FISH_REFERENCE_1_TAGS=female,english

FISH_REFERENCE_2_ID=id2
FISH_REFERENCE_2_NAME=Bob
FISH_REFERENCE_2_TAGS=male,japanese

使用方法

一旦配置完成,Fish Audio MCP服务器将为大型语言模型提供两个工具。

工具1:fish_audio_tts

使用Fish Audio的TTS API生成语音。

参数

  • text(必需):要转换为语音的文本(最大10,000字符)
  • reference_id(可选):语音模型参考ID
  • reference_name(可选):按名称选择语音
  • reference_tag(可选):按标签选择语音
  • streaming(可选):启用流式传输模式
  • format(可选):输出格式(mp3, wav, pcm, opus)
  • mp3_bitrate(可选):MP3比特率(64, 128, 192)
  • normalize(可选):启用文本规范化(默认:true)
  • latency(可选):延迟模式(normal, balanced)
  • output_path(可选):自定义输出文件路径
  • auto_play(可选):自动播放生成的音频
  • websocket_streaming(可选):使用WebSocket流式传输而不是HTTP
  • realtime_play(可选):在WebSocket流式传输期间实时播放音频

语音选择优先级:reference_id > reference_name > reference_tag > 默认

工具2:fish_audio_list_references

列出所有已配置的语音参考。

参数

无需参数。

返回值

  • 已配置语音参考的列表及其ID、名称和标签
  • 默认参考ID

示例

基本文本转语音

用户:"生成语音说'Hello, world! Welcome to Fish Audio TTS.'"

Claude:"我将使用Fish Audio TTS生成这段文本的语音。"

[使用fish_audio_tts工具并传递text参数]

结果:音频文件保存至./audio_output/tts_2025-01-03T10-30-00.mp3

使用自定义语音ID

用户:"使用语音模型xyz123生成语音说'This is a custom voice test'"

Claude:"我将使用指定的语音模型生成语音。"

[使用fish_audio_tts工具并传递text和reference_id参数]

结果:使用自定义语音模型xyz123生成了语音

使用语音名称

用户:"使用Alice的语音说'Hello from Alice'"

Claude:"我将使用Alice的语音生成语音。"

[使用fish_audio_tts工具并传递reference_name: "Alice"]

结果:使用Alice的语音生成了语音

使用语音标签

用户:"生成日语语音说'こんにちは',带有动漫风格的语音"

Claude:"我将生成带有动漫风格的日语语音。"

[使用fish_audio_tts工具并传递reference_tag: "anime"]

结果:使用动漫风格的语音生成了语音

列出可用语音

用户:"有哪些可用的语音?"

Claude:"我将列出所有已配置的语音参考。"

[使用fish_audio_list_references工具]

结果:
- Alice (id: id1) - 标签:female, english [默认]
- Bob (id: id2) - 标签:male, japanese
- Carol (id: id3) - 标签:female, japanese, anime

HTTP流式传输模式

用户:"以流式传输模式生成关于AI优势的长篇演讲"

Claude:"我将以流式传输模式生成演讲,以便更快响应。"

[使用fish_audio_tts工具并传递streaming: true]

结果:流式传输音频保存至./audio_output/tts_2025-01-03T10-35-00.mp3

WebSocket实时流式传输

用户:"实时流式传输并播放:'Welcome to the future of AI'"

Claude:"我将通过WebSocket流式传输并实时播放这段语音。"

[使用fish_audio_tts工具并传递websocket_streaming: true, realtime_play: true]

结果:通过WebSocket流式传输并实时播放了音频

开发

本地开发

  1. 克隆仓库:
git clone https://github.com/da-okazaki/mcp-fish-audio-server.git
cd mcp-fish-audio-server
  1. 安装依赖项:
npm install
  1. 创建.env文件:
cp .env.example .env
# 编辑.env文件,添加您的API密钥
  1. 构建项目:
npm run build
  1. 在开发模式下运行:
npm run dev

测试

运行测试套件:

npm test

项目结构

mcp-fish-audio-server/
├── src/
│   ├── index.ts          # MCP服务器入口点
│   ├── tools/
│   │   └── tts.ts        # TTS工具实现
│   ├── services/
│   │   └── fishAudio.ts  # Fish Audio API客户端
│   ├── types/
│   │   └── index.ts      # TypeScript定义
│   └── utils/
│       └── config.ts     # 配置管理
├── tests/                # 测试文件
├── audio_output/         # 默认音频输出目录
├── package.json
├── tsconfig.json
└── README.md

API文档

Fish Audio服务

该服务提供了两个主要方法:

  1. generateSpeech:标准TTS生成

    • 返回音频缓冲区
    • 适合短文本
    • 内存占用较低
  2. generateSpeechStream:流式传输TTS生成

    • 返回音频流
    • 适合长文本
    • 实时处理

错误处理

服务器处理各种错误场景:

  • INVALID_API_KEY:无效或缺少API密钥
  • NETWORK_ERROR:与Fish Audio API连接问题
  • INVALID_PARAMS:请求参数无效
  • QUOTA_EXCEEDED:API速率限制超出
  • SERVER_ERROR:Fish Audio服务器错误

故障排除

常见问题

  1. "FISH_API_KEY环境变量是必需的"

    • 确保您已设置了FISH_API_KEY环境变量
    • 检查API密钥是否有效
  2. "网络错误:无法访问Fish Audio API"

    • 检查您的互联网连接
    • 确认Fish Audio API可以访问
    • 检查代理/防火墙问题
  3. "文本长度超过最大限制"

    • 将长文本拆分为更小的部分
    • 最大支持长度为10,000字符
  4. 音频文件未出现

    • 检查AUDIO_OUTPUT_DIR路径是否存在
    • 确认目录具有写权限

贡献

欢迎贡献!请随意提交Pull Request。

  1. 分叉仓库
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交更改(git commit -m 'Add some AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 打开Pull Request

许可证

本项目采用MIT许可证——详情请参阅LICENSE文件。

致谢

  • Fish Audio 提供了优秀的TTS API
  • Anthropic 创建了模型上下文协议
  • MCP社区提供了灵感和示例

支持

对于问题、疑问或贡献,请访问GitHub仓库

更新日志

查看CHANGELOG.md以获取详细的变更列表。