Skip to content

fix: populate root .mcp.json so plugin MCP servers register#125

Merged
antonbabenko merged 1 commit into
masterfrom
fix/root-mcp-json-registration
Jun 2, 2026
Merged

fix: populate root .mcp.json so plugin MCP servers register#125
antonbabenko merged 1 commit into
masterfrom
fix/root-mcp-json-registration

Conversation

@antonbabenko

Copy link
Copy Markdown
Owner

TL;DR: the plugin registered zero MCP servers on install. Root .mcp.json shipped empty; Claude Code reads MCP definitions from that file, not from .claude-plugin/mcp.json.

Symptom

After install + /reload-plugins, none of the mcp__deliberation-* tools (codex / gemini / grok / openrouter / deliberation) are available. /deliberation:ask-grok etc. fail with no provider. /plugin update + /reload-plugins does not fix it.

Root cause

Claude Code reads a plugins MCP server definitions from the plugin root .mcp.json. This repo shipped:

  • root .mcp.json -> {"mcpServers": {}} (empty)
  • .claude-plugin/mcp.json -> the real 5-server manifest

Claude Code does not read .claude-plugin/mcp.json for plugin MCP registration, so it registered nothing. /reload-plugins reloads skills/commands/rules, not MCP connections, so it could never recover. Regression from 00be051 ("register MCP servers via plugin manifest").

Every plugin whose MCP loads correctly (ecc, playwright, telegram) declares its servers in the root .mcp.json.

Fix

Copy the canonical 5-server manifest into root .mcp.json. No other changes.

Verification (local)

  • root + cache .mcp.json parse as valid JSON
  • codex binary on PATH; XAI_API_KEY / OPENROUTER_API_KEY present
  • all four node bridges complete the initialize handshake and list tools:
    • gemini -> gemini, gemini-reply
    • grok -> grok, grok-reply
    • openrouter -> openrouter, openrouter-reply, openrouter-list
    • deliberation -> 21 tools (ask-all, consensus, ask-grok, ...)
  • live end-to-end Grok call ("what is 2+3+4?") returns 9

Follow-up (not in this PR)

.claude-plugin/mcp.json appears unread by Claude Code for plugin MCP. Worth reconciling to a single source of truth (keep root .mcp.json, drop or repurpose the .claude-plugin copy, and update CLAUDE.md/docs that call it "the SOLE runtime MCP registration").

Note: MCP servers connect at Claude Code startup, so installed users must fully restart Claude Code (not just /reload-plugins) to pick up the servers after this lands.

Claude Code reads plugin MCP server definitions from the plugin root
.mcp.json. The root file shipped empty ({"mcpServers":{}}) while the
real 5-server manifest lived only in .claude-plugin/mcp.json, which
Claude Code does not read for plugin MCP registration. Net effect: zero
deliberation MCP servers registered on install, so none of the
mcp__deliberation-* tools (codex/gemini/grok/openrouter/deliberation)
were available, and /reload-plugins could not fix it (it reloads
skills/commands, not MCP connections).

Copy the canonical manifest into root .mcp.json to match the convention
used by every working plugin (ecc, playwright, telegram all declare MCP
in root .mcp.json). Verified locally: all four node bridges complete the
initialize handshake and expose their tools, and a live Grok call returns
correctly end-to-end.
@antonbabenko antonbabenko enabled auto-merge (squash) June 2, 2026 13:37
@antonbabenko antonbabenko disabled auto-merge June 2, 2026 13:37
@antonbabenko antonbabenko merged commit 20be546 into master Jun 2, 2026
1 check passed
@antonbabenko antonbabenko deleted the fix/root-mcp-json-registration branch June 2, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant