zero mcp check is the command we point users at when an MCP server misbehaves, and it reports success for a server that never started.
runMCPCheck (internal/cli/mcp_config.go:301-327) calls registerMCPTools, checks only the returned error, and then unconditionally prints MCP server %s is reachable. %d tool(s) available. with status ok. It never consults Runtime.Skipped().
That error branch is effectively dead for the case that matters. RegisterTools (internal/mcp/registry.go:154-166) is deliberately best-effort: a server that fails to connect is recorded in runtime.skipped and registration returns nil, so one broken server cannot abort launch. Correct behaviour for startup, wrong thing to ignore in a diagnostic.
The result is that a server whose command does not exist reports "is reachable. 0 tool(s) available." The user's only clue is a tool count of zero, which looks like a server that genuinely exposes no tools.
We already have the data: SkippedServer{Name, Err, UnconfiguredDefault} at registry.go:31-42. runMCPCheck needs to read it and fail with the recorded error. Small, and it makes the other MCP issues easier to diagnose.
zero mcp checkis the command we point users at when an MCP server misbehaves, and it reports success for a server that never started.runMCPCheck(internal/cli/mcp_config.go:301-327) callsregisterMCPTools, checks only the returned error, and then unconditionally printsMCP server %s is reachable. %d tool(s) available.with statusok. It never consultsRuntime.Skipped().That error branch is effectively dead for the case that matters.
RegisterTools(internal/mcp/registry.go:154-166) is deliberately best-effort: a server that fails to connect is recorded inruntime.skippedand registration returns nil, so one broken server cannot abort launch. Correct behaviour for startup, wrong thing to ignore in a diagnostic.The result is that a server whose command does not exist reports "is reachable. 0 tool(s) available." The user's only clue is a tool count of zero, which looks like a server that genuinely exposes no tools.
We already have the data:
SkippedServer{Name, Err, UnconfiguredDefault}atregistry.go:31-42.runMCPCheckneeds to read it and fail with the recorded error. Small, and it makes the other MCP issues easier to diagnose.