turbomcp_protocol/types/
capabilities.rs1use serde::{Deserialize, Serialize};
14use std::collections::HashMap;
15
16#[derive(Debug, Clone, Serialize, Deserialize, Default)]
18pub struct ClientCapabilities {
19 #[serde(skip_serializing_if = "Option::is_none")]
21 pub experimental: Option<HashMap<String, serde_json::Value>>,
22
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub roots: Option<RootsCapabilities>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub sampling: Option<SamplingCapabilities>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub elicitation: Option<ElicitationCapabilities>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, Default)]
38pub struct ServerCapabilities {
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub experimental: Option<HashMap<String, serde_json::Value>>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub logging: Option<LoggingCapabilities>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub completions: Option<CompletionCapabilities>,
50
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub prompts: Option<PromptsCapabilities>,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub resources: Option<ResourcesCapabilities>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub tools: Option<ToolsCapabilities>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Default)]
66pub struct SamplingCapabilities;
67
68#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
70pub struct ElicitationCapabilities {
71 #[serde(rename = "schemaValidation", skip_serializing_if = "Option::is_none")]
74 pub schema_validation: Option<bool>,
75}
76
77impl ElicitationCapabilities {
78 pub fn with_schema_validation(mut self) -> Self {
80 self.schema_validation = Some(true);
81 self
82 }
83
84 pub fn without_schema_validation(mut self) -> Self {
86 self.schema_validation = Some(false);
87 self
88 }
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, Default)]
93pub struct CompletionCapabilities;
94
95#[derive(Debug, Clone, Serialize, Deserialize, Default)]
97pub struct RootsCapabilities {
98 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
100 pub list_changed: Option<bool>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, Default)]
105pub struct LoggingCapabilities;
106
107#[derive(Debug, Clone, Serialize, Deserialize, Default)]
109pub struct PromptsCapabilities {
110 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
112 pub list_changed: Option<bool>,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize, Default)]
117pub struct ResourcesCapabilities {
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub subscribe: Option<bool>,
121
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 ToolsCapabilities {
130 #[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
132 pub list_changed: Option<bool>,
133}