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

Resolved 💬 2 comments Opened Mar 28, 2026 by Gotrek77 Closed Apr 28, 2026

Bug description

When using --channels plugin:telegram@claude-plugins-official, outbound messages (via reply tool) are delivered successfully to Telegram, but inbound messages from Telegram are never injected into the conversation. The bot receives messages (confirmed via 409 Conflict on getUpdates), the gate() function returns deliver, and mcp.notification({ method: 'notifications/claude/channel' }) is called — but nothing appears in the Claude Code session.

Steps to reproduce

  1. Install and configure telegram@claude-plugins-official plugin
  2. Set bot token in ~/.claude/channels/telegram/.env
  3. Configure access.json with a valid Telegram user ID in allowFrom
  4. Launch: claude --channels plugin:telegram@claude-plugins-official
  5. Use the reply tool to send a test message → works
  6. Reply to the bot from Telegram → message never appears in conversation

Diagnostic results

| Check | Result |
|-------|--------|
| Token configured | ✅ |
| Bot polling active (409 on getUpdates = exclusive polling) | ✅ |
| Outbound tool (reply) | ✅ messages delivered |
| allowFrom contains user ID | ✅ |
| gate()deliver path | ✅ (code review confirmed) |
| mcp.notification() called | ✅ (code at server.ts:925) |
| Inbound message appears in conversation | ❌ Never arrives |
| Webhook set (would conflict with polling) | No webhook (url: "") |
| Multiple bot instances | No, single instance confirmed |

Environment

  • Claude Code: 2.1.86
  • Plugin: telegram@claude-plugins-official v0.0.4
  • OS: Ubuntu, Linux 6.17.0-19-generic x86_64
  • Runtime: Bun 1.3.6
  • MCP transport: stdio (server.ts → StdioServerTransport)

Expected behavior

Inbound Telegram messages from allowlisted users should appear in the conversation as <channel source="telegram" ...> blocks.

Actual behavior

The MCP server receives the message, passes gate(), calls mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) — but Claude Code does not surface the message. The catch block at server.ts:946 does not fire (no error logged to stderr).

The startup log shows "channels ignored" which may indicate Claude Code is not subscribing to channel notifications from this MCP server despite the --channels flag.

View original on GitHub ↗

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