Telegram plugin: inbound channel notifications not delivered to session
Summary
The Telegram plugin's MCP server receives messages from Telegram (confirmed via getUpdates returning empty — updates are consumed), but notifications/claude/channel never arrives in the Claude Code session. Outbound tools (reply, react, edit_message) work fine.
Steps to reproduce
- Install the Telegram plugin:
/plugin install telegram@claude-plugins-official - Configure bot token and access policy (allowlist with valid user ID)
/reload-plugins- DM the bot on Telegram
- Bot shows "typing" indicator (confirming the server received the message and passed the gate)
- No
<channel>message ever appears in the Claude Code session
Debugging performed
- Bot token valid:
getMereturns correct bot info - Updates consumed:
getUpdatesreturns[]immediately after sending a message, confirming the MCP server's grammy instance is polling and consuming updates - Gate passes: "typing" indicator fires (line 561 in
server.ts), which is after thegate()check returnsdeliver - Outbound works:
replytool successfully sends messages to Telegram - Access config correct:
dmPolicy: "allowlist", user ID inallowFrom, also triedpairingmode - Process running: Single
bun runprocess, no competing consumers - No webhook set:
getWebhookInfoshows empty URL - Fresh reinstall: Uninstalled and reinstalled plugin, same behavior
- New bot token: Tried a completely different bot — same result
Suspected cause
The mcp.notification() call at line 578 of server.ts executes without error but the notification never reaches the Claude Code session. This may be related to testing multiple bot configurations across different git worktrees in the same session — something in the Claude Code ↔ MCP stdio transport may have gotten into a bad state that persists across /reload-plugins.
Environment
- macOS (Darwin 25.2.0)
- Claude Code with Opus model
- Telegram plugin v0.0.1 (
8908a582f80d1396b2af65949a0cd001fe8aacca) - Plugin installed at user scope
Expected behavior
Messages sent to the bot should appear as <channel source="telegram" ...> in the Claude Code conversation.
Workaround
None found. Restarting the session (new claude invocation) may help but was not tested.
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗