MCP channel notifications should wake the model for real-time messaging
Summary
When an MCP server sends a notifications/claude/channel notification (e.g., from the Discord plugin), Claude Code receives the notification but does not start a new model turn to process and respond to it. The model only sees channel notifications during an already-active conversation turn, meaning users must type something in the terminal before Claude can respond to incoming messages.
Current behavior
- User sends a Discord message → Discord Gateway fires
messageCreate - MCP server calls
mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) - Claude Code receives the notification — but if the model is idle (no active turn), nothing happens
- The Discord bot shows "typing..." (via
sendTyping()) but never actually replies - User sees the bot typing indefinitely with no response, until the Claude Code operator types something in the terminal
Expected behavior
When Claude Code receives a notifications/claude/channel notification while idle, it should automatically start a new model turn so the model can see the inbound message and call reply tools. This would enable real-time conversational flows over Discord (and any future channel).
Why this matters
- The Discord plugin already declares
experimental: { 'claude/channel': {} }and sends structured notifications — the server-side implementation is complete - Users expect near-instant replies when messaging a bot on Discord, not minutes of latency
- The
sendTyping()indicator creates a false promise — the bot appears responsive but never follows through - Current workaround (
/looppolling) adds 1-2 minutes of latency and wastes resources
Proposed solution
When a notifications/claude/channel notification arrives and no model turn is active:
- Queue the notification
- Automatically initiate a new model turn with the notification content injected into context
- Allow the model to process and respond (e.g., call the
replytool)
This would make MCP channel plugins truly real-time rather than pull-based.
Environment
- Claude Code with Discord MCP plugin (v0.0.2)
- macOS,
claude-opus-4-6model
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗