use super::{McpToolCall, McpToolDescriptor, McpToolResponse}; use crate::{Error, Result}; use async_trait::async_trait; /// Trait for a client that can interact with an MCP server #[async_trait] pub trait McpClient: Send + Sync { /// List the tools available on the server async fn list_tools(&self) -> Result>; /// Call a tool on the server async fn call_tool(&self, call: McpToolCall) -> Result; } /// Placeholder for a client that connects to a remote MCP server. pub struct RemoteMcpClient; #[async_trait] impl McpClient for RemoteMcpClient { async fn list_tools(&self) -> Result> { // TODO: Implement remote call Err(Error::NotImplemented( "Remote MCP client is not implemented".to_string(), )) } async fn call_tool(&self, _call: McpToolCall) -> Result { // TODO: Implement remote call Err(Error::NotImplemented( "Remote MCP client is not implemented".to_string(), )) } }