Preflight Checklist
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:
- Configure Telegram plugin with a valid bot token
- Add a Telegram user ID to the allowlist
- Send a message from that Telegram account to the bot
- 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:
- Configure Telegram plugin with a valid bot token
- Add a Telegram user ID to the allowlist
- Send a message from that Telegram account to the bot
- 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
- Install the Telegram plugin:
claude install telegram@claude-plugins-official
- Create a bot via BotFather and configure the token:
/telegram:configure <bot_token>
- DM the bot from Telegram to get a pairing code
- Approve the pairing:
/telegram:access pair
- Lock down access:
/telegram:access policy allowlist
- Verify setup — in Telegram, send /status to the bot → responds "Paired as @username"
- Send any text message from Telegram to the bot
- Expected: Message appears in Claude Code conversation as a <channel source="telegram" ...> block
- 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
Preflight Checklist
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:
Setup (all verified working):
Reproduction steps:
What works:
What doesn't work:
Debugging done:
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:
Setup (all verified working):
Reproduction steps:
What works:
What doesn't work:
Debugging done:
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
claude install telegram@claude-plugins-official
/telegram:configure <bot_token>
/telegram:access pair
/telegram:access policy allowlist
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