Telegram plugin: notifications/claude/channel not delivered to client (node/npx tsx runtime)

Resolved 💬 3 comments Opened Mar 23, 2026 by babel-stack Closed Mar 23, 2026

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/:

  1. server.ts line 1 — shebang changed from #!/usr/bin/env bun to #!/usr/bin/env npx tsx
  2. package.json scripts.start — changed from bun server.ts to npx tsx server.ts
  3. node_modules — installed with npm install instead of bun install (package-lock.json generated alongside existing bun.lock)

Reproduction

  1. Configure Telegram bot token in ~/.claude/channels/telegram/.env
  2. Set access policy to allowlist with a valid Telegram user ID
  3. Start Claude Code — plugin server starts (visible in ps aux)
  4. Send a message to the bot from Telegram
  5. Bot receives the message (verified: getUpdates returns empty after polling consumes it)
  6. gate() returns deliver (user ID is in allowlist)
  7. mcp.notification() fires — but nothing arrives in Claude Code conversation
  8. 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.

View original on GitHub ↗

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