[BUG] Channel plugin MCP servers don't spawn on Windows (v2.1.116)

Resolved 💬 2 comments Opened Apr 21, 2026 by JalalFakhriS Closed Apr 22, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Channel plugin MCP servers (telegram, discord) fail to spawn on Windows when launched with --channels. Claude Code v2.1.116 on Windows 11 does not start the MCP subprocess for channel plugins. Plugins install cleanly, /plugin list shows them as enabled, and the startup banner says "Listening for channel messages", but:

  • No Bun subprocess is ever spawned (Get-Process bun returns empty).
  • /mcp does not list the channel plugins (neither connected nor failed, simply absent).
  • Telegram getUpdates confirms messages queue up server-side, uncollected.
  • Plugin slash commands (/telegram:configure, /telegram:access) are not registered — /help doesn't list any telegram or discord commands, and /telegram:configure returns No commands match.
  • Running bun server.ts manually from the plugin directory works perfectly — the bot replies with a pairing code. This proves the plugin code, Bun install, token, and network path are all fine. Claude Code just never launches the subprocess.

Replacing "command": "bun" with the full path "C:\\Users\\Jalal\\.bun\\bin\\bun.exe" in the plugin .mcp.json did not fix it. Removing --silent to surface errors produced no additional output. No error, warning, or debug message appears anywhere. Channels is the headline feature for reaching a running Claude Code session from mobile, and on Windows it is currently unusable end-to-end through the documented flow.

What Should Happen?

When I run:

claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official

The following should occur:

  1. Claude Code spawns the Bun subprocess for each channel plugin's MCP server.
  2. Both MCP servers appear in /mcp as connected.
  3. Plugin slash commands (/telegram:configure, /telegram:access pair, /discord:configure, /discord:access pair, etc.) become available and show in /help.
  4. Each plugin begins polling its platform (Telegram long-poll, Discord gateway).
  5. When I DM the bot, the plugin replies with a pairing code and the inbound message appears in Claude's terminal as a <channel source="telegram"> event.
  6. /telegram:access pair <code> completes pairing and /telegram:access policy allowlist locks down access.

---

Error Messages/Logs

**There are no error messages.** This is itself part of the bug.

- Launching with `--channels` prints the normal "Listening for channel messages" banner and nothing else.
- Removing `--silent` from the plugin `.mcp.json` produced no additional output.
- `/mcp` shows no failed or pending channel plugin entries — they simply never register.
- Running `/doctor` reports the Claude Code install as healthy with no relevant warnings.
- No log file in `~/.claude` that I could find surfaces a spawn attempt or failure.

The only surfacing happens when I launch the plugin manually (`bun server.ts`), where it works without incident. Under Claude Code's launch path, silence.

---

Steps to Reproduce

  1. On Windows 11 with PowerShell, install Bun via the official PowerShell one-liner: powershell -c "irm bun.sh/install.ps1 | iex". Verify with bun --version.
  2. Create a Telegram bot via BotFather and save the token.
  3. Create a Discord bot via the Developer Portal, enable Message Content Intent, use OAuth2 URL Generator with scope bot and permissions View Channels / Send Messages / Send Messages in Threads / Read Message History / Attach Files / Add Reactions, add the bot to a personal server.
  4. Inside Claude CLI, install both plugins:

``
/plugin install telegram@claude-plugins-official
/plugin install discord@claude-plugins-official
/reload-plugins
``

  1. Set both tokens as User-scope environment variables, then open a fresh PowerShell:

``powershell
[Environment]::SetEnvironmentVariable("TELEGRAM_BOT_TOKEN", "<token>", "User")
[Environment]::SetEnvironmentVariable("DISCORD_BOT_TOKEN", "<token>", "User")
``

  1. Launch Claude Code with channels enabled:

``powershell
claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
``

  1. DM the Telegram bot. DM the Discord bot.
  2. Observe: no reply from either bot, no new output in the Claude terminal, /mcp omits both plugins, /help has no telegram or discord commands, and Get-Process bun in a second PowerShell returns empty.

---

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

N/A

Claude Code Version

2.1.116 (Windows, installed via npm install -g @anthropic-ai/claude-code).

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

Plugin runs standalone — isolates the bug to Claude's launch path

cd "C:\Users\Jalal\.claude\plugins\marketplaces\claude-plugins-official\external_plugins\telegram"
bun server.ts

When run directly, the plugin polls Telegram, receives messages, and replies with a pairing code immediately. This rules out the plugin code, Bun installation, environment variables, network path, and token validity. The only remaining failure point is Claude Code's subprocess launch.

Plugin cache directory looks incomplete

C:\Users\Jalal\.claude\plugins\cache\claude-plugins-official\telegram\0.0.6\
  └── node_modules\     (only subdirectory present — no server.ts, package.json, or .mcp.json)

The cache contains node_modules but not the source files. Source files live at:

C:\Users\Jalal\.claude\plugins\marketplaces\claude-plugins-official\external_plugins\telegram\

Unclear whether this is the expected layout or a secondary install bug.

Attempted fix: absolute Bun path

Modified both plugin .mcp.json files to use the full Bun path, then relaunched with a fresh PowerShell. No change.

{
  "mcpServers": {
    "telegram": {
      "command": "C:\\Users\\Jalal\\.bun\\bin\\bun.exe",
      "args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "start"]
    }
  }
}

Relevant feature flags confirm channels are enabled

From ~/.claude.json:

  • tengu_harbor: true
  • tengu_harbor_permissions: true
  • tengu_harbor_ledger lists discord, telegram, fakechat, imessage

So the feature is on and the plugins are recognized in the harbor ledger, but the MCP servers never get spawned.

Ruled out

  • Invalid token (verified via getMe API call → ok: True).
  • Bun missing from PATH (verified bun --version and where.exe bun).
  • Plugin not installed / disabled (/plugin list shows both enabled under User scope).
  • Enterprise org blocking (individual Max user).
  • Plugin not on Anthropic allowlist (both official plugins).
  • Stale marketplace (refreshed via /plugin marketplace update).

Suspected root cause

Failure appears to be upstream of the spawn call itself. /mcp never lists the channel plugins at all (not "failed", simply absent). No errors surface even with --silent removed. The plugin-to-MCP registration step seems to not fire on Windows for channel plugins.

View original on GitHub ↗

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