refactor: improve MCP parameter normalization and test clarity

- Changed `normalize_mcp_parameters` to avoid mutating the input parameters.
- Updated the test name to better reflect its purpose of preserving the cursor object union schema.
- Adjusted assertions in the test to compare the entire schema instead of individual fields.
This commit is contained in:
leokun
2026-08-27 11:11:13 +08:00
parent 995a12df44
commit 31dfa8d295
+4 -6
View File
@@ -478,9 +478,9 @@ pub fn dynamic_mcp(
Ok(output)
}
fn normalize_mcp_parameters(tool_name: &str, mut parameters: Value) -> Result<Value> {
fn normalize_mcp_parameters(tool_name: &str, parameters: Value) -> Result<Value> {
let schema = parameters
.as_object_mut()
.as_object()
.ok_or_else(|| invalid_mcp_parameters(tool_name))?;
match schema.get("type") {
Some(Value::String(schema_type)) if schema_type == "object" => return Ok(parameters),
@@ -505,7 +505,6 @@ fn normalize_mcp_parameters(tool_name: &str, mut parameters: Value) -> Result<Va
if !object_only_union {
return Err(invalid_mcp_parameters(tool_name));
}
schema.insert("type".into(), Value::String("object".into()));
Ok(parameters)
}
@@ -614,7 +613,7 @@ mod tests {
}
#[test]
fn dynamic_mcp_normalizes_cursor_object_union_without_mutating_wire_schema() {
fn dynamic_mcp_preserves_cursor_object_union_schema() {
let original_schema = serde_json::json!({
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
@@ -655,8 +654,7 @@ mod tests {
.get("cursor-app-control-move_agent_to_cloned_root")
.unwrap();
assert_eq!(definition.parameters["type"], "object");
assert_eq!(definition.parameters["anyOf"], original_schema["anyOf"]);
assert_eq!(definition.parameters, original_schema);
assert_eq!(
wire.input_schema_json.as_deref(),
Some(original_json.as_str())