Skip to main content
plugin official · Anthropic

discord — Claude Code plugin: what it does, how to install

A Discord messaging bridge for Claude Code with built-in access control. Forwards incoming messages to the assistant and provides tools to reply, react, and handle attachments.

Install into Claude Code · Plugin marketplace All methods and platforms ↓
/plugin install discord@claude-plugins-official
/plugin marketplace add anthropics/claude-plugins-official
Open on GitHub

What discord does

The plugin connects a Discord bot to Claude Code through an MCP server running on Bun. Incoming Discord messages get routed straight to the assistant. The model can reply to threads, attach up to 10 files (25MB each) using reply, add reactions with react, edit previous outputs via edit_message, and fetch up to 100 historical messages with fetch_messages. Attachments download on demand into ~/.claude/channels/discord/inbox/ via download_attachment.

Bun must be installed beforehand to run the server. In the Discord Developer Portal, Message Content Intent must be enabled under Privileged Gateway Intents, or the bot receives empty text strings.

Without launching Claude Code with --channels plugin:discord@claude-plugins-official, the bridge will not connect. Pairing starts with /discord:access pair <code> upon receiving a direct message, after which you switch the policy to allowlist to block unsolicited messages.

What it helps with

  • route Discord direct messages and guild messages to Claude Code
  • send replies and attachments up to 25MB with native threading
  • download Discord message attachments into ~/.claude/channels/discord/inbox/
  • restrict bot interactions using pairing codes and allowlists

Example prompts for the agent

  • /discord:access pair 123456
  • /discord:access policy allowlist
  • Download attachments from the latest Discord message and reply

How to install discord

Plugin marketplace

/plugin install discord@claude-plugins-official
/plugin marketplace add anthropics/claude-plugins-official

Step by step, with commands for each platform: Claude Code plugins: marketplaces, installing, and building your own

Questions about discord

How to install discord in Claude Code?

First, add the marketplace repository with /plugin marketplace add anthropics/claude-plugins-official. Next, install the plugin by running /plugin install discord@claude-plugins-official.

What does the discord plugin do?

It bridges Discord to Claude Code using an MCP server, allowing the assistant to receive messages, send threaded replies, edit bot messages, and handle files.

What prerequisites are required before configuring discord?

You need Bun on your system and a Discord bot token with Message Content Intent enabled in the Developer Portal. Once ready, pass the token via /discord:configure <token>.

Source text

discord · Apache-2.0
# Discord

Connect a Discord bot to your Claude Code with an MCP server.

When the bot receives a message, the MCP server forwards it to Claude and provides tools to reply, react, and edit messages.

## Prerequisites

- [Bun](https://bun.sh) — the MCP server runs on Bun. Install with `curl -fsSL https://bun.sh/install | bash`.

## Quick Setup
> Default pairing flow for a single-user DM bot. See [ACCESS.md](./ACCESS.md) for groups and multi-user setups.

**1. Create a Discord application and bot.**

Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click **New Application**. Give it a name.

Navigate to **Bot** in the sidebar. Give your bot a username.

Scroll down to **Privileged Gateway Intents** and enable **Message Content Intent** — without this the bot receives messages with empty content.

**2. Generate a bot token.**

Still on the **Bot** page, scroll up to **Token** and press **Reset Token**. Copy the token — it's only shown once. Hold onto it for step 5.

**3. Invite the bot to a server.**

Discord won't let you DM a bot unless you share a server with it.

Navigate to **OAuth2** → **URL Generator**. Select the `bot` scope. Under **Bot Permissions**, enable:

- View Channels
- Send Messages
- Send Messages in Threads
- Read Message History
- Attach Files
- Add Reactions

Integration type: **Guild Install**. Copy the **Generated URL**, open it, and add the bot to any server you're in.

> For DM-only use you technically need zero permissions — but enabling them now saves a trip back when you want guild channels later.

**4. Install the plugin.**

These are Claude Code commands — run `claude` to start a session first.

Install the plugin:
```
/plugin install discord@claude-plugins-official
```

**5. Give the server the token.**

```
/discord:configure MTIz...
```

Writes `DISCORD_BOT_TOKEN=...` to `~/.claude/channels/discord/.env`. You can also write that file by hand, or set the variable in your shell environment — shell takes precedence.

> To run multiple bots on one machine (different tokens, separate allowlists), point `DISCORD_STATE_DIR` at a different directory per instance.

**6. Relaunch with the channel flag.**

The server won't connect without this — exit your session and start a new one:

```sh
claude --channels plugin:discord@claude-plugins-official
```

**7. Pair.**

With Claude Code running from the previous step, DM your bot on Discord — it replies with a pairing code. If the bot doesn't respond, make sure your session is running with `--channels`. In your Claude Code session:

```
/discord:access pair <code>
```

Your next DM reaches the assistant.

**8. Lock it down.**

Pairing is for capturing IDs. Once you're in, switch to `allowlist` so strangers don't get pairing-code replies. Ask Claude to do it, or `/discord:access policy allowlist` directly.

## Access control

See **[ACCESS.md](./ACCESS.md)** for DM policies, guild channels, mention detection, delivery config, skill commands, and the `access.json` schema.

Quick reference: IDs are Discord **snowflakes** (numeric — enable Developer Mode, right-click → Copy ID). Default policy is `pairing`. Guild channels are opt-in per channel ID.

## Tools exposed to the assistant

| Tool | Purpose |
| --- | --- |
| `reply` | Send to a channel. Takes `chat_id` + `text`, optionally `reply_to` (message ID) for native threading and `files` (absolute paths) for attachments — max 10 files, 25MB each. Auto-chunks; files attach to the first chunk. Returns the sent message ID(s). |
| `react` | Add an emoji reaction to any message by ID. Unicode emoji work directly; custom emoji need `<:name:id>` form. |
| `edit_message` | Edit a message the bot previously sent. Useful for "working…" → result progress updates. Only works on the bot's own messages. |
| `fetch_messages` | Pull recent history from a channel (oldest-first). Capped at 100 per call. Each line includes the message ID so the model can `reply_to` it; messages with attachments are marked `+Natt`. Discord's search API isn't exposed to bots, so this is the only lookback. |
| `download_attachment` | Download all attachments from a specific message by ID to `~/.claude/channels/discord/inbox/`. Returns file paths + metadata. Use when `fetch_messages` shows a message has attachments. |

Inbound messages trigger a typing indicator automatically — Discord shows
"botname is typing…" while the assistant works on a response.

## Attachments

Attachments are **not** auto-downloaded. The `<channel>` notification lists
each attachment's name, type, and size — the assistant calls
`download_attachment(chat_id, message_id)` when it actually wants the file.
Downloads land in `~/.claude/channels/discord/inbox/`.

Same path for attachments on historical messages found via `fetch_messages`
(messages with attachments are marked `+Natt`).

© anthropics · Apache-2.0 · anthropics/claude-plugins-official

Similar plugins

All plugins for Agent setup: memory, context, orchestration →

From the same set123

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor