MCPcopy Create free account
hub / github.com/ScriptedAlchemy/tracedecay / call_tool

Function call_tool

src/daemon.rs:1177–1225  ·  view source on GitHub ↗
(
    socket_path: &Path,
    handshake: &DaemonHandshake,
    tool_name: &str,
    arguments: serde_json::Value,
)

Source from the content-addressed store, hash-verified

1175
1176#[cfg(unix)]
1177pub async fn call_tool(
1178 socket_path: &Path,
1179 handshake: &DaemonHandshake,
1180 tool_name: &str,
1181 arguments: serde_json::Value,
1182) -> Result<serde_json::Value> {
1183 let stream = connect_to_daemon(socket_path).await?;
1184 let (reader, mut writer) = stream.into_split();
1185 let id = json!(1);
1186 let request = JsonRpcRequest {
1187 jsonrpc: "2.0".to_string(),
1188 id: Some(id.clone()),
1189 method: "tools/call".to_string(),
1190 params: Some(json!({
1191 "name": tool_name,
1192 "arguments": arguments,
1193 })),
1194 };
1195
1196 writer.write_all(handshake.to_line()?.as_bytes()).await?;
1197 writer.write_all(b"\n").await?;
1198 writer
1199 .write_all(serde_json::to_string(&request)?.as_bytes())
1200 .await?;
1201 writer.write_all(b"\n").await?;
1202 writer.flush().await?;
1203 writer.shutdown().await?;
1204
1205 let mut lines = tokio::io::BufReader::new(reader).lines();
1206 while let Some(line) = lines.next_line().await? {
1207 let value: serde_json::Value = serde_json::from_str(&line)?;
1208 if value.get("id") != Some(&id) {
1209 continue;
1210 }
1211 let response: JsonRpcResponse = serde_json::from_value(value)?;
1212 if let Some(error) = response.error {
1213 return Err(TraceDecayError::Config {
1214 message: format!("daemon tool call failed: {}", error.message),
1215 });
1216 }
1217 return response.result.ok_or_else(|| TraceDecayError::Config {
1218 message: "daemon tool call response did not include a result".to_string(),
1219 });
1220 }
1221
1222 Err(TraceDecayError::Config {
1223 message: "daemon closed the connection before returning a tool result".to_string(),
1224 })
1225}
1226
1227#[cfg(not(unix))]
1228pub async fn call_tool(

Callers 1

call_default_toolFunction · 0.70

Calls 5

connect_to_daemonFunction · 0.85
unsupported_platformFunction · 0.85
to_lineMethod · 0.80
shutdownMethod · 0.80
flushMethod · 0.45

Tested by

no test coverage detected