fix: mcp show <nonexistent> now returns status:error + error_kind:server_not_found + exit 1; extend ok:false gate to also check status:error

This commit is contained in:
YeonGyu-Kim 2026-05-25 18:34:43 +09:00
parent 47521cf178
commit 181b12f0a9
2 changed files with 10 additions and 2 deletions

View File

@ -2806,7 +2806,11 @@ fn render_mcp_report_json_for(
runtime_config.mcp().get(server_name), runtime_config.mcp().get(server_name),
); );
if let Some(map) = value.as_object_mut() { if let Some(map) = value.as_object_mut() {
map.insert("status".to_string(), Value::String("ok".to_string())); // Only override status to "ok" if the server was found;
// render_mcp_server_report_json already sets status:"error" for not-found.
if map.get("found") == Some(&Value::Bool(true)) {
map.insert("status".to_string(), Value::String("ok".to_string()));
}
map.insert("config_load_error".to_string(), Value::Null); map.insert("config_load_error".to_string(), Value::Null);
} }
Ok(value) Ok(value)
@ -3890,6 +3894,7 @@ fn render_mcp_server_report_json(
Some(server) => json!({ Some(server) => json!({
"kind": "mcp", "kind": "mcp",
"action": "show", "action": "show",
"status": "ok",
"working_directory": cwd.display().to_string(), "working_directory": cwd.display().to_string(),
"found": true, "found": true,
"server": mcp_server_json(server_name, server), "server": mcp_server_json(server_name, server),
@ -3897,6 +3902,8 @@ fn render_mcp_server_report_json(
None => json!({ None => json!({
"kind": "mcp", "kind": "mcp",
"action": "show", "action": "show",
"status": "error",
"error_kind": "server_not_found",
"working_directory": cwd.display().to_string(), "working_directory": cwd.display().to_string(),
"found": false, "found": false,
"server_name": server_name, "server_name": server_name,

View File

@ -5872,7 +5872,8 @@ impl LiveCli {
// Propagate ok:false → non-zero exit so automation callers // Propagate ok:false → non-zero exit so automation callers
// can rely on exit code instead of inspecting the envelope. // can rely on exit code instead of inspecting the envelope.
// (#68: mcp error envelopes previously always exited 0.) // (#68: mcp error envelopes previously always exited 0.)
let is_error = value.get("ok").and_then(|v| v.as_bool()) == Some(false); let is_error = value.get("ok").and_then(|v| v.as_bool()) == Some(false)
|| value.get("status").and_then(|v| v.as_str()) == Some("error");
println!("{}", serde_json::to_string_pretty(&value)?); println!("{}", serde_json::to_string_pretty(&value)?);
if is_error { if is_error {
std::process::exit(1); std::process::exit(1);