#[async_trait::async_trait]
pub trait McpTools: Send {
fn handles(&self, name: &str) -> bool;
fn tool_defs(&self) -> Vec<serde_json::Value>;
async fn call(&mut self, name: &str, args: &serde_json::Value) -> String;
}
pub struct NoMcp;
#[async_trait::async_trait]
impl McpTools for NoMcp {
fn handles(&self, _name: &str) -> bool {
false
}
fn tool_defs(&self) -> Vec<serde_json::Value> {
Vec::new()
}
async fn call(&mut self, _name: &str, _args: &serde_json::Value) -> String {
"error: no MCP servers connected".to_string()
}
}