Telegram plugin: inbound messages not delivered to session
Status Closed — not planned
Reported on v2.1.80
Maintainer reply ✓ Yes — localden
Activity 13 comments · opened Mar 20, 2026 · closed May 5, 2026
💡 Likely answer: A maintainer (localden, collaborator)
responded on this thread — see the highlighted reply below.
Bug Description
The Telegram plugin (v0.0.1) successfully sends outbound messages (Claude → Telegram) but fails to deliver inbound messages (Telegram → Claude Code session).
Steps to Reproduce
- Install Telegram plugin (
telegram@claude-plugins-official) - Configure bot token via
/telegram:configure - Pair a Telegram user via
/telegram:access pair <code> - Send a message from Claude Code to Telegram — works (text + file attachments)
- Send a message from Telegram to the bot — bot shows "typing" indicator but message never arrives in the Claude Code session
Expected Behavior
Inbound Telegram messages should appear in the Claude Code session as <channel source="telegram" ...> notifications.
Actual Behavior
- The bot receives the message (shows "typing" indicator in Telegram)
- The MCP notification (
notifications/claude/channel) is fired inserver.ts:578 - The notification never reaches the Claude Code session — no channel message appears
Environment
- Claude Code: 2.1.80
- Plugin: telegram@claude-plugins-official v0.0.1 (commit 8908a58)
- OS: macOS (Apple Silicon), Darwin 25.3.0
- Runtime: Bun (plugin server process visible via
ps) - Config:
enabledPluginsin~/.claude/settings.json, nomcp.json
Configuration Verified
- Bot token is set in
~/.claude/channels/telegram/.env access.jsonhas correctallowFromwith the sender's ID- Plugin server process is running (
bun run start) - Outbound tools (
reply,react,edit_message) all function correctly - Session restart did not resolve the issue
Notes
The server uses mcp.notification({ method: 'notifications/claude/channel', ... }) to deliver inbound messages. The issue appears to be in the notification transport between the MCP server and the Claude Code session, not in the Telegram bot polling or access control.
13 Comments
Same bug for me. Claude Code was able to send messages to the Telegram bot, when I asked it to debug. However, it was not able to receive them. Opus's final conclusion was:
Solved: had to restart Claude with
claude --channels plugin:telegram@claude-plugins-official. Claude web knew to suggest this, but the web search in CC didn't find it.Root cause identified: name mismatch in
--channelscomparisonTracked this down via MCP logs on Windows (CLI v2.1.80).
The log entry
What's happening
--channels:plugin:telegram@claude-plugins-official--channels telegram) is rejected withentries must be taggedtelegram) against the full tagged string (plugin:telegram@claude-plugins-official)"telegram" !== "plugin:telegram@claude-plugins-official"→ notifications silently skippedNo working combination exists: tagged is required but doesn't match; untagged matches but is rejected.
How to verify
Check the most recent
.jsonlin the MCP logs directory:Look for
"Channel notifications skipped"— if it saysserver telegram not in --channels list, this is the same bug.(Originally posted on #36442, reposting here as that issue is being auto-closed as duplicate.)
That fix works if you simply weren't using
--channelsat all. But there's a deeper bug for those who are using the correct flag.Even with
claude --channels plugin:telegram@claude-plugins-official, the MCP log shows:The server registers itself as
telegram, but the--channelslist stores the full tagged stringplugin:telegram@claude-plugins-official. The internal comparison fails because"telegram" !== "plugin:telegram@claude-plugins-official".And using the untagged form (
--channels telegram) is rejected by the CLI withentries must be tagged.So for some users, the channel is correctly configured but notifications are silently dropped due to this name mismatch. CLI v2.1.80, Windows 11.
Adding another data point. macOS Darwin 25.3.0, Claude Code latest, plugin v0.0.1.
The
--channelsworkaround doesn't fully work either:| Launch mode | Inbound notifications | MCP tools (reply, react, etc.) |
|---|---|---|
|
claude(no flag) | Not delivered | Works ||
claude --channels plugin:telegram@claude-plugins-official| Unknown (MCP broken) | Broken — tools unavailable |So there's no working configuration right now:
--channels: outbound works, inbound silently dropped (as described in this issue)--channels: MCP server connection breaks, so tools likereplyare unavailable — can't even send outboundThis means the name mismatch fix alone won't be sufficient if
--channelsalso breaks the MCP tool registration.Tested on v2.1.81 (Windows 11) with a new approach: configuring the Telegram plugin as a manual MCP server in
.mcp.jsonand using--channels server:telegram --dangerously-load-development-channels server:telegram.Result: the CLI accepted the flags, showed the dev warning, I confirmed "local development", and the session started with "Listening for channel messages from: server:telegram, server:telegram". However, the MCP log still shows:
So even with
--dangerously-load-development-channels server:telegram, the server is not added to the approved allowlist. The flag is recognized in the UI (confirmation prompt appears) but doesn't propagate to the notification registration system.This is a different error message from the plugin approach (
not in --channels list), but the outcome is identical: inbound notifications are silently discarded.Summary of all tested configurations on v2.1.81:
| Config |
--channelsflag | Result ||--------|------------------|--------|
| Plugin (enabledPlugins) |
plugin:telegram@claude-plugins-official|skipped: server telegram not in --channels list|| Plugin |
telegram| CLI rejects: "must be tagged" || Plugin |
plugin:telegram| CLI rejects: "must be tagged" || MCP server (.mcp.json) |
server:telegram|skipped: not on approved channels allowlist|| MCP server + dev flag |
server:telegram+--dangerously-load-development-channels server:telegram| Same:not on approved channels allowlist|+1 Same issue for me (macOS Tahoe 26.0.1 (25A362)) on v2.1.81 with a Discord plugin fork, seems like a race condition between the channel being added to the allow list happening at startup and the allow prompt propagating?
I'm experiencing the same issue which is outbound Telegram replies work but inbound messages don't reach the session.
Same issue on Debian 13
same issue, it's inconsistent. Often the message doesn't go into the session, I can just send it a couple more times and it will go in. only one session running. this issue exists across many platforms (windows, debian, WSL, etc)
Tried patching the plugin's server name to match the tagged
--channelsformat. Inserver.tsline 336, changed:to:
Hypothesis was that the notification router compares the server's self-reported name against the tagged
--channelsstring, and making them match would fix delivery.Result: No effect. Outbound tools still work fine, but inbound
notifications/claude/channelnotifications still don't reach the session. Reverted the change.This rules out a simple string mismatch — the bug is deeper in the framework's notification routing/subscription logic.
Environment: macOS (Apple Silicon), Darwin 25.3.0, Claude Code latest, plugin v0.0.1,
enabledPluginsconfig (no--channelsflag).Thank you for your report — we are currently in the process of triaging MCP-related issues and this one appears to describe the same problem as #36411. To keep the discussion and any fix in one place, we're consolidating into that issue and closing this one. If you have logs, repro steps, or environment details that aren't already covered in #36411, please add them there — it'll help us track this down faster.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.