Channel notifications: only first message delivered per session
Description
When using a channel plugin (specifically plugin:telegram@claude-plugins-official), only the first MCP channel notification per session is delivered to the conversation. All subsequent notifications/claude/channel messages sent via MCP stdio are silently dropped.
Steps to Reproduce
- Start Claude Code with
--channels plugin:telegram@claude-plugins-official - Send a message from Telegram → it arrives correctly as a
<channel>tag - Send additional messages from Telegram → they are never injected into the conversation
Observed Behavior
Only messages that arrive in the exact window between Claude Code finishing a turn and reading new MCP notifications are delivered. Messages sent while Claude is processing a turn are lost permanently.
Test evidence from a live session:
| Telegram msg | Delivered? | Notes |
|---|---|---|
| msg 40 "hola" | ✅ | First message after session start |
| msgs 41-42 | ❌ | Sent while Claude was processing |
| msg 43 "dcdcs" | ✅ | Sent between turns |
| msgs 44-48 | ❌ | Sent while Claude was processing |
| msg 49 "ayer" | ✅ | Sent between turns |
Expected Behavior
All notifications/claude/channel MCP notifications should be queued and delivered to the conversation, regardless of whether Claude Code is mid-turn.
Environment
- Claude Code CLI (latest)
- Plugin:
plugin:telegram@claude-plugins-officialv0.0.4 - macOS
Analysis
The plugin side works correctly — grammy receives all messages and sends all notifications via stdio. The issue is in Claude Code's core notification handling: it appears to only process MCP notifications at turn boundaries, dropping any that arrive mid-turn.
Workaround
Send one message → wait for Claude's response → send the next message. Do not send bursts.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗