Discord服务器设置MCP
一种MCP(模型上下文协议)服务器,用于使用Discord Bot API自动设置Discord服务器。该服务器使Claude等AI助手能够通过Discord机器人管理服务器、渠道、角色、权限和应用模板。
特性
- 交叉平台的:适用于Windows、Linux和macOS
- 不需要Discord应用程序:通过Discord Bot API操作(无头)
- 帮会管理:发现、选择和管理多个Discord服务器
- 渠道管理:使用权限覆盖创建、编辑和删除频道和类别
- 角色管理:创建、编辑、删除和重新排序具有完全权限控制的角色
- 权限覆盖:将频道/类别设置为私有,授予特定角色访问权限
- 服务器设置:配置验证级别、内容筛选器和通知设置
- 预构建模板:为常见用例应用即用型服务器模板
- 快速可靠:通过正确的错误处理直接调用API
预构建模板
| 模板 | 描述 | 角色 | 类别 | 渠道 |
|---|---|---|---|---|
| 游戏 | 具有竞争、流媒体和活动部分的综合游戏社区 | 10 | 11 | 40+ |
| 社区 | 用于讨论和社交互动的通用社区服务器 | 6 | 6 | 20+ |
| 商业 | 团队和组织的专业工作空间 | 6 | 6 | 18+ |
| 学习小组 | 学习小组和班级的学术合作空间 | 5 | 5 | 15+ |
先决条件
系统要求
- Node.js 18.0.0或更高
- Discord机器人 具有适当的权限
Discord Bot设置
- 在以下位置创建应用程序https://discord.com/developers/applications
- 添加机器人用户并复制机器人令牌
- 启用 所有特权网关意图 在机器人设置中(机器人→ 特权网关意图):
- 出席意向 - 服务器成员意图 - 消息内容意图
- 生成OAuth2邀请URL:
- 转到OAuth2→ URL生成器 - 选择范围: bot 和 applications.commands - 选择 管理员 权限(完全服务器管理所需)
- 使用生成的URL将机器人邀请到您的Discord服务器
重要:机器人需要管理员权限才能无限制地管理所有服务器设置、角色、通道和权限。
安装
快速安装(单层)
curl -fsSL https://raw.githubusercontent.com/cj-vana/discord-setup-mcp/main/install.sh | bash这将安装到 ~/.discord-setup-mcp 默认情况下。集 DISCORD_MCP_DIR 自定义:
DISCORD_MCP_DIR=/custom/path curl -fsSL https://raw.githubusercontent.com/cj-vana/discord-setup-mcp/main/install.sh | bash手动安装
# Clone the repository
git clone https://github.com/cj-vana/discord-setup-mcp.git
cd discord-setup-mcp
# Install dependencies
npm install
# Build the project
npm run build配置
设置Bot令牌
选项A:环境变量
macOS/Linux(临时-仅限当前会话):
export DISCORD_BOT_TOKEN="your-bot-token-here"macOS/Linux(永久-添加到shell配置文件):
# For zsh (default on macOS)
echo 'export DISCORD_BOT_TOKEN="your-bot-token-here"' >> ~/.zshrc
source ~/.zshrc
# For bash
echo 'export DISCORD_BOT_TOKEN="your-bot-token-here"' >> ~/.bashrc
source ~/.bashrcWindows命令提示符(临时):
set DISCORD_BOT_TOKEN=your-bot-token-hereWindows PowerShell(临时):
$env:DISCORD_BOT_TOKEN = "your-bot-token-here"Windows(永久-系统环境变量):
- 按
Win + R,类型sysdm.cpl,按Enter键 - 首选 高级 tab → 环境变量
- 在“用户变量”下,单击 新
- 变量名称:
DISCORD_BOT_TOKEN - 变量值:
your-bot-token-here - 单击“确定”并重新启动终端
选项B:配置文件
创建 ~/.discord-mcp/config.json:
# Create the directory
mkdir -p ~/.discord-mcp
# Create the config file (replace with your actual token)
cat > ~/.discord-mcp/config.json << 'EOF'
{
"discordToken": "your-bot-token-here",
"defaultGuildId": "optional-default-server-id"
}
EOF
# Secure the file (recommended)
chmod 600 ~/.discord-mcp/config.json在Windows上,创建 %USERPROFILE%\.discord-mcp\config.json 具有相同的JSON内容。
Claude桌面配置(推荐)
最简单的方法是直接在Claude Desktop配置中设置令牌:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"discord-setup": {
"command": "node",
"args": ["/path/to/discord-setup-mcp/dist/index.js"],
"env": {
"DISCORD_BOT_TOKEN": "your-bot-token-here"
}
}
}
}替换 /path/to/discord-setup-mcp 使用克隆存储库的实际路径。
Claude代码配置
# Add the MCP server
claude mcp add discord-setup-mcp node /path/to/discord-setup-mcp/dist/index.js
# Set the token (if not using config file or system env var)
claude mcp add discord-setup-mcp node /path/to/discord-setup-mcp/dist/index.js -e DISCORD_BOT_TOKEN=your-bot-token-here在您的环境中设置令牌或使用配置文件方法。
用法
基本工作流程
- 列出服务器 机器人可以访问
- 选择服务器 一起工作
- 创建渠道、角色或应用模板
示例命令
List Discord servers
Select the server named "My Server"
Create a text channel called "general-chat"
Create a role called "Moderator" with MANAGE_MESSAGES permission
Make the "admin-chat" category private, only visible to the Admin role
Apply the gaming template to this server工具参考
帮会管理
list_guilds
列出机器人可以访问的所有服务器。
select_guild
为后续操作设置活动服务器。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
guildId | string | 是 | 要选择的公会ID或名称 |
get_guild_info
获取详细的服务器信息,包括通道、角色和设置。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
guildId | string | 否 | 公会ID或名称(如果未指定,则使用当前名称) |
渠道管理
create_category
创建具有可选权限覆盖的频道类别。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 类别名称(1-100个字符) |
guildId | string | 否 | 帮会ID或名称 |
position | number | No | 频道列表中的位置 |
permissionOverwrites | array | 否 | 角色/用户的权限覆盖 |
create_channel
创建一个频道(文本、语音、公告、舞台、论坛)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 频道名称(1-100个字符) |
type | string | 否 | 通道类型: text, voice, announcement, stage, forum (默认值: text) |
guildId | string | 否 | 帮会ID或名称 |
categoryId | string | 否 | 父类别ID |
topic | string | 否 | 频道主题(文本频道,最多1024个字符) |
nsfw | boolean | 否 | 年龄限制通道(默认值:false) |
slowmode | number | No | 慢模式(秒)(0-21600) |
bitrate | number | No | 语音信道比特率(8000-384000) |
userLimit | number | No | 语音通道用户限制(0-99,0=无限制) |
position | number | No | 频道列表中的位置 |
permissionOverwrites | array | 否 | 角色/用户的权限覆盖 |
edit_channel
修改现有频道的设置和权限。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
channelId | string | 是 | 要编辑的频道ID |
guildId | string | 否 | 帮会ID或名称 |
name | string | 否 | 新频道名称 |
topic | string | 否 | 新频道主题 |
nsfw | boolean | 否 | 年龄限制设置 |
slowmode | number | No | 慢模式(秒) |
bitrate | number | No | 语音通道比特率 |
userLimit | number | No | 语音通道用户限制 |
position | number | 否 | 新职位 |
categoryId | string | 否 | 移动到类别(null删除) |
permissionOverwrites | array | 否 | 替换权限覆盖 |
delete_channel
删除频道(无法撤消)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
channelId | string | 是 | 要删除的频道ID |
guildId | string | 否 | 帮会ID或名称 |
角色管理
create_role
创建具有权限的角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 角色名称(1-100个字符) |
guildId | string | 否 | 帮会ID或名称 |
color | 字符串/数字 | 否 | 十六进制颜色(#FF0000)或整数 |
hoist | boolean | 否 | 在成员列表中单独显示 |
mentionable | boolean | 否 | 允许任何人提及此角色 |
permissions | array | 否 | 权限名称数组 |
position | number | No | 角色层次结构中的位置 |
edit_role
修改现有角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
roleId | string | 是 | 要编辑的角色ID |
guildId | string | 否 | 帮会ID或名称 |
name | string | 否 | 新角色名称 |
color | 字符串/数字 | 否 | 新颜色 |
hoist | boolean | 否 | 单独显示设置 |
mentionable | boolean | 否 | 可提及的设置 |
permissions | array | 否 | 替换所有权限 |
position | number | 否 | 层次结构中的新位置 |
delete_role
删除角色(无法撤消)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
roleId | string | 是 | 要删除的角色ID |
guildId | string | 否 | 帮会ID或名称 |
reorder_roles
重新排序层次结构中的角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
rolePositions | array | 是 | 数组 {roleId, position} 物体 |
guildId | string | 否 | 帮会ID或名称 |
服务器设置
update_server_settings
一次更新多个服务器设置。
set_verification_level
设置成员验证级别(0-4)。
set_content_filter
设置明确的内容过滤器级别。
set_default_notifications
为新成员设置默认通知设置。
模板
list_templates
列出可用的预构建模板。
preview_template
应用前查看模板详细信息。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
templateId | string | 是 | 要预览的模板ID |
apply_template
将模板应用于服务器。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
templateId | string | 是 | 要应用的模板ID |
guildId | string | 否 | 帮会ID或名称 |
权限覆盖
权限覆盖允许您自定义对频道和类别的访问。使用它们来:
- 将频道设为私有(拒绝
@everyoneVIEW_CHANNEL) - 授予特定角色访问权限
- 限制特定用户/角色的某些操作
权限覆盖格式
{
"id": "role-or-user-id",
"type": "role",
"allow": ["VIEW_CHANNEL", "SEND_MESSAGES"],
"deny": ["MANAGE_MESSAGES"]
}| 字段 | 类型 | 描述 |
|---|---|---|
id | string | 角色ID或用户ID |
type | 字符串 | role 或 member |
allow | array | 明确允许的权限 |
deny | array | 明确拒绝的权限 |
示例:将类别设为私有
{
"channelId": "category-id",
"permissionOverwrites": [
{
"id": "everyone-role-id",
"type": "role",
"deny": ["VIEW_CHANNEL"]
},
{
"id": "admin-role-id",
"type": "role",
"allow": ["VIEW_CHANNEL", "SEND_MESSAGES", "MANAGE_MESSAGES"]
}
]
}可用权限
在角色权限和权限覆盖中使用这些权限名称:
常规权限
| 权限 | 描述 |
|---|---|
ADMINISTRATOR | 完全服务器访问权限(绕过所有权限) |
VIEW_CHANNEL | 查看频道和阅读消息 |
MANAGE_CHANNELS | 创建、编辑、删除频道 |
MANAGE_ROLES | 创建、编辑、删除机器人角色下方的角色 |
MANAGE_GUILD | 更改服务器设置 |
VIEW_AUDIT_LOG | 查看服务器审核日志 |
VIEW_GUILD_INSIGHTS | 查看服务器见解 |
MANAGE_WEBHOOKS | 创建、编辑、删除webhooks |
MANAGE_GUILD_EXPRESSIONS | 管理表情符号和贴纸 |
CREATE_INSTANT_INVITE | 创建邀请链接 |
CHANGE_NICKNAME | 更改自己的昵称 |
MANAGE_NICKNAMES | 更改其他成员的昵称 |
KICK_MEMBERS | 从服务器上踢出成员 |
BAN_MEMBERS | 禁止服务器上的成员 |
MODERATE_MEMBERS | 超时成员 |
MANAGE_EVENTS | 创建和管理事件 |
文本频道权限
| 权限 | 描述 |
|---|---|
SEND_MESSAGES | 通过文本频道发送消息 |
SEND_TTS_MESSAGES | 发送文本转语音消息 |
MANAGE_MESSAGES | 删除消息、固定消息 |
EMBED_LINKS | 在消息中嵌入链接 |
ATTACH_FILES | 上传文件 |
READ_MESSAGE_HISTORY | 阅读过去的消息 |
MENTION_EVERYONE | 在此处使用@everyone和@ |
USE_EXTERNAL_EMOJIS | 使用其他服务器上的表情符号 |
USE_EXTERNAL_STICKERS | 使用其他服务器上的贴纸 |
ADD_REACTIONS | 向消息添加反应 |
MANAGE_THREADS | 管理和删除线程 |
CREATE_PUBLIC_THREADS | 创建公共线程 |
CREATE_PRIVATE_THREADS | 创建私有线程 |
SEND_MESSAGES_IN_THREADS | 在线程中发送消息 |
USE_APPLICATION_COMMANDS | 使用斜线命令 |
语音通道权限
| 权限 | 描述 |
|---|---|
CONNECT | 连接到语音频道 |
SPEAK | 在语音通道中发言 |
STREAM | 屏幕共享和视频 |
USE_VAD | 使用语音活动检测 |
PRIORITY_SPEAKER | 被别人听到 |
MUTE_MEMBERS | 将其他成员静音 |
DEAFEN_MEMBERS | 迪芬其他成员 |
MOVE_MEMBERS | 在通道之间移动成员 |
REQUEST_TO_SPEAK | 请求在舞台频道发言 |
USE_EMBEDDED_ACTIVITIES | 使用活动 |
USE_SOUNDBOARD | 使用音板 |
USE_EXTERNAL_SOUNDS | 使用外部声音 |
SEND_VOICE_MESSAGES | 发送语音信息 |
例子
创建完整的团队服务器结构
1. Select my Discord server
2. Create these roles with permissions:
- "Admin" with ADMINISTRATOR
- "Moderator" with MANAGE_MESSAGES, KICK_MEMBERS, MUTE_MEMBERS
- "Member" with VIEW_CHANNEL, SEND_MESSAGES, CONNECT, SPEAK
3. Create these categories, all private to @everyone but visible to Member role:
- "General" with channels: welcome, rules, announcements
- "Discussion" with channels: general-chat, off-topic, help
- "Voice" with voice channels: General Voice, Gaming, AFK
4. Make the "Admin" category only visible to Admin role设置私人频道
Make the "staff-chat" channel private:
- Deny VIEW_CHANNEL to @everyone
- Allow VIEW_CHANNEL, SEND_MESSAGES, MANAGE_MESSAGES to Moderator role
- Allow VIEW_CHANNEL, SEND_MESSAGES, ADMINISTRATOR to Admin role配置角色层次结构
Reorder roles so Admin is highest, then Moderator, then Member, then @everyone故障排除
Bot未连接
- 验证机器人令牌是否正确
- 检查一下 所有特权网关意图 在Discord开发者门户中启用
- 确保创建了机器人用户(而不仅仅是应用程序)
无法管理角色/渠道
- 确保机器人具有 管理员 许可
- 机器人的角色必须高于其管理的角色(在服务器设置中向上拖动机器人角色)
- 验证机器人是否使用正确的OAuth2作用域被邀请(
bot和applications.commands)
权限错误
- 授予机器人 管理员 无限制访问权限
- Bot只能管理层次结构中低于其最高角色的角色
- 在服务器设置中将机器人的角色拖动到更高的位置→ Roles
未找到公会
- 确认机器人已在服务器中
- 尝试使用公会ID而不是名称
- 启用Discord开发人员模式以复制ID(用户设置→ 高级)
调试日志
调试日志将写入 /tmp/discord-mcp-debug.log 用于解决权限和API问题。
安全
- 永远不要分享你的机器人代币 -将其视为密码
- 使用环境变量 -不要将令牌提交到版本控制
- 如果令牌受损,请重新生成令牌 -在Discord开发者门户中重置
- 限制服务器访问 -仅将机器人添加到您信任的服务器
- 限制文件权限 -
chmod 600 ~/.discord-mcp/config.json
建筑
- 运行时:Node.js 18+
- 语言:TypeScript
- 不和谐API:不协调js v14
- MCP-SDK:@modelcontextprotocol/sdk
- 验证:佐德
看 CLAUDE.md 用于开发文档。
贡献
欢迎投稿!请阅读 贡献.md 作为指导方针。
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
