MCP channel notifications intermittently dropped
Resolved 💬 3 comments Opened Mar 29, 2026 by eleanorkonik Closed Mar 29, 2026
Summary
MCP channel notifications from the Telegram plugin are intermittently dropped — the bot receives messages from Telegram and calls mcp.notification({ method: 'notifications/claude/channel', ... }), but Claude Code doesn't surface them to the conversation.
Reproduction
- Set up Telegram channel plugin (
claude --channels plugin:telegram@claude-plugins-official) - Pair a Telegram user via
/telegram:access pair <code> - Send multiple messages from Telegram in sequence
Observed behavior
- Some messages arrive in Claude Code, others are silently dropped
- No pattern tied to message content (plain text like "Um", "Clear", "How? it didn't work" all dropped)
- Outbound replies (tool calls to
reply) work 100% of the time - The bot process is healthy — TCP connections to Telegram are ESTABLISHED,
bot.catcherror handler is not firing - The
mcp.notification()call has a.catch()handler that logs to stderr — no errors observed - Drops happen regardless of whether Claude Code is mid-generation or idle at the prompt
- Messages sometimes come through in bursts (6 consecutive successes), then suddenly stop (3+ consecutive drops)
Environment
- macOS Darwin 25.3.0 (aarch64)
- Claude Code via
claude --channels plugin:telegram@claude-plugins-official - Telegram plugin from
claude-plugins-official - Bot framework: Grammy (long-polling, default settings)
- Runtime: Bun
Diagnosis
- Confirmed the bot is not in static mode (re-reads access.json each message)
- Confirmed no duplicate bot processes competing for
getUpdates(an earlier zombie was present but exited before the test sequence) - Confirmed
gate()returnsdeliverfor the allowlisted sender - Confirmed
handleInbound()reaches themcp.notification()call (outbound ack reactions fire) - The drop appears to be on the Claude Code side — the MCP notification is sent over stdio but not surfaced
Expected behavior
All notifications/claude/channel notifications from the MCP server should be surfaced to the conversation.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗