Telegram plugin: notifications/claude/channel not delivered to client (node/npx tsx runtime)
Summary
The Telegram MCP plugin server starts correctly, polls updates, passes the access gate, but mcp.notification() calls with method notifications/claude/channel never reach the Claude Code client. Inbound Telegram messages are consumed by polling but silently lost — they never appear in the conversation.
Environment
- Claude Code CLI (latest)
- NixOS, Linux 6.19.5
- Node.js v24.13.0, npx v11.6.2
- bun not usable — CPU is Intel Core 2 Duo P8600 which lacks AVX/AVX2 instructions required by bun. Plugin runs via npx tsx (package.json scripts.start) instead.
Changes made to run without bun
Since bun requires AVX/AVX2 CPU instructions (not available on Intel Core 2 Duo), the following changes were made to the plugin files in ~/.claude/plugins/cache/claude-plugins-official/telegram/0.0.1/:
- server.ts line 1 — shebang changed from
#!/usr/bin/env bunto#!/usr/bin/env npx tsx - package.json scripts.start — changed from
bun server.tstonpx tsx server.ts - node_modules — installed with
npm installinstead ofbun install(package-lock.json generated alongside existing bun.lock)
Reproduction
- Configure Telegram bot token in ~/.claude/channels/telegram/.env
- Set access policy to allowlist with a valid Telegram user ID
- Start Claude Code — plugin server starts (visible in ps aux)
- Send a message to the bot from Telegram
- Bot receives the message (verified: getUpdates returns empty after polling consumes it)
- gate() returns deliver (user ID is in allowlist)
- mcp.notification() fires — but nothing arrives in Claude Code conversation
- Outbound telegram__reply tool works perfectly — messages are delivered to Telegram
Diagnostic evidence
- getMe — token valid, bot active
- getWebhookInfo — no webhook set
- getUpdates — returns empty (polling is consuming updates)
- telegram__reply — sends messages successfully (MCP tool calls work fine)
- ~/.claude/channels/telegram/inbox/ — directory never created
- No error output visible from the server process
- Restarting session, /reload-plugins, and pkill + relaunch did not fix the issue
Hypothesis
The MCP stdio transport works for tool call request/response but notifications/claude/channel notifications from server to client are not being processed by the Claude Code client. This may be related to running under npx tsx instead of bun — bun cannot run on this CPU (Intel Core 2 Duo, no AVX support) so the plugin falls back to npx tsx via package.json scripts.start.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗