Channel plugin MCP tools fail to register on session start (messages received but cannot reply)
Bug description
When starting a session with --channels plugin:telegram@claude-plugins-official, the Telegram channel plugin successfully receives inbound messages (they appear as <channel> notifications), but the MCP tools (reply, react, edit_message) are not registered as deferred tools. This means the assistant can see Telegram messages but cannot respond to them.
Running /reload-plugins fixes the issue — the tools become available immediately.
Steps to reproduce
- Install the Telegram channel plugin:
/plugin install telegram@claude-plugins-official - Configure bot token via
/telegram:configure <token> - Start a session:
claude --channels plugin:telegram@claude-plugins-official - Send a message from Telegram to the bot
- The message arrives as a
<channel>notification — ✅ - The assistant tries to use
replytool — tool not found in deferred tools list — ❌ - Run
/reload-plugins— output shows1 plugin MCP serverloaded - The
replytool is now available — ✅
Expected behavior
MCP tools from channel plugins should be registered and available as deferred tools when the session starts, not only after /reload-plugins.
Observed behavior
- Inbound channel notifications work (messages are delivered to the assistant)
- MCP tools from the same plugin server are NOT registered
ToolSearchformcp__plugin_telegram_telegram__replyreturns no results- No
bunchild process running the server is visible inpsoutput /reload-pluginsrestores full functionality
Impact
This is particularly problematic for unattended/remote usage (e.g., using Telegram as a remote interface to Claude Code). If the tools fail to load on startup, there's no way to auto-recover without manual intervention at the terminal.
Environment
- macOS (Darwin 25.3.0)
- Claude Code started via CCS wrapper:
ccs pro2 --channels plugin:telegram@claude-plugins-official - Plugin:
telegram@claude-plugins-officialv0.0.1 - Bun 1.3.11
- Plugin MCP server uses
@modelcontextprotocol/sdkwithStdioServerTransport
Possible cause
The channel plugin's server.ts serves dual purposes: (1) MCP server providing tools via stdio, and (2) Telegram bot receiving messages via polling. It appears that during session initialization, the channel notification pathway is established but the MCP tool registration pathway fails silently. The server process may not be spawned at all until /reload-plugins triggers it.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗