Telegram plugin loaded by all Claude Code instances when enabledPlugins is set globally, causing multi-process channel conflict
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
- Configure Telegram plugin globally in
~/.claude/settings.json:
``json``
{
"enabledPlugins": {
"telegram@claude-plugins-official": true
}
}
- Start a dedicated Claude Code process with
--channels plugin:telegram@claude-plugins-official(e.g. viaclaudetgalias in tmux) - Open VSCode with the Claude Code extension active (sidebar panel)
- 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):
enabledPluginscauses the plugin MCP server to start for every Claude Code instance at startup--channelsis 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-
--channelsinstances 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:
- Only start a plugin's MCP server if the current instance passes
--channelswith that plugin, or - Add a per-instance opt-out setting (e.g.
channelsEnabled: falsein 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-officialv0.0.4
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗