From quadslab
quadslab (@quadslab.io/discord-mcp) is the largest of the third-party
Discord MCPs by tool count - ~138 tools across 20 categories. The
quadslab adapter walks a local clone, intersects against a known-tool
catalog (139 entries) for high-precision extraction, and reports the
discord-mcp equivalents.
Source
Section titled “Source”- Repo:
HardHeadHackerHead/discord-mcp - Package:
@quadslab.io/discord-mcp(v2.1.1 at cutoff) - Tool count (cutoff 2026-05-01): ~138 across 20 categories (guild, roles, channels, members, messages, reactions, server, threads, forums, emojis, stickers, webhooks, events, stage, automod, polls, DMs, presence, templates, commands, onboarding).
- Adapter source:
packages/mcp-server/src/lib/migrate-adapters/quadslab.ts
Why migrate to discord-mcp
Section titled “Why migrate to discord-mcp”- Production hardening - first-class OpenTelemetry traces and Cockatiel resilience policies on the central Discord REST path. See Operations: telemetry.
- Components V2 first-class - dedicated
components_v2_sendandcomponents_v2_edittools validateflags = 32768layouts. See the Components V2 announcement recipe. - Explicit confirmation on selected high-risk tools - the 31 tools
registered with
confirm_requiredrequire__confirm: trueandMCP_DRY_RUN=false. Other writes can execute immediately, so inspect each tool’s confirmation badge rather than inferring safety from “destructive.” See Architecture: confirmation. - Pipeline sequencing -
mcp_pipelinechains multiple tool calls in a single round-trip with{{step.path}}interpolation between them. See Architecture: pipeline.
MCP Resources overlap
Section titled “MCP Resources overlap”quadslab exposes MCP resources for live state. This is not a tool, and the
migration extractor does not translate it. discord-mcp’s Gateway surface now
lists/reads an allowlisted discord://guild/{id}/info snapshot and emits
notifications for it; voice, presence, typing, and audit-log URIs remain
notification-only.
The quadslab adapter does not translate resource subscriptions -
they don’t appear in <category>Tools arrays, so they’re invisible to the
extraction step. Treat this as a migration gap and keep the old resource path
until a discord-mcp subscription has been verified end-to-end for your client.
See Architecture: gateway.
Step-by-step migration
Section titled “Step-by-step migration”-
Clone quadslab locally.
Terminal window git clone https://github.com/HardHeadHackerHead/discord-mcp.git ~/quadslab-clone -
Run the migration report.
Terminal window discord-mcp migrate --from quadslab --source ~/quadslab-cloneFor machine-readable output:
--json. -
Review the report.
The output groups tools into mapped / unmapped / manual review. Read every
mediumandlowconfidence note before swapping argument shapes. -
Update agent prompts.
Swap names per the mapped table. Pay particular attention to:
- The five
<verb>_<channel-type>tools (create_text_channel,create_voice_channel,create_category,create_forum_channel,create_announcement_channel) - they all collapse ontochannels_create_guild_channelwith a differenttypeinteger. Read the per-entry note for the type ID. - Embed-and-file variants (
send_embed,send_message_with_file,send_dm_embed) - all collapse ontomessages_sendwith the embed or attachment hoisted into the appropriate payload field.
- The five
-
Generate your new client config.
Terminal window discord-mcp init --client claude-desktopMerge the printed snippet, set
DISCORD_TOKEN, then restart your MCP client. -
Optional - enable Gateway notifications.
Terminal window discord-mcp serve --gatewayThis backs experimental
resources/subscribenotifications with Discord Gateway events. ConfigureALLOWED_GUILDSto list/read the guild-info snapshot; retain quadslab’s other resource paths until their notification- plus-REST-read flow is verified in your client.
Top 25 mappings
Section titled “Top 25 mappings”This is a representative cut; consult the adapter source for the complete maintained mapping table.
| quadslab tool | discord-mcp tool | Confidence | Notes |
|---|---|---|---|
list_guilds |
users_list_current_user_guilds |
high | - |
get_guild_info |
guild_get |
high | - |
edit_server |
guild_modify |
high | - |
list_channels |
channels_list |
high | - |
create_text_channel |
channels_create_guild_channel |
high | Pass type=0 (GUILD_TEXT). |
create_voice_channel |
channels_create_guild_channel |
high | Pass type=2 (GUILD_VOICE). |
create_category |
channels_create_guild_channel |
high | Pass type=4 (GUILD_CATEGORY). |
create_forum_channel |
channels_create_guild_channel |
high | Pass type=15 (GUILD_FORUM). |
delete_channel |
channels_delete |
high | - |
modify_channel |
channels_modify |
high | - |
set_channel_permissions |
channels_modify_permissions |
high | - |
lock_channel |
channels_modify_permissions |
medium | Lock = explicit deny SEND_MESSAGES on @everyone. |
unlock_channel |
channels_delete_permissions |
medium | Unlock = remove the @everyone deny overwrite. |
send_message |
messages_send |
high | - |
send_embed |
messages_send |
medium | Pass embeds[] in the messages_send payload. |
send_message_with_file |
messages_send |
medium | Attach files via attachments[] in the payload. |
edit_message |
messages_edit |
high | - |
bulk_delete_messages |
messages_bulk_delete |
high | - |
add_reaction |
reactions_create |
high | - |
list_members |
members_list |
high | - |
ban_member |
members_ban |
high | - |
bulk_ban |
members_bulk_ban |
high | - |
assign_role |
members_add_role |
high | - |
list_roles |
roles_list |
high | - |
get_audit_log |
audit_log_get |
high | - |
list_emojis |
emojis_list_guild |
high | - |
create_event |
events_create |
high | - |
list_automod_rules |
automod_list_rules |
high | - |
end_poll |
polls_end |
high | - |
get_onboarding |
onboarding_get |
high | - |
list_templates |
templates_list |
high | - |
create_template |
templates_create |
high | - |
delete_template |
templates_delete |
high | Requires __confirm:true and MCP_DRY_RUN=false. |
sync_template |
templates_sync |
high | - |
Notable low-confidence entries (always re-read the per-entry notes):
| quadslab tool | discord-mcp tool | Confidence | Notes |
|---|---|---|---|
bulk_assign_role |
members_add_role |
low | Iterate per user; discord-mcp has no bulk variant. |
bulk_remove_role |
members_remove_role |
low | Iterate per user. |
purge_user_messages |
messages_bulk_delete |
low | Compose: messages_search_recent + filter by author, then messages_bulk_delete. |
send_poll |
messages_send |
low | discord-mcp creates polls inline via the poll: {...} field on the send payload. |
send_dm |
messages_send |
low | Call users_create_dm first to get the DM channel ID. |
list_role_members |
members_list |
low | discord-mcp has no by-role lookup; list members and filter on role IDs client-side. |
list_stage_instances |
stage_instances_get |
low | discord-mcp has no list endpoint; fetch per channel. |
Gap analysis
Section titled “Gap analysis”About 10 quadslab tools have no discord-mcp equivalent and surface in the
report’s unmapped list. Reasons grouped by category:
- Presence (2) -
set_bot_status,get_bot_info. discord-mcp currently exposes neither presence tools nor a serve flag/environment setting for bot presence. Keep the old integration for this capability or omit it. - Helper composites (3) -
clone_channel,copy_channel_permissions,check_permissions. Compose from primitives:channels_get+channels_create_guild_channel+channels_modify_permissions. - Voice helpers (5) -
move_to_voice,disconnect_from_voice,set_voice_region,set_voice_status,list_voice_members. discord-mcp’svoice_*tools cover state and regions but not the channel-side helpers; partial overlap with low value, so left unmapped.
See also
Section titled “See also”- Adapter authoring guide
- discord-mcp tools (209)
- CLI reference:
migrate - Architecture: gateway - for the resource subscription overlap.
- Architecture: confirmation -
the exact registry of tools that require
__confirm: true.

