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:
replytool 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
- Set up the Telegram channel plugin with a valid bot token
- Pair a Telegram user via
/telegram:access pair <code> - Have the paired user send a text message to the bot
- Server receives the message, calls
mcp.notification()— promise resolves successfully - Expected:
<channel source="telegram" chat_id="..." message_id="..." user="..." ts="...">message text</channel>appears in the conversation - Actual: Nothing appears. The notification is silently consumed.
Debugging Done
- Added
.then()/.catch()tomcp.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
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗