Telegram channel: MCP notification resolves OK but never surfaces as inbound message

Open 💬 0 comments Opened Jul 2, 2026 by vincentcann

Summary

Messages sent to a paired Telegram bot are correctly gated and handed off to the session via MCP, but never appear as an inbound <channel> message in the Claude Code session — even minutes after a stable reconnect.

Setup

  • Telegram channel plugin (claude-plugins-official/telegram, v0.0.6)
  • Bot token rotated, sender paired via /telegram:access pair <code> — pairing confirmed working (allowFrom updated, approval marker consumed)
  • Confirmed via Telegram's getWebhookInfo: pending_update_count: 0 immediately after sending — the bot's long-poller is actively consuming updates

What I verified (via temporary debug logging added to server.ts)

  1. gate(ctx) correctly returns { action: 'deliver' } for the paired sender on every message.
  2. The subsequent mcp.notification({ method: 'notifications/claude/channel', ... }) call resolves successfully (.then() fires, no error) — confirmed on messages sent long after the MCP connection had been stable (10+ minutes post-reconnect, ruling out a reconnect-race).
  3. Despite the notification resolving OK on the plugin/server side, no <channel source="telegram" ...> message ever appeared as a new turn in the Claude Code session.

Expected behavior

A notifications/claude/channel MCP notification that resolves successfully should surface as a visible inbound message in the session, per the documented behavior in the plugin's MCP server instructions ("Messages from Telegram arrive as <channel source=\"telegram\" ...>").

Actual behavior

The notification is accepted by the transport (write succeeds, promise resolves) but is not rendered/injected into the session as a turn. Outbound tools (reply, react, etc.) work fine in both directions — this appears isolated to inbound notification → session-turn delivery.

Reproduction notes

  • Repeatedly reproduced across multiple fresh session restarts (claude --resume <session-id>), ruling out a one-off race on a specific connection.
  • Reverted the debug logging after diagnosis; happy to provide the instrumented diff if useful for repro.

Environment

  • Linux (Fedora), Claude Code CLI, claude-plugins-official/telegram v0.0.6

View original on GitHub ↗