Discord plugin tools work, but inbound notifications/claude/channel are not injected into the session

Resolved 💬 3 comments Opened Mar 27, 2026 by ns3154 Closed Mar 27, 2026

Description

I configured the official Discord plugin in Claude Code and found that:

  • the Discord bot can come online successfully
  • Discord MCP tools work (for example reply)
  • but inbound messages sent from Discord to the bot are not injected into the current session
  • permission-related Discord interactions also do not advance the current session

This looks like:

  • standard MCP tool transport works
  • but experimental claude/channel / claude/channel/permission notification bridging does not

Environment

  • Claude Code CLI
  • macOS Darwin 24.6.0
  • shell: zsh
  • bun version: 1.3.11
  • official Discord plugin version: 0.0.4

The Discord plugin is enabled locally, and the bot token, allowlist, and Message Content Intent are all configured correctly.

What I verified

1. The Discord bot can log in successfully

When I run the plugin script manually, I see:

discord channel: gateway connected as cc#1872

Previously, before enabling Message Content Intent, it failed with:

discord channel: login failed: Error: Used disallowed intents

After enabling Message Content Intent, login succeeds.

2. Discord MCP tools work in the hosted session

In the normal Claude Code hosted session, I can successfully use Discord tools such as reply(chat_id, text).

Discord receives the message correctly.

This shows that:

  • the plugin process is being hosted by Claude Code
  • the MCP tool path is working

3. When the plugin is run manually, inbound Discord messages are captured and converted into channel notifications

I ran the plugin for a short window like this:

python3 -c 'import time; time.sleep(20)' | bun "/Users/.../discord/0.0.4/server.ts"

During that window, I sent a DM to the bot, and the plugin emitted:

{"method":"notifications/claude/channel","params":{"content":"测试","meta":{"chat_id":"1487099066042159255","message_id":"1487101777500180591","user":"_nsssssss_00692","user_id":"1319856077243682837","ts":"2026-03-27T14:51:32.771Z"}},"jsonrpc":"2.0"}

This shows that:

  • the Discord DM definitely reaches the plugin
  • the plugin definitely emits notifications/claude/channel

4. But in hosted mode, inbound messages do not appear in the session

When the plugin is hosted normally by Claude Code:

  • the bot is online
  • the reply tool works
  • but text messages sent to the bot via Discord DM do not appear as

``text
<channel source="discord" ...>
``

So the inbound channel notification emitted by the plugin is not being injected into the main session.

5. Permission interactions show the same pattern

The Discord plugin declares both:

  • claude/channel
  • claude/channel/permission

and permission handling depends on:

  • notifications/claude/channel/permission

In practice:

  • Discord receives permission-related messages
  • but clicking buttons or replying in Discord does not advance the current Claude session

This matches the same failure mode as normal channel notifications.

Expected behavior

When the Discord plugin is hosted by Claude Code, and the bot is online with the sender allowlisted:

  1. Discord DMs should be injected into the current session as:

``text
<channel source="discord" chat_id="..." message_id="..." ...>
``

  1. Permission replies/interactions from Discord should reach the session through claude/channel/permission notifications and advance the workflow

Actual behavior

  • tools work
  • experimental channel notifications do not

In practice:

  • reply works
  • Discord DMs do not appear in the session
  • Discord permission interactions do not advance the session

Relevant source locations

Discord plugin capabilities declaration:

capabilities: {
  tools: {},
  experimental: {
    'claude/channel': {},
    'claude/channel/permission': {},
  },
}

Inbound notification emission:

mcp.notification({
  method: 'notifications/claude/channel',
  params: { ... }
})

Permission notification emission:

method: 'notifications/claude/channel/permission'

Suspected cause

My suspicion is that the current host environment supports standard MCP tools, but does not fully support or bridge the official Discord plugin’s experimental claude/channel / claude/channel/permission notifications.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗