[BUG] `/mcp` panel lists zero servers ("No MCP servers configured") while `claude mcp list` shows them and tools work — panel renders empty `mcp.clients`

Open 💬 1 comment Opened Jul 9, 2026 by simplyq-dxtimer

Summary

On macOS (native install), the interactive /mcp panel opens but lists zero servers and shows "No MCP servers configured." At the same time, claude mcp list enumerates every configured server (16 here, all healthy) and their tools load and execute normally in-session. This is not a config problem — it reproduces with a fully schema-valid config, across every terminal, both TUI modes, and freshly-started sessions.

Environment

  • Claude Code: 2.1.205 (also observed on 2.1.203 / 2.1.204 — has been broken "for a while")
  • Commit: 4cf2699a1427
  • Platform: darwin-arm64 (macOS), native install
  • Terminals tried: Warp, Terminal.app, iTerm2 — identical result
  • tui setting: tried both fullscreen and default
  • ~16 MCP servers: mix of stdio (npx/uvx/dart-based), http (several), one plugin server, and claude.ai connectors (Drive/Gmail/Calendar)

Steps to reproduce

  1. Configure MCP servers (global + project scope in ~/.claude.json).
  2. Start a fresh session and wait for MCP to finish connecting (tools become available).
  3. Run /mcp.

Expected

The panel lists the configured/connected MCP servers — the same set claude mcp list shows.

Actual

The panel renders its frame but the server list is empty → "No MCP servers configured."

Ruled out

  • Config validity~/.claude.json parses; strict scan confirms every server has a valid type + matching command/url, no unknown keys, no non-string env/args, no nulls. claude doctor reports no installation issues.
  • claude mcp list — works, lists all 16 servers with health status.
  • Tools — MCP tools load and execute fine; claude --debug shows every server Connection established … hasTools:true.
  • Terminal / TUI mode / fresh session / version — reproduces across all.

Root-cause lead (from inspecting the shipped binary)

claude mcp list and the interactive panel read from different sources:

  • claude mcp list → a config-derived loader (dG({ includePendingProjectServers: true })) → works, returns all servers.
  • /mcp panel → live state: roughly mcp = useStore(s => s.mcp); clients = mcp.clients; list = clients.filter(c => c.name !== "ide").sort(byName). The "No MCP servers configured" branch fires when list.length === 0.

So the panel renders live mcp.clients, which is empty in these sessions even though the connection manager connects every server and tools work. Something prevents connected clients from appearing in the mcp.clients state the panel reads (or the panel reads a different/empty store instance than the one MCP init populates).

Workaround

claude mcp list, claude mcp get <name>, and claude mcp login <name> all work from the CLI, so MCP itself is fully functional — only the interactive picker is affected.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗