Telegram channel plugin: notifications/claude/channel not surfacing as <channel> tags in conversation

Resolved 💬 2 comments Opened Mar 20, 2026 by lawcoreai Closed Apr 18, 2026

Bug Description

The Telegram channel plugin (claude-plugins-official/telegram/0.0.1) sends MCP notifications via notifications/claude/channel when inbound messages arrive. These notifications are not surfacing as <channel> tags in the Claude Code conversation, meaning there is no real-time message delivery from Telegram to the active session.

What Works

  • Outbound messages: reply tool sends messages to Telegram successfully
  • Photo downloads: Photos are saved to ~/.claude/channels/telegram/inbox/ and can be read
  • Server process: Bot is polling Telegram, receiving updates, and calling mcp.notification() without errors

What Doesn't Work

  • mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) is called successfully (confirmed via .then() logging — no rejection), but the notification never appears as a <channel source="telegram" ...> tag in the conversation

Steps to Reproduce

  1. Set up the Telegram channel plugin with a valid bot token
  2. Pair a Telegram user via /telegram:access pair <code>
  3. Have the paired user send a text message to the bot
  4. Server receives the message, calls mcp.notification() — promise resolves successfully
  5. Expected: <channel source="telegram" chat_id="..." message_id="..." user="..." ts="...">message text</channel> appears in the conversation
  6. Actual: Nothing appears. The notification is silently consumed.

Debugging Done

  • Added .then()/.catch() to mcp.notification() — promise resolves OK, no errors
  • Confirmed experimental: { 'claude/channel': {} } capability is declared in the MCP server
  • Confirmed the server is connected via StdioServerTransport
  • Killed and respawned the server process — same behavior
  • Restarted Claude Code session multiple times — same behavior
  • Verified no other process was competing for Telegram bot updates (initially OpenClaw was, but was removed — issue persists)

Workaround

Saving inbound text messages as .txt files to the inbox directory and polling via CronCreate every 1 minute. This works but adds ~60s latency vs the intended real-time delivery.

Environment

  • Claude Code with Opus 4.6 (1M context)
  • Plugin: claude-plugins-official/telegram/0.0.1
  • MCP SDK: @modelcontextprotocol/sdk@1.27.1
  • Runtime: Bun
  • Platform: Linux 6.17.0-14-generic

View original on GitHub ↗

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