use async_trait::async_trait;
use serde_json::Value;
use crate::domain::agent::mcp::{McpInvocationContext, McpToolDescriptor};
use crate::domain::errors::Result;
#[async_trait]
pub trait McpToolProvider: Send + Sync {
async fn list_tools(&self) -> Result<Vec<McpToolDescriptor>>;
async fn invoke(
&self,
tool_name: &str,
input: Value,
context: McpInvocationContext,
) -> Result<Value>;
}