Channel notifications from telegram plugin not delivered to session (v2.1.81)
Summary
MCP channel notifications (notifications/claude/channel) sent by the official telegram@claude-plugins-official plugin are never delivered to the Claude Code session. Outbound tool calls (e.g., reply) work perfectly — only the inbound notification path is broken.
Environment
- Claude Code: v2.1.81 (latest as of 2026-03-22)
- OS: macOS Darwin 25.3.0 (Apple Silicon)
- Bun: installed at
~/.bun/bin/bun - Plugin:
telegram@claude-plugins-officialv0.0.1
Configuration
settings.json includes:
{
"channelsEnabled": true,
"enabledPlugins": {
"telegram@claude-plugins-official": true
}
}
Diagnosis
Systematically verified each step of the inbound message pipeline:
| Step | Status | Evidence |
|------|--------|----------|
| Telegram → Bot polling | ✅ OK | Bot receives updates, getUpdates returns empty (consumed by polling) |
| gate() access check | ✅ OK | Returns action: deliver, user ID in allowFrom |
| mcp.notification() call | ✅ OK | Promise resolves without error |
| JSON-RPC on stdout | ✅ OK | Valid notification written (see below) |
| Claude Code receives notification | ❌ FAIL | No <channel> tag ever appears in session |
Outbound (working)
Tool calls like reply work fine — Claude Code sends request via stdin, bot processes it, response returns via stdout. The stdio pipe is functional.
Inbound notification (broken)
The bot writes valid JSON-RPC notifications to stdout:
{"method":"notifications/claude/channel","params":{"content":"test message","meta":{"chat_id":"REDACTED","message_id":"101","user":"REDACTED","user_id":"REDACTED","ts":"2026-03-21T20:16:01.000Z"}},"jsonrpc":"2.0"}
These are never delivered to the Claude Code session. No error appears in bot stderr. The MCP server declares the capability correctly:
capabilities: { tools: {}, experimental: { 'claude/channel': {} } }
Process verification
- Bot spawned correctly as child of Claude Code process (verified via
ps -o pid,ppid) - stdio fds (0, 1, 2) connected via unix domain sockets to Claude Code parent (verified via
lsof) - No 409 Conflict (single bot instance running)
- No webhook set (verified via
getWebhookInfo)
Steps to Reproduce
- Install telegram plugin:
claude plugin add telegram@claude-plugins-official - Configure bot token in
~/.claude/channels/telegram/.env - Pair a Telegram user (get pairing code, approve via
/telegram:access) - Start Claude Code session (plugin auto-spawns)
- Send a message from the paired Telegram account → message never arrives
Expected Behavior
Messages from Telegram should appear as <channel source="telegram" ...> tags in the Claude Code session.
Actual Behavior
Nothing happens. No error, no notification, no channel tag. Outbound reply tool works fine.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗