1pub mod content;
2pub mod elicitation;
3pub mod messages;
4pub mod prompt;
5pub mod resource;
6pub mod sampling;
7pub mod tool;
8
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Default, Serialize, Deserialize)]
14pub struct Implementation {
15 pub name: String,
16 pub version: String,
17}
18
19impl Implementation {
20 pub fn new(name: impl Into<String>, version: impl Into<String>) -> Self {
21 Self {
22 name: name.into(),
23 version: version.into(),
24 }
25 }
26}
27
28pub type ClientInfo = Implementation;
29pub type ServerInfo = Implementation;
30
31#[derive(Debug, Clone, Default, Serialize, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct ServerCapabilities {
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub tools: Option<ToolsCapability>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub resources: Option<ResourcesCapability>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub prompts: Option<PromptsCapability>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub logging: Option<LoggingCapability>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub experimental: Option<serde_json::Value>,
46}
47
48#[derive(Debug, Clone, Default, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct ToolsCapability {
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub list_changed: Option<bool>,
53}
54
55#[derive(Debug, Clone, Default, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct ResourcesCapability {
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub subscribe: Option<bool>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub list_changed: Option<bool>,
62}
63
64#[derive(Debug, Clone, Default, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct PromptsCapability {
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub list_changed: Option<bool>,
69}
70
71#[derive(Debug, Clone, Default, Serialize, Deserialize)]
72pub struct LoggingCapability {}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct ClientCapabilities {
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub roots: Option<RootsCapability>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub sampling: Option<SamplingCapability>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 pub experimental: Option<serde_json::Value>,
85}
86
87#[derive(Debug, Clone, Default, Serialize, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct RootsCapability {
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub list_changed: Option<bool>,
92}
93
94#[derive(Debug, Clone, Default, Serialize, Deserialize)]
95pub struct SamplingCapability {}
96
97#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
100#[serde(rename_all = "lowercase")]
101pub enum LoggingLevel {
102 Debug,
103 Info,
104 Notice,
105 Warning,
106 Error,
107 Critical,
108 Alert,
109 Emergency,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
115pub struct Root {
116 pub uri: String,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub name: Option<String>,
119}
120
121pub type Cursor = String;
125
126#[derive(Debug, Clone, Default, Serialize, Deserialize)]
127pub struct PaginationParams {
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub cursor: Option<Cursor>,
130}