--channels plugin:telegram starts but never spawns the plugin's MCP server (bun) on Windows — bot silently never responds
Environment:
- OS: Windows Server 2025 Datacenter (10.0.26100)
- Claude Code version: 2.1.220
- Plugin: telegram@claude-plugins-official v0.0.6
- Runtime: bun 1.3.14 (installed at ~/.bun/bin/bun.exe, resolvable via PATH)
Summary:
Running claude --channels plugin:telegram@claude-plugins-official (with TELEGRAM_BOT_TOKEN set in the process environment) starts and stays alive indefinitely, but the plugin's MCP server process (bun run --cwd <plugin_root> --shell=bun --silent start, per the plugin's .mcp.json) never spawns as a child process. As a result the bot never calls Telegram's getUpdates, so incoming messages sit unconsumed indefinitely (getWebhookInfo shows a growing pending_update_count that never drains) and the bot never responds.
Steps to reproduce:
- Configure the telegram channel (
/telegram:configure) with a valid bot token. - Launch:
claude --channels plugin:telegram@claude-plugins-official - Send a message to the bot on Telegram.
- Poll
https://api.telegram.org/bot<token>/getWebhookInfo—pending_update_countincreases and never returns to 0. - Inspect child processes of the
claude.exeprocess (e.g.Get-CimInstance Win32_Process | Where ParentProcessId -eq <pid>) — nobun.exeprocess ever appears as its child.
What I tried (all failed to produce a working bot):
- Launching via a scheduled task running a wrapper script (
start-bridge.ps1) that redirects all output (*>> logfile) — this actually crashes immediately withError: Input must be provided either through stdin or as a prompt argument when using --print, even though--printis never passed. Seems to be triggered whenever stdout is redirected/non-TTY. - Launching interactively in a real console window (no redirection) — process starts and stays alive with no crash, but never spawns the
bunMCP server child process, confirmed over multiple runs and wait periods (45-50s+). - Wiping the plugin's
node_modulesandbun.lockand letting it do a cleanbun install— reinstall completed cleanly (250 packages), but behavior is identical: nobunchild process, no updates consumed. - Manually running the plugin's own start command (
bun run --cwd <plugin_root> --shell=bun start) directly in a shell — this does work and bun starts fine, sobunitself and the plugin'sserver.tsare not the problem; the issue appears to be specifically in howclaude.exe's--channelsmode spawns/manages this child process on Windows.
Expected: The channel process should spawn the plugin's MCP server as a child process and keep polling Telegram for updates.
Actual: The outer claude.exe process stays alive (some background CPU usage, not fully hung) but never spawns the MCP server child, so the bot never processes any Telegram messages.
3 Comments
Full bridge log (crash-loop from the wrapper script attempt): https://gist.github.com/namicwann02-art/125c56f39fbc15ccffb33204b47cdaef
User-facing symptom: the bot does not respond to any messages sent to it on Telegram, at all — not slow, not intermittent, just completely silent.
Confirmed via the Telegram Bot API directly (not just observed behavior): polling \
getWebhookInfo\repeatedly over several minutes while the channel process was alive showed \pending_update_count\stuck at 3 and never draining, i.e. messages sent to the bot just queue up on Telegram's side and are never fetched by the (non-existent) MCP server child process. No webhook is configured (\url: \"\"\), so this isn't a webhook misconfiguration — it's the long-polling client that never starts.Update: the bot appears to have recovered on its own, without any restart on my end.
The same \
claude.exe\process that had been sitting idle since it was launched (started 2026-07-30 16:41:29, with no \bun\child process for over 6 hours) finally spawned \bun.exe\child processes at 2026-07-30 23:14:22 — first time I've seen that happen without killing and relaunching the process. Right after that, \getWebhookInfo\showed \pending_update_count\drop to 0, and the bot is now responding.So this looks less like "never spawns" and more like an extremely long, unpredictable delay before the MCP server child gets spawned (in this case ~6.5 hours with the parent process just sitting there idle). Leaving this open since a multi-hour delay before a bot becomes responsive is still a bug, just wanted to correct my earlier "never spawns" framing — it did eventually spawn on its own, with no code/config change or restart from me in between.