Discord语音MCP服务器
一个用Go语言编写的纯MCP(模型上下文协议)服务器,用于Discord语音频道的转录。您可以通过Claude Desktop或其他MCP客户端完全控制您的Discord机器人,无需使用Discord命令。
📊 规格/参数
| 组件 | 详细信息 |
|---|---|
| Docker 镜像 | 约12兆字节 (最小的)/ 约50兆字节 (使用ffmpeg)/ 约500兆字节 (GPU低语) |
| 二进制文件大小 | 约15 MB |
| 内存使用量 | 约10-20 MB(基础)/ 约200-500 MB(启用Whisper时) |
| 语言 | Go 1.25 |
| MCP SDK | v0.2.0(官方Go SDK) |
| GPU 支持 | CUDA、ROCm、Vulkan(自动检测) |
🚀 快速入门
先决条件
- 创建一个Discord机器人 在 https://discord.com/developers/applications 上
- 获取你的Discord用户ID (在Discord设置中启用开发者模式 → 右键点击你的用户名 → 复制用户ID)
- 邀请机器人加入您的服务器 具有以下权限:
所需Discord机器人权限
| 权限 | 为何需要 |
|---|---|
| 查看频道 | 查看可用语音频道 |
| 连接 | 加入语音频道 |
| 说话 | 在语音频道中传输音频 |
| 使用语音活动检测 | 检测用户说话时的时刻 |
最小权限整数: 3145728 (用于OAuth2 URL生成器)
Discord 机器人设置
- 首选 Discord 开发者门户
- 创建一个新的应用程序和机器人
- 复制机器人令牌
- 生成邀请链接:
- 前往 OAuth2 → URL 生成器 - 选择范围: bot - 选择权限: View Channels, Connect, Speak, Use Voice Activity - 或者使用这个模板URL(替换 YOUR_CLIENT_ID):
https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=3145728&scope=bot使用 Docker 运行(推荐)
# Run the MCP server with your user ID
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
ghcr.io/fankserver/discord-voice-mcp:latest
# Basic usage
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
ghcr.io/fankserver/discord-voice-mcp:latest配置Claude桌面版
添加到您的Claude桌面配置中(~/Library/Application Support/Claude/claude_desktop_config.json (在 macOS 上):
{
"mcpServers": {
"discord-voice": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "DISCORD_TOKEN=your-bot-token",
"-e", "DISCORD_USER_ID=your-discord-user-id",
"ghcr.io/fankserver/discord-voice-mcp:latest"
]
}
}
}为任何平台进行交叉编译
# Windows
GOOS=windows GOARCH=amd64 go build -o discord-voice-mcp.exe
# macOS
GOOS=darwin GOARCH=amd64 go build -o discord-voice-mcp-mac
# Linux ARM (Raspberry Pi)
GOOS=linux GOARCH=arm64 go build -o discord-voice-mcp-arm📦 架构
这是一个仅通过MCP(Minecraft协议桥接器)连接到Discord的纯MCP服务器。所有控制都通过MCP工具进行——不使用Discord命令。
cmd/discord-voice-mcp/
└── main.go - Entry point, MCP server startup
internal/
├── mcp/
│ └── server.go - MCP tool implementations
├── bot/
│ └── bot.go - Discord voice connection handler
├── audio/
│ └── processor.go - Audio capture & processing
└── session/
└── manager.go - Transcript session management
pkg/
└── transcriber/
└── transcriber.go - Transcription provider interface关键设计原则
- MCP-First(麦普-首选/首要)所有控制均通过MCP工具进行,不使用Discord文本命令
- 以用户为中心工具通过 DISCORD_USER_ID 与“您的频道”进行交互
- 自动关注机器人可以在频道之间自动关注你
- 无状态命令每个MCP工具调用都是独立的
- 基于会话的按语音会话整理的转录文本
🔧 技术特性
- GPU加速自动检测NVIDIA/AMD/Intel显卡,实现5-10倍更快的转录速度
- 通用图像单一Docker镜像可在任何硬件(GPU或CPU)上运行
- 轻便的最小12MB的Docker镜像,安装ffmpeg后为50MB,完全支持GPU后为500MB
- 快速启动亚秒级初始化
- 跨平台为Windows、macOS、Linux、ARM编译
- 并发的Go语言的goroutine高效处理多个音频流
- 干净关闭通过上下文取消进行适当的资源清理
- 结构化日志记录可配置的日志级别用于调试
🛠️ 开发
先决条件
- Go 1.25及以上版本
- FFmpeg(用于使用常规Docker镜像进行音频处理)
- Discord 机器人令牌
- (可选)用于实时转录的Whisper.cpp和模型文件
构建与测试
# Get dependencies
go mod download
# Run tests
go test ./...
# Build with optimizations
go build -ldflags="-w -s" -o discord-voice-mcp
# Check binary size
ls -lh discord-voice-mcp
# -rwxr-xr-x 1 user staff 15M discord-voice-mcp环境变量
| 变量 | 必填 | 描述 | 示例 | |----------|----------|-------------|---------|\ | 中文翻译 | 中文翻译 | 中文翻译 | 中文翻译 | DISCORD_TOKEN | MTIz... | ✅ | 来自Discord开发者门户的机器人令牌 | | DISCORD_USER_ID | 123456789012345678 | ✅ | 您用于“我的频道”命令的Discord用户ID | | LOG_LEVEL | info| ❌ | 日志详细程度(默认: debug)| info, warn, error , | TRANSCRIBER_TYPE | mock| ❌ | 转录服务提供商(默认: mock) | whisper, google , | WHISPER_MODEL_PATH | whisper| ⚠️ | Whisper模型的路径(如果使用则为必填项) /models/ggml-base.en.bin ) | | AUDIO_BUFFER_DURATION_SEC | 2| ❌ | 缓冲持续时间触发(默认: 1) | 2, 5 , | AUDIO_SILENCE_TIMEOUT_MS | 1500| ❌ | 沉默检测超时(默认: 500)| 1500, 3000 , | AUDIO_MIN_BUFFER_MS | 100| ❌ | 转录前的最小音频时长(默认: 50)| 100, 200 , | WHISPER_USE_GPU | true| ❌ | 启用GPU加速(默认: true) | false , | CUDA_VISIBLE_DEVICES | 0| ❌ | 选择NVIDIA GPU(默认: 0)| 1, all , | HIP_VISIBLE_DEVICES | 0| ❌ | 选择AMD GPU(默认: 0) | 1 ,
|
🔌 MCP 工具
可用命令 | 工具 | 描述 | 参数 | |------|-------------|------------| join_my_voice_channel | 标题1 | 标题2 | 标题3 | | follow_me | 加入您所在的语音频道 | 无 | enabled| | 在语音频道间自动关注你 | join_specific_channel 布尔值 | guildId| channelId | 通过ID加入特定频道 | , leave_voice_channel | | get_bot_status | 离开当前语音频道 | 无 | | list_sessions | 获取机器人连接状态 | 无 | | get_transcript | 列出所有转录会话 | 无 | sessionId | | 获取会议记录 | export_session | sessionId |
| 将会话导出为JSON格式 |
# Join your current voice channel
"Use the join_my_voice_channel tool"
# Enable auto-follow so bot follows you
"Enable follow_me to track my movements"
# Check bot status
"What's the bot status?"
# Get transcripts
"List all sessions and show me the latest transcript"|
在Claude桌面版中的示例用法
🎤 录音转录设置
模拟转录(默认)
服务器默认运行模拟转录功能,这表示音频正在被捕捉,但并不会转录实际内容。ghcr.io/fankserver/discord-voice-mcp:whisper利用GPU加速的低语转录 The Whisper Docker镜像( ) 包括
内置GPU加速
- 支持NVIDIA(CUDA)、AMD(ROCm)以及Intel/其他GPU(Vulkan)。该图像会自动检测并使用可用的硬件加速功能,如果没有可用的GPU,则会回退到使用CPU。支持加速
- NVIDIA GPU(图形处理器)CUDA加速(速度提升5-10倍)
- AMD 显卡(或:AMD GPU)ROCm加速(速度提升5-10倍)
- 英特尔/其他GPU(图形处理器)Vulkan 加速(速度提升 3-5 倍)
CPU降级(或回退)
# For multilingual support (recommended for non-English):
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin -O models/ggml-base.bin
# For German language specifically, use the multilingual models:
# - ggml-base.bin (142 MB) - good balance, supports 99 languages
# - ggml-small.bin (466 MB) - better accuracy for German
# - ggml-medium.bin (1.5 GB) - high accuracy
# - ggml-large-v3.bin (3.1 GB) - best accuracy
# For English-only (faster but no German support):
# - ggml-base.en.bin (142 MB) - English only
# - ggml-tiny.en.bin (39 MB) - fastest, English onlyOpenBLAS加速(比基线快2-3倍)
下载一个Whisper模型
docker run -i --rm --gpus all \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-base.bin" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisper使用GPU加速运行
docker run -i --rm \
--device=/dev/kfd --device=/dev/dri --group-add video \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-base.bin" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisperNVIDIA GPU:
docker run -i --rm --device=/dev/dri \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-base.bin" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisperAMD GPU:
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-base.bin" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisperIntel/其他GPU(通过Vulkan):
仅CPU(带OpenBLAS加速):
Google 语音转文本(云端)
Google语音转文字转录器是一个占位符实现,会返回“在概念验证(PoC)中未实现Google转录功能”。完整实现需要集成Google Cloud凭据。
🚀 GPU加速性能 The Whisper Docker 镜像包含自动 GPU 检测和加速功能: | 硬件 | 实时性因素 | 10秒音频处理时间 | 速度提升 | |----------|-----------------|--------------------------|---------| | CPU(无加速) | 0.5倍速 | 约5秒 | 基线 | | CPU(OpenBLAS) | 0.2倍速 | 约2秒 | 2-3倍速 | | 英特尔GPU(Vulkan) | 0.1倍速 | 约1秒 | 5倍速 | | AMD GPU(ROCm) | 0.05倍速 | 约0.5秒 | 10倍速 | |
*NVIDIA GPU(CUDA)*
| 0.05倍速 | 约0.5秒 | 10倍速 |
# Build universal GPU support (Vulkan - works on ALL GPUs)
docker build -f Dockerfile.whisper -t discord-voice-mcp:whisper .
# Build NVIDIA-optimized version (CUDA - maximum performance)
docker build -f Dockerfile.whisper-cuda -t discord-voice-mcp:whisper-cuda .
# Build standard version (no GPU acceleration)
docker build -f Dockerfile -t discord-voice-mcp:latest .实时因子越低越好。0.1x表示比实时快10倍。
使用自定义GPU支持进行构建
🎯 提高转录准确性 关键:音频缓冲区配置
转录不佳最常见的原因音频是否被分割成了过小的片段,从而导致上下文信息丢失。例如,“und meinen zwei Bären”(和我的两只熊)可能会被分割成“und meinen zwei”和“Bären”,导致Whisper在没有上下文的情况下将“Bären”误解为“wären”(将是)。
-e AUDIO_BUFFER_DURATION_SEC="5" # Default is 2, use 5-10 for better context
-e AUDIO_SILENCE_TIMEOUT_MS="2000" # Default is 1500, increase for natural pauses解决方案
增加缓冲时长以捕获完整句子:
- 对于德语及其他非英语语言 如果你在使用德语或其他非英语语言(例如,“Bär”被转录为“Bild”)时遇到转录准确率低的问题,请遵循以下建议:
.en使用多语言模型
# Download a multilingual model (small recommended for German)
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin -O models/ggml-small.bin- (不是(变体):
-e WHISPER_LANGUAGE="de" # For German- 明确设置语言:
-e WHISPER_BEAM_SIZE="5" # Default is 1 for speed, 5 for accuracy- 使用更大的光束尺寸以提高精度:
docker run -i --rm --gpus all \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-small.bin" \
-e WHISPER_LANGUAGE="de" \
-e WHISPER_BEAM_SIZE="5" \
-e AUDIO_BUFFER_DURATION_SEC="5" \
-e AUDIO_SILENCE_TIMEOUT_MS="2000" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisper-cuda德语转录的完整示例:
重要的
较长的缓冲时间(5秒)使Whisper能够在完整句子之间保持上下文连贯性,从而显著提高了像德语这样对词序和上下文至关重要的语言的准确性。 模型选择指南 | 用例 | 模型 | 尺寸 | 语言 | 准确率 | |----------|-------|------|-----------|----------| | 德语/多语言 | ggml-small.bin | 466 MB | 99 | 良好 | | 德语/多语言(最佳) | ggml-medium.bin | 1.5 GB | 99 | 高 | | 仅限英语 | ggml-base.en.bin | 142 MB | 1 | 良好 | | 快速测试 | ggml-tiny.bin | 39 MB | 99 | 低 | |
德国制作
| ggml-large-v3.bin | 3.1 GB | 99 | 最佳 |
⚙️ 音频处理配置 可以使用环境变量来定制音频处理行为: | 变量 | 默认值 | 描述 | AUDIO_BUFFER_DURATION_SEC |----------|---------|-------------| 2 | | AUDIO_SILENCE_TIMEOUT_MS | 触发转录前的缓冲持续时间(秒) | 1500 | | AUDIO_MIN_BUFFER_MS 触发转录的静默时长(毫秒) 100 | | WHISPER_LANGUAGE | 转录前的最小音频时长(毫秒) | auto | | WHISPER_THREADS | Whisper 转录的语言代码(例如,“en”、“de”、“es”、“auto”) | | WHISPER_BEAM_SIZE | CPU核心数 | Whisper处理的线程数(默认为runtime.NumCPU()) | 1 |
|
| Whisper 的光束大小(1 = 最快,5 = 最准确)|
# Trigger after 1 second buffer or 500ms silence
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e AUDIO_BUFFER_DURATION_SEC="1" \
-e AUDIO_SILENCE_TIMEOUT_MS="500" \
-e AUDIO_MIN_BUFFER_MS="50" \
ghcr.io/fankserver/discord-voice-mcp:latest示例
# Allow 3 second pauses, 5 second buffer
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e AUDIO_BUFFER_DURATION_SEC="5" \
-e AUDIO_SILENCE_TIMEOUT_MS="3000" \
-e AUDIO_MIN_BUFFER_MS="200" \
ghcr.io/fankserver/discord-voice-mcp:latest快速转录,短暂停顿:
# Auto-detect and preserve original language
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e WHISPER_LANGUAGE="auto" \
ghcr.io/fankserver/discord-voice-mcp:latest更长的录音,包含自然停顿:
# Force German transcription with optimized settings
docker run -i --rm --gpus all \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e TRANSCRIBER_TYPE="whisper" \
-e WHISPER_MODEL_PATH="/models/ggml-small.bin" \
-e WHISPER_LANGUAGE="de" \
-e WHISPER_BEAM_SIZE="5" \
-e AUDIO_BUFFER_DURATION_SEC="5" \
-e AUDIO_SILENCE_TIMEOUT_MS="2000" \
-v $(pwd)/models:/models:ro \
ghcr.io/fankserver/discord-voice-mcp:whisper-cuda
# Other language codes: en (English), es (Spanish), fr (French), it (Italian), etc.多语言转录(保留原始语言):
# Use more threads and smaller beam size for speed
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e WHISPER_THREADS="8" \
-e WHISPER_BEAM_SIZE="1" \
-e AUDIO_SILENCE_TIMEOUT_MS="1000" \
ghcr.io/fankserver/discord-voice-mcp:whisper强制使用特定语言(建议使用以提高准确性):
# Use default threads but larger beam size
docker run -i --rm \
-e DISCORD_TOKEN="your-bot-token" \
-e DISCORD_USER_ID="your-discord-user-id" \
-e WHISPER_THREADS="4" \
-e WHISPER_BEAM_SIZE="5" \
ghcr.io/fankserver/discord-voice-mcp:whisper优化以加快转录速度(减少延迟):
优化以提高准确性(速度较慢但质量更好):
- 🎯 应用场景 个人助理
- 会议记录 - 录制Discord语音会议
- 学习小组 - 记录学习小组讨论内容
- 游戏时段/游戏会话 - 记录战略讨论内容
播客录音
- - 转录Discord播客 技术优势
- 资源效率 - 在树莓派或小型VPS上运行
- 快速部署 - 12-50MB的图片可即时部署
- 成本效益 - 容器占用空间小(12-50MB的镜像)
- 跨平台 - 适用于任何操作系统的单一二进制文件
克劳德集成(或“克劳德整合”)
- 原生MCP支持
- ✅ 特点 已实施/已执行 ✅
- 纯MCP控制 - 无需Discord文字指令 ✅
- 以用户为中心的工具 - “加入我的频道”功能 ✅
- 自动关注模式 - 机器人自动跟随你 ✅
- GPU加速 - 支持CUDA、ROCm、Vulkan,具备自动检测功能 ✅
- 最小化Docker镜像 - 最小12MB,使用ffmpeg时为50MB,使用GPU时为500MB ✅
- 语音连接 - 稳定的Discord语音处理 ✅
- 会话管理 - 组织有序的转录本存储 ✅
- 音频处理流水线 - 实时PCM处理 ✅
- MCP SDK 集成 - 使用官方Go SDK v0.2.0 ✅
耳语转录
- \- 使用whisper.cpp + GPU加速实现完整功能 进行中 🚧(施工中/道路封闭等标志,具体含义需根据上下文确定,此处仅为示意性翻译)
- 谷歌语音集成 - 目前为占位符实现 🚧(施工中/维修中)
- 实时更新 - 实时字幕流 🚧(施工中/道路封闭/小心地滑等警示标志)
多用户支持
- 跟踪多个说话者
- 🔮 路线图
- 第一阶段:转录(当前)
- \[x\] 集成 whisper.cpp 以实现离线转录(已完成)
\[ \] 添加 Google Cloud Speech-to-Text(已存在存根)
- \[ \] 实现实时流式字幕
- 第二阶段:增强功能
- \[ \] 演讲者日志化(谁说了什么)
- \[ \] 情感分析
\[ \] 关键词检测与提醒
- \[ \] 多语言支持
- 第三阶段:扩展
- \[ \] Kubernetes 部署清单
- \[ \] 支持多个公会
\[ \] Webhook 集成
\[ \] 转录搜索API
- 🤝 贡献(或“参与贡献”)
- 欢迎投稿!感兴趣的主题领域包括:
- 转录服务提供者的实现(Whisper、Google Speech)
- 额外的MCP工具和功能
性能优化
go test ./...文档改进
请在提交拉取请求(PRs)之前确保所有测试都通过:
