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
structuredContentand separately fenced human-readable oruntrusted_*fields. - Corrected the npm
mcpNameownership namespace and added an officialserver.jsonmanifest 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-levelguild_idbefore 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.
Breaking
Section titled “Breaking”- Destructive tools were unusable.
validateMiddlewareruns beforepreconditionMiddlewareand replacesctx.argswith the zod-parsed object. Zod strips unknown keys and no tool declared__confirm, so by the timeConfirmRequiredread the flag it was gone - every confirm-gated tool returnedDRY_RUN_PREVIEWforever, regardless ofMCP_DRY_RUN. The wire half was broken too:additionalProperties: falsemeant a spec-conforming client could not legally send the flag, and an agent readingtools/listhad no way to discover it. Both halves fixed. If you depended on destructive tools never executing, note that they now can - theMCP_DRY_RUN=false+__confirm:truecontract works as documented. @discordjs/rest,@modelcontextprotocol/sdk,zodand@sapphire/piecesmoved fromdependenciestopeerDependencieson@discord-mcp/core. Each crosses the public.d.tssurface nominally, so a consumer with a duplicate copy could not callbuildServerat all.@discord-mcp/cliusers are unaffected.discord.jsmoved fromoptionalDependenciesto an optional peer.optionalDependenciesare installed by default, so every REST-only user was paying for a WebSocket stack.enginesfloor raised to Node >= 22.12 - the lowest version CI verifies.MCP_TIMEOUT_LONG_MSremoved: validated and documented, read by no code path.
Security
Section titled “Security”MCP_CATEGORIESwas a dead control. It is documented as a least-privilege gate, but thecategory_enabledprecondition implementing it was declared by zero of 192 tools, so setting it restricted nothing. Now enforced as middleware plus atools/listfilter, 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 defaulterrserializer along with unredacted request bodies. Both closed. interaction_tokenwas 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 --prodexits 0.
Correctness
Section titled “Correctness”- Retry backoff never grew -
MCP_RETRY_MAX_DELAY_MSand 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_pipelinesampled the abort signal once before its loop, so cancelling mid-run still executed every remaining step.- Components V2
Section.accessoryis required by Discord but optional in both the builder and the validator, socomponents_v2_validatereturnedvalid: truefor layouts that always 400. Four shipped templates were themselves broken; repaired. - The server advertised version
0.0.0and 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/_guildwipe the entire command registry and shippeddestructiveHint: falsewith no confirmation gate.outputSchemais now published for all 191 declaring tools and enforced against handler results under test. That immediately caught real drift: all fiveintelligence_*tools declared a schema their fallback path never satisfied - and the fallback is the path every client without sampling capability takes.
Documentation
Section titled “Documentation”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-mocksworkspace package - eliminates 165 relative-path imports across the test tree; consumers nowimport from '@discord-mcp/server-mocks'.ResourceStoreextracted fromserver.ts(matchesToolStore/PreconditionStorepattern).- Integration test reliability: 0 unconditional skips,
doctor.integrationstdout race fixed. - vitest
globalSetupauto-buildsmcp-coreifdist/is missing - no more separatepnpm buildstep beforepnpm test. - tsdown
externalmigrated todeps.neverBundle(deprecation cleared). - GitHub Actions Node 24 opt-in matrix.
- 10 biome
info-leveluseLiteralKeyslints cleared. - 4 vitest bench files for hot paths (
messages_send,mcp_pipeline, gateway debounce, REST policy chain). - Security audit pass - fixed P1 (
reactions_delete_allmissing 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/coreand@discord-mcp/cli-prepackships root README + LICENSE in both tarballs; mcp-core flipped toprivate:falsewith public publishConfig. - v1.0.0 readiness checklist shipped at
docs/v1.0.0-readiness.md.
v0.11.0 - Migration adapters
Section titled “v0.11.0 - Migration adapters”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 --listflag 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.
v0.10.0 - Documentation site
Section titled “v0.10.0 - Documentation site”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.
v0.9.0 - CLI sub-commands
Section titled “v0.9.0 - CLI sub-commands”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.
v0.8.0 - Production hardening
Section titled “v0.8.0 - Production hardening”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. 9OTEL_*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.
v0.7.0 - Bulk REST surface (192 tools)
Section titled “v0.7.0 - Bulk REST surface (192 tools)”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/restroute fixtures. - Pagination helpers (
encodeCursor/decodeCursor) for list endpoints. - Branded snowflake types extended to all ID classes.
v0.6.0 - Gateway resource subscriptions
Section titled “v0.6.0 - Gateway resource subscriptions”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.
createGatewayClientlazy-importsdiscord.jsso cold start without--gatewaystays minimal (servedoesn’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. SubscriptionRegistrytracks active resource URIs and firesnotifyResource(uri)when relevant events arrive.--gatewayCLI flag onservetoggles the whole subsystem.
v0.5.0 - Intelligence sampling
Section titled “v0.5.0 - Intelligence sampling”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
samplingcapability - degrade gracefully when the client doesn’t advertise it.
v0.4.0 - Pipeline executor
Section titled “v0.4.0 - Pipeline executor”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.
executePipelineruntime: serial step execution with${steps.<id>.<path>}interpolation andif/unlesspredicates.- Step result shape (
StepResultwithok/skipped/failed). - 19 unit tests covering interpolation, conditionals, nested paths, error propagation.
v0.3.0 - Components V2
Section titled “v0.3.0 - Components V2”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.
v0.2.0 - Hot-path tools
Section titled “v0.2.0 - Hot-path tools”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
loadPieceauto-discovery so adding a tool is one import + one registration line.
v0.1.0 - Errors + middleware
Section titled “v0.1.0 - Errors + middleware”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.
DiscordErrorhierarchy withcode/retriable/category/recoveryHintcontract.compose(...middlewares, handler)framework.validateMiddleware,preconditionMiddleware, baseline error formatter.- Capability router (
CapabilityRouter) for client-feature gating. - Untrusted-content wrapping helpers (
wrapUntrusted/wrapMessages).
v0.0.0 - Project skeleton
Section titled “v0.0.0 - Project skeleton”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/coreand@discord-mcp/clipackages.- Single tool:
messages_send. - Biome, vitest, tsc, baseline CI.
See also
Section titled “See also”- GitHub releases - full release notes per tag.
- Architecture - how the pieces from each plan fit together today.