use serde::{Deserialize, Serialize}; use std::collections::HashMap; pub const JSON_RPC_VERSION: &str = "2.0"; pub const TOOL_CALL_METHOD: &str = "tools/call"; pub const MCP_INITIALIZE: &str = "initialize"; pub const MCP_INITIALIZE_NOTIFICATION: &str = "notifications/initialized"; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum JsonRpcId { String(String), Number(u64), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonRpcRequest { pub jsonrpc: String, pub id: JsonRpcId, pub method: String, #[serde(skip_serializing_if = "Option::is_none")] pub params: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonRpcNotification { pub jsonrpc: String, pub method: String, #[serde(skip_serializing_if = "Option::is_none")] pub params: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonRpcError { pub code: i32, pub message: String, #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonRpcResponse { pub jsonrpc: String, pub id: JsonRpcId, #[serde(skip_serializing_if = "Option::is_none")] pub result: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub error: Option, }