Skip to content

Changelog

This page records user-visible changes for each tagged release. For the exact commit history and downloadable artifacts, see GitHub releases.

v0.13.2 - Documentation architecture and runtime contract hardening

Section titled “v0.13.2 - Documentation architecture and runtime contract hardening”

Released 2026-08-01.

  • Rebuilt the documentation information architecture around Start, Guides, Reference, and Develop journeys, with a searchable tool catalog and generated input/output contracts for all 192 tools.
  • Corrected Discord API examples, interaction callback types, Components V2 validation, REST error normalization, confirmation previews, and credential redaction.
  • Documented the exact trust boundary between raw structuredContent and separately fenced human-readable or untrusted_* fields.
  • Corrected the npm mcpName ownership namespace and added an official server.json manifest for MCP Registry publication.

v0.13.1 - Correctness follow-up, default guild, and published package cleanup

Section titled “v0.13.1 - Correctness follow-up, default guild, and published package cleanup”

Released 2026-08-01.

  • Fixed 18 follow-up defects found by re-auditing v0.13.0, including output schema fallback coverage, credential redaction, channel/member result drift, and OpenTelemetry startup checks.
  • Added DISCORD_DEFAULT_GUILD_ID, which supplies an omitted top-level guild_id before validation while preserving explicit arguments.
  • Removed duplicate document headings across the docs site.
  • Restored the public npm scope to @discord-mcp/* and published package version 0.13.1.

v0.13.0 - Correctness audit: the confirmation gate, the category gate, and 58 verified defects

Section titled “v0.13.0 - Correctness audit: the confirmation gate, the category gate, and 58 verified defects”

Released 2026-07-27.

A seven-dimension audit of the v0.12.0 tree (runtime, tools, tests, security, docs, packaging, API surface) produced 58 independently-verified defects. This release fixes them. Three were load-bearing.

  • Destructive tools were unusable. validateMiddleware runs before preconditionMiddleware and replaces ctx.args with the zod-parsed object. Zod strips unknown keys and no tool declared __confirm, so by the time ConfirmRequired read the flag it was gone - every confirm-gated tool returned DRY_RUN_PREVIEW forever, regardless of MCP_DRY_RUN. The wire half was broken too: additionalProperties: false meant a spec-conforming client could not legally send the flag, and an agent reading tools/list had no way to discover it. Both halves fixed. If you depended on destructive tools never executing, note that they now can - the MCP_DRY_RUN=false + __confirm:true contract works as documented.
  • @discordjs/rest, @modelcontextprotocol/sdk, zod and @sapphire/pieces moved from dependencies to peerDependencies on @discord-mcp/core. Each crosses the public .d.ts surface nominally, so a consumer with a duplicate copy could not call buildServer at all. @discord-mcp/cli users are unaffected.
  • discord.js moved from optionalDependencies to an optional peer. optionalDependencies are installed by default, so every REST-only user was paying for a WebSocket stack.
  • engines floor raised to Node >= 22.12 - the lowest version CI verifies.
  • MCP_TIMEOUT_LONG_MS removed: validated and documented, read by no code path.
  • MCP_CATEGORIES was a dead control. It is documented as a least-privilege gate, but the category_enabled precondition implementing it was declared by zero of 192 tools, so setting it restricted nothing. Now enforced as middleware plus a tools/list filter, with unknown category names failing at boot.
  • Webhook and interaction tokens are bearer credentials that live in the URL path. They reached OTel spans via url.full, and reached stderr via pino’s default err serializer along with unredacted request bodies. Both closed.
  • interaction_token was in no redaction key set, so live tokens were written into audit records.
  • Discord message content containing </untrusted_discord_messages> escaped the untrusted-content boundary, after which the remainder was presented to the agent as trusted text.
  • 27 high advisories in the production dependency tree cleared; pnpm audit --audit-level=high --prod exits 0.
  • Retry backoff never grew - MCP_RETRY_MAX_DELAY_MS and the exponent were inert, and every retry waited the base delay.
  • POST was retried on ambiguous failures, so a POST that reached Discord with a lost response was replayed: duplicate messages, duplicate bans.
  • One shared debouncer per gateway handler meant subscribers to different URIs cancelled each other; with N subscribed channels only the most recently active one was notified.
  • mcp_pipeline sampled the abort signal once before its loop, so cancelling mid-run still executed every remaining step.
  • Components V2 Section.accessory is required by Discord but optional in both the builder and the validator, so components_v2_validate returned valid: true for layouts that always 400. Four shipped templates were themselves broken; repaired.
  • The server advertised version 0.0.0 and instructions reading “v0/Plan-1 - only messages_send available” - injected into the agent’s system context on a 192-tool server.
  • commands_bulk_overwrite_global / _guild wipe the entire command registry and shipped destructiveHint: false with no confirmation gate.
  • outputSchema is now published for all 191 declaring tools and enforced against handler results under test. That immediately caught real drift: all five intelligence_* tools declared a schema their fallback path never satisfied - and the fallback is the path every client without sampling capability takes.

Corrected every false claim the audit found, including a confirmation page that overstated the gated set by ~2.4x, five fabricated intelligence tool names, two invented CLI subcommands, a quickstart whose documented steps produce a non-working install, a pipeline result envelope that does not exist, and six metric names with the dashboard queries built on them. Added drift guards so tool names, metric names, gateway handler names, and the gated-tool list are now checked against the code at test time.

909 → 1005, with a coverage gate on @discord-mcp/core (98.9% statements) and snapshot freezes on the public exports, the CLI flag set, and the config surface. Load-sensitive tests fixed: the suite now passes on consecutive cold-cache runs under full parallel load, not only in isolation.

v0.12.0 - Test infra hardening + v1.0.0 readiness polish

Section titled “v0.12.0 - Test infra hardening + v1.0.0 readiness polish”

Released 2026-05-01. Tag: v0.12.0.

Plan 12 is the polish lap before v1.0.0. No new tools, no new runtime behavior - the test rig, build pipeline, and release surface all got sharpened so v1.0.0 has a clean foundation. This is the final plan of the discord-mcp roadmap (Plans 0-12).

  • @discord-mcp/server-mocks workspace package - eliminates 165 relative-path imports across the test tree; consumers now import from '@discord-mcp/server-mocks'.
  • ResourceStore extracted from server.ts (matches ToolStore / PreconditionStore pattern).
  • Integration test reliability: 0 unconditional skips, doctor.integration stdout race fixed.
  • vitest globalSetup auto-builds mcp-core if dist/ is missing - no more separate pnpm build step before pnpm test.
  • tsdown external migrated to deps.neverBundle (deprecation cleared).
  • GitHub Actions Node 24 opt-in matrix.
  • 10 biome info-level useLiteralKeys lints cleared.
  • 4 vitest bench files for hot paths (messages_send, mcp_pipeline, gateway debounce, REST policy chain).
  • Security audit pass - fixed P1 (reactions_delete_all missing confirmation gate); P2 deferred to Plan 13.
  • Docs link audit - 1 broken link fixed; version coherence verified.
  • npm publish dry-run verified for @discord-mcp/core and @discord-mcp/cli - prepack ships root README + LICENSE in both tarballs; mcp-core flipped to private:false with public publishConfig.
  • v1.0.0 readiness checklist shipped at docs/v1.0.0-readiness.md.

Released 2026-05-01. Tag: v0.11.0.

Plan 11 ships four production migration adapters so teams can move to discord-mcp from the most-established community Discord MCP servers without re-tooling their agents from scratch.

  • PaSympa (@pasympa/discord-mcp) - ~91 tools, TypeScript, Zod-based schemas. Adapter maps 78 tools, intentionally leaves 13 unmapped.
  • quadslab (@quadslab.io/discord-mcp) - ~138 tools with MCP Resources support. Adapter maps 96 tools, leaves 14 unmapped.
  • discord-ops (bookedsolidtech/discord-ops) - multi-guild routing, tool profiles, dry-run mode, saved templates. Adapter maps 36 tools and documents the architectural mismatches that don’t translate cleanly.
  • Hubdustry (reference adapter, non-Discord) - kept as the canonical adapter-authoring example.
  • discord-mcp migrate --list flag for adapter discovery (TTY + JSON).
  • 4-way cross-detection: every adapter rejects all other adapters’ fixtures so detection never silently misroutes.
  • Migration docs section at cappyeo.github.io/discord-mcp/migrate: per-adapter guides + adapter authoring guide for community contributors.

Released 2026-05-01. Tag cut from the Plan 10 merge commit on main.

Plan 10 ships a hand-written + auto-generated documentation site (Astro Starlight, deployed to GitHub Pages) covering all 192 tools, six recipes, operations runbooks, architecture deep-dives, and the reference surface you’re reading now.

  • 192 auto-generated tool reference pages with JSON Schema tables.
  • 6 hand-written cookbook recipes (moderation, components V2, pipeline, intelligence, webhooks, gateway).
  • Operations runbooks for telemetry, resilience, audit, client capabilities.
  • Architecture deep-dives for components V2, pipeline, gateway, error handling, confirmation, sampling, rate-limits.
  • This reference section: CLI, config, API, changelog.

Released 2026-05-01. Tag commit: 038c1138.

Plan 9 split the single binary into four sub-commands routed by commander and shipped a structured emitResult envelope shared across all of them.

  • discord-mcp serve - the existing stdio transport, still default sub-command.
  • discord-mcp doctor [--json] [--online] - config + connectivity diagnostics with offline / online check registries.
  • discord-mcp init [--client] [--token] [--gateway] [--output] - generate Claude Desktop / Claude Code / Cursor / Generic client config snippets.
  • discord-mcp migrate --from <adapter> - Hubdustry-Go-MCP migration scaffolding with a pluggable adapter registry.
  • Distribution polish: .gitattributes, README quickstart, npm pack verification, post-build CLI smoke tests.

Released 2026-05-01. Tag commit: b034bebf.

Plan 8 added the production-grade observability and resilience surface that makes discord-mcp safe to run in front of a real Discord guild.

  • OpenTelemetry traces + the six built-in metrics (mcp.tool.duration_ms, mcp.tool.calls, mcp.tool.errors, mcp.circuit.transitions, mcp.bulkhead.rejected.count, mcp.deadletter.count). There is no retry metric and no gauge for circuit state or bulkhead in-flight depth. 9 OTEL_* env vars.
  • Cockatiel composite policy: retry (with jitter strategies), per-call timeout, circuit breaker, bulkhead. 11 MCP_RETRY_/TIMEOUT_/CIRCUIT_/BULKHEAD_* env vars.
  • Mutating-only audit log with four sinks (stderr, file, otlp-stub, none), PII redaction policy, JSONL schema. 3 MCP_AUDIT_* env vars.
  • Integration tests covering the full cockatiel chain end-to-end.

Released 2026-04-29. Tag commit: 947269d7.

Plan 7 brought the tool count from 29 to 192 by mechanically covering every Discord REST endpoint that maps cleanly onto a single MCP tool.

  • New categories: webhooks, application commands, interactions, scheduled events, automod, audit log, monetization, soundboard, polls, voice, onboarding, stage instances.
  • Per-category integration tests against @discordjs/rest route fixtures.
  • Pagination helpers (encodeCursor / decodeCursor) for list endpoints.
  • Branded snowflake types extended to all ID classes.

Released 2026-04-28. Tag commit: 4dbac6ec.

Plan 6 (USP) made discord-mcp the first MCP server to surface live Gateway events as MCP resources via the subscribe capability.

  • createGatewayClient lazy-imports discord.js so cold start without --gateway stays minimal (serve doesn’t pay the import cost).
  • 5 Gateway event handlers - guild_update, voice_state_update, typing_start, presence_update, audit_log_poll. Message events are not among them; there is no message handler.
  • SubscriptionRegistry tracks active resource URIs and fires notifyResource(uri) when relevant events arrive.
  • --gateway CLI flag on serve toggles the whole subsystem.

Released 2026-04-28. Tag commit: dcd49aa1.

Plan 5 (USP) introduced the five intelligence tools that delegate reasoning back to the agent via MCP sampling.

  • intelligence_summarize_channel - summarize recent messages.
  • intelligence_classify_messages - multi-label classification.
  • intelligence_draft_response - context-aware reply drafts.
  • intelligence_moderate_content - policy-aware moderation.
  • intelligence_extract_entities - structured entity extraction.
  • All five honor client sampling capability - degrade gracefully when the client doesn’t advertise it.

Released 2026-04-28. Tag commit: 07745aa0.

Plan 4 (USP) shipped mcp_pipeline - a single tool that lets the agent queue a sequence of dependent tool calls with interpolation and conditional execution.

  • executePipeline runtime: serial step execution with ${steps.<id>.<path>} interpolation and if/unless predicates.
  • Step result shape (StepResult with ok/skipped/failed).
  • 19 unit tests covering interpolation, conditionals, nested paths, error propagation.

Released 2026-04-28. Tag commit: b7f976e6.

Plan 3 made Components V2 a first-class category.

  • 8 tools: components_v2_build_container, _build_section, _build_media_gallery, _validate, _preview, _send, _edit, _send_from_template.
  • 5 templates exposed via the components-v2:// resource scheme.
  • Schema resource (components-v2://schema) for agents to discover the V2 component shape.
  • Validate-then-send workflow with a structured preview before commit.

Released 2026-04-28. Tag commit: 227dd28a.

Plan 2 grew the surface from 1 tool to 15 by covering the high-frequency day-one operations Discord agents typically need.

  • Messages: _send, _read, _edit, _delete, _get, _pin, _unpin.
  • Reactions: _create, _delete_own, _list.
  • Channels / Members / Guild basics.
  • Sapphire loadPiece auto-discovery so adding a tool is one import + one registration line.

Released 2026-04-28. Tag commit: acec9440.

Plan 1 established the error hierarchy, middleware composition framework, and capability router that every subsequent plan builds on.

  • DiscordError hierarchy with code / retriable / category / recoveryHint contract.
  • compose(...middlewares, handler) framework.
  • validateMiddleware, preconditionMiddleware, baseline error formatter.
  • Capability router (CapabilityRouter) for client-feature gating.
  • Untrusted-content wrapping helpers (wrapUntrusted / wrapMessages).

Released 2026-04-28. Tag commit: 3ab74826.

Plan 0 stood up the monorepo and shipped the smallest viable tool surface.

  • pnpm + Turbo + tsdown workspace layout.
  • @discord-mcp/core and @discord-mcp/cli packages.
  • Single tool: messages_send.
  • Biome, vitest, tsc, baseline CI.