不和行动
具有多公会项目路由的代理级Discord MCP服务器。
 ](https://www.npmjs.com/package/discord-ops) 
特性
- 49个MCP工具 --消息传递、渠道、审核、角色、webhooks、审计日志、线程、行会、邀请、权限、搜索、23个模板、OG嵌入展开、项目自检
- 多公会项目路由 —
send_message({ project: "my-app", channel: "builds" })而不是原始通道ID - 通知路由 --地图通知类型(
ci_build,deploy,error)每个项目的频道 - 所有者ping --配置项目所有者,以便发布、错误和警报自动提及正确的人
- 机器人角色 --具有身份元数据、每个通道的机器人分配和每个机器人工具配置文件的命名机器人
- 多机器人支持 --使用每个项目的令牌从单个MCP服务器管理多个Discord机器人
- 刀具轮廓 --只加载代理需要的工具;使用精简配置文件将架构开销减少85%
- 智能通道分辨率 --通道参数接受通道名称或雪花ID,具有4层模糊回退
- send_message的自动嵌入 --默认情况下,每条消息都会有一个品牌嵌入;
raw: true对于纯文本 - OG元数据展开 —
send_embed在服务器端获取Open Graph元数据并呈现丰富的链接预览 - 灵活的令牌配置 --可配置的默认令牌env-var,所有项目使用每个项目令牌时的可选默认值
- 配置验证 —
discord-ops validate在未连接到Discord的情况下检测到重复的公会、丢失的令牌、无效的通道引用 - HTTP/SSE+stdio传输 --用于Claude Code的stdio,用于远程MCP客户端的HTTP/SSE
- HTTP传输身份验证 --通过承载令牌进行身份验证
DISCORD_OPS_HTTP_TOKEN具有恒定时间比较 - 干运行模式 -在不调用Discord API的情况下模拟破坏性操作
- 交互式设置向导 —
discord-ops setup支持单bot和多bot配置 - 安全强化 --速率限制、飞行前权限检查、雪花ID验证、自我保护警卫
- 延迟登录 --Discord连接前会枚举工具;第一次工具调用触发登录
- Zod验证 --执行前验证所有输入
- 错误清理 --从错误输出中删除令牌、webhook URL和雪花ID
- 审核日志记录 --记录到stderr的每个工具调用
快速开始
# Install
npm install -g discord-ops
# Interactive setup (creates ~/.discord-ops.json)
discord-ops setup
# Or manual setup
export DISCORD_TOKEN="your-bot-token"
discord-ops health
# Start MCP server (stdio)
discord-ops
# Start MCP server (HTTP/SSE)
discord-ops serve --port 3000Claude代码集成
添加到您的项目 .mcp.json.使用 npx 随着 @latest 因此,每个会话都会自动使用最新发布的版本——没有它,npx可能会无限期地提供过时的缓存版本:
{
"mcpServers": {
"discord-ops": {
"command": "npx",
"args": ["-y", "discord-ops@latest"],
"env": {
"DISCORD_TOKEN": "${DISCORD_TOKEN}"
}
}
}
}这 ${VAR} 语法是ClaudeCode的原生env-var插值——它在启动时从shell环境中读取值。将您的机器人令牌导出到 ~/.zshrc (或 .bashrc)它将可用于所有项目,而无需在任何文件中硬编码。
多组织设置(每个项目令牌)
当每个项目都有自己的bot时,传递所有令牌env变量并让 ~/.discord-ops.json 处理哪个项目使用哪个:
{
"mcpServers": {
"discord-ops": {
"command": "npx",
"args": ["-y", "discord-ops@latest"],
"env": {
"ORG_A_DISCORD_TOKEN": "${ORG_A_DISCORD_TOKEN}",
"ORG_B_DISCORD_TOKEN": "${ORG_B_DISCORD_TOKEN}"
}
}
}
}每个项目 ~/.discord-ops.json 声明 "token_env": "ORG_A_DISCORD_TOKEN" 不和谐行动会自动路由。无默认 DISCORD_TOKEN 当所有项目都有 token_env 集。
单一组织简写
如果你的所有项目共享一个机器人,只需传递该令牌:
{
"mcpServers": {
"discord-ops": {
"command": "npx",
"args": ["-y", "discord-ops@latest"],
"env": {
"DISCORD_TOKEN": "${DISCORD_TOKEN}"
}
}
}
}自定义令牌环境变量名称
如果另一个工具已经声明 DISCORD_TOKEN,使用 DISCORD_OPS_TOKEN_ENV 指向另一个名称:
{
"mcpServers": {
"discord-ops": {
"command": "npx",
"args": ["-y", "discord-ops@latest"],
"env": {
"DISCORD_OPS_TOKEN_ENV": "MY_BOT_TOKEN",
"MY_BOT_TOKEN": "${MY_BOT_TOKEN}"
}
}
}
}项目路线
杀手级功能:按项目名称和通道别名而不是原始ID路由消息。
全局配置(~/.discord-ops.json)
{
"projects": {
"my-app": {
"guild_id": "123456789012345678",
"channels": {
"dev": "CHANNEL_ID",
"builds": "CHANNEL_ID",
"alerts": "CHANNEL_ID",
"releases": "CHANNEL_ID"
},
"default_channel": "dev"
}
},
"default_project": "my-app",
"notification_routing": {
"ci_build": "builds",
"deploy": "builds",
"release": "releases",
"error": "alerts",
"dev": "dev"
}
}每个项目的机器人代币
项目可以通过以下方式指定自己的机器人令牌 token_env:
{
"projects": {
"org-a": {
"guild_id": "111111111111111111",
"channels": { "dev": "CHANNEL_ID" },
"default_channel": "dev",
"token_env": "ORG_A_DISCORD_TOKEN"
},
"org-b": {
"guild_id": "222222222222222222",
"channels": { "dev": "CHANNEL_ID" },
"default_channel": "dev",
"token_env": "ORG_B_DISCORD_TOKEN"
}
}
}当所有项目都有 token_env,默认值 DISCORD_TOKEN 是可选的。每个项目都与自己的机器人连接。
机器人角色
为机器人提供名称、角色和每个通道的分配。当您的Discord服务器运行多个具有不同角色的机器人时(例如,社区助手与技术运营机器人),这是理想的。
{
"bots": {
"claire": {
"name": "Claire",
"role": "Community helper",
"description": "Handles support and community channels",
"token_env": "CLAIRE_TOKEN",
"default_profile": "messaging"
},
"courier": {
"name": "Clarity Courier",
"role": "Technical operations",
"token_env": "COURIER_TOKEN",
"default_profile": "full"
}
},
"projects": {
"clarity-house": {
"guild_id": "123456789012345678",
"bot": "courier",
"channels": {
"general": "111111111111111111",
"support": { "id": "222222222222222222", "bot": "claire" },
"dev-ops": "333333333333333333",
"ai-testing": { "id": "444444444444444444", "bot": "claire" }
},
"default_channel": "dev-ops",
"tool_profile": "full"
}
}
}它是如何工作的:
bots--带有身份元数据的命名机器人定义token_envproject.bot--项目的默认bot(除非被覆盖,否则所有渠道都使用此bot)- 频道
bot以(权力)否决 --各个渠道可以使用不同的机器人:{ "id": "...", "bot": "claire" } default_profile--每个机器人工具配置文件(限制机器人在运行时可以使用哪些工具)- 令牌解析 --频道机器人→ 项目机器人→ 项目
token_env→ 默认DISCORD_TOKEN - 路由中的机器人角色 --已解决的目标包括
bot: { name, role }代理上下文的元数据 - 向后兼容的 —
bots是可选的;频道接受两者"ID"和{ "id": "ID", "bot": "name" }格式
使用 list_bots 查看所有已配置的机器人、它们的项目分配、通道覆盖和连接状态。
所有者ping
配置项目所有者,以便自动预置发布、错误和警报 @mentions这确保了在关键事件中始终呼叫正确的人,而不会在每条消息中硬编码提及。
{
"projects": {
"my-app": {
"guild_id": "123456789012345678",
"channels": { "releases": "CHANNEL_ID", "alerts": "CHANNEL_ID" },
"owners": ["820027414902079548"],
"notify_owners_on": ["release", "error", "alert"]
}
}
}notify_owners_on 值: 任何通知类型(release, error, alert, ci_build, deploy等等)
安全: "dev" 被硬编码为无论配置如何都不会触发所有者ping——dev噪声保持安静。
当a send_message 或 send_embed 调用使用匹配 notification_type,所有者提到的内容会自动添加到消息前面。不需要其他更改。
智能通道分辨率
这 channel param在需要通道的任何地方接受通道名称或雪花ID。分辨率分为四层:
- 完全匹配别名 —
"builds"点击builds项目配置中的别名 - 模糊别名匹配 —
"build"或"blds"解析为最接近的别名 - Live Discord API查找 —
"general"即使没有配置别名也能解析 - 错误 --如果以上都没有找到匹配项
这意味着你可以通过 channel: "general" 它甚至适用于不在您配置中的通道。您还可以直接传递原始雪花ID-- channel: "1234567890" 完全绕过别名解析。
根据项目配置(.discord-ops.json 在回购根目录中)
{
"project": "my-app",
"notification_routing": {
"ci_build": "builds",
"deploy": "builds"
}
}用法
# By project + channel alias
send_message({ project: "my-app", channel: "builds", content: "Build passed!" })
# By notification type (auto-routed to channel, owner pinged if configured)
send_message({ project: "my-app", notification_type: "release", content: "v1.0.0 shipped" })
# Direct channel ID (always works)
send_message({ channel_id: "123456789", content: "Hello" })
# Channel by name (live lookup — no alias needed)
send_message({ project: "my-app", channel: "general", content: "Hello" })消息传递
自动嵌入
send_message 自动将消息包装在带有颜色条、描述和时间戳的精美嵌入中。通过 raw: true 改为发送纯文本。
# Branded embed (default)
send_message({ project: "my-app", channel: "dev", content: "Deploy complete" })
# Plain text
send_message({ project: "my-app", channel: "dev", content: "pong", raw: true })send_embed——OG元数据展开
send_embed 从任何URL获取Open Graph服务器端元数据,并呈现丰富的预览嵌入。所有OG字段都可以被覆盖。
send_embed({
url: "https://www.npmjs.com/package/discord-ops/v/0.14.0",
project: "my-app",
channel: "releases",
title: "discord-ops v0.14.0",
description: "Owner pings, smart channel resolution, category editing",
color: 5763719,
footer: "Released April 3, 2026"
})可用于共享GitHub PR、npm发布、博客文章或任何具有丰富预览的URL——机器人会获取元数据,这样Discord的CDN就不会缓存崩溃的客户端展开。
工具
消息传递(12个工具)
| 工具 | 说明 |
|---|---|
send_message | 发送带有项目路由的消息(默认情况下自动嵌入) |
send_embed | 从URL获取OG元数据并发布丰富的嵌入 |
get_messages | 获取最近的消息(支持ISO 8601时间戳) |
edit_message | 编辑机器人消息 |
delete_message | 删除消息 |
add_reaction | 对消息作出反应 |
pin_message | 在通道中固定消息 |
unpin_message | 不愉快的消息 |
search_messages | 按内容、作者或日期范围搜索邮件 |
send_template | 使用内置模板发送样式化嵌入 |
list_templates | 列出具有所需变量的可用模板 |
notify_owners | 基于通知类型的Ping项目所有者 |
频道(9个工具)
| 工具 | 说明 |
|---|---|
list_channels | 列出公会频道 |
get_channel | 获取频道详细信息 |
create_channel | 创建频道 |
edit_channel | 编辑频道名称、主题、类别或位置(文本、语音和类别) |
delete_channel | 删除频道 |
purge_messages | 批量删除邮件(最多100封,\ --args '{…}' Run any tool directly (no AI/MCP required) |
discord-ops setup Interactive setup wizard (single + multi-bot) discord-ops health Run health check + permission audit discord-ops validate Validate config without connecting to Discord discord-ops --profile Load a built-in tool profile (monitoring/readonly/moderation/full) discord-ops --tools Load specific tools by name (comma-separated) discord-ops --dry-run Simulate destructive operations discord-ops --help Show help discord-ops --version Show version
### `run` --调用任何没有AI代理的工具
这 `run` 子命令直接从shell执行任何不协调操作工具——没有MCP客户端,没有AI。通过以下方式将所有工具输入作为单个JSON字符串传递 `--args`.
Send a plain message
npx discord-ops@latest run send_message \ --args '{"project":"my-app","channel":"general","content":"Deployment complete."}'
Send a rich release announcement
npx discord-ops@latest run send_template \ --args '{ "project": "my-app", "channel": "releases", "template": "release", "vars": { "name": "my-app", "version": "v1.2.0", "author_name": "My Org", "highlights": "• New feature A\n• Bug fix B", "npm": "my-app@latest", "npm_url": "https://www.npmjs.com/package/my-app", "link": "https://github.com/my-org/my-app/releases/tag/v1.2.0", "footer": "Published 2026-04-03" } }'
MCP服务器接受的任何工具名称都可以在这里使用-- `send_message`, `send_template`, `send_embed`, `list_channels`等等。相同的输入模式适用;验证错误与字段路径和退出代码1一起打印。
## 环境变量
|变量|必填|描述|
| ------------------------ | -------- | ---------------------------------------------------------------------------------- |
| `DISCORD_TOKEN` |否\*|默认Discord机器人令牌(\*必需,除非所有项目都有 `token_env`) |
| `DISCORD_OPS_TOKEN_ENV` |否|覆盖哪个env var持有默认令牌(默认值: `DISCORD_TOKEN`) |
| `
_TOKEN` |否|每个项目的机器人令牌(通过配置 `token_env` 在项目配置中)|
| `DISCORD_OPS_CONFIG` |否|全局配置文件的路径,或内联JSON字符串(默认值: `~/.discord-ops.json`) |
| `DISCORD_OPS_LOG_LEVEL` |没有| `debug`, `info`, `warn`, `error` (默认值: `info`) |
| `DISCORD_OPS_DRY_RUN` |否|启用干运行模式(任何真实值)|
| `DRY_RUN` |否|启用模拟运行模式(任何真实值,别名)|
| `DISCORD_OPS_HTTP_TOKEN` |否| HTTP传输身份验证的承载令牌(强烈建议)|
### 令牌解析
1. **渠道级机器人** --如果频道有 `bot` 覆盖,使用该机器人 `token_env`
1. **项目级机器人** --如果项目有 `bot`,使用那个机器人 `token_env`
1. **项目级别 `token_env`** --项目自己的令牌env-var
1. **默认令牌** — `DISCORD_TOKEN` (或通过定制 `DISCORD_OPS_TOKEN_ENV`)
如果 `DISCORD_OPS_TOKEN_ENV` 其值命名为持有默认令牌的env-var(例如。, `DISCORD_OPS_TOKEN_ENV=MY_BOT_TOKEN` 读取 `MY_BOT_TOKEN`).如果所有项目都有 `token_env` 或 `bot` 设置后,不需要默认令牌。
## CI/CD集成
使用 `discord-ops run` 在GitHub Actions(或任何CI)中,在发布、部署或构建后发布丰富的Discord通知——不需要人工智能代理。
### CI的配置形状
在CI中,您通常有一个机器人令牌和一个项目。通过以下方式将最小配置作为内联JSON字符串传递 `DISCORD_OPS_CONFIG`。无需写入文件。
**当存储为GitHub机密时,缩小到一行** --多行字符串破解秘密注入。形状(印刷精美,便于阅读):
{ "projects": { "my-app": { "guild_id": "123456789012345678", "channels": { "releases": "987654321098765432", "builds": "111222333444555666" }, "default_channel": "releases" } }, "default_project": "my-app" }
- 不 `token_env` 需要--省略它意味着项目使用 `DISCORD_TOKEN` (默认设置)。
- `owners` 和 `notify_owners_on` 是可选的——如果你想让所有者对错误进行ping,可以包括它们。
- 通道值是Discord雪花ID。频道名称(别名)解析为这些ID。
### GitHub操作示例
在仓库中存储两个秘密:
- `BOOKED_DISCORD_BOT_TOKEN` --您的bot令牌
- `DISCORD_OPS_CONFIG` --配置JSON **缩小为单行** (多行字符串破解GitHub机密)
{"projects":{"my-app":{"guild_id":"123456789012345678","channels":{"releases":"987654321098765432"},"default_channel":"releases"}},"default_project":"my-app"}
- name: Notify Discord
run: | npx discord-ops@latest run send_template --args '{ "project": "my-app", "channel": "releases", "template": "release", "vars": { "name": "my-app", "version": "${{ steps.version.outputs.version }}", "author_name": "My Org", "highlights": "${{ steps.changelog.outputs.highlights }}", "npm": "my-app@latest", "npm_url": "https://www.npmjs.com/package/my-app", "link": "${{ steps.release.outputs.url }}", "footer": "Published ${{ steps.date.outputs.date }}" } }' env: DISCORD_TOKEN: ${{ secrets.BOOKED_DISCORD_BOT_TOKEN }} DISCORD_OPS_CONFIG: ${{ secrets.DISCORD_OPS_CONFIG }}
`DISCORD_TOKEN` 是默认的令牌变量,不需要额外的配置。您的秘密中的机器人令牌将直接使用。
## HTTP传输安全
跑步时 `discord-ops serve`,默认情况下,HTTP端点未经身份验证,并发出响亮的启动警告。集 `DISCORD_OPS_HTTP_TOKEN` 要要求承载身份验证,请执行以下操作:
DISCORD_OPS_HTTP_TOKEN=your-secret-token discord-ops serve --port 3000
所有请求必须包括:
Authorization: Bearer your-secret-token
健康终点(`GET /health`)始终免于身份验证——负载均衡器和Docker健康检查可以在没有令牌的情况下访问它。
令牌比较使用恒定时间比较来防止定时攻击。
## 干运行模式
启用干式运行以模拟破坏性操作(删除、禁止、踢等),而无需实际调用Discord API:
Via CLI flag
discord-ops --dry-run
Via environment variable
DISCORD_OPS_DRY_RUN=1 discord-ops
Via env alias
DRY_RUN=true discord-ops
在干运行模式下,破坏性工具会返回一个模拟的成功响应,显示会发生什么。
## 消息模板
23个内置模板,具有尖端的Discord功能。使用 `send_template` 项目路线。
**所有模板的功能:**
- **作者品牌** --每个模板都有一个可配置的 `author_name` + `author_icon` 在顶端
- **链接按钮** --嵌入下面的可点击按钮(查看日志、打开PR、Runbook等)
- **不一致时间戳** --日期通过实时倒计时自动转换为每个用户的时区
- **本地民意调查** --带有进度条和投票跟踪的真实Discord民意调查
- **多嵌入式仪表板** --服务状态板每条消息最多可嵌入10个
- **页脚图标** --页脚文本旁边的状态指示器图标(绿色/红色)
- **可点击的标题** --嵌入标题直接链接到URL
- **语法突出显示的代码** --带有特定语言高亮显示的代码示例
- **进度条** --可视化Unicode块进度指示器
### DevOps模板(11)
|模板|说明|主要功能|
| ------------------- | ---------------------------------------------- | -------------------------------------------- |
| `release` |带有安装+链接按钮的版本发布|作者、链接按钮、可点击标题|
| `deploy` |使用日志按钮部署成功/失败|页脚图标、视图/日志按钮|
| `ci_build` |CI结果,带构建链接按钮|页脚图标,可点击标题|
| `incident` |带有严重性颜色的事件警报|不一致时间戳、状态页面按钮|
| `incident_resolved` |使用验尸按钮解决问题|时间戳不一致,验尸链接|
| `maintenance` |实时时区倒计时维护|不一致时间戳、倒计时、状态按钮|
| `status_update` |服务状态(运行/降级/停机)|页脚图标、仪表板按钮|
| `review` |带有差异统计和PR按钮的PR审核|可点击的标题、添加/删除|
| `dashboard` |多嵌入服务状态板(最多9 svc)|多嵌入,每种服务颜色卡|
| `oncall` |带轮班时间戳的随叫随到切换| Discord时间戳,runbook按钮|
| `alert` |可配置的警报(信息/警告/错误/严重)|基于级别的颜色、度量阈值|
### 团队和社区模板(12)
|模板|说明|主要功能|
| -------------- | --------------------------------------- | --------------------------------------------- |
| `celebration` |用图片庆祝胜利|作者、缩略图、图片|
| `welcome` |使用入职按钮欢迎会员|不一致时间戳、手册/入职链接|
| `shoutout` |使用头像缩略图识别作品|缩略图、提名归因|
| `quote` |阻止引用励志文本|阻止引用格式,作者头像|
| `announcement` |带有截止日期倒计时的公告|不一致时间戳、倒计时、链接按钮|
| `changelog` |变更日志有7个部分类型|弃用、性能、安全部分|
| `milestone` |目标日期倒计时里程碑|不一致时间戳,进度跟踪|
| `tip` |带有语法高亮代码的专业提示|特定语言的代码块,doc按钮|
| `poll` |带有投票跟踪的Native Discord民意测验| Native poll API,多选,持续时间|
| `progress` |带有截止日期的视觉进度条|Unicode进度条,倒计时|
| `standup` |每日站立总结|昨天/今天/阻断器部分|
| `retro` |Sprint回顾|进展顺利/改进/行动、速度|
### 例子
**发布公告:**
send_template({ template: "release", vars: { version: "v0.14.0", name: "discord-ops", highlights: "• Owner pings\n• Smart channel resolution\n• Category channel editing", npm: "npm install discord-ops@0.14.0", npm_url: "https://www.npmjs.com/package/discord-ops/v/0.14.0", link: "https://github.com/bookedsolidtech/discord-ops/pull/20", footer: "Released April 3, 2026", author_name: "Booked Solid Technology" }, project: "my-app", channel: "releases" })
**本地Discord民意调查:**
send_template({ template: "poll", vars: { question: "Best language for MCP servers?", options: "TypeScript|Rust|Go|Python", duration: "48", multiselect: "true" }, project: "my-app", channel: "dev" })
**多嵌入式状态仪表板:**
send_template({ template: "dashboard", vars: { services: "API|Database|CDN|Auth|Queue", statuses: "operational|operational|degraded|operational|outage", title: "Production Status", url: "https://status.example.com" }, project: "my-app", channel: "alerts" })
**随叫随到切换:**
send_template({ template: "oncall", vars: { outgoing: "alice", incoming: "bob", shift_start: "2026-04-04T09:00:00Z", notes: "Payment service latency elevated — watch grafana/d/payments", active_incidents: "INC-342: elevated error rate on /checkout", runbook_url: "https://wiki.example.com/oncall", mention: "" }, project: "my-app", channel: "team-chat" })
所有模板都支持项目路由(`project`, `channel`, `notification_type`, `channel_id`)以及作者品牌(`author_name`, `author_icon`).
## 高级配置参考
满的 `~/.discord-ops.json` 具有所有选项的架构:
{ "bots": { "my-bot": { "name": "My Bot", "role": "General purpose", "description": "Handles all operations", "token_env": "MY_BOT_TOKEN", "default_profile": "full" } }, "projects": { "my-app": { "guild_id": "123456789012345678", "token_env": "MY_APP_DISCORD_TOKEN", "bot": "my-bot", "channels": { "dev": "CHANNEL_ID", "builds": "CHANNEL_ID", "releases": "CHANNEL_ID", "alerts": "CHANNEL_ID", "support": { "id": "CHANNEL_ID", "bot": "my-bot" } }, "default_channel": "dev", "owners": ["USER_SNOWFLAKE_ID"], "notify_owners_on": ["release", "error", "alert"], "tool_profile": "full", "profile_add": [], "profile_remove": [], "notification_routing": { "ci_build": "builds", "deploy": "builds", "release": "releases", "error": "alerts" } } }, "default_project": "my-app", "notification_routing": { "ci_build": "builds", "deploy": "builds", "release": "releases", "error": "alerts", "dev": "dev" } }
**全局字段:**
|字段|描述|
| ---------------------- | ------------------------------------------------------------------------------------- |
| `bots` |命名机器人角色 `name`, `role`, `description`, `token_env`, `default_profile` |
| `default_project` |未使用时使用的项目 `project` 提供了参数|
| `notification_routing` |全局通知类型→ 通道别名路由|
**项目领域:**
|字段|描述|
| ---------------------- | ------------------------------------------------------------------------------------- |
| `guild_id` |Discord服务器(公会)雪花ID|
| `token_env` |此项目bot令牌的Env-var名称|
| `bot` |此项目的默认机器人角色(引用 `bots`) |
| `channels` |别名→ 通道ID或 `{ id, bot }` 地图; `channel: "builds"` 先在这里解决|
| `default_channel` |未使用时使用的频道 `channel` 提供了参数|
| `owners` |在匹配通知类型时要提及的用户雪花ID|
| `notify_owners_on` |触发所有者ping的通知类型(`"dev"` 从不ping)|
| `tool_profile` |此项目的基础工具配置文件(`full`, `monitoring`等等)——在运行时强制执行|
| `profile_add` |在基础轮廓顶部加载其他工具|
| `profile_remove` |从基础配置文件中排除的工具|
| `notification_routing` |按项目覆盖全局通知→ 信道路由|
每个项目的配置文件在运行时强制执行——所有工具都在MCP服务器上注册,但当解析的项目或机器人设置了配置文件时,工具调用会被过滤。这意味着代理可以通过MCP模式发现所有工具,但每个项目的限制都适用于每次调用。
## 多组织故障排除
### 正在验证您的配置
跑 `discord-ops validate` 在不连接到Discord的情况下检查您的配置。它检测到:
- 缺失 `token_env` 值(未设置环境变量)
- Bot引用(`project.bot`,频道 `bot`)指向未定义的机器人
- 无效 `default_profile` 或 `tool_profile` 价值观
- 丢失的机器人 `token_env` 环境变量
- 使用不同代币的项目之间存在重复的公会ID
- `default_channel` 引用一个不存在的别名
- `default_project` 指向一个不存在的项目
- 通知路由到不存在的通道别名
### 常见问题
**“项目X没有可用令牌”**
该项目需要一个令牌。要么:
- 设置其 `token_env` env变量(例如。, `export ORG_A_TOKEN=...`)
- 通过设置默认令牌 `DISCORD_TOKEN`
- 使用 `DISCORD_OPS_TOKEN_ENV` 指向自定义环境变量
**机器人无法访问公会**
如果项目使用 `token_env` 对于另一个机器人,必须邀请该机器人加入项目的公会。跑 `discord-ops health` 查看每个机器人可以访问哪些公会。
**从单机器人迁移到多机器人**
1. 添加 `token_env` 需要自己的机器人的项目
1. 设置相应的环境变量
1. 跑 `discord-ops validate` 验证
1. 跑 `discord-ops health` 测试连接
**代币轮换**
更新env-var值并重新启动MCP服务器。无需更改配置-- `token_env` 在运行时从环境中读取。
**未找到频道**
通道解析按顺序尝试4层:精确别名→ 模糊别名→ 实时Discord名称查找→ 错误。如果仍然找不到频道,请验证机器人是否可以访问该频道,并 `list_channels` 返回它。
## 发展
git clone https://github.com/bookedsolidtech/discord-ops.git cd discord-ops npm install npm run build npm test
Local CI
./scripts/act-ci.sh --local
## 许可证
麻省理工学院