1use indexmap::IndexMap;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
9#[schemars(rename = "mcp.InitializeResult")]
10pub struct InitializeResult {
11 #[serde(rename = "protocolVersion")]
13 pub protocol_version: String,
14 pub capabilities: ServerCapabilities,
16 #[serde(rename = "serverInfo")]
18 pub server_info: Implementation,
19 #[serde(skip_serializing_if = "Option::is_none")]
21 #[schemars(extend("omitempty" = true))]
22 pub instructions: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 #[schemars(extend("omitempty" = true))]
26 pub _meta: Option<IndexMap<String, serde_json::Value>>,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
31#[schemars(rename = "mcp.Implementation")]
32pub struct Implementation {
33 pub name: String,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 #[schemars(extend("omitempty" = true))]
38 pub title: Option<String>,
39 pub version: String,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 #[schemars(extend("omitempty" = true))]
44 #[serde(rename = "websiteUrl")]
45 pub website_url: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
48 #[schemars(extend("omitempty" = true))]
49 pub description: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 #[schemars(extend("omitempty" = true))]
53 pub icons: Option<Vec<super::shared::Icon>>,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
58#[schemars(rename = "mcp.ServerCapabilities")]
59pub struct ServerCapabilities {
60 #[serde(skip_serializing_if = "Option::is_none")]
62 #[schemars(extend("omitempty" = true))]
63 pub experimental: Option<IndexMap<String, serde_json::Value>>,
64 #[serde(skip_serializing_if = "Option::is_none")]
66 #[schemars(extend("omitempty" = true))]
67 pub logging: Option<LoggingCapability>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 #[schemars(extend("omitempty" = true))]
71 pub completions: Option<CompletionsCapability>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 #[schemars(extend("omitempty" = true))]
75 pub prompts: Option<PromptsCapability>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 #[schemars(extend("omitempty" = true))]
79 pub resources: Option<ResourcesCapability>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 #[schemars(extend("omitempty" = true))]
83 pub tools: Option<ToolsCapability>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 #[schemars(extend("omitempty" = true))]
87 pub tasks: Option<TasksCapability>,
88}
89
90#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
92#[schemars(rename = "mcp.PromptsCapability")]
93pub struct PromptsCapability {
94 #[serde(skip_serializing_if = "Option::is_none")]
96 #[schemars(extend("omitempty" = true))]
97 #[serde(rename = "listChanged")]
98 pub list_changed: Option<bool>,
99}
100
101#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
103#[schemars(rename = "mcp.ResourcesCapability")]
104pub struct ResourcesCapability {
105 #[serde(skip_serializing_if = "Option::is_none")]
107 #[schemars(extend("omitempty" = true))]
108 pub subscribe: Option<bool>,
109 #[serde(skip_serializing_if = "Option::is_none")]
111 #[schemars(extend("omitempty" = true))]
112 #[serde(rename = "listChanged")]
113 pub list_changed: Option<bool>,
114}
115
116#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
118#[schemars(rename = "mcp.ToolsCapability")]
119pub struct ToolsCapability {
120 #[serde(skip_serializing_if = "Option::is_none")]
122 #[schemars(extend("omitempty" = true))]
123 #[serde(rename = "listChanged")]
124 pub list_changed: Option<bool>,
125}
126
127#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
130#[schemars(rename = "mcp.LoggingCapability", extend("additionalProperties" = false))]
131pub struct LoggingCapability {}
132
133#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
136#[schemars(rename = "mcp.CompletionsCapability", extend("additionalProperties" = false))]
137pub struct CompletionsCapability {}
138
139#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
141#[schemars(rename = "mcp.TasksCapability")]
142pub struct TasksCapability {
143 #[serde(skip_serializing_if = "Option::is_none")]
145 #[schemars(extend("omitempty" = true))]
146 pub list: Option<TasksListCapability>,
147 #[serde(skip_serializing_if = "Option::is_none")]
149 #[schemars(extend("omitempty" = true))]
150 pub cancel: Option<TasksCancelCapability>,
151 #[serde(skip_serializing_if = "Option::is_none")]
153 #[schemars(extend("omitempty" = true))]
154 pub requests: Option<TasksRequestsCapability>,
155}
156
157#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
159#[schemars(rename = "mcp.TasksListCapability", extend("additionalProperties" = false))]
160pub struct TasksListCapability {}
161
162#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
164#[schemars(rename = "mcp.TasksCancelCapability", extend("additionalProperties" = false))]
165pub struct TasksCancelCapability {}
166
167#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
169#[schemars(rename = "mcp.TasksRequestsCapability")]
170pub struct TasksRequestsCapability {
171 #[serde(skip_serializing_if = "Option::is_none")]
173 #[schemars(extend("omitempty" = true))]
174 pub tools: Option<TasksToolsCapability>,
175}
176
177#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
179#[schemars(rename = "mcp.TasksToolsCapability")]
180pub struct TasksToolsCapability {
181 #[serde(skip_serializing_if = "Option::is_none")]
183 #[schemars(extend("omitempty" = true))]
184 pub call: Option<TasksToolsCallCapability>,
185}
186
187#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
189#[schemars(rename = "mcp.TasksToolsCallCapability", extend("additionalProperties" = false))]
190pub struct TasksToolsCallCapability {}