Telegram channel: MCP notification delivered but not surfaced in conversation
Resolved 💬 3 comments Opened Mar 21, 2026 by chuycepeda Closed Mar 25, 2026
Description
Telegram channel plugin (telegram@claude-plugins-official v0.0.1) successfully receives inbound messages and sends MCP notifications, but Claude Code does not surface them as <channel> tags in the conversation.
Environment
- Claude Code: 2.1.81 (latest)
- Plugin: telegram@claude-plugins-official 0.0.1 (latest)
- OS: macOS Darwin 25.3.0
- Runtime: Bun
- Launch command:
claude --remote-control --channels plugin:telegram@claude-plugins-official
Steps to Reproduce
- Configure Telegram bot token in
~/.claude/channels/telegram/.env - Run
/telegram:accessto approve a user - Launch Claude with
--channels plugin:telegram@claude-plugins-official - Send a message to the bot from an approved Telegram user
- Observe that the message does NOT appear in the Claude conversation
Debug Evidence
Added appendFileSync debug logging to server.ts. The full pipeline works:
TEXT HANDLER: from=<redacted> text="Hello"
handleInbound: from=<redacted> chatType=private text="Hello"
gate result: action=deliver
sending MCP notification: text="Hello" chat_id=<redacted>
MCP notification sent successfully
- ✅ Bot polls Telegram API successfully (confirmed via
getUpdates409 conflict = active polling) - ✅ Messages received by text handler
- ✅ Gate check passes (
action=deliver) - ✅
mcp.notification({ method: 'notifications/claude/channel', ... })resolves without error - ✅ Outbound replies via
replytool work perfectly - ❌ Inbound messages never appear as
<channel>tags in the conversation
Additional Context
- Only one bot process running (no zombie conflicts)
- Bot is a direct child of the Claude Code process (verified via
pstree) - Network connections to Telegram API confirmed via
lsof - No webhook configured (pure polling mode)
access.jsonhas the sender in the allowlist
The issue appears to be on the Claude Code client side — the MCP notification is sent and resolves successfully, but the client does not inject it into the conversation context.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗