Skip to content

[BUG] Telegram plugin inbound messages not delivered to Claude Code session (notifications/claude/channel not surfaced) #37933

@austinpw-cloud

Description

@austinpw-cloud

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

Description:

Telegram plugin inbound messages never appear in the Claude Code conversation. Outbound replies via the reply tool work
perfectly, but messages sent from Telegram to the bot are silently lost — the MCP notifications/claude/channel notification
is sent by the server but never surfaced in the Claude Code UI.

Plugin receives messages and mcp.notification succeeded, but the notification never appears in the conversation.
Confirmed via debug.log. Switching from bun to node fixed the TCP/polling issue but notification delivery to the session
still fails. Claude Code 2.1.81, node v24.14.0, macOS.

Environment:

  • Claude Code: 2.1.81
  • MCP SDK: 1.27.1
  • Telegram plugin: claude-plugins-official/telegram@0.0.1
  • OS: macOS (Darwin 24.6.0)
  • Runtime: Bun

Setup (all verified working):

  • Bot token valid (@clrare_bot, getMe returns OK)
  • access.json: dmPolicy: "allowlist", sender ID in allowFrom
  • Single Claude Code session running, single bot polling process
  • Plugin loaded and MCP tools available (reply, react, edit_message, download_attachment)

Reproduction steps:

  1. Configure Telegram plugin with a valid bot token
  2. Add a Telegram user ID to the allowlist
  3. Send a message from that Telegram account to the bot
  4. Observe: message never appears in Claude Code conversation

What works:

  • Bot receives the message (typing indicator / "Typing..." appears in Telegram)
  • gate() passes the message (action: 'deliver')
  • handleInbound() executes (confirmed by typing indicator + ack reaction path)
  • mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) is called
  • Outbound reply tool sends messages to Telegram successfully
  • /status command in Telegram correctly responds "Paired as @cjinus"
  • Running the server manually shows polling as @clrare_bot with no errors

What doesn't work:

  • The notifications/claude/channel notification never surfaces in the Claude Code conversation
  • No error is logged on the server side (the .catch() on the notification call does not fire)

Debugging done:

  • Confirmed only one Claude Code session and one bot polling process
  • Killed and restarted the server process multiple times
  • Ran /reload-plugins multiple times
  • Restarted Claude Code session multiple times
  • Forced getUpdates?offset=-1 to clear stale polling state
  • Verified MCP stdio transport is connected (fd 0/1 via unix sockets)
  • Verified assertNotificationCapability in MCP SDK does not block custom notification methods
  • No 409 Conflict errors observed

Hypothesis:
Claude Code 2.1.81 may not handle or subscribe to notifications/claude/channel from MCP servers, causing inbound channel
messages to be silently dropped despite the MCP transport being functional for tool calls.

What Should Happen?

Description:

Telegram plugin inbound messages never appear in the Claude Code conversation. Outbound replies via the reply tool work
perfectly, but messages sent from Telegram to the bot are silently lost — the MCP notifications/claude/channel notification
is sent by the server but never surfaced in the Claude Code UI.

Environment:

  • Claude Code: 2.1.81
  • MCP SDK: 1.27.1
  • Telegram plugin: claude-plugins-official/telegram@0.0.1
  • OS: macOS (Darwin 24.6.0)
  • Runtime: Bun

Setup (all verified working):

  • Bot token valid (@clrare_bot, getMe returns OK)
  • access.json: dmPolicy: "allowlist", sender ID in allowFrom
  • Single Claude Code session running, single bot polling process
  • Plugin loaded and MCP tools available (reply, react, edit_message, download_attachment)

Reproduction steps:

  1. Configure Telegram plugin with a valid bot token
  2. Add a Telegram user ID to the allowlist
  3. Send a message from that Telegram account to the bot
  4. Observe: message never appears in Claude Code conversation

What works:

  • Bot receives the message (typing indicator / "Typing..." appears in Telegram)
  • gate() passes the message (action: 'deliver')
  • handleInbound() executes (confirmed by typing indicator + ack reaction path)
  • mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) is called
  • Outbound reply tool sends messages to Telegram successfully
  • /status command in Telegram correctly responds "Paired as @cjinus"
  • Running the server manually shows polling as @clrare_bot with no errors

What doesn't work:

  • The notifications/claude/channel notification never surfaces in the Claude Code conversation
  • No error is logged on the server side (the .catch() on the notification call does not fire)

Debugging done:

  • Confirmed only one Claude Code session and one bot polling process
  • Killed and restarted the server process multiple times
  • Ran /reload-plugins multiple times
  • Restarted Claude Code session multiple times
  • Forced getUpdates?offset=-1 to clear stale polling state
  • Verified MCP stdio transport is connected (fd 0/1 via unix sockets)
  • Verified assertNotificationCapability in MCP SDK does not block custom notification methods
  • No 409 Conflict errors observed

Hypothesis:
Claude Code 2.1.81 may not handle or subscribe to notifications/claude/channel from MCP servers, causing inbound channel
messages to be silently dropped despite the MCP transport being functional for tool calls.

Error Messages/Logs

No errors observed anywhere. This is part of the problem — the failure is completely silent.
                                                                                                                             
  - Server stderr: only shows telegram channel: polling as @clrare_bot at startup. No errors on message receipt.             
  - The .catch() on mcp.notification() in server.ts:812 never fires.                                                         
  - No error in Claude Code UI.                                                                                              
  - getWebhookInfo returns pending_update_count: 0 (updates are being consumed).
  - getUpdates returns empty (polling process is consuming them).                                                            
  - Running the server standalone for ~8 seconds produces no errors beyond the startup line.

Steps to Reproduce

  1. Install the Telegram plugin:
    claude install telegram@claude-plugins-official
  2. Create a bot via BotFather and configure the token:
    /telegram:configure <bot_token>
  3. DM the bot from Telegram to get a pairing code
  4. Approve the pairing:
    /telegram:access pair
  5. Lock down access:
    /telegram:access policy allowlist
  6. Verify setup — in Telegram, send /status to the bot → responds "Paired as @username"
  7. Send any text message from Telegram to the bot
  8. Expected: Message appears in Claude Code conversation as a <channel source="telegram" ...> block
  9. Actual: Nothing appears. Bot shows "Typing..." briefly in Telegram, but Claude Code receives nothing. No errors
    anywhere.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

v2.1.81

Claude Code Version

v2.1.81

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:mcparea:pluginsbugSomething isn't workingduplicateThis issue or pull request already existsplatform:macosIssue specifically occurs on macOS

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions