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 29 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 current Gateway
surface emits experimental subscription notifications, but those live URIs
are not available through its resources/list or resources/read catalog.
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. It does not expose quadslab’s live resources throughresources/listorresources/read; retain the old resource path until the 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 | - |
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 14 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. - Templates (4) -
list_templates,create_template,delete_template,sync_template. Discord guild templates have no discord-mcp tool wrapper today. Workaround: continue calling the REST endpoint directly, or omit the feature. - 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 (192)
- CLI reference:
migrate - Architecture: gateway - for the resource subscription overlap.
- Architecture: confirmation -
the exact registry of tools that require
__confirm: true.