discord-ops 0.21.2 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -129
- package/README.md +119 -33
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +36 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/validate-flags.d.ts.map +1 -1
- package/dist/cli/validate-flags.js +5 -0
- package/dist/cli/validate-flags.js.map +1 -1
- package/dist/cli/validate.d.ts +6 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +78 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -5
- package/dist/client.js.map +1 -1
- package/dist/config/index.d.ts +23 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +84 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/profiles.d.ts +7 -0
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js +23 -1
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/schema.d.ts +166 -15
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +33 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +25 -6
- package/dist/config/validate.js.map +1 -1
- package/dist/profiles/index.d.ts +5 -0
- package/dist/profiles/index.d.ts.map +1 -1
- package/dist/profiles/index.js +16 -0
- package/dist/profiles/index.js.map +1 -1
- package/dist/routing/fuzzy.d.ts +0 -1
- package/dist/routing/fuzzy.d.ts.map +1 -1
- package/dist/routing/fuzzy.js +0 -25
- package/dist/routing/fuzzy.js.map +1 -1
- package/dist/routing/resolver.d.ts +11 -1
- package/dist/routing/resolver.d.ts.map +1 -1
- package/dist/routing/resolver.js +80 -17
- package/dist/routing/resolver.js.map +1 -1
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +4 -0
- package/dist/security/rate-limiter.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +69 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/channels/index.d.ts +1 -0
- package/dist/tools/channels/index.d.ts.map +1 -1
- package/dist/tools/channels/index.js +1 -0
- package/dist/tools/channels/index.js.map +1 -1
- package/dist/tools/guilds/create-invite.d.ts.map +1 -1
- package/dist/tools/guilds/create-invite.js +4 -10
- package/dist/tools/guilds/create-invite.js.map +1 -1
- package/dist/tools/guilds/index.d.ts +1 -0
- package/dist/tools/guilds/index.d.ts.map +1 -1
- package/dist/tools/guilds/index.js +1 -0
- package/dist/tools/guilds/index.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/messaging/get-messages.d.ts.map +1 -1
- package/dist/tools/messaging/get-messages.js +21 -2
- package/dist/tools/messaging/get-messages.js.map +1 -1
- package/dist/tools/messaging/index.d.ts +5 -0
- package/dist/tools/messaging/index.d.ts.map +1 -1
- package/dist/tools/messaging/index.js +5 -0
- package/dist/tools/messaging/index.js.map +1 -1
- package/dist/tools/messaging/send-template.d.ts.map +1 -1
- package/dist/tools/messaging/send-template.js +14 -0
- package/dist/tools/messaging/send-template.js.map +1 -1
- package/dist/tools/moderation/timeout-member.d.ts.map +1 -1
- package/dist/tools/moderation/timeout-member.js +1 -0
- package/dist/tools/moderation/timeout-member.js.map +1 -1
- package/dist/tools/system/list-bots.d.ts +2 -0
- package/dist/tools/system/list-bots.d.ts.map +1 -0
- package/dist/tools/system/list-bots.js +49 -0
- package/dist/tools/system/list-bots.js.map +1 -0
- package/dist/tools/threads/list-threads.d.ts.map +1 -1
- package/dist/tools/threads/list-threads.js +22 -1
- package/dist/tools/threads/list-threads.js.map +1 -1
- package/dist/transport/http.d.ts +4 -2
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +20 -3
- package/dist/transport/http.js.map +1 -1
- package/dist/utils/cache.d.ts +3 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +28 -1
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/og-fetch.d.ts.map +1 -1
- package/dist/utils/og-fetch.js +35 -10
- package/dist/utils/og-fetch.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# discord-ops
|
|
2
2
|
|
|
3
|
+
## 0.23.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- bbc870b: Multi-bot architecture: bot personas, per-channel bot assignment, and per-project tool profile enforcement.
|
|
8
|
+
|
|
9
|
+
**Bot personas:** Named bots with identity metadata (`name`, `role`, `description`) configured in a top-level `bots` section. Each bot references a `token_env` and can have a `default_profile` restricting which tools it can use.
|
|
10
|
+
|
|
11
|
+
**Channel-level bot assignment:** Channels accept `{ "id": "...", "bot": "bot-name" }` to override which bot operates in that channel. Token resolution follows: channel bot → project bot → project `token_env` → default token.
|
|
12
|
+
|
|
13
|
+
**Per-project tool profile enforcement:** Runtime gate in the MCP server checks per-project `tool_profile` and per-bot `default_profile` on every tool call. Tools not in the effective profile return an error. Supports `profile_add`/`profile_remove` overrides.
|
|
14
|
+
|
|
15
|
+
**New tool:** `list_bots` — returns all configured bot personas with project assignments, channel overrides, and connection status. Does not expose token values.
|
|
16
|
+
|
|
17
|
+
**Validation:** `discord-ops validate` now checks bot references, profile names, and bot token availability.
|
|
18
|
+
|
|
19
|
+
Backwards compatible — existing configs without `bots` work unchanged. Channels accept both plain snowflake strings and `{ id, bot }` objects.
|
|
20
|
+
|
|
21
|
+
## 0.22.0
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- a7f7218: Engineering audit remediation: 32 findings fixed across 5 epics.
|
|
26
|
+
|
|
27
|
+
**Breaking:** `get_messages` now returns full embed and attachment objects instead of counts. `embeds` changes from `number` to `array`, `attachments` from `number` to `array`. Update consumers checking `embeds > 0` to `embeds.length > 0`.
|
|
28
|
+
|
|
29
|
+
**New tools:** `send_template`, `list_templates`, `pin_message`, `unpin_message`, `notify_owners`, `get_invites` (42 → 48 tools).
|
|
30
|
+
|
|
31
|
+
**CLI:** `setup`, `run`, `validate` subcommands now wired. Flags `--allow-unauthenticated`, `--profile`, `--tools`, `--dry-run`, `--args` accepted. Version reads from package.json dynamically.
|
|
32
|
+
|
|
33
|
+
**Bug fixes:** `list_threads` respects `archived` param. `timeout_member` marked destructive. `resolveTarget` returns `undefined` instead of `""` for missing guild. Permission pre-flight logs errors.
|
|
34
|
+
|
|
35
|
+
**Security:** SSRF DNS pinning prevents rebinding. Template URL vars validated. X-Forwarded-For parsed right-to-left. Per-project rate limit buckets. Extended reserved IP blocking. Token hashing for cache keys. IP counter hard cap.
|
|
36
|
+
|
|
37
|
+
**Code quality:** Dead code removed. TTLCache max-size eviction. Profile tool name validation at startup. Rate limiter bucket pruning.
|
|
38
|
+
|
|
3
39
|
## 0.21.2
|
|
4
40
|
|
|
5
41
|
### Patch Changes
|
|
@@ -150,14 +186,6 @@
|
|
|
150
186
|
- `move_channel` — reposition a channel or category relative to another channel using `before_id`/`after_id` instead of fragile raw position integers. Resolves sibling positions automatically.
|
|
151
187
|
- `notify_owners` — standalone owner ping tool. Sends `<@mention>`s to a channel based on `notification_type` without a full message or embed. No-ops silently if the type isn't in the project's `notify_owners_on` list. Supports optional message text appended after mentions.
|
|
152
188
|
|
|
153
|
-
## 0.18.0
|
|
154
|
-
|
|
155
|
-
### Minor Changes
|
|
156
|
-
|
|
157
|
-
- 637362e: feat: add move_channel and notify_owners tools
|
|
158
|
-
- `move_channel` — reposition a channel or category relative to another channel using `before_id`/`after_id` instead of fragile raw position integers. Resolves sibling positions automatically.
|
|
159
|
-
- `notify_owners` — standalone owner ping tool. Sends `<@mention>`s to a channel based on `notification_type` without a full message or embed. No-ops silently if the type isn't in the project's `notify_owners_on` list. Supports optional message text appended after mentions.
|
|
160
|
-
|
|
161
189
|
## 0.17.0
|
|
162
190
|
|
|
163
191
|
### Minor Changes
|
|
@@ -178,58 +206,6 @@
|
|
|
178
206
|
|
|
179
207
|
- 350cb59: fix: release workflow — truncate highlights to Discord 1024-char field limit, auto-sync main back to staging after publish
|
|
180
208
|
|
|
181
|
-
## 0.16.0
|
|
182
|
-
|
|
183
|
-
### Minor Changes
|
|
184
|
-
|
|
185
|
-
- b42d0fe: feat: add `run` CLI subcommand and inline JSON support for `DISCORD_OPS_CONFIG`
|
|
186
|
-
- `discord-ops run <tool> --args '<json>'` — execute any tool directly from shell, no AI/MCP required. Supports the full tool suite including `send_template`, `send_message`, `send_embed`, and all 46 tools.
|
|
187
|
-
- `DISCORD_OPS_CONFIG` now accepts an inline JSON string in addition to a file path — if the value starts with `{` it is parsed directly. Eliminates the need to write config files in CI environments.
|
|
188
|
-
- `release.yml` GitHub Actions workflow — automatically posts a rich Discord release notification to `#releases` after every successful npm publish via changesets.
|
|
189
|
-
- README — new CLI `run` docs with examples, CI/CD integration section with config shape, GitHub Actions example, and updated `DISCORD_OPS_CONFIG` env var description.
|
|
190
|
-
|
|
191
|
-
### Patch Changes
|
|
192
|
-
|
|
193
|
-
- b42d0fe: fix: add "alert" to NotificationType enum — global config with alert in notify_owners_on caused config parse failure and MCP startup crash
|
|
194
|
-
- b42d0fe: fix: clean up changelog formatting in Discord release notifications — section headers now render as bold text, commit hashes stripped from bullet lines
|
|
195
|
-
- b42d0fe: Fix stale npx cache — use `discord-ops@latest` in MCP config
|
|
196
|
-
|
|
197
|
-
Without `@latest`, npx may serve a cached older version indefinitely, causing MCP clients to run stale code even after new releases are published. All MCP config examples in the README updated to use `discord-ops@latest`.
|
|
198
|
-
|
|
199
|
-
## 0.15.0
|
|
200
|
-
|
|
201
|
-
### Minor Changes
|
|
202
|
-
|
|
203
|
-
- 01c3e44: feat: add `run` CLI subcommand and inline JSON support for `DISCORD_OPS_CONFIG`
|
|
204
|
-
- `discord-ops run <tool> --args '<json>'` — execute any tool directly from shell, no AI/MCP required. Supports the full tool suite including `send_template`, `send_message`, `send_embed`, and all 46 tools.
|
|
205
|
-
- `DISCORD_OPS_CONFIG` now accepts an inline JSON string in addition to a file path — if the value starts with `{` it is parsed directly. Eliminates the need to write config files in CI environments.
|
|
206
|
-
- `release.yml` GitHub Actions workflow — automatically posts a rich Discord release notification to `#releases` after every successful npm publish via changesets.
|
|
207
|
-
- README — new CLI `run` docs with examples, CI/CD integration section with config shape, GitHub Actions example, and updated `DISCORD_OPS_CONFIG` env var description.
|
|
208
|
-
|
|
209
|
-
### Patch Changes
|
|
210
|
-
|
|
211
|
-
- 01c3e44: fix: add "alert" to NotificationType enum — global config with alert in notify_owners_on caused config parse failure and MCP startup crash
|
|
212
|
-
- 01c3e44: Fix stale npx cache — use `discord-ops@latest` in MCP config
|
|
213
|
-
|
|
214
|
-
Without `@latest`, npx may serve a cached older version indefinitely, causing MCP clients to run stale code even after new releases are published. All MCP config examples in the README updated to use `discord-ops@latest`.
|
|
215
|
-
|
|
216
|
-
## 0.14.3
|
|
217
|
-
|
|
218
|
-
### Patch Changes
|
|
219
|
-
|
|
220
|
-
- 6bd5a54: fix: add "alert" to NotificationType enum — global config with alert in notify_owners_on caused config parse failure and MCP startup crash
|
|
221
|
-
- 6bd5a54: Fix stale npx cache — use `discord-ops@latest` in MCP config
|
|
222
|
-
|
|
223
|
-
Without `@latest`, npx may serve a cached older version indefinitely, causing MCP clients to run stale code even after new releases are published. All MCP config examples in the README updated to use `discord-ops@latest`.
|
|
224
|
-
|
|
225
|
-
## 0.14.2
|
|
226
|
-
|
|
227
|
-
### Patch Changes
|
|
228
|
-
|
|
229
|
-
- 9fb0d4b: Fix stale npx cache — use `discord-ops@latest` in MCP config
|
|
230
|
-
|
|
231
|
-
Without `@latest`, npx may serve a cached older version indefinitely, causing MCP clients to run stale code even after new releases are published. All MCP config examples in the README updated to use `discord-ops@latest`.
|
|
232
|
-
|
|
233
209
|
## 0.14.1
|
|
234
210
|
|
|
235
211
|
### Patch Changes
|
|
@@ -286,75 +262,6 @@
|
|
|
286
262
|
|
|
287
263
|
When `channel_id` was passed directly to `resolveTarget`, the returned `ResolvedTarget` was missing the `token` field even if a `project` was specified. This caused direct-channel-ID calls in multi-bot setups to fall back to the default bot token instead of the project-specific one.
|
|
288
264
|
|
|
289
|
-
## 0.13.0
|
|
290
|
-
|
|
291
|
-
### Minor Changes
|
|
292
|
-
|
|
293
|
-
- 4928e5e: Auto-embed for send_message and health endpoint version field
|
|
294
|
-
- **Auto-embed for `send_message`**: Messages are now automatically wrapped in a polished embed (color bar, description, timestamp) via the new `simple` template. Set `raw: true` to send plain text. Every message looks professional by default.
|
|
295
|
-
- **`simple` template**: New minimal utility template — just a branded embed with optional title, color, author, and footer. Used automatically by `send_message`, also available via `send_template`.
|
|
296
|
-
- **Health endpoint `version` field**: `GET /health` now includes the `discord-ops` package version for deployment verification.
|
|
297
|
-
|
|
298
|
-
- 4928e5e: feat: add position parameter to edit_channel
|
|
299
|
-
|
|
300
|
-
`edit_channel` now accepts an optional `position` integer (0-indexed) to reorder channels and categories within a guild. This enables programmatic channel ordering without needing separate Discord admin UI access.
|
|
301
|
-
|
|
302
|
-
- 4928e5e: Live channel name resolution — fuzzy.ts was dead code, now it works
|
|
303
|
-
- **Channel fuzzy resolution**: The `channel` param now resolves in four layers — exact alias match, fuzzy alias match (e.g. `"build"` hits `"builds"`), then a live Discord API lookup that finds channels by their actual Discord name (e.g. `channel: "general"` now works even with no configured alias).
|
|
304
|
-
- **Fuzzy alias matching**: Configured channel aliases are now fuzzy-matched before falling back to Discord, so near-misses on alias names resolve correctly.
|
|
305
|
-
- **`list_templates` fix**: Internal `simple` template (used for auto-embed) no longer appears in `list_templates` output — count now correctly shows 23.
|
|
306
|
-
|
|
307
|
-
- 4928e5e: New send_embed tool with server-side OG metadata fetching
|
|
308
|
-
|
|
309
|
-
### Patch Changes
|
|
310
|
-
|
|
311
|
-
- 4928e5e: fix: isConnected no longer throws in multi-bot setups
|
|
312
|
-
|
|
313
|
-
`DiscordClient.isConnected` was calling `getConnection()` with no token, which throws when no default `DISCORD_TOKEN` is set. Any setup that uses only per-project `token_env` (the standard multi-bot pattern) would immediately crash with "No Discord token available" on the first `health_check` call — before per-project tokens were ever checked. `isConnected` now returns `false` instead of throwing when there is no default token.
|
|
314
|
-
|
|
315
|
-
- 4928e5e: fix: resolver now includes bot token when channel_id is provided directly
|
|
316
|
-
|
|
317
|
-
When `channel_id` was passed directly to `resolveTarget`, the returned `ResolvedTarget` was missing the `token` field even if a `project` was specified. This caused direct-channel-ID calls in multi-bot setups to fall back to the default bot token instead of the project-specific one.
|
|
318
|
-
|
|
319
|
-
## 0.12.0
|
|
320
|
-
|
|
321
|
-
### Minor Changes
|
|
322
|
-
|
|
323
|
-
- e70b6ac: Auto-embed for send_message and health endpoint version field
|
|
324
|
-
- **Auto-embed for `send_message`**: Messages are now automatically wrapped in a polished embed (color bar, description, timestamp) via the new `simple` template. Set `raw: true` to send plain text. Every message looks professional by default.
|
|
325
|
-
- **`simple` template**: New minimal utility template — just a branded embed with optional title, color, author, and footer. Used automatically by `send_message`, also available via `send_template`.
|
|
326
|
-
- **Health endpoint `version` field**: `GET /health` now includes the `discord-ops` package version for deployment verification.
|
|
327
|
-
|
|
328
|
-
- e70b6ac: Live channel name resolution — fuzzy.ts was dead code, now it works
|
|
329
|
-
- **Channel fuzzy resolution**: The `channel` param now resolves in four layers — exact alias match, fuzzy alias match (e.g. `"build"` hits `"builds"`), then a live Discord API lookup that finds channels by their actual Discord name (e.g. `channel: "general"` now works even with no configured alias).
|
|
330
|
-
- **Fuzzy alias matching**: Configured channel aliases are now fuzzy-matched before falling back to Discord, so near-misses on alias names resolve correctly.
|
|
331
|
-
- **`list_templates` fix**: Internal `simple` template (used for auto-embed) no longer appears in `list_templates` output — count now correctly shows 23.
|
|
332
|
-
|
|
333
|
-
- e70b6ac: New send_embed tool with server-side OG metadata fetching
|
|
334
|
-
|
|
335
|
-
## 0.11.0
|
|
336
|
-
|
|
337
|
-
### Minor Changes
|
|
338
|
-
|
|
339
|
-
- c53ebcd: Auto-embed for send_message and health endpoint version field
|
|
340
|
-
- **Auto-embed for `send_message`**: Messages are now automatically wrapped in a polished embed (color bar, description, timestamp) via the new `simple` template. Set `raw: true` to send plain text. Every message looks professional by default.
|
|
341
|
-
- **`simple` template**: New minimal utility template — just a branded embed with optional title, color, author, and footer. Used automatically by `send_message`, also available via `send_template`.
|
|
342
|
-
- **Health endpoint `version` field**: `GET /health` now includes the `discord-ops` package version for deployment verification.
|
|
343
|
-
|
|
344
|
-
- c53ebcd: Live channel name resolution — fuzzy.ts was dead code, now it works
|
|
345
|
-
- **Channel fuzzy resolution**: The `channel` param now resolves in four layers — exact alias match, fuzzy alias match (e.g. `"build"` hits `"builds"`), then a live Discord API lookup that finds channels by their actual Discord name (e.g. `channel: "general"` now works even with no configured alias).
|
|
346
|
-
- **Fuzzy alias matching**: Configured channel aliases are now fuzzy-matched before falling back to Discord, so near-misses on alias names resolve correctly.
|
|
347
|
-
- **`list_templates` fix**: Internal `simple` template (used for auto-embed) no longer appears in `list_templates` output — count now correctly shows 23.
|
|
348
|
-
|
|
349
|
-
## 0.10.0
|
|
350
|
-
|
|
351
|
-
### Minor Changes
|
|
352
|
-
|
|
353
|
-
- 6c4ef2a: Auto-embed for send_message and health endpoint version field
|
|
354
|
-
- **Auto-embed for `send_message`**: Messages are now automatically wrapped in a polished embed (color bar, description, timestamp) via the new `simple` template. Set `raw: true` to send plain text. Every message looks professional by default.
|
|
355
|
-
- **`simple` template**: New minimal utility template — just a branded embed with optional title, color, author, and footer. Used automatically by `send_message`, also available via `send_template`.
|
|
356
|
-
- **Health endpoint `version` field**: `GET /health` now includes the `discord-ops` package version for deployment verification.
|
|
357
|
-
|
|
358
265
|
## 0.9.0
|
|
359
266
|
|
|
360
267
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -8,10 +8,11 @@ Agency-grade Discord MCP server with multi-guild project routing.
|
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
|
-
- **
|
|
11
|
+
- **49 MCP tools** — messaging, channels, moderation, roles, webhooks, audit log, threads, guilds, invites, permissions, search, 23 templates, OG embed unfurling, project introspection
|
|
12
12
|
- **Multi-guild project routing** — `send_message({ project: "my-app", channel: "builds" })` instead of raw channel IDs
|
|
13
13
|
- **Notification routing** — map notification types (`ci_build`, `deploy`, `error`) to channels per project
|
|
14
14
|
- **Owner pings** — configure project owners so releases, errors, and alerts auto-mention the right people
|
|
15
|
+
- **Bot personas** — named bots with identity metadata, per-channel bot assignment, and per-bot tool profiles
|
|
15
16
|
- **Multi-bot support** — manage multiple Discord bots from a single MCP server with per-project tokens
|
|
16
17
|
- **Tool profiles** — load only the tools an agent needs; cut schema overhead by 85% with slim profiles
|
|
17
18
|
- **Smart channel resolution** — channel params accept channel name or snowflake ID, with 4-layer fuzzy fallback
|
|
@@ -183,6 +184,56 @@ Projects can specify their own bot token via `token_env`:
|
|
|
183
184
|
|
|
184
185
|
When all projects have `token_env`, the default `DISCORD_TOKEN` is optional. Each project connects with its own bot.
|
|
185
186
|
|
|
187
|
+
### Bot personas
|
|
188
|
+
|
|
189
|
+
Give bots names, roles, and per-channel assignment. This is ideal when your Discord server runs multiple bots with distinct personas (e.g., a community helper vs. a tech ops bot).
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"bots": {
|
|
194
|
+
"claire": {
|
|
195
|
+
"name": "Claire",
|
|
196
|
+
"role": "Community helper",
|
|
197
|
+
"description": "Handles support and community channels",
|
|
198
|
+
"token_env": "CLAIRE_TOKEN",
|
|
199
|
+
"default_profile": "messaging"
|
|
200
|
+
},
|
|
201
|
+
"courier": {
|
|
202
|
+
"name": "Clarity Courier",
|
|
203
|
+
"role": "Technical operations",
|
|
204
|
+
"token_env": "COURIER_TOKEN",
|
|
205
|
+
"default_profile": "full"
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"projects": {
|
|
209
|
+
"clarity-house": {
|
|
210
|
+
"guild_id": "123456789012345678",
|
|
211
|
+
"bot": "courier",
|
|
212
|
+
"channels": {
|
|
213
|
+
"general": "111111111111111111",
|
|
214
|
+
"support": { "id": "222222222222222222", "bot": "claire" },
|
|
215
|
+
"dev-ops": "333333333333333333",
|
|
216
|
+
"ai-testing": { "id": "444444444444444444", "bot": "claire" }
|
|
217
|
+
},
|
|
218
|
+
"default_channel": "dev-ops",
|
|
219
|
+
"tool_profile": "full"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**How it works:**
|
|
226
|
+
|
|
227
|
+
- **`bots`** — named bot definitions with identity metadata and `token_env`
|
|
228
|
+
- **`project.bot`** — default bot for the project (all channels use this bot unless overridden)
|
|
229
|
+
- **Channel `bot` override** — individual channels can use a different bot: `{ "id": "...", "bot": "claire" }`
|
|
230
|
+
- **`default_profile`** — per-bot tool profile (restricts which tools a bot can use at runtime)
|
|
231
|
+
- **Token resolution** — channel bot → project bot → project `token_env` → default `DISCORD_TOKEN`
|
|
232
|
+
- **Bot persona in routing** — resolved targets include `bot: { name, role }` metadata for agent context
|
|
233
|
+
- **Backwards compatible** — `bots` is optional; channels accept both `"ID"` and `{ "id": "ID", "bot": "name" }` formats
|
|
234
|
+
|
|
235
|
+
Use `list_bots` to see all configured bots, their project assignments, channel overrides, and connection status.
|
|
236
|
+
|
|
186
237
|
### Owner pings
|
|
187
238
|
|
|
188
239
|
Configure project owners so that releases, errors, and alerts automatically prepend `@mentions`. This ensures the right people are always paged for critical events without hardcoding mentions in every message.
|
|
@@ -279,7 +330,7 @@ Useful for sharing GitHub PRs, npm releases, blog posts, or any URL with rich pr
|
|
|
279
330
|
|
|
280
331
|
## Tools
|
|
281
332
|
|
|
282
|
-
### Messaging (
|
|
333
|
+
### Messaging (12 tools)
|
|
283
334
|
|
|
284
335
|
| Tool | Description |
|
|
285
336
|
| ----------------- | ----------------------------------------------------------- |
|
|
@@ -294,8 +345,9 @@ Useful for sharing GitHub PRs, npm releases, blog posts, or any URL with rich pr
|
|
|
294
345
|
| `search_messages` | Search messages by content, author, or date range |
|
|
295
346
|
| `send_template` | Send a styled embed using a built-in template |
|
|
296
347
|
| `list_templates` | List available templates with required variables |
|
|
348
|
+
| `notify_owners` | Ping project owners based on notification type |
|
|
297
349
|
|
|
298
|
-
### Channels (
|
|
350
|
+
### Channels (9 tools)
|
|
299
351
|
|
|
300
352
|
| Tool | Description |
|
|
301
353
|
| ----------------- | ----------------------------------------------------------------------------- |
|
|
@@ -306,6 +358,7 @@ Useful for sharing GitHub PRs, npm releases, blog posts, or any URL with rich pr
|
|
|
306
358
|
| `delete_channel` | Delete a channel |
|
|
307
359
|
| `purge_messages` | Bulk-delete messages (max 100, < 14 days old) |
|
|
308
360
|
| `set_slowmode` | Set or disable slowmode |
|
|
361
|
+
| `move_channel` | Move a channel to a different category or position |
|
|
309
362
|
| `set_permissions` | Set channel permission overrides for a role or member |
|
|
310
363
|
|
|
311
364
|
### Moderation (4 tools)
|
|
@@ -363,12 +416,13 @@ Useful for sharing GitHub PRs, npm releases, blog posts, or any URL with rich pr
|
|
|
363
416
|
| `list_threads` | List active threads |
|
|
364
417
|
| `archive_thread` | Archive (and optionally lock) a thread |
|
|
365
418
|
|
|
366
|
-
### System (
|
|
419
|
+
### System (3 tools)
|
|
367
420
|
|
|
368
|
-
| Tool | Description
|
|
369
|
-
| --------------- |
|
|
370
|
-
| `health_check` | Bot status, version, connected guilds, and permission audit
|
|
371
|
-
| `list_projects` | List all projects with guild mappings, token status, and validation
|
|
421
|
+
| Tool | Description |
|
|
422
|
+
| --------------- | -------------------------------------------------------------------- |
|
|
423
|
+
| `health_check` | Bot status, version, connected guilds, and permission audit |
|
|
424
|
+
| `list_projects` | List all projects with guild mappings, token status, and validation |
|
|
425
|
+
| `list_bots` | List all bot personas with project assignments and channel overrides |
|
|
372
426
|
|
|
373
427
|
## Tool Profiles
|
|
374
428
|
|
|
@@ -376,12 +430,15 @@ Load only the tools an agent needs. Reduces schema token overhead by up to 85% f
|
|
|
376
430
|
|
|
377
431
|
### Built-in profiles
|
|
378
432
|
|
|
379
|
-
| Profile | Tools | Description
|
|
380
|
-
| ------------ | ----- |
|
|
381
|
-
| `
|
|
382
|
-
| `
|
|
383
|
-
| `
|
|
384
|
-
| `
|
|
433
|
+
| Profile | Tools | Description |
|
|
434
|
+
| ------------ | ----- | ------------------------------------------------------------------------------------------------------ |
|
|
435
|
+
| `full` | 49 | All tools (default) |
|
|
436
|
+
| `monitoring` | 7 | get_messages, send_message, add_reaction, create_thread, health_check, list_projects, list_bots |
|
|
437
|
+
| `readonly` | 7 | get_messages, list_channels, list_members, get_guild, health_check, list_projects, list_bots |
|
|
438
|
+
| `moderation` | 7 | get_messages, kick_member, ban_member, timeout_member, delete_message, purge_messages, query_audit_log |
|
|
439
|
+
| `messaging` | 5 | add_reaction, delete_message, edit_message, get_messages, send_message |
|
|
440
|
+
| `channels` | 7 | create_channel, delete_channel, edit_channel, get_channel, list_channels, purge_messages, set_slowmode |
|
|
441
|
+
| `webhooks` | 6 | create_webhook, delete_webhook, edit_webhook, execute_webhook, get_webhook, list_webhooks |
|
|
385
442
|
|
|
386
443
|
### Using profiles
|
|
387
444
|
|
|
@@ -479,10 +536,12 @@ Any tool name accepted by the MCP server works here — `send_message`, `send_te
|
|
|
479
536
|
|
|
480
537
|
### Token resolution
|
|
481
538
|
|
|
482
|
-
1.
|
|
483
|
-
2.
|
|
484
|
-
3.
|
|
485
|
-
4.
|
|
539
|
+
1. **Channel-level bot** — if the channel has a `bot` override, use that bot's `token_env`
|
|
540
|
+
2. **Project-level bot** — if the project has a `bot`, use that bot's `token_env`
|
|
541
|
+
3. **Project-level `token_env`** — project's own token env var
|
|
542
|
+
4. **Default token** — `DISCORD_TOKEN` (or custom via `DISCORD_OPS_TOKEN_ENV`)
|
|
543
|
+
|
|
544
|
+
If `DISCORD_OPS_TOKEN_ENV` is set, its value names the env var holding the default token (e.g., `DISCORD_OPS_TOKEN_ENV=MY_BOT_TOKEN` reads `MY_BOT_TOKEN`). If all projects have `token_env` or `bot` set, no default token is needed.
|
|
486
545
|
|
|
487
546
|
## CI/CD Integration
|
|
488
547
|
|
|
@@ -715,22 +774,33 @@ Full `~/.discord-ops.json` schema with all options:
|
|
|
715
774
|
|
|
716
775
|
```json
|
|
717
776
|
{
|
|
777
|
+
"bots": {
|
|
778
|
+
"my-bot": {
|
|
779
|
+
"name": "My Bot",
|
|
780
|
+
"role": "General purpose",
|
|
781
|
+
"description": "Handles all operations",
|
|
782
|
+
"token_env": "MY_BOT_TOKEN",
|
|
783
|
+
"default_profile": "full"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
718
786
|
"projects": {
|
|
719
787
|
"my-app": {
|
|
720
788
|
"guild_id": "123456789012345678",
|
|
721
789
|
"token_env": "MY_APP_DISCORD_TOKEN",
|
|
790
|
+
"bot": "my-bot",
|
|
722
791
|
"channels": {
|
|
723
792
|
"dev": "CHANNEL_ID",
|
|
724
793
|
"builds": "CHANNEL_ID",
|
|
725
794
|
"releases": "CHANNEL_ID",
|
|
726
|
-
"alerts": "CHANNEL_ID"
|
|
795
|
+
"alerts": "CHANNEL_ID",
|
|
796
|
+
"support": { "id": "CHANNEL_ID", "bot": "my-bot" }
|
|
727
797
|
},
|
|
728
798
|
"default_channel": "dev",
|
|
729
799
|
"owners": ["USER_SNOWFLAKE_ID"],
|
|
730
800
|
"notify_owners_on": ["release", "error", "alert"],
|
|
731
801
|
"tool_profile": "full",
|
|
732
|
-
"
|
|
733
|
-
"
|
|
802
|
+
"profile_add": [],
|
|
803
|
+
"profile_remove": [],
|
|
734
804
|
"notification_routing": {
|
|
735
805
|
"ci_build": "builds",
|
|
736
806
|
"deploy": "builds",
|
|
@@ -750,18 +820,31 @@ Full `~/.discord-ops.json` schema with all options:
|
|
|
750
820
|
}
|
|
751
821
|
```
|
|
752
822
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
|
756
|
-
|
|
|
757
|
-
| `
|
|
758
|
-
| `
|
|
759
|
-
| `
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
|
764
|
-
|
|
|
823
|
+
**Global fields:**
|
|
824
|
+
|
|
825
|
+
| Field | Description |
|
|
826
|
+
| ---------------------- | ------------------------------------------------------------------------------------- |
|
|
827
|
+
| `bots` | Named bot personas with `name`, `role`, `description`, `token_env`, `default_profile` |
|
|
828
|
+
| `default_project` | Project used when no `project` param is provided |
|
|
829
|
+
| `notification_routing` | Global notification type → channel alias routing |
|
|
830
|
+
|
|
831
|
+
**Project fields:**
|
|
832
|
+
|
|
833
|
+
| Field | Description |
|
|
834
|
+
| ---------------------- | ------------------------------------------------------------------------------------- |
|
|
835
|
+
| `guild_id` | Discord server (guild) snowflake ID |
|
|
836
|
+
| `token_env` | Env var name for this project's bot token |
|
|
837
|
+
| `bot` | Default bot persona for this project (references a key in `bots`) |
|
|
838
|
+
| `channels` | Alias → channel ID or `{ id, bot }` map; `channel: "builds"` resolves here first |
|
|
839
|
+
| `default_channel` | Channel used when no `channel` param is provided |
|
|
840
|
+
| `owners` | User snowflake IDs to mention on matching notification types |
|
|
841
|
+
| `notify_owners_on` | Notification types that trigger owner pings (`"dev"` never pings) |
|
|
842
|
+
| `tool_profile` | Base tool profile for this project (`full`, `monitoring`, etc.) — enforced at runtime |
|
|
843
|
+
| `profile_add` | Additional tools to load on top of the base profile |
|
|
844
|
+
| `profile_remove` | Tools to exclude from the base profile |
|
|
845
|
+
| `notification_routing` | Per-project override of global notification → channel routing |
|
|
846
|
+
|
|
847
|
+
Per-project profiles are enforced at runtime — all tools stay registered on the MCP server, but tool calls are filtered when the resolved project or bot has a profile set. This means agents can discover all tools via MCP schema, but per-project restrictions are applied on each call.
|
|
765
848
|
|
|
766
849
|
## Multi-Organization Troubleshooting
|
|
767
850
|
|
|
@@ -770,6 +853,9 @@ Full `~/.discord-ops.json` schema with all options:
|
|
|
770
853
|
Run `discord-ops validate` to check your config without connecting to Discord. It detects:
|
|
771
854
|
|
|
772
855
|
- Missing `token_env` values (env var not set)
|
|
856
|
+
- Bot references (`project.bot`, channel `bot`) pointing to undefined bots
|
|
857
|
+
- Invalid `default_profile` or `tool_profile` values
|
|
858
|
+
- Missing bot `token_env` environment variables
|
|
773
859
|
- Duplicate guild IDs across projects with different tokens
|
|
774
860
|
- `default_channel` referencing a nonexistent alias
|
|
775
861
|
- `default_project` pointing to a nonexistent project
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAmBA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -5,8 +5,14 @@ import { createServer } from "../server.js";
|
|
|
5
5
|
import { startStdioTransport } from "../transport/stdio.js";
|
|
6
6
|
import { startHttpTransport } from "../transport/http.js";
|
|
7
7
|
import { logger, setLogLevel } from "../utils/logger.js";
|
|
8
|
+
import { createRequire } from "node:module";
|
|
8
9
|
import { runInit } from "./init.js";
|
|
10
|
+
import { runSetup } from "./setup.js";
|
|
11
|
+
import { runTool } from "./run.js";
|
|
12
|
+
import { runValidate } from "./validate.js";
|
|
9
13
|
import { validateFlags } from "./validate-flags.js";
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const pkg = require("../../package.json");
|
|
10
16
|
export { validateFlags } from "./validate-flags.js";
|
|
11
17
|
async function main() {
|
|
12
18
|
const args = process.argv.slice(2);
|
|
@@ -19,7 +25,7 @@ async function main() {
|
|
|
19
25
|
}
|
|
20
26
|
// Handle --version
|
|
21
27
|
if (args.includes("--version") || args.includes("-v")) {
|
|
22
|
-
console.log(
|
|
28
|
+
console.log(`discord-ops ${pkg.version}`);
|
|
23
29
|
process.exit(0);
|
|
24
30
|
}
|
|
25
31
|
// Handle init subcommand (does not require DISCORD_TOKEN)
|
|
@@ -32,6 +38,28 @@ async function main() {
|
|
|
32
38
|
await runHealthCheck();
|
|
33
39
|
return;
|
|
34
40
|
}
|
|
41
|
+
// Handle setup subcommand (interactive wizard)
|
|
42
|
+
if (args[0] === "setup") {
|
|
43
|
+
await runSetup();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Handle run subcommand (execute a single tool)
|
|
47
|
+
if (args[0] === "run") {
|
|
48
|
+
const toolName = args[1];
|
|
49
|
+
if (!toolName) {
|
|
50
|
+
console.error("Usage: discord-ops run <tool-name> --args '<json>'");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const argsIndex = args.indexOf("--args");
|
|
54
|
+
const rawArgs = argsIndex !== -1 ? args[argsIndex + 1] : "{}";
|
|
55
|
+
await runTool(toolName, rawArgs);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Handle validate subcommand (validate config)
|
|
59
|
+
if (args[0] === "validate") {
|
|
60
|
+
await runValidate();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
35
63
|
// Configure log level
|
|
36
64
|
const logLevel = process.env.DISCORD_OPS_LOG_LEVEL;
|
|
37
65
|
if (logLevel)
|
|
@@ -130,6 +158,9 @@ USAGE:
|
|
|
130
158
|
discord-ops serve Start MCP server (HTTP/SSE transport)
|
|
131
159
|
discord-ops health Run health check + permission audit
|
|
132
160
|
discord-ops init Scaffold a per-project .discord-ops.json
|
|
161
|
+
discord-ops setup Interactive setup wizard for config
|
|
162
|
+
discord-ops run <tool> Run a single tool from the CLI
|
|
163
|
+
discord-ops validate Validate configuration files
|
|
133
164
|
discord-ops --help Show this help
|
|
134
165
|
discord-ops --version Show version
|
|
135
166
|
|
|
@@ -137,6 +168,10 @@ OPTIONS:
|
|
|
137
168
|
--port <port> HTTP port for serve mode (default: 3000)
|
|
138
169
|
--allowed-origin <origin> Allowed CORS origin (default: http://localhost)
|
|
139
170
|
--allow-unauthenticated Allow serve mode without DISCORD_OPS_HTTP_TOKEN (insecure)
|
|
171
|
+
--args <json> JSON arguments for the run subcommand
|
|
172
|
+
--profile <name> Tool profile: full, monitoring, readonly, moderation
|
|
173
|
+
--tools <list> Comma-separated list of tools to enable
|
|
174
|
+
--dry-run Preview actions without executing
|
|
140
175
|
|
|
141
176
|
INIT FLAGS:
|
|
142
177
|
--project <name> Project name (required)
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,kCAAkC;IAClC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpB,gBAAgB;IAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-flags.d.ts","sourceRoot":"","sources":["../../src/cli/validate-flags.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"validate-flags.d.ts","sourceRoot":"","sources":["../../src/cli/validate-flags.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,eAAO,MAAM,WAAW,aAiBtB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CASlD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-flags.js","sourceRoot":"","sources":["../../src/cli/validate-flags.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,kBAAkB;IAClB,wBAAwB;IACxB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QACxB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"validate-flags.js","sourceRoot":"","sources":["../../src/cli/validate-flags.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,kBAAkB;IAClB,yBAAyB;IACzB,WAAW;IACX,SAAS;IACT,WAAW;IACX,QAAQ;IACR,wBAAwB;IACxB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QACxB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyFjD"}
|