Telegram plugin loaded by all Claude Code instances when enabledPlugins is set globally, causing multi-process channel conflict

Resolved 💬 3 comments Opened Mar 27, 2026 by rzblues Closed Mar 31, 2026

Summary

When telegram@claude-plugins-official is set in ~/.claude/settings.json under enabledPlugins, every Claude Code instance that starts (including VSCode extension, multiple iTerm sessions, etc.) loads the Telegram MCP server. This causes multiple bot polling connections to Telegram simultaneously, resulting in messages being silently dropped — the user sees \"typing\" indicators but never receives a reply.

Steps to reproduce

  1. Configure Telegram plugin globally in ~/.claude/settings.json:

``json
{
"enabledPlugins": {
"telegram@claude-plugins-official": true
}
}
``

  1. Start a dedicated Claude Code process with --channels plugin:telegram@claude-plugins-official (e.g. via claudetg alias in tmux)
  2. Open VSCode with the Claude Code extension active (sidebar panel)
  3. Send a Telegram message to the bot

Result: The message is never replied to. Both processes loaded the Telegram MCP server and are polling simultaneously; Telegram delivers the update to one, but only the --channels process is authorized to handle it — and it may not be the one that received the update.

Expected behavior

Only the Claude Code process explicitly launched with --channels plugin:telegram@claude-plugins-official should load and poll the Telegram plugin. Other instances (VSCode extension, plain claude sessions) should not start the Telegram MCP server unless they also pass --channels.

Root cause (investigated)

From reading the source (cli.js):

  • enabledPlugins causes the plugin MCP server to start for every Claude Code instance at startup
  • --channels is a separate flag that registers an already-running MCP server for inbound channel notifications
  • These are two independent subsystems — there is no per-instance guard that prevents non---channels instances from starting the same plugin's MCP server process

Impact

  • Affects any user running multiple Claude Code instances simultaneously (common workflow: VSCode extension + dedicated terminal session)
  • Severity: blocks the Telegram channel entirely when VSCode CC is open
  • Frequency: 100% reproducible

Workaround

Add "telegram@claude-plugins-official": false to a project-level .claude/settings.local.json in the directory used by the non-channel instance (e.g. VSCode project root). This is fragile and must be repeated for every project directory.

Suggested fix

Either:

  1. Only start a plugin's MCP server if the current instance passes --channels with that plugin, or
  2. Add a per-instance opt-out setting (e.g. channelsEnabled: false in project settings, not just Teams/Enterprise) that prevents the plugin from being loaded as a channel listener

Environment

  • macOS 15.x (Darwin 25.3.0 arm64)
  • Claude Code v2.1.85 (VSCode extension) + CLI
  • Telegram plugin: telegram@claude-plugins-official v0.0.4

View original on GitHub ↗

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