Telegram plugin: inbound channel notifications not surfaced (v2.1.81)

Resolved 💬 2 comments Opened Mar 21, 2026 by wilbertpariguana Closed Apr 18, 2026

Summary

The Telegram plugin (telegram@claude-plugins-official v0.0.1) installs and runs correctly — MCP tool calls (reply, react, edit_message, download_attachment) all work. However, inbound messages from Telegram never appear in the Claude Code conversation.

Root cause

The plugin's MCP server declares experimental: { 'claude/channel': {} } as a capability and sends inbound messages via:

mcp.notification({
  method: 'notifications/claude/channel',
  params: { content: text, meta: { chat_id, message_id, user, ts, ... } },
})

Claude Code v2.1.81 does not surface these notifications. The notification is sent (no error logged), but nothing appears in the conversation.

Reproduction

  1. claude /plugin install telegram@claude-plugins-official
  2. Configure bot token in ~/.claude/channels/telegram/.env
  3. Pair a Telegram user via /telegram:access
  4. Send a message from Telegram to the bot

Expected: Message appears inline in the Claude Code conversation as a <channel> tag.
Actual: Nothing happens. No error output. The bot consumes the Telegram update (confirmed via getUpdates returning 409), the gate allows the message (confirmed by temporarily switching to pairing mode — bot replies with pairing codes correctly), but the MCP notification is silently dropped by Claude Code.

Diagnostics performed

| Check | Result |
|-------|--------|
| Bot polling | Active (getUpdates returns 409 Conflict) |
| Outbound reply tool | Works (sent test message successfully) |
| Bot token valid | Yes (getMe returns bot info) |
| Webhook set | No (clean polling setup) |
| access.json correct | Yes (user ID in allowFrom, policy: allowlist) |
| Pairing mode test | Bot replies with pairing code when user removed from allowlist — message handling works |
| MCP stdio pipes | Connected (socket FDs shared between parent/child bun processes) |
| Multiple bot instances | No (single process tree) |
| Plugin enabled in settings | Yes (enabledPlugins.telegram@claude-plugins-official: true) |

Environment

  • Claude Code: 2.1.81 (latest)
  • Platform: WSL2 (Linux 6.6.87.2-microsoft-standard-WSL2)
  • Node: v22.22.0
  • Runtime: bun (plugin server)
  • Plugin: telegram@claude-plugins-official v0.0.1
  • MCP SDK: @modelcontextprotocol/sdk ^1.0.0
  • grammy: ^1.21.0

🤖 Generated with Claude Code

View original on GitHub ↗

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