Skip to content

Commit a83444f

Browse files
humbertoyustaolegklimov
authored andcommitted
fix: leave schema validation to mcp client rust library, to support arrays, and more complex params
1 parent d338624 commit a83444f

File tree

1 file changed

+3
-42
lines changed

1 file changed

+3
-42
lines changed

refact-agent/engine/src/integrations/integr_mcp.rs

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -311,50 +311,11 @@ impl Tool for ToolMCP {
311311
let session = session_option.unwrap();
312312
_session_wait_coroutines(session.clone()).await;
313313

314-
let mut json_arguments: serde_json::Value = serde_json::json!({});
315-
if let serde_json::Value::Object(schema) = &self.mcp_tool.input_schema {
316-
if let Some(serde_json::Value::Object(properties)) = schema.get("properties") {
317-
for (name, prop) in properties {
318-
if let Some(prop_type) = prop.get("type") {
319-
match prop_type.as_str().unwrap_or("") {
320-
"string" => {
321-
if let Some(arg_value) = args.get(name) {
322-
json_arguments[name] = serde_json::Value::String(arg_value.as_str().unwrap_or("").to_string());
323-
}
324-
},
325-
"integer" => {
326-
if let Some(arg_value) = args.get(name) {
327-
json_arguments[name] = serde_json::Value::Number(arg_value.as_i64().unwrap_or(0).into());
328-
}
329-
},
330-
"boolean" => {
331-
if let Some(arg_value) = args.get(name) {
332-
json_arguments[name] = serde_json::Value::Bool(arg_value.as_bool().unwrap_or(false));
333-
}
334-
},
335-
_ => {
336-
tracing::warn!("Unsupported argument type: {}", prop_type);
337-
}
338-
}
339-
}
340-
}
341-
}
342-
if let Some(serde_json::Value::Array(required)) = schema.get("required") {
343-
for req in required {
344-
if let Some(req_str) = req.as_str() {
345-
if !json_arguments.as_object().unwrap().contains_key(req_str) {
346-
return Err(format!("Missing required argument: {}", req_str));
347-
}
348-
}
349-
}
350-
}
351-
}
352-
353-
tracing::info!("\n\nMCP CALL tool '{}' with arguments: {:?}", self.mcp_tool.name, json_arguments);
354-
314+
let json_args = serde_json::json!(args);
315+
tracing::info!("\n\nMCP CALL tool '{}' with arguments: {:?}", self.mcp_tool.name, json_args);
355316
let tool_output = {
356317
let mut mcp_client_locked = self.mcp_client.lock().await;
357-
let result_probably: Result<mcp_client_rs::CallToolResult, mcp_client_rs::Error> = mcp_client_locked.call_tool(self.mcp_tool.name.as_str(), json_arguments).await;
318+
let result_probably: Result<mcp_client_rs::CallToolResult, mcp_client_rs::Error> = mcp_client_locked.call_tool(self.mcp_tool.name.as_str(), json_args).await;
358319

359320
match result_probably {
360321
Ok(result) => {

0 commit comments

Comments
 (0)