Telegram channel: notifications/claude/channel not delivered to CLI session on Windows

Resolved 💬 4 comments Opened Apr 5, 2026 by cowork-dot Closed May 28, 2026

Bug Description

Telegram channel plugin's notifications/claude/channel MCP notifications are successfully sent by the server but never injected into the Claude Code CLI conversation on Windows.

Outbound works perfectlyreply, react, edit_message tools all function. Only inbound (Telegram → Claude Code) is broken.

Environment

  • Claude Code: v2.1.92 (CLI, C:\Users\jbear\.local\bin\claude.exe)
  • OS: Windows 10 Pro 10.0.19045 (win32 x64)
  • Runtime: Bun 1.3.11
  • Plugin: telegram@0.0.4 (claude-plugins-official)
  • MCP SDK: @modelcontextprotocol/sdk ^1.0.0 (resolved to 1.27.1)

What Works ✅

  • MCP handshake (tools appear in session)
  • Tool calls (reply, react, edit_message, download_attachment)
  • Bot polling via grammy (bot.start() — Telegram messages consumed, pending_update_count: 0)
  • gate() filter passes allowlisted user (ID in access.json)
  • mcp.notification() resolves without error
  • Server declares correct capabilities: experimental: { 'claude/channel': {}, 'claude/channel/permission': {} }

What Fails ❌

  • Inbound Telegram messages never appear as <channel source="telegram" ...> tags in the CLI conversation
  • No error on server side — notification reports success

Evidence

Added file-based debug logging to handleInbound() in server.ts:

[2026-04-05T15:00:20.234Z] handleInbound called: text="我傳了" from=975942909 pid=4944
[2026-04-05T15:00:20.238Z] notification sent OK for: "我傳了" chat_id=975942909

The full pipeline works:

  1. Telegram message received by bot ✓
  2. gate() passes (user in allowlist) ✓
  3. mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } }) resolves ✓
  4. Claude Code CLI does not surface the notification

Configuration

settings.json:

{
  "channelsEnabled": true,
  "enabledPlugins": { "telegram@claude-plugins-official": true }
}

channels/telegram/access.json:

{
  "dmPolicy": "allowlist",
  "allowFrom": ["975942909"],
  "groups": {},
  "pending": {}
}

Troubleshooting Attempted

  1. Verified single server (no 409 conflict) — only 2 bun.exe processes
  2. Verified no webhook interference (getWebhookInfo returns empty URL)
  3. Tested with channelsEnabled: true only (no plugin) — same result
  4. Tested with plugin only (enabledPlugins) — same result
  5. Tested with both enabled — same result
  6. Completely removed and re-added marketplace (claude plugins marketplace remove + add)
  7. Fixed staging directory swap failure (.staging dir not promoted to main on Windows)
  8. Created missing approved/ and inbox/ directories
  9. Compared with working backup configuration — no meaningful difference
  10. Confirmed mcp.notification() writes to stdout without error via file logging
  11. Reinstalled plugin at user scope, cleared cache, reset installed_plugins.json
  12. Updated Claude Code to latest (2.1.92) — already up to date

Additional Context

  • Previously worked — Telegram channel functioned correctly after initial setup
  • Broke after moving .claude directory to OneDrive and then back to C:\Users\jbear\.claude
  • Backup directory (.claude-backup/) has identical configuration but includes approved/ and inbox/ subdirectories
  • Multiple related issues reported: #41733, #41275, #40729, #36411, #36431, #36429, #36503

Expected Behavior

When a Telegram message is received and mcp.notification({ method: 'notifications/claude/channel' }) is called, the message should appear in the CLI conversation as a <channel source="telegram" ...> tag.

Actual Behavior

The notification is silently dropped. No error is raised. The CLI conversation never receives the inbound message.

View original on GitHub ↗

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