Channel notifications: only first message delivered per session

Resolved 💬 3 comments Opened Mar 25, 2026 by miguelbenajes Closed May 24, 2026

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

  1. Start Claude Code with --channels plugin:telegram@claude-plugins-official
  2. Send a message from Telegram → it arrives correctly as a <channel> tag
  3. 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-official v0.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.

View original on GitHub ↗

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