mcp_protocol/messages/
lifecycle.rs

1// mcp-protocol/src/messages/lifecycle.rs
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::types::{ClientInfo, ServerInfo};
6
7/// Client capabilities negotiated during initialization
8#[derive(Debug, Clone, Serialize, Deserialize, Default)]
9pub struct ClientCapabilities {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub roots: Option<HashMap<String, bool>>,
12    
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub sampling: Option<HashMap<String, serde_json::Value>>,
15    
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub experimental: Option<HashMap<String, serde_json::Value>>,
18}
19
20/// Server capabilities negotiated during initialization
21#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22pub struct ServerCapabilities {
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub logging: Option<HashMap<String, serde_json::Value>>,
25    
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub prompts: Option<HashMap<String, bool>>,
28    
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub resources: Option<HashMap<String, bool>>,
31    
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub tools: Option<HashMap<String, bool>>,
34    
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub experimental: Option<HashMap<String, serde_json::Value>>,
37}
38
39/// Parameters for the initialize request
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct InitializeParams {
42    #[serde(rename = "protocolVersion")]
43    pub protocol_version: String,
44    
45    pub capabilities: ClientCapabilities,
46    
47    #[serde(rename = "clientInfo")]
48    pub client_info: ClientInfo,
49}
50
51/// Result of the initialize request
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct InitializeResult {
54    #[serde(rename = "protocolVersion")]
55    pub protocol_version: String,
56    
57    pub capabilities: ServerCapabilities,
58    
59    #[serde(rename = "serverInfo")]
60    pub server_info: ServerInfo,
61    
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub instructions: Option<String>,
64}