Channel notifications dropped when multiple channels active — messages require 3-4 resends

Resolved 💬 3 comments Opened Apr 5, 2026 by stozo04 Closed Apr 9, 2026

Description

When running Claude Code with multiple channels (Telegram + custom websocket + custom email), inbound Telegram messages frequently fail to deliver. The user must send the same message 3-4 times before it reaches the session. The problem started when the first additional channel (websocket) was added and worsened when a second custom channel (email) was added.

Environment

  • Claude Code version: latest (April 2026)
  • OS: Windows 11
  • Authentication: claude.ai (Max plan)
  • Startup command: claude --channels plugin:telegram@claude-plugins-official --dangerously-load-development-channels server:websocket server:email

Reproduction Steps

  1. Start Claude Code with Telegram plugin + 2 custom development channels (websocket + email)
  2. The email channel receives frequent push notifications from Google Pub/Sub and fires mcp.notification() for each email
  3. Send a message via Telegram while Claude is idle (no active tool calls, no processing)
  4. Message frequently does not arrive in the session
  5. Must resend 3-4 times before it's received

Key Observations

  • This happens even when Claude is idle — not mid-turn, not processing tool calls
  • The problem scales with the number of active channels (1 custom channel = occasional drops, 2 custom channels = frequent drops)
  • The Telegram plugin reports successful delivery (mcp.notification() resolves), but the message never surfaces in the session
  • With only the Telegram plugin (no custom channels), message delivery was reliable

Root Cause Analysis

Based on research, channel notifications are only processed at turn boundaries. With multiple channels emitting notifications (especially auto-archive confirmations from the email channel), the window for Telegram messages to be picked up narrows. However, the issue also occurs when Claude is completely idle, suggesting a deeper notification dispatcher issue when multiple channel MCP servers are registered.

Additional contributing factors:

  • PreToolUse hooks that fire on every tool call (matcher: ".*") extend turn duration with network requests, further narrowing delivery windows
  • Possible duplicate plugin instances competing for the Telegram bot token (related to #38098, #36800)

Related Issues

  • #41733 — MCP notifications not delivered despite successful mcp.notification()
  • #40729 — MCP inbound notifications not reaching session (Discord and Telegram)
  • #38259 — Telegram channel stops processing inbound messages after completing a turn
  • #38098 — Telegram plugin auto-loads in all sessions, causing competing pollers
  • #36800 — Duplicate channel plugin instances mid-session (409 Conflict)
  • #30492 — Feature request: priority message channel for mid-execution steering
  • #29224 — Feature request: side-channel responses for queued messages

Expected Behavior

  • Channel notifications should have delivery guarantees (at-least-once)
  • Messages sent while idle should be delivered immediately regardless of how many channels are registered
  • A priority mechanism should exist so interactive channels (Telegram, chat) take precedence over passive channels (email notifications)
  • If a notification cannot be delivered immediately, it should be queued and retried, not silently dropped

Workarounds Currently Using

  1. Sending messages multiple times until one gets through
  2. Reducing email channel notification frequency (suppressing auto-archive notifications)
  3. Narrowing PreToolUse hook scope to reduce turn duration

View original on GitHub ↗

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