Channel plugin MCP tools fail to register on session start (messages received but cannot reply)

Resolved 💬 3 comments Opened Mar 24, 2026 by zhonghui5207 Closed Mar 27, 2026

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

  1. Install the Telegram channel plugin: /plugin install telegram@claude-plugins-official
  2. Configure bot token via /telegram:configure <token>
  3. Start a session: claude --channels plugin:telegram@claude-plugins-official
  4. Send a message from Telegram to the bot
  5. The message arrives as a <channel> notification — ✅
  6. The assistant tries to use reply tool — tool not found in deferred tools list — ❌
  7. Run /reload-plugins — output shows 1 plugin MCP server loaded
  8. The reply tool 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
  • ToolSearch for mcp__plugin_telegram_telegram__reply returns no results
  • No bun child process running the server is visible in ps output
  • /reload-plugins restores 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-official v0.0.1
  • Bun 1.3.11
  • Plugin MCP server uses @modelcontextprotocol/sdk with StdioServerTransport

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.

View original on GitHub ↗

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