From 51dd5af807b224ab4cde43f53ecd0028901c87ec Mon Sep 17 00:00:00 2001 From: Thibault Sottiaux Date: Thu, 8 Jan 2026 17:47:02 -0800 Subject: [PATCH] fix: treat null MCP resource args as empty (#8917) Handle null tool arguments in the MCP resource handler so optional resource tools accept null without failing, preserving normal JSON parsing for non-null payloads and improving robustness when models emit null; this avoids spurious argument parse errors for list/read MCP resource calls. --- codex-rs/core/src/tools/handlers/mcp_resource.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/codex-rs/core/src/tools/handlers/mcp_resource.rs b/codex-rs/core/src/tools/handlers/mcp_resource.rs index 4dac72fbc5..62f7a83e1a 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource.rs @@ -640,9 +640,14 @@ fn parse_arguments(raw_args: &str) -> Result, FunctionCallError> { if raw_args.trim().is_empty() { Ok(None) } else { - serde_json::from_str(raw_args).map(Some).map_err(|err| { + let value: Value = serde_json::from_str(raw_args).map_err(|err| { FunctionCallError::RespondToModel(format!("failed to parse function arguments: {err}")) - }) + })?; + if value.is_null() { + Ok(None) + } else { + Ok(Some(value)) + } } } @@ -769,6 +774,11 @@ mod tests { "expected None for empty arguments" ); + assert!( + parse_arguments("null").unwrap().is_none(), + "expected None for null arguments" + ); + let value = parse_arguments(r#"{"server":"figma"}"#) .expect("parse json") .expect("value present");