Telegram plugin: notifications/claude/channel not delivered to session

Resolved 💬 3 comments Opened Mar 20, 2026 by git-akki Closed Mar 24, 2026

Description

The Telegram plugin's MCP channel notifications (notifications/claude/channel) are not being delivered to the Claude Code session, even though the bot correctly receives inbound messages.

Environment

  • Claude Code version: 2.1.80
  • MCP SDK version: 1.27.1
  • OS: macOS (Darwin 25.3.0)
  • Runtime: Bun 1.3.11
  • Plugin: telegram@claude-plugins-official v0.0.1

What works

  • Bot token is valid and bot polls successfully (bot.start() logs polling as @johndrew_bot)
  • Bot receives DMs — the gate() function passes (user is in allowFrom)
  • sendChatAction('typing') fires (typing indicator visible in Telegram)
  • Ack reaction works if configured
  • Outbound reply tool works — Claude can send messages to Telegram
  • getWebhookInfo shows no webhook conflict
  • Only one bot process is running

What doesn't work

  • mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) is called (line 580 of server.ts) but the message never appears in the Claude Code session
  • The void on the notification call silently swallows any errors, making debugging difficult
  • The server declares experimental: { 'claude/channel': {} } in capabilities

Steps to reproduce

  1. Install and configure the Telegram plugin (enabledPlugins: { "telegram@claude-plugins-official": true })
  2. Set bot token in ~/.claude/channels/telegram/.env
  3. Add your Telegram user ID to allowFrom in access.json
  4. Start Claude Code — plugin MCP server starts and polls
  5. Send a DM to the bot on Telegram
  6. Observe: typing indicator appears in Telegram, but no <channel source="telegram"> message appears in Claude Code

Investigation

  • The MCP SDK's assertNotificationCapability has no explicit case for notifications/claude/channel but falls through the switch without error
  • The notification() method in protocol.js should send via stdio transport — no obvious blocking logic
  • Restarting Claude Code and /reload-plugins does not fix the issue
  • Multiple restarts over multiple sessions confirmed the issue persists

Expected behavior

Inbound Telegram messages should appear in the Claude Code session as <channel source="telegram" ...> blocks, allowing Claude to read and respond to them.

🤖 Generated with Claude Code

View original on GitHub ↗

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