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-official v0.0.4
  • Shell: zsh

Steps to Reproduce

  1. Configure Telegram plugin with a bot token and allowlisted user
  2. Start Claude Code, ensure plugin connects (/mcp shows connected)
  3. Send a message from the allowlisted Telegram user to the bot
  4. Expected: message appears as <channel source="telegram" ...> in the conversation
  5. 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 in allowFrom) ✅
  • 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__reply successfully sends messages to Telegram.
  • Tested with both short messages ("테스트") and long messages — neither appears.
  • getUpdates API returns empty (confirming bot consumed the updates), and no 409 Conflict.
  • Multiple /mcp reconnections and process restarts (pkill -f "bun.*telegram") did not resolve the issue.
  • Note: system has two Claude installations (npm-global at /opt/homebrew/bin/claude and 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

View original on GitHub ↗

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