From e9633d7a0226eac91c7a791dc4f92cf8f25df2ae Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 14 Sep 2026 13:47:06 +0000 Subject: [PATCH] Avoid cloning MCP server status snapshot data (#45428) Remove entries from the owned snapshot maps when building MCP server status responses, moving server metadata, tools, resources, and auth statuses into the response instead of cloning them. Preserve pagination and missing-entry defaults. GitOrigin-RevId: 012301f55ddb9c52c7934a638bdd0310f11077fa --- .../src/request_processors/mcp_processor.rs | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/codex-rs/app-server/src/request_processors/mcp_processor.rs b/codex-rs/app-server/src/request_processors/mcp_processor.rs index f11f5b212c..f6e910392e 100644 --- a/codex-rs/app-server/src/request_processors/mcp_processor.rs +++ b/codex-rs/app-server/src/request_processors/mcp_processor.rs @@ -346,13 +346,13 @@ impl McpRequestProcessor { None => HashMap::new(), }; let McpServerStatusSnapshot { - server_infos, - server_capabilities, - tools_by_server, - tools_errors, - resources, - resource_templates, - auth_statuses, + mut server_infos, + mut server_capabilities, + mut tools_by_server, + mut tools_errors, + mut resources, + mut resource_templates, + mut auth_statuses, mut server_names, } = snapshot; server_names.extend(runtime_statuses.keys().cloned()); @@ -401,15 +401,14 @@ impl McpRequestProcessor { | McpServerSource::Extension { .. } => None, }, ), - server_info: server_infos.get(name).cloned(), - server_capabilities: server_capabilities.get(name).cloned(), - tools: tools_by_server.get(name).cloned().unwrap_or_default(), - tools_error: tools_errors.get(name).cloned(), - resources: resources.get(name).cloned().unwrap_or_default(), - resource_templates: resource_templates.get(name).cloned().unwrap_or_default(), + server_info: server_infos.remove(name), + server_capabilities: server_capabilities.remove(name), + tools: tools_by_server.remove(name).unwrap_or_default(), + tools_error: tools_errors.remove(name), + resources: resources.remove(name).unwrap_or_default(), + resource_templates: resource_templates.remove(name).unwrap_or_default(), auth_status: auth_statuses - .get(name) - .cloned() + .remove(name) .unwrap_or(CoreMcpAuthStatus::Unsupported) .into(), })