Telegram plugin: inbound messages not delivered to session (outbound works)

Resolved 💬 3 comments Opened Mar 24, 2026 by gregsantos Closed Mar 28, 2026

Summary

The Telegram channel plugin (telegram@claude-plugins-official v0.0.4) successfully polls and consumes inbound messages from Telegram, but notifications/claude/channel never surfaces as <channel> blocks in the conversation. Outbound (reply tool) works fine.

Environment

  • macOS (Darwin 25.3.0)
  • Claude Code with Opus 4.6
  • Plugin: telegram@claude-plugins-official v0.0.4
  • Server runtime: Bun

Steps to Reproduce

  1. Install telegram plugin, configure bot token via /telegram:configure <token>
  2. DM the bot — pairing code is generated and written to access.json (server is working)
  3. Approve pairing via /telegram:access pair <code>
  4. Lock policy to allowlist
  5. Send a message to the bot from Telegram

Expected

Message appears in the Claude Code session as a <channel source="telegram" ...> block.

Actual

Nothing appears. The message is consumed (getUpdates returns empty), but no notification surfaces in the session.

Observations

  • Outbound works: mcp__plugin_telegram_telegram__reply successfully sends messages to the chat
  • Pairing worked: The server wrote pending entries to access.json and responded with pairing codes
  • Server process confirmed running: bun run --cwd .../telegram/0.0.4 --silent start (visible in ps)
  • getUpdates returns empty: The polling loop is consuming updates — they're not queued
  • No webhook set: getWebhookInfo shows empty URL, pending_update_count: 0
  • mcp.notification() on server.ts:925 fires but the MCP notification never reaches the client
  • Bot token was previously used on another machine (now stopped) — unclear if relevant, but 409 conflict retry loop in server.ts suggests this is a known scenario
  • Multiple restarts and /reload-plugins did not resolve

Notes

The server code (server.ts:925) calls mcp.notification({ method: 'notifications/claude/channel', ... }) which should deliver the message. The gap is between this MCP notification and the Claude Code client surfacing it. Possibly a client-side filtering or registration issue.

View original on GitHub ↗

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