Channel notifications from Telegram plugin not displayed in conversation
Resolved 💬 2 comments Opened Apr 8, 2026 by iamunbutter Closed May 22, 2026
Bug Description
MCP channel notifications (notifications/claude/channel) sent by the Telegram plugin are successfully delivered but never displayed as <channel> tags in the Claude Code conversation.
Environment
- Claude Code version: 2.1.96
- Platform: macOS (Darwin 25.2.0)
- Plugin:
telegram@claude-plugins-officialv0.0.4 - Shell: zsh
Steps to Reproduce
- Configure Telegram plugin with a bot token and allowlisted user
- Start Claude Code, ensure plugin connects (
/mcpshows connected) - Send a message from the allowlisted Telegram user to the bot
- Expected: message appears as
<channel source="telegram" ...>in the conversation - Actual: nothing appears — the conversation never receives the inbound message
Debugging Evidence
Added logging to the plugin's server.ts. The logs confirm:
[2026-04-08T12:39:15.897Z] polling as @unbutter_mkt_bot
[2026-04-08T12:41:22.527Z] delivering inbound from 6422572531: 테스트
[2026-04-08T12:41:22.528Z] notification delivered successfully
bot.start()succeeds, polling is active ✅gate()passes (user is inallowFrom) ✅mcp.notification({ method: 'notifications/claude/channel', ... })resolves without error ✅- But the
<channel>tag never appears in the conversation ❌
Additional Context
- Outbound works fine: calling
mcp__plugin_telegram_telegram__replysuccessfully sends messages to Telegram. - Tested with both short messages ("테스트") and long messages — neither appears.
getUpdatesAPI returns empty (confirming bot consumed the updates), and no 409 Conflict.- Multiple
/mcpreconnections and process restarts (pkill -f "bun.*telegram") did not resolve the issue. - Note: system has two Claude installations (npm-global at
/opt/homebrew/bin/claudeand native at~/.local/bin/claude) with a configuration mismatch warning — unclear if related.
Workaround
Currently writing inbound messages to a local JSONL file (~/.claude/channels/telegram/inbound.jsonl) and polling it via CronCreate every 2 minutes.
🤖 Generated with Claude Code
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗