MCP Hub
Back to servers

Discord MCP Server

Enables AI agents to send and receive Discord messages using a user's account to facilitate real-time testing and development of bot commands directly from an editor. It provides tools for listing guilds, managing messages, and monitoring bot responses within Discord channels.

glama
Updated
Mar 15, 2026

Discord MCP Server for VS Code

An MCP (Model Context Protocol) server that lets VS Code Copilot (or any MCP-compatible agent) send and receive Discord messages as your own user account — enabling real-time testing of Discord bot commands directly from your editor.

⚠️ Discord ToS Notice: Automating a user account ("self-botting") is against Discord's Terms of Service. This tool is intended strictly for local development/testing of your own bots on your own servers. Do not use it for spam, abuse, or on servers you don't control. Use at your own risk.


Why a user account?

Many bot commands check server state tied to the command invoker — e.g., message.member.voice.channel to verify the user is in a voice channel before playing audio. A separate bot account cannot satisfy these checks. Messages must originate from your real Discord user to test these commands properly.


Prerequisites

  • Node.js 18+ (uses native fetch)
  • VS Code with GitHub Copilot (or another MCP host like Claude Desktop / Cursor)
  • Your Discord user token (see below)

Obtaining your Discord user token

  1. Open Discord in a browser or the desktop app
  2. Open Developer Tools (F12 / Ctrl+Shift+I)
  3. Go to the Network tab
  4. Perform any action in Discord (send a message, switch channels)
  5. Find any request to discord.com/api
  6. Copy the Authorization header value — that's your user token

Your user token grants full access to your Discord account. Treat it like a password and never commit it to version control.


Installation

# 1. Clone the repository
git clone https://github.com/masonbesmer/code-discord-mcp.git
cd code-discord-mcp

# 2. Install dependencies
npm install

# 3. Build
npm run build

# 4. Set your Discord user token
cp .env.example .env
# Edit .env and set DISCORD_USER_TOKEN=your-token-here

VS Code Integration

The repository includes .vscode/mcp.json which automatically registers the server with VS Code. The server reads your token from the DISCORD_USER_TOKEN environment variable.

Make sure the variable is set in your shell before launching VS Code:

# macOS / Linux
export DISCORD_USER_TOKEN="your-token-here"
code .

# Windows PowerShell
$env:DISCORD_USER_TOKEN = "your-token-here"
code .

Available Tools

ToolDescription
send_messageSend a text message to a Discord channel
read_messagesRead recent messages from a channel
wait_for_responseSend a command and wait for a bot response
list_channelsList channels in a guild
list_guildsList guilds your account is in
delete_messageDelete a message (with confirmation prompt)

Available Resources

ResourceDescription
discord://guild/{guildId}/channelsChannel list for a guild
discord://channel/{channelId}/recentLast 25 messages in a channel

Example Workflow

  1. Open your Discord bot project in VS Code
  2. Start a Copilot Chat session in Agent Mode
  3. Ask: "Send !help to my #bot-testing channel and show me what my bot responds with"
  4. Copilot will:
    • Call list_guilds to find your server
    • Call list_channels to find #bot-testing
    • Call wait_for_response with !help
    • Show you the bot's response inline in the chat

Development

# Watch mode (recompiles on file changes)
npm run dev

# Run tests
npm test

# Debug with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js

Security

ConcernMitigation
Token exposureRead from env var only; never logged or returned in responses; .env in .gitignore
Discord ToSLocal dev/testing on your own servers only
Rate limitingAutomatic retry after retry_after on HTTP 429; 500ms polling interval
Accidental pingsallowed_mentions: { parse: [] } prevents @everyone/@here pings
Destructive actionsdelete_message has destructiveHint: true — VS Code shows a confirmation dialog
Stdout pollutionAll diagnostic output goes to stderr; stdout is reserved for MCP JSON-RPC

Dependencies

PackagePurpose
@modelcontextprotocol/sdkMCP server framework (stdio transport, tool registration)
zodInput schema validation
typescript (dev)TypeScript compiler
@types/node (dev)Node.js type definitions
vitest (dev)Test runner

No Discord library needed. All Discord API calls use Node 18+ native fetch.

Reviews

No reviews yet

Sign in to write a review