Telegram channel inbound notifications silently dropped (outbound works)
Description
Telegram channel plugin's inbound MCP notifications (notifications/claude/channel) are silently dropped and never reach the Claude Code session. Outbound tool calls (reply, react, edit_message) work perfectly.
Environment
- Claude Code version: 2.1.81 (latest)
- OS: macOS (Darwin 24.6.0)
- Auth: claude.ai OAuth (not API key)
- Launch command:
claude --channels plugin:telegram@anthropic
What works
- Bot token is valid (
getMesucceeds) - Bot receives Telegram messages (responds to
/start,/help,/status) - User is paired and in
allowFromallowlist inaccess.json - MCP server process is running (single instance, no 409 conflict)
- Outbound reply tool sends messages to Telegram successfully
- No webhook set (long-polling mode)
getUpdatesconfirms bot is consuming updates
What doesn't work
- Messages sent by an allowlisted user in Telegram DM never appear in the Claude Code session
mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } })is called by the server but the notification never reaches Claude- Claude Code debug log (
~/.claude/debug/latest) contains zero mentions of "channel", "notification", or "telegram" — the notifications are being silently ignored at the transport/client level - Restarting the session multiple times does not fix the issue
Reproduction steps
- Install Telegram channel plugin
- Configure bot token in
~/.claude/channels/telegram/.env - Launch:
claude --channels plugin:telegram@anthropic - Pair a Telegram user via
/telegram:access pair <code> - Send a message from the paired user in Telegram DM
- Message never arrives in the Claude Code session
- Use the
replytool to send a message back — it works fine
Analysis
The MCP server correctly declares capabilities: { tools: {}, experimental: { 'claude/channel': {} } } and connects via StdioServerTransport. The stdio pipe is functional (tool calls work bidirectionally). The issue is specifically that server-initiated notifications are not being processed by Claude Code's MCP client.
The debug log shows only Query.streamInput processing user messages — no channel notification handling is logged at all, suggesting the notification handler may not be registered or the transport layer is filtering them out.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗