MCP channel notifications should wake the model for real-time messaging

Resolved 💬 3 comments Opened Mar 24, 2026 by Fibi66 Closed Mar 27, 2026

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

  1. User sends a Discord message → Discord Gateway fires messageCreate
  2. MCP server calls mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } })
  3. Claude Code receives the notification — but if the model is idle (no active turn), nothing happens
  4. The Discord bot shows "typing..." (via sendTyping()) but never actually replies
  5. 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 (/loop polling) adds 1-2 minutes of latency and wastes resources

Proposed solution

When a notifications/claude/channel notification arrives and no model turn is active:

  1. Queue the notification
  2. Automatically initiate a new model turn with the notification content injected into context
  3. Allow the model to process and respond (e.g., call the reply tool)

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-6 model

View original on GitHub ↗

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