discord-app-setup
Assists in setting up a Discord bot and connecting it to your assistant. Guides through application creation and credential management.
Install
mkdir -p .claude/skills/discord-app-setup && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11216" && unzip -o skill.zip -d .claude/skills/discord-app-setup && rm skill.zipInstalls to .claude/skills/discord-app-setup
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Connect a Discord bot to the assistant via the Discord Gateway with guided application creation and intent configurationKey capabilities
- →Create Discord applications
- →Configure bot intents
- →Store bot tokens securely
- →Invite bots to servers
How it works
It guides the user through the Discord developer portal to configure intents and securely store tokens for Gateway connectivity.
Inputs & outputs
When to use discord-app-setup
- →Create new Discord bot
- →Configure Discord bot intents
- →Connect bot to assistant
- →Verify Discord connection
About this skill
You are helping your user create a Discord application and connect a Discord bot to the assistant via the Discord Gateway. Walk through each step below.
CRITICAL: Follow these steps strictly in order. Do NOT combine steps, skip ahead, or ask for the bot token before the bot user has been configured. The token is shown only once after reset — collect it the moment the user generates it, never before.
Value Classification
| Value | Type | Secret? |
|---|---|---|
| Bot Token | Credential | Yes |
The Bot Token is the only value that needs to be persisted. Always collect it via the assistant's secure credential prompt — never accept it pasted in plaintext chat.
The Application ID and Public Key are derivable from the bot token at any time via Discord's API and do not need to be stored separately.
Setup Steps
Step 0: Check Existing Configuration
Before starting, run the check script:
bun skills/discord-app-setup/scripts/check-config.ts
The script outputs JSON: { "configured": boolean, "details": string, "error"?: string }.
- If
erroris present, stop. The check could not run, so the credential state is unknown, andconfigured: falsehere does not mean "not set up". Do not start the setup walkthrough. It will not fix this, and re-running setup on an app that already has a token forces a needless token reset that breaks any other deployment using it.cli_not_foundmeans theassistantcommand is missing from this environment's PATH. That is an installation problem. Report it as one, quotedetails, and stop.cli_failedorunparseable_outputmeans the CLI ran but did not answer usefully. Reportdetailsverbatim and stop.
- If
configuredistrue— Discord is already set up. Offer to verify the connection or reconfigure. - If
configuredisfalsewith noerror, the check ran and found no token. Continue to Step 0.5.
Step 0.5: Prefer the In-Product Wizard
If an interactive client is connected, call ui_show with surface_type: "channel_setup" and data: { channel: "discord" }. This opens the Discord setup wizard in the side panel: create the app, connect the token through a masked field, add the bot to a server, and finish with a hand-back to identity verification, all without the token entering chat. The wizard is non-blocking and auto-notifies you when it is closed.
⚠️ Tool call first, announcement second, in the same turn. Do not claim the wizard is open until the ui_show call has returned success. After success, tell the user:
I've opened the Discord setup wizard in the side panel. It walks you through creating the app, connecting its bot token, and adding the bot to a server, and its last step hands verification back to me. It will notify me when you close it; ask me here if you hit a snag.
When a notification saying the user completed the wizard and asked to verify their identity arrives, the wizard's finish step was reached: the user confirmed the bot joined a server and pressed its Verify me action. Re-run the Step 0 check script to confirm a token was stored, then skip the invite question below and go straight to Step 6 (identity verification) without re-asking which channel.
When a plain wizard-closed notification arrives, re-run the Step 0 check script to confirm a token was stored. A stored token completes Steps 1 through 4; the invite (Step 5) happens on the wizard's Add to server step, and closing the panel does not prove it happened. Ask the user directly:
Did you add the bot to a server in the wizard? If not, I can give you the install link again.
If they did not, run the Step 5 invite script and have them complete it before continuing. Only then continue at Step 6 (identity verification). Do not mark setup complete while the bot is in no server.
If ui_show fails (no interactive client, or the surface is rejected), fall back to the chat-guided flow below: it collects the token through the secure credential prompt instead.
Step 1: Create the Discord Application
Tell the user:
Open https://discord.com/developers/applications and click New Application in the top-right. Give it a name (this is how the bot appears to users) and accept the Developer Terms of Service. After creation you'll land on the application's General Information page.
Wait for the user to confirm they've created the app before proceeding. Discord does not support manifest-based creation — the rest of the configuration happens step by step in the portal.
Offer the assistant's avatar as the app icon. General Information is where Discord takes one, so this is the moment to mention it; the wizard path in Step 0.5 shows the same thing on its own create step. The rendered PNG sits at $VELLUM_WORKSPACE_DIR/data/avatar/avatar-image.png and is 512x512 for a character avatar. Tell the user:
While you're on General Information, you can set the bot's icon to your assistant's avatar. I can point you at the file if you'd like it.
Skip this if the assistant has no avatar set. It is cosmetic, so do not block setup on it.
Step 2: Configure the Bot User
Discord automatically attaches a Bot user to every new application. This integration needs no privileged intents, so the only thing to do here is confirm all three are off.
Direct the user:
In the left sidebar click Bot. Scroll to Privileged Gateway Intents and leave all three OFF:
- ⬜ Presence Intent
- ⬜ Server Members Intent
- ⬜ Message Content Intent
If any are already enabled, turn them off and click Save Changes.
Why none are needed: the assistant's Discord client identifies with the non-privileged GUILDS, GUILD_MESSAGES, and DIRECT_MESSAGES intents only. It acts on messages that mention the bot and on DMs sent to it, and Discord exempts four cases from the Message Content restriction: messages that mention your app, DMs with your app, your app's own messages, and the target of a message context-menu command. Every message the assistant reads falls inside that exemption and already arrives with full text. Server Members would deliver GUILD_MEMBER_* events that nothing here consumes.
Turning them on would grant access the software never reads, and would opt the app into Discord's privileged-intent review (with annual reapplication) once it is visible to more than 10,000 users.
ℹ️ Two different Discord thresholds are easy to confuse. Bot verification is required past 100 servers. Privileged-intent review is required past 10,000 unique users who can see the app. With no privileged intents enabled, the second does not apply to this integration at all.
Wait for the user to confirm the intents are off before proceeding.
Step 3: Generate & Collect the Bot Token
Do NOT skip ahead. The bot token is the only path to the bot's identity — it must be collected immediately on generation, before the user navigates away from the page.
Direct the user:
On the same Bot page, click Reset Token and confirm. Discord displays the token once, right then: copy it now and paste it into the secure prompt that appears in your assistant.
There is no Copy or View Token button for a token that already exists. Once the token has been shown and you leave the page, Reset is the only way to get a usable value again.
⚠️ If this application is already connected somewhere else, Reset Token invalidates the old token immediately and breaks that deployment. Only reset if you are willing to reconnect anything else using this app.
Run the store script:
bun skills/discord-app-setup/scripts/store-bot-token.ts
The script opens the assistant's secure credential prompt, validates the entry, and stores it under discord_channel:bot_token. Exit code 130 means the user cancelled the prompt — nothing was stored. That's a valid choice, not an error: ask whether they'd like to try again rather than treating it as a failure. Any other non-zero exit is a real failure — ask the user to reset the token and re-run.
Step 4: Validate the Bot Token
Run:
bun skills/discord-app-setup/scripts/validate-token.ts
The script:
- Calls
GET https://discord.com/api/v10/users/@meto validate the token and capturebotUserId,botUsername - Calls
GET https://discord.com/api/v10/oauth2/applications/@meto capture the application'sid,name, andverifyKey(public key) - Prints a summary of the bot + application identity to stdout
- Exits 0 on success
If the script exits with a 401, the token is invalid — ask the user to reset and re-enter (repeat Step 3). The script does not persist any of the captured metadata; it's all derivable from the bot token on demand.
Step 5: Generate OAuth Invite URL & Add Bot to a Server
The bot needs to be invited to a Discord server (guild) before it can receive or send messages.
Run:
bun skills/discord-app-setup/scripts/print-invite-url.ts
This calls GET /oauth2/applications/@me with the stored bot token to discover the application and prints the invite URL. Which URL depends on the app:
- The app has Default Install Settings (configured on the portal's Installation page): the URL carries only the client ID, so the grant is whatever those settings say. This is Discord's current model, and it means a person who edits those settings sees their edit take effect instead of being silently overridden by parameters in the URL. Because those settings now own the grant, the script re-checks them: it refuses to print a URL when they omit the
botscope (installing would add no bot user at all), and it warns on stderr when they request scopes this integration never uses, grant Administrator, or omit permissions the integration exercises.gdm.joinin particular would let the bot join group DMs, which inbound handling treats as private DMs. Have the user make the named edit on
Content truncated.
When not to use it
- →When Discord is not the target platform
- →When bot token is already configured
Prerequisites
Limitations
- →Requires manual portal interaction
- →Token reset invalidates previous credentials
How it compares
It enforces secure token handling via a credential prompt, preventing accidental exposure in chat.
Compared to similar skills
discord-app-setup side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| discord-app-setup (this skill) | 0 | 4mo | Review | Beginner |
| telegram-bot-builder | 106 | 8mo | Review | Intermediate |
| mcp-integration | 21 | 10mo | Review | Intermediate |
| n8n-workflow-patterns | 16 | 3mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
telegram-bot-builder
davila7
Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot.
mcp-integration
anthropics
This skill should be used when the user asks to "add MCP server", "integrate MCP", "configure MCP in plugin", "use .mcp.json", "set up Model Context Protocol", "connect external service", mentions "${CLAUDE_PLUGIN_ROOT} with MCP", or discusses MCP server types (SSE, stdio, HTTP, WebSocket). Provides comprehensive guidance for integrating Model Context Protocol servers into Claude Code plugins for external tool and service integration.
n8n-workflow-patterns
czlonkowski
Proven workflow architectural patterns from real n8n workflows. Use when building new workflows, designing workflow structure, choosing workflow patterns, planning workflow architecture, or asking about webhook processing, HTTP API integration, database operations, AI agent workflows, or scheduled tasks.
n8n-code-javascript
czlonkowski
Write JavaScript code in n8n Code nodes. Use when writing JavaScript in n8n, using $input/$json/$node syntax, making HTTP requests with $helpers, working with dates using DateTime, troubleshooting Code node errors, or choosing between Code node modes.
n8n-expression-syntax
czlonkowski
Validate n8n expression syntax and fix common errors. Use when writing n8n expressions, using {{}} syntax, accessing $json/$node variables, troubleshooting expression errors, or working with webhook data in workflows.
n8n-node-configuration
czlonkowski
Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node_essentials and get_node_info, or learning common configuration patterns by node type.