use async_trait::async_trait;
#[derive(Debug, Clone)]
pub enum McpEvent {
ServerStarted {
addr: String,
},
ToolListRequested {
client_addr: String,
},
ToolListReturned {
client_addr: String,
tool_count: usize,
},
ToolCallReceived {
client_addr: String,
tool_name: String,
parameters: serde_json::Value,
},
ToolCallCompleted {
client_addr: String,
tool_name: String,
success: bool,
error: Option<String>,
duration_ms: u64,
},
ToolError {
source: String,
tool_name: String,
error: String,
duration_ms: u64,
},
RequestRejected {
client_addr: String,
reason: String,
},
ConnectionInitialized {
endpoint: String,
tool_count: usize,
},
ConnectionClosed {
endpoint: String,
},
ToolsDiscovered {
endpoint: String,
tool_count: usize,
tool_names: Vec<String>,
},
CacheHit {
endpoint: String,
tool_count: usize,
},
CacheExpired {
endpoint: String,
},
RemoteToolCallStarted {
endpoint: String,
tool_name: String,
parameters: serde_json::Value,
},
RemoteToolCallCompleted {
endpoint: String,
tool_name: String,
success: bool,
error: Option<String>,
duration_ms: u64,
},
}
#[async_trait]
pub trait McpEventHandler: Send + Sync {
async fn on_mcp_event(&self, _event: &McpEvent) {}
}