Telegram channel inbound notifications silently dropped (outbound works)

Resolved 💬 3 comments Opened Mar 22, 2026 by davildj86 Closed Mar 26, 2026

Description

Telegram channel plugin's inbound MCP notifications (notifications/claude/channel) are silently dropped and never reach the Claude Code session. Outbound tool calls (reply, react, edit_message) work perfectly.

Environment

  • Claude Code version: 2.1.81 (latest)
  • OS: macOS (Darwin 24.6.0)
  • Auth: claude.ai OAuth (not API key)
  • Launch command: claude --channels plugin:telegram@anthropic

What works

  • Bot token is valid (getMe succeeds)
  • Bot receives Telegram messages (responds to /start, /help, /status)
  • User is paired and in allowFrom allowlist in access.json
  • MCP server process is running (single instance, no 409 conflict)
  • Outbound reply tool sends messages to Telegram successfully
  • No webhook set (long-polling mode)
  • getUpdates confirms bot is consuming updates

What doesn't work

  • Messages sent by an allowlisted user in Telegram DM never appear in the Claude Code session
  • mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) is called by the server but the notification never reaches Claude
  • Claude Code debug log (~/.claude/debug/latest) contains zero mentions of "channel", "notification", or "telegram" — the notifications are being silently ignored at the transport/client level
  • Restarting the session multiple times does not fix the issue

Reproduction steps

  1. Install Telegram channel plugin
  2. Configure bot token in ~/.claude/channels/telegram/.env
  3. Launch: claude --channels plugin:telegram@anthropic
  4. Pair a Telegram user via /telegram:access pair <code>
  5. Send a message from the paired user in Telegram DM
  6. Message never arrives in the Claude Code session
  7. Use the reply tool to send a message back — it works fine

Analysis

The MCP server correctly declares capabilities: { tools: {}, experimental: { 'claude/channel': {} } } and connects via StdioServerTransport. The stdio pipe is functional (tool calls work bidirectionally). The issue is specifically that server-initiated notifications are not being processed by Claude Code's MCP client.

The debug log shows only Query.streamInput processing user messages — no channel notification handling is logged at all, suggesting the notification handler may not be registered or the transport layer is filtering them out.

View original on GitHub ↗

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