Skip to main content
Glama
cj-vana

Discord Server Setup MCP

by cj-vana

Discord Server Setup MCP

An MCP (Model Context Protocol) server for automating Discord server setup using the Discord Bot API. This server enables AI assistants like Claude to manage servers, channels, roles, permissions, and apply templates through a Discord bot.

Features

  • Cross-Platform: Works on Windows, Linux, and macOS

  • No Discord App Required: Operates via Discord Bot API (headless)

  • Guild Management: Discover, select, and manage multiple Discord servers

  • Channel Management: Create, edit, and delete channels and categories with permission overwrites

  • Role Management: Create, edit, delete, and reorder roles with full permission control

  • Permission Overwrites: Make channels/categories private, grant specific role access

  • Server Settings: Configure verification levels, content filters, and notification settings

  • Pre-built Templates: Apply ready-to-use server templates for common use cases

  • Fast & Reliable: Direct API calls with proper error handling

Pre-built Templates

Template

Description

Roles

Categories

Channels

Gaming

Comprehensive gaming community with competitive, streaming, and events sections

10

11

40+

Community

General community server for discussions and social interaction

6

6

20+

Business

Professional workspace for teams and organizations

6

6

18+

Study Group

Academic collaboration space for study groups and classes

5

5

15+

Prerequisites

System Requirements

  • Node.js 18.0.0 or higher

  • Discord Bot with appropriate permissions

Discord Bot Setup

  1. Create an application at https://discord.com/developers/applications

  2. Add a bot user and copy the bot token

  3. Enable ALL Privileged Gateway Intents in bot settings (Bot → Privileged Gateway Intents):

    • Presence Intent

    • Server Members Intent

    • Message Content Intent

  4. Generate an OAuth2 invite URL:

    • Go to OAuth2 → URL Generator

    • Select scopes: bot and applications.commands

    • Select Administrator permission (required for full server management)

  5. Invite the bot to your Discord server(s) using the generated URL

Important: The bot requires Administrator permission to manage all server settings, roles, channels, and permissions without restrictions.

Installation

Quick Install (One-Liner)

curl -fsSL https://raw.githubusercontent.com/cj-vana/discord-setup-mcp/main/install.sh | bash

This installs to ~/.discord-setup-mcp by default. Set DISCORD_MCP_DIR to customize:

DISCORD_MCP_DIR=/custom/path curl -fsSL https://raw.githubusercontent.com/cj-vana/discord-setup-mcp/main/install.sh | bash

Manual Install

# Clone the repository git clone https://github.com/cj-vana/discord-setup-mcp.git cd discord-setup-mcp # Install dependencies npm install # Build the project npm run build

Configuration

Set Bot Token

Option A: Environment Variable

macOS/Linux (temporary - current session only):

export DISCORD_BOT_TOKEN="your-bot-token-here"

macOS/Linux (permanent - add to shell profile):

# For zsh (default on macOS) echo 'export DISCORD_BOT_TOKEN="your-bot-token-here"' >> ~/.zshrc source ~/.zshrc # For bash echo 'export DISCORD_BOT_TOKEN="your-bot-token-here"' >> ~/.bashrc source ~/.bashrc

Windows Command Prompt (temporary):

set DISCORD_BOT_TOKEN=your-bot-token-here

Windows PowerShell (temporary):

$env:DISCORD_BOT_TOKEN = "your-bot-token-here"

Windows (permanent - System Environment Variables):

  1. Press Win + R, type sysdm.cpl, press Enter

  2. Go to Advanced tab → Environment Variables

  3. Under "User variables", click New

  4. Variable name: DISCORD_BOT_TOKEN

  5. Variable value: your-bot-token-here

  6. Click OK and restart your terminal

Option B: Configuration File

Create ~/.discord-mcp/config.json:

# Create the directory mkdir -p ~/.discord-mcp # Create the config file (replace with your actual token) cat > ~/.discord-mcp/config.json << 'EOF' { "discordToken": "your-bot-token-here", "defaultGuildId": "optional-default-server-id" } EOF # Secure the file (recommended) chmod 600 ~/.discord-mcp/config.json

On Windows, create %USERPROFILE%\.discord-mcp\config.json with the same JSON content.

The easiest method is to set the token directly in your Claude Desktop config:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{ "mcpServers": { "discord-setup": { "command": "node", "args": ["/path/to/discord-setup-mcp/dist/index.js"], "env": { "DISCORD_BOT_TOKEN": "your-bot-token-here" } } } }

Replace /path/to/discord-setup-mcp with the actual path where you cloned the repository.

Claude Code Configuration

# Add the MCP server claude mcp add discord-setup-mcp node /path/to/discord-setup-mcp/dist/index.js # Set the token (if not using config file or system env var) claude mcp add discord-setup-mcp node /path/to/discord-setup-mcp/dist/index.js -e DISCORD_BOT_TOKEN=your-bot-token-here

Set the token in your environment or use the config file method.

Usage

Basic Workflow

  1. List servers the bot has access to

  2. Select a server to work with

  3. Create channels, roles, or apply templates

Example Commands

List Discord servers Select the server named "My Server" Create a text channel called "general-chat" Create a role called "Moderator" with MANAGE_MESSAGES permission Make the "admin-chat" category private, only visible to the Admin role Apply the gaming template to this server

Tool Reference

Guild Management

list_guilds

List all servers the bot can access.

select_guild

Set the active server for subsequent operations.

Parameter

Type

Required

Description

guildId

string

Yes

Guild ID or name to select

get_guild_info

Get detailed server information including channels, roles, and settings.

Parameter

Type

Required

Description

guildId

string

No

Guild ID or name (uses current if not specified)

Channel Management

create_category

Create a channel category with optional permission overwrites.

Parameter

Type

Required

Description

name

string

Yes

Category name (1-100 characters)

guildId

string

No

Guild ID or name

position

number

No

Position in channel list

permissionOverwrites

array

No

Permission overwrites for roles/users

create_channel

Create a channel (text, voice, announcement, stage, forum).

Parameter

Type

Required

Description

name

string

Yes

Channel name (1-100 characters)

type

string

No

Channel type: text, voice, announcement, stage, forum (default: text)

guildId

string

No

Guild ID or name

categoryId

string

No

Parent category ID

topic

string

No

Channel topic (text channels, max 1024 chars)

nsfw

boolean

No

Age-restricted channel (default: false)

slowmode

number

No

Slowmode in seconds (0-21600)

bitrate

number

No

Voice channel bitrate (8000-384000)

userLimit

number

No

Voice channel user limit (0-99, 0=unlimited)

position

number

No

Position in channel list

permissionOverwrites

array

No

Permission overwrites for roles/users

edit_channel

Modify an existing channel's settings and permissions.

Parameter

Type

Required

Description

channelId

string

Yes

Channel ID to edit

guildId

string

No

Guild ID or name

name

string

No

New channel name

topic

string

No

New channel topic

nsfw

boolean

No

Age-restricted setting

slowmode

number

No

Slowmode in seconds

bitrate

number

No

Voice channel bitrate

userLimit

number

No

Voice channel user limit

position

number

No

New position

categoryId

string

No

Move to category (null to remove)

permissionOverwrites

array

No

Replace permission overwrites

delete_channel

Delete a channel (cannot be undone).

Parameter

Type

Required

Description

channelId

string

Yes

Channel ID to delete

guildId

string

No

Guild ID or name

Role Management

create_role

Create a role with permissions.

Parameter

Type

Required

Description

name

string

Yes

Role name (1-100 characters)

guildId

string

No

Guild ID or name

color

string/number

No

Hex color (#FF0000) or integer

hoist

boolean

No

Display separately in member list

mentionable

boolean

No

Allow anyone to mention this role

permissions

array

No

Array of permission names

position

number

No

Position in role hierarchy

edit_role

Modify an existing role.

Parameter

Type

Required

Description

roleId

string

Yes

Role ID to edit

guildId

string

No

Guild ID or name

name

string

No

New role name

color

string/number

No

New color

hoist

boolean

No

Display separately setting

mentionable

boolean

No

Mentionable setting

permissions

array

No

Replace all permissions

position

number

No

New position in hierarchy

delete_role

Delete a role (cannot be undone).

Parameter

Type

Required

Description

roleId

string

Yes

Role ID to delete

guildId

string

No

Guild ID or name

reorder_roles

Reorder roles in the hierarchy.

Parameter

Type

Required

Description

rolePositions

array

Yes

Array of {roleId, position} objects

guildId

string

No

Guild ID or name

Server Settings

update_server_settings

Update multiple server settings at once.

set_verification_level

Set member verification level (0-4).

set_content_filter

Set explicit content filter level.

set_default_notifications

Set default notification setting for new members.

Templates

list_templates

List available pre-built templates.

preview_template

View template details before applying.

Parameter

Type

Required

Description

templateId

string

Yes

Template ID to preview

apply_template

Apply a template to a server.

Parameter

Type

Required

Description

templateId

string

Yes

Template ID to apply

guildId

string

No

Guild ID or name

Permission Overwrites

Permission overwrites allow you to customize access to channels and categories. Use them to:

  • Make channels private (deny @everyone VIEW_CHANNEL)

  • Grant specific roles access

  • Restrict certain actions for specific users/roles

Permission Overwrite Format

{ "id": "role-or-user-id", "type": "role", "allow": ["VIEW_CHANNEL", "SEND_MESSAGES"], "deny": ["MANAGE_MESSAGES"] }

Field

Type

Description

id

string

Role ID or User ID

type

string

role or member

allow

array

Permissions to explicitly allow

deny

array

Permissions to explicitly deny

Example: Make a Category Private

{ "channelId": "category-id", "permissionOverwrites": [ { "id": "everyone-role-id", "type": "role", "deny": ["VIEW_CHANNEL"] }, { "id": "admin-role-id", "type": "role", "allow": ["VIEW_CHANNEL", "SEND_MESSAGES", "MANAGE_MESSAGES"] } ] }

Available Permissions

Use these permission names in role permissions and permission overwrites:

General Permissions

Permission

Description

ADMINISTRATOR

Full server access (bypasses all permissions)

VIEW_CHANNEL

View channels and read messages

MANAGE_CHANNELS

Create, edit, delete channels

MANAGE_ROLES

Create, edit, delete roles below bot's role

MANAGE_GUILD

Change server settings

VIEW_AUDIT_LOG

View server audit log

VIEW_GUILD_INSIGHTS

View server insights

MANAGE_WEBHOOKS

Create, edit, delete webhooks

MANAGE_GUILD_EXPRESSIONS

Manage emojis and stickers

CREATE_INSTANT_INVITE

Create invite links

CHANGE_NICKNAME

Change own nickname

MANAGE_NICKNAMES

Change other members' nicknames

KICK_MEMBERS

Kick members from server

BAN_MEMBERS

Ban members from server

MODERATE_MEMBERS

Timeout members

MANAGE_EVENTS

Create and manage events

Text Channel Permissions

Permission

Description

SEND_MESSAGES

Send messages in text channels

SEND_TTS_MESSAGES

Send text-to-speech messages

MANAGE_MESSAGES

Delete messages, pin messages

EMBED_LINKS

Embed links in messages

ATTACH_FILES

Upload files

READ_MESSAGE_HISTORY

Read past messages

MENTION_EVERYONE

Use @everyone and @here

USE_EXTERNAL_EMOJIS

Use emojis from other servers

USE_EXTERNAL_STICKERS

Use stickers from other servers

ADD_REACTIONS

Add reactions to messages

MANAGE_THREADS

Manage and delete threads

CREATE_PUBLIC_THREADS

Create public threads

CREATE_PRIVATE_THREADS

Create private threads

SEND_MESSAGES_IN_THREADS

Send messages in threads

USE_APPLICATION_COMMANDS

Use slash commands

Voice Channel Permissions

Permission

Description

CONNECT

Connect to voice channels

SPEAK

Speak in voice channels

STREAM

Screen share and video

USE_VAD

Use voice activity detection

PRIORITY_SPEAKER

Be heard over others

MUTE_MEMBERS

Mute other members

DEAFEN_MEMBERS

Deafen other members

MOVE_MEMBERS

Move members between channels

REQUEST_TO_SPEAK

Request to speak in stage channels

USE_EMBEDDED_ACTIVITIES

Use activities

USE_SOUNDBOARD

Use soundboard

USE_EXTERNAL_SOUNDS

Use external sounds

SEND_VOICE_MESSAGES

Send voice messages

Examples

Create a Complete Team Server Structure

1. Select my Discord server 2. Create these roles with permissions: - "Admin" with ADMINISTRATOR - "Moderator" with MANAGE_MESSAGES, KICK_MEMBERS, MUTE_MEMBERS - "Member" with VIEW_CHANNEL, SEND_MESSAGES, CONNECT, SPEAK 3. Create these categories, all private to @everyone but visible to Member role: - "General" with channels: welcome, rules, announcements - "Discussion" with channels: general-chat, off-topic, help - "Voice" with voice channels: General Voice, Gaming, AFK 4. Make the "Admin" category only visible to Admin role

Set Up Private Channels

Make the "staff-chat" channel private: - Deny VIEW_CHANNEL to @everyone - Allow VIEW_CHANNEL, SEND_MESSAGES, MANAGE_MESSAGES to Moderator role - Allow VIEW_CHANNEL, SEND_MESSAGES, ADMINISTRATOR to Admin role

Configure Role Hierarchy

Reorder roles so Admin is highest, then Moderator, then Member, then @everyone

Troubleshooting

Bot Not Connecting

  • Verify bot token is correct

  • Check that ALL Privileged Gateway Intents are enabled in Discord Developer Portal

  • Ensure the bot user is created (not just the application)

Can't Manage Roles/Channels

  • Ensure bot has Administrator permission

  • Bot's role must be higher than roles it manages (drag bot role up in server settings)

  • Verify the bot was invited with correct OAuth2 scopes (bot and applications.commands)

Permission Errors

  • Grant the bot Administrator permission for unrestricted access

  • Bot can only manage roles below its highest role in the hierarchy

  • Drag the bot's role higher in Server Settings → Roles

Guild Not Found

  • Confirm bot is in the server

  • Try using guild ID instead of name

  • Enable Discord Developer Mode to copy IDs (User Settings → Advanced)

Debug Logging

Debug logs are written to /tmp/discord-mcp-debug.log for troubleshooting permission and API issues.

Security

  • Never share your bot token - treat it like a password

  • Use environment variables - don't commit tokens to version control

  • Regenerate tokens if compromised - reset in Discord Developer Portal

  • Limit server access - only add the bot to servers you trust

  • Restrict file permissions - chmod 600 ~/.discord-mcp/config.json

Architecture

  • Runtime: Node.js 18+

  • Language: TypeScript

  • Discord API: discord.js v14

  • MCP SDK: @modelcontextprotocol/sdk

  • Validation: Zod

See CLAUDE.md for development documentation.

Contributing

Contributions are welcome! Please read CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE file for details.

Acknowledgments

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cj-vana/discord-setup-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server