使用说明
Discord Bot MCP
一种模型上下文协议(MCP)服务器,提供Discord机器人功能,包括语音转录(使用Google Gemini)和文本转语音(使用ElevenLabs)。
特性
- 🤖 通过MCP实现完整的Discord机器人功能
- 🎤 使用Google Gemini进行语音通道转录
- 🔊 使用ElevenLabs在语音通道中实现文本转语音
- 💬 短信频道消息
- 📝 成绩单记录
- 🔄 实时语音活动检测
先决条件
-
Discord机器人
- 在上创建机器人 Discord开发者门户
- 启用以下意图:
- GUILD_消息
- 消息内容
- GUILD_VOICE_STATES
- 获取您的机器人令牌和客户端ID
-
Google Gemini API
- 从获取API密钥 谷歌人工智能工作室
-
ElevenLabs API
- 从获取API密钥 ElevenLabs
- 记下您的首选语音ID
安装
npm install
配置
-
复制
.env.example向.env:cp .env.example .env -
填写您的凭据:
# Discord Bot Configuration DISCORD_BOT_TOKEN=your_discord_bot_token_here DISCORD_CLIENT_ID=your_discord_client_id_here # Google Gemini API Configuration GEMINI_API_KEY=your_gemini_api_key_here GEMINI_MODEL=gemini-1.5-flash-002 # ElevenLabs Configuration ELEVENLABS_API_KEY=your_elevenlabs_api_key_here ELEVENLABS_VOICE_ID=Au8OOcCmvsCaQpmULvvQ
用法
发展模式
npm run dev
生产模式
npm run build
npm start
SSE模式(用于HTTP传输)
npm run dev:sse # Development
npm run start:sse # Production
MCP工具
机器人管理
bot_connect-连接Discord机器人bot_disconnect-断开Discord机器人的连接bot_status-获取机器人状态和连接信息
语音通道
join_voice_channel-加入语音频道leave_voice_channel-离开当前语音频道speak_in_voice-使用TTS在语音通道中讲话start_transcription-开始转录语音stop_transcription-停止转录语音
文本频道
send_message-向文本频道发送消息
帮会管理
list_guilds-列出机器人所在的所有公会list_channels-列出公会中的所有频道
语音转录
机器人使用:
- 语音活动检测(VAD) 检测用户何时讲话
- 谷歌双子座 用于精确的语音到文本转录
- 自动静音检测 分割语音
成绩单保存到 ./transcripts JSON格式的目录。
文本转语音
机器人可以通过以下方式在语音通道中说话:
- ElevenLabs API 用于听起来自然的语音
- 可配置的语音选择
- 流媒体音频播放
建筑
discord-bot-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── config.ts # Configuration management
│ ├── services/
│ │ ├── discord-bot.ts # Discord bot service
│ │ ├── transcription.ts # Voice transcription service
│ │ └── elevenlabs.ts # TTS service
│ └── utils/
│ ├── logger.ts # Logging utility
│ └── transcript-logger.ts # Transcript file management
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
DISCORD_BOT_TOKEN |
Discord机器人令牌 | 必填 |
DISCORD_CLIENT_ID |
应用程序客户端ID不一致 | 必填 |
GEMINI_API_KEY |
Google Gemini API密钥 | 必需 |
ELEVENLABS_API_KEY |
ElevenLabs API密钥 | 必需 |
ELEVENLABS_VOICE_ID |
TTS的语音ID | Au8OOcCmvsCaQpmULvvQ |
GEMINI_MODEL |
使用Gemini模型 | gemini-1.5-flash-002 |
LOG_LEVEL |
日志记录级别 | info |
ENABLE_TRANSCRIPT_LOGGING |
将成绩单保存到文件 | true |
TRANSCRIPT_DIR |
成绩单目录 | ./transcripts |
测试
卷曲快速测试(无状态)
# Start the server
pnpm dev:sse
# Test with curl (no session needed)
curl -X POST http://localhost:3003/message \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "bot_status",
"arguments": {}
},
"id": 1
}'
# List available tools
curl -X POST http://localhost:3003/message \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}'
# Check server status
curl http://localhost:3003/status
会话状态操作
对于有状态的操作(如设置当前服务器/通道),创建一个会话:
# Create a session
SESSION_ID=$(curl -s http://localhost:3003/session | python3 -c "import sys, json; print(json.load(sys.stdin)['sessionId'])")
# Use the session for stateful operations
curl -X POST "http://localhost:3003/message?sessionId=$SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "view_server",
"arguments": {"server_name": "RustyButter"}
},
"id": 1
}'
# Now list channels will show channels from the current server
curl -X POST "http://localhost:3003/message?sessionId=$SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_channels",
"arguments": {}
},
"id": 2
}'
会话在服务器端保持30分钟的不活动状态。
许可证
麻省理工学院