Telegram plugin: notifications/claude/channel not delivered to conversation (inbound messages silently dropped)

Resolved 💬 2 comments Opened Mar 21, 2026 by lardinator Closed Mar 21, 2026

Summary

The official telegram@claude-plugins-official plugin's inbound message delivery does not work in Claude Code 2.1.81. Telegram messages are received by the MCP server process but never appear in the Claude Code conversation.

Environment

  • Claude Code version: 2.1.81 (installed via Homebrew)
  • Plugin: telegram@claude-plugins-official v0.0.1
  • OS: macOS 24.6.0

What happens

  1. Bot token configured, bun server starts, Telegram polling works (confirmed via getWebhookInfo showing pending_update_count: 0 after sending a DM — messages are consumed by the server).
  2. User is in the allowFrom allowlist.
  3. Server's handleInbound() is reached and calls mcp.notification() with method: 'notifications/claude/channel'.
  4. Nothing appears in the Claude Code conversation. No <channel source="telegram" ...> message is injected.

What works

  • Outbound direction works perfectly: calling the reply MCP tool from Claude Code sends messages to Telegram successfully.
  • MCP tool listing works: all four tools (reply, react, download_attachment, edit_message) are available.
  • The MCP connection is live (stdio transport established at boot via mcp.connect()).

Root cause analysis

The server declares an experimental capability at init:

capabilities: {
  tools: {},
  experimental: { 'claude/channel': {} },
}

And sends notifications via:

mcp.notification({
  method: 'notifications/claude/channel',
  params: { content: text, meta: { chat_id, message_id, user, ts, ... } },
}).catch(err => {
  process.stderr.write(`telegram channel: failed to deliver inbound to Claude: ${err}\n`)
})

The .catch() never fires — the send succeeds at the transport level. The drop happens on the Claude Code client side: Claude Code does not appear to register a handler for notifications/claude/channel, so the notification is silently discarded after receipt.

Expected behaviour

Inbound Telegram messages should be injected into the active Claude Code conversation as <channel source="telegram" chat_id="..." message_id="..." user="..." ts="..."> turns, as documented in the plugin's MCP server instructions.

Steps to reproduce

  1. Install the telegram plugin: claude plugin install telegram
  2. Configure token: /telegram:configure <token>
  3. Pair a Telegram account: /telegram:access pair <code>
  4. Send a DM to the bot from the paired account
  5. Observe: no message appears in Claude Code conversation

View original on GitHub ↗

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