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),
);
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);
}
Ok(value)
@@ -3890,6 +3894,7 @@ fn render_mcp_server_report_json(
Some(server) => json!({
"kind": "mcp",
"action": "show",
"status": "ok",
"working_directory": cwd.display().to_string(),
"found": true,
"server": mcp_server_json(server_name, server),
@@ -3897,6 +3902,8 @@ fn render_mcp_server_report_json(
None => json!({
"kind": "mcp",
"action": "show",
"status": "error",
"error_kind": "server_not_found",
"working_directory": cwd.display().to_string(),
"found": false,
"server_name": server_name,

View File

@@ -5872,7 +5872,8 @@ impl LiveCli {
// Propagate ok:false → non-zero exit so automation callers
// can rely on exit code instead of inspecting the envelope.
// (#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)?);
if is_error {
std::process::exit(1);