Telegram channel plugin: inbound notifications/claude/channel not surfaced as <channel> tags

Resolved 💬 3 comments Opened Mar 21, 2026 by laurence-gif Closed Mar 21, 2026

Description

The Telegram channel plugin (plugin:telegram@claude-plugins-official v0.0.1) successfully handles outbound messages (the reply tool works and delivers messages to Telegram), but inbound messages from Telegram never appear as <channel source="telegram"> tags in the conversation.

Steps to Reproduce

  1. Start Claude Code with: claude --channels plugin:telegram@claude-plugins-official
  2. Set up bot token, pair a Telegram user via /telegram:access pair <code>
  3. User is confirmed in access.json allowFrom list
  4. Send a message from Telegram to the bot

Expected: Message appears in Claude Code session as a <channel source="telegram" ...> tag
Actual: Nothing appears. The bot process receives the update (confirmed via getWebhookInfo showing pending_update_count: 0), the gate check passes, mcp.notification() is called with method: 'notifications/claude/channel', but the notification is never injected into the conversation.

Environment

  • Claude Code version: 2.1.81
  • macOS Darwin 25.3.0
  • Plugin: claude-plugins-official/telegram v0.0.1
  • MCP SDK: 1.27.1
  • grammY: 1.41.1
  • Bun runtime

Debugging Details

  • Outbound reply tool works perfectly — messages arrive on Telegram
  • getWebhookInfo shows no webhook set (no conflict with polling)
  • pending_update_count: 0 confirms the bot process IS consuming updates
  • User is in allowFrom in access.json, dmPolicy: "pairing", no pending entries
  • Had an issue with duplicate bot processes (two bun run start instances competing for polling), but the problem persisted after killing the duplicate
  • Tried multiple fresh sessions with --channels flag — same result every time
  • Resumed sessions also don't work

Likely Cause

The mcp.notification({ method: 'notifications/claude/channel', params: {...} }) call in server.ts:792 fires successfully, but Claude Code's harness does not surface it as a <channel> tag in the conversation context.

View original on GitHub ↗

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