From discord
Apply a pre-built server template (or a custom JSON spec) to the active Discord guild. Bulk-creates roles, categories, channels, welcome screen, AutoMod rules, and scheduled events. Idempotent — anything matching by name is skipped.
npx claudepluginhub jcodesmore/jcodesmore-plugins --plugin discordThis skill uses the workspace's default tool permissions.
You're applying a server template to the active guild. A template is a JSON spec bundling roles, categories, channels, welcome screen, AutoMod rules, and scheduled events. Apply is **idempotent and create-only** — anything matching an existing entity by name is left alone, never modified or deleted.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
You're applying a server template to the active guild. A template is a JSON spec bundling roles, categories, channels, welcome screen, AutoMod rules, and scheduled events. Apply is idempotent and create-only — anything matching an existing entity by name is left alone, never modified or deleted.
Call mcp__discord__discord_get_active_guild.
isError: true ("no active guild") → tell the user to run /discord:setup first and stop.<active_guild_name>.If the user already named one, skip to Step 3.
Otherwise, call mcp__discord__discord_list_templates to get the current bundled list, then ask:
Which template do you want to apply to
<guild.name>?
- gaming-community — multi-game lobby with squad voice rooms
- study-group — subject channels and quiet study halls
- dev-community — language-organized dev hangout with showcase
- content-creator — creator hub with tiered subscriber channels
Or paste a custom JSON spec and I'll apply that instead.
(Use the actual list from discord_list_templates — the four above are the current starters but the list may grow.)
If the user is hesitant or wants to see the breakdown first, call mcp__discord__discord_apply_template with template_name (or spec) AND dry_run: true. Show the preview:
Dry run for
<template_name>on<guild.name>:
- roles: Mod, Squad Leader, Veteran
- categories: Welcome, General, Games, Voice Rooms
- channels: rules, announcements, introductions, general, …
- AutoMod rules: No slurs, Mention spam
Apply for real?
Wait for confirmation before Step 4. Don't apply until they say yes.
Call mcp__discord__discord_apply_template with template_name (or spec), no dry_run, and a clear reason like "Applied via /discord:apply-template by user request.".
Read the returned counts and summary and report to the user grouped by status. Example:
Done. Here's what happened in
<guild.name>:Created: 3 roles, 4 categories, 12 channels, 2 AutoMod rules Skipped (already existed): 1 channel (general), 1 role (Mod) Failed: (none)
If anything failed, list each failure with its detail so the user can see Discord's error message and fix the underlying cause (perms, missing Community feature, etc.).
If welcome_screen.warning is set, call it out — usually means a referenced channel name didn't get created (check the channels[] failures).
After a successful apply, offer:
Want me to:
- Reorder roles or channels (
discord_modify_role_positions/discord_modify_channel_positions)- Set channel-specific permission overwrites (e.g., hide
subs-onlyfrom@everyone)- Send a welcome embed to
#announcements- Schedule an event in one of the new voice/stage channels
If the user pastes a JSON spec inline, validate the shape mentally before passing it as spec (the tool will reject malformed input but a friendlier upfront message is nice). Spec shape:
{
"guild": { "verification_level": "low", "default_message_notifications": "only_mentions" },
"roles": [
{ "name": "Mod", "color": "#5865F2", "permissions": ["kick_members"], "hoist": true }
],
"categories": [{ "name": "Welcome" }],
"channels": [
{ "name": "rules", "type": "text", "category": "Welcome", "topic": "..." }
],
"welcome_screen": {
"enabled": true,
"description": "Welcome!",
"channels": [{ "channel": "rules", "description": "Start here", "emoji_name": "📜" }]
},
"automod_rules": [
{ "name": "No slurs", "trigger": "keyword_preset", "presets": ["slurs"], "block_message": "No." }
],
"scheduled_events": [
{ "name": "Weekly hangout", "type": "voice", "channel": "Lobby",
"scheduled_start_time": "2026-06-01T19:00:00Z" }
]
}
Cross-references go by name, not ID:
channels[].category → must match a categories[].namewelcome_screen.channels[].channel → must match a channels[].namescheduled_events[].channel → must match a channels[].nameautomod_rules[].alert_channel / .exempt_channels[] → channel namesautomod_rules[].exempt_roles[] → role namesNames are matched case-insensitively. The macro resolves them at apply time.
discord_delete_role / discord_delete_channel first — but don't run those without explicit confirmation.welcome_screen fails, the guild probably doesn't have the Community feature enabled. Tell the user to enable it under Server Settings → Enable Community.