Telegram channel: notifications/claude/channel not delivered to CLI session on Windows
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 perfectly — reply, 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 inaccess.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:
- Telegram message received by bot ✓
gate()passes (user in allowlist) ✓mcp.notification({ method: 'notifications/claude/channel', params: { content, meta } })resolves ✓- 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
- Verified single server (no 409 conflict) — only 2 bun.exe processes
- Verified no webhook interference (
getWebhookInforeturns empty URL) - Tested with
channelsEnabled: trueonly (no plugin) — same result - Tested with plugin only (
enabledPlugins) — same result - Tested with both enabled — same result
- Completely removed and re-added marketplace (
claude plugins marketplace remove+add) - Fixed staging directory swap failure (
.stagingdir not promoted to main on Windows) - Created missing
approved/andinbox/directories - Compared with working backup configuration — no meaningful difference
- Confirmed
mcp.notification()writes to stdout without error via file logging - Reinstalled plugin at user scope, cleared cache, reset
installed_plugins.json - 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
.claudedirectory to OneDrive and then back toC:\Users\jbear\.claude - Backup directory (
.claude-backup/) has identical configuration but includesapproved/andinbox/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.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗