use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub enum McpConnectionParams {
Stdio {
command: String,
args: Vec<String>,
timeout: Option<Duration>,
},
Sse {
url: String,
headers: Option<HashMap<String, String>>,
},
}
pub struct McpSessionManager {
params: McpConnectionParams,
}
impl McpSessionManager {
pub fn new(params: McpConnectionParams) -> Self {
Self { params }
}
pub fn params(&self) -> &McpConnectionParams {
&self.params
}
pub async fn list_tools(&self) -> Result<Vec<McpToolInfo>, McpError> {
Ok(vec![])
}
pub async fn call_tool(
&self,
name: &str,
_args: serde_json::Value,
) -> Result<serde_json::Value, McpError> {
Err(McpError::NotConnected(format!(
"MCP session not connected — call_tool({}) requires MCP client integration",
name
)))
}
}
#[derive(Debug, Clone)]
pub struct McpToolInfo {
pub name: String,
pub description: String,
pub input_schema: serde_json::Value,
}
#[derive(Debug, thiserror::Error)]
pub enum McpError {
#[error("Connection failed: {0}")]
ConnectionFailed(String),
#[error("Not connected: {0}")]
NotConnected(String),
#[error("Tool call failed: {0}")]
ToolCallFailed(String),
#[error("{0}")]
Other(String),
}