Telegram channel plugin: inbound MCP notifications not delivered to active session

Resolved 💬 2 comments Opened Mar 29, 2026 by jahama808 Closed Apr 1, 2026

Description

Inbound Telegram messages received by the official plugin:telegram channel plugin are not delivered to the Claude Code session as <channel> events. Outbound messages (via the reply tool) work correctly.

Environment

  • Claude Code version: 2.1.87
  • OS: Linux x86_64 (Ubuntu)
  • Plugin: plugin:telegram v0.0.4 (from claude-plugins-official)

Steps to Reproduce

  1. Configure the Telegram plugin with a valid bot token and allowlisted user
  2. Start a Claude Code session (plugin auto-starts via MCP)
  3. Send a message from the allowlisted Telegram user to the bot
  4. Observe: message never appears as a <channel> event in the session

What happens

  • The bot receives the message (confirmed via Telegram getUpdates API returning empty — updates are consumed)
  • The gate check passes (gate result: deliver in debug logs)
  • mcp.notification({ method: 'notifications/claude/channel', ... }) completes without error ("notification sent successfully")
  • The typing indicator fires on Telegram (user sees "typing...")
  • But no <channel> tag is injected into the Claude Code conversation

What should happen

The inbound message should appear as a <channel source="telegram" chat_id="..." ...> block in the conversation, allowing Claude to process and respond.

Additional context

  • Outbound reply tool works perfectly — messages are delivered to Telegram
  • Tested across session restarts (fresh PID, fresh MCP connection)
  • Plugin stderr is routed to MCP socket transport (not a file), so no crash/error logs are visible
  • The old process (from plugins/marketplaces/...) logged to /tmp/telegram-debug.log and showed successful delivery; the new process (from plugins/cache/...) routes stderr through MCP sockets
  • access.json is correctly configured: dmPolicy: "allowlist", user ID in allowFrom

🤖 Generated with Claude Code

View original on GitHub ↗

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