/// The protocol messages exchanged between client and server use rmcp::model::Tool; use rmcp::model::{Content, Prompt, PromptMessage, Resource, ResourceContents}; use serde::{Deserialize, Serialize}; // Standard JSON-RPC error codes pub const PARSE_ERROR: i32 = -32700; pub const INVALID_REQUEST: i32 = -32600; pub const METHOD_NOT_FOUND: i32 = -32601; pub const INVALID_PARAMS: i32 = -32602; pub const INTERNAL_ERROR: i32 = -32603; #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct InitializeResult { pub protocol_version: String, pub capabilities: ServerCapabilities, pub server_info: Implementation, #[serde(skip_serializing_if = "Option::is_none")] pub instructions: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct Implementation { pub name: String, pub version: String, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct ServerCapabilities { #[serde(skip_serializing_if = "Option::is_none")] pub prompts: Option, #[serde(skip_serializing_if = "Option::is_none")] pub resources: Option, #[serde(skip_serializing_if = "Option::is_none")] pub tools: Option, // Add other capabilities as needed } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PromptsCapability { pub list_changed: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct ResourcesCapability { pub subscribe: Option, pub list_changed: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct ToolsCapability { pub list_changed: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct ListResourcesResult { pub resources: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub next_cursor: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct ReadResourceResult { pub contents: Vec, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct ListToolsResult { pub tools: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub next_cursor: Option, } #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CallToolResult { pub content: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub is_error: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct ListPromptsResult { pub prompts: Vec, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct GetPromptResult { #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, pub messages: Vec, } #[derive(Debug, Serialize, Deserialize)] pub struct EmptyResult {}