1use serde::{Deserialize, Serialize};
14use std::collections::HashMap;
15
16#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22pub struct ClientCapabilities {
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub experimental: Option<HashMap<String, serde_json::Value>>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub roots: Option<RootsCapabilities>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub sampling: Option<SamplingCapabilities>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub elicitation: Option<ElicitationCapabilities>,
38
39 #[cfg(feature = "mcp-tasks")]
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub tasks: Option<ClientTasksCapabilities>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, Default)]
54pub struct ServerCapabilities {
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub experimental: Option<HashMap<String, serde_json::Value>>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub logging: Option<LoggingCapabilities>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub completions: Option<CompletionCapabilities>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub prompts: Option<PromptsCapabilities>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub resources: Option<ResourcesCapabilities>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub tools: Option<ToolsCapabilities>,
78
79 #[cfg(feature = "mcp-tasks")]
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub tasks: Option<ServerTasksCapabilities>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, Default)]
90pub struct SamplingCapabilities;
91
92#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
94pub struct ElicitationCapabilities {
95 #[serde(rename = "schemaValidation", skip_serializing_if = "Option::is_none")]
98 pub schema_validation: Option<bool>,
99}
100
101impl ElicitationCapabilities {
102 pub fn with_schema_validation(mut self) -> Self {
104 self.schema_validation = Some(true);
105 self
106 }
107
108 pub fn without_schema_validation(mut self) -> Self {
110 self.schema_validation = Some(false);
111 self
112 }
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize, Default)]
117pub struct CompletionCapabilities;
118
119#[derive(Debug, Clone, Serialize, Deserialize, Default)]
121pub struct RootsCapabilities {
122 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
124 pub list_changed: Option<bool>,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize, Default)]
129pub struct LoggingCapabilities;
130
131#[derive(Debug, Clone, Serialize, Deserialize, Default)]
133pub struct PromptsCapabilities {
134 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
136 pub list_changed: Option<bool>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, Default)]
141pub struct ResourcesCapabilities {
142 #[serde(skip_serializing_if = "Option::is_none")]
144 pub subscribe: Option<bool>,
145
146 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
148 pub list_changed: Option<bool>,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize, Default)]
153pub struct ToolsCapabilities {
154 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
156 pub list_changed: Option<bool>,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize, Default)]
184#[cfg(feature = "mcp-tasks")]
185pub struct ServerTasksCapabilities {
186 #[serde(skip_serializing_if = "Option::is_none")]
188 pub list: Option<TasksListCapabilities>,
189
190 #[serde(skip_serializing_if = "Option::is_none")]
192 pub cancel: Option<TasksCancelCapabilities>,
193
194 #[serde(skip_serializing_if = "Option::is_none")]
196 pub requests: Option<ServerTasksRequestsCapabilities>,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize, Default)]
225#[cfg(feature = "mcp-tasks")]
226pub struct ClientTasksCapabilities {
227 #[serde(skip_serializing_if = "Option::is_none")]
229 pub list: Option<TasksListCapabilities>,
230
231 #[serde(skip_serializing_if = "Option::is_none")]
233 pub cancel: Option<TasksCancelCapabilities>,
234
235 #[serde(skip_serializing_if = "Option::is_none")]
237 pub requests: Option<ClientTasksRequestsCapabilities>,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize, Default)]
242#[cfg(feature = "mcp-tasks")]
243pub struct TasksListCapabilities;
244
245#[derive(Debug, Clone, Serialize, Deserialize, Default)]
247#[cfg(feature = "mcp-tasks")]
248pub struct TasksCancelCapabilities;
249
250#[derive(Debug, Clone, Serialize, Deserialize, Default)]
252#[cfg(feature = "mcp-tasks")]
253pub struct ServerTasksRequestsCapabilities {
254 #[serde(skip_serializing_if = "Option::is_none")]
256 pub tools: Option<TasksToolsCapabilities>,
257}
258
259#[derive(Debug, Clone, Serialize, Deserialize, Default)]
261#[cfg(feature = "mcp-tasks")]
262pub struct ClientTasksRequestsCapabilities {
263 #[serde(skip_serializing_if = "Option::is_none")]
265 pub sampling: Option<TasksSamplingCapabilities>,
266
267 #[serde(skip_serializing_if = "Option::is_none")]
269 pub elicitation: Option<TasksElicitationCapabilities>,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize, Default)]
274#[cfg(feature = "mcp-tasks")]
275pub struct TasksToolsCapabilities {
276 #[serde(skip_serializing_if = "Option::is_none")]
278 pub call: Option<TasksToolsCallCapabilities>,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize, Default)]
283#[cfg(feature = "mcp-tasks")]
284pub struct TasksToolsCallCapabilities;
285
286#[derive(Debug, Clone, Serialize, Deserialize, Default)]
288#[cfg(feature = "mcp-tasks")]
289pub struct TasksSamplingCapabilities {
290 #[serde(rename = "createMessage", skip_serializing_if = "Option::is_none")]
292 pub create_message: Option<TasksSamplingCreateMessageCapabilities>,
293}
294
295#[derive(Debug, Clone, Serialize, Deserialize, Default)]
297#[cfg(feature = "mcp-tasks")]
298pub struct TasksSamplingCreateMessageCapabilities;
299
300#[derive(Debug, Clone, Serialize, Deserialize, Default)]
302#[cfg(feature = "mcp-tasks")]
303pub struct TasksElicitationCapabilities {
304 #[serde(skip_serializing_if = "Option::is_none")]
306 pub create: Option<TasksElicitationCreateCapabilities>,
307}
308
309#[derive(Debug, Clone, Serialize, Deserialize, Default)]
311#[cfg(feature = "mcp-tasks")]
312pub struct TasksElicitationCreateCapabilities;