/reload-plugins reports MCP server reloaded but child process is not respawned

Resolved 💬 3 comments Opened May 9, 2026 by da40pilot Closed May 13, 2026

Summary

/reload-plugins reports 1 plugin MCP server reloaded, but the underlying MCP child process is not killed and respawned. New plugin code (after /plugin update) is therefore never loaded until a full Claude Code restart.

Environment

  • Claude Code version: 2.1.136 (AI_AGENT=claude-code_2-1-136_harness)
  • Platform: macOS 24.6.0 (darwin)
  • Plugin: cleos-connector@cleos-labs (custom marketplace)

Reproduction

  1. Install a plugin that ships an MCP server (type: stdio)
  2. Find the running MCP child PID:

``
ps -eo pid,etime,command | grep '<plugin-name>'
``

  1. Publish a new version of the plugin to the marketplace, bump .claude-plugin/plugin.json version
  2. Run /plugin update <plugin>@<marketplace> — succeeds, prompts to run /reload-plugins
  3. Run /reload-plugins — output includes … · 1 plugin MCP server · …
  4. Re-check the PID and etime — same PID, etime continues from before reload

Expected

After /reload-plugins, the MCP child process is killed and respawned. New code from the updated cache directory is loaded. Plugin tool calls reflect new behavior immediately.

Actual

/reload-plugins reloads other resources (skills, agents, hooks) but leaves MCP child processes untouched. Plugin tool calls continue to execute the old code from the old cache directory until the user fully quits and relaunches Claude Code.

Impact

  • Confusing UX: the message says the MCP server reloaded, so users assume new code is live
  • Plugin updates that change MCP behavior (new tools, fixed bugs) appear to fail until full restart
  • Hard to debug because there's no obvious indicator that the running connector is stale

Suggested fix

Either:

  • Make /reload-plugins actually SIGTERM and respawn MCP children, OR
  • Update the message to clarify "MCP server config reloaded; existing connections remain — restart Claude Code to spawn new MCP child processes"

The first is more useful; the second is honest.

View original on GitHub ↗

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