1use serde::{Deserialize, Serialize};
3
4use crate::types::{
5 prompt::Prompt, resource::Resource, tool::Tool, ClientCapabilities, ClientInfo, Cursor,
6 LoggingLevel, Root, ServerCapabilities, ServerInfo,
7};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase")]
13pub struct InitializeRequest {
14 pub protocol_version: String,
15 pub capabilities: ClientCapabilities,
16 pub client_info: ClientInfo,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct InitializeResult {
22 pub protocol_version: String,
23 pub capabilities: ServerCapabilities,
24 pub server_info: ServerInfo,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub instructions: Option<String>,
27}
28
29#[derive(Debug, Clone, Default, Serialize, Deserialize)]
32pub struct ListToolsRequest {
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub cursor: Option<Cursor>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub struct ListToolsResult {
40 pub tools: Vec<Tool>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub next_cursor: Option<Cursor>,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct CallToolRequest {
47 pub name: String,
48 #[serde(default)]
49 pub arguments: serde_json::Value,
50}
51
52#[derive(Debug, Clone, Default, Serialize, Deserialize)]
55pub struct ListResourcesRequest {
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub cursor: Option<Cursor>,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct ListResourcesResult {
63 pub resources: Vec<Resource>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub next_cursor: Option<Cursor>,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct ReadResourceRequest {
70 pub uri: String,
71}
72
73pub use crate::types::resource::ReadResourceResult;
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct SubscribeRequest {
77 pub uri: String,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct UnsubscribeRequest {
82 pub uri: String,
83}
84
85#[derive(Debug, Clone, Default, Serialize, Deserialize)]
88pub struct ListPromptsRequest {
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub cursor: Option<Cursor>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(rename_all = "camelCase")]
95pub struct ListPromptsResult {
96 pub prompts: Vec<Prompt>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub next_cursor: Option<Cursor>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct GetPromptRequest {
103 pub name: String,
104 #[serde(default)]
105 pub arguments: std::collections::HashMap<String, String>,
106}
107
108pub use crate::types::prompt::GetPromptResult;
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct CompleteRequest {
114 #[serde(rename = "ref")]
115 pub reference: CompletionReference,
116 pub argument: CompletionArgument,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(tag = "type", rename_all = "camelCase")]
121pub enum CompletionReference {
122 #[serde(rename = "ref/prompt")]
123 Prompt { name: String },
124 #[serde(rename = "ref/resource")]
125 Resource { uri: String },
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct CompletionArgument {
130 pub name: String,
131 pub value: String,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct CompleteResult {
136 pub completion: CompletionValues,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct CompletionValues {
141 pub values: Vec<String>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub total: Option<u32>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub has_more: Option<bool>,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct SetLevelRequest {
152 pub level: LoggingLevel,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct ListRootsResult {
159 pub roots: Vec<Root>,
160}
161
162#[derive(Debug, Clone, Serialize, Deserialize)]
165#[serde(rename_all = "camelCase")]
166pub struct ProgressNotification {
167 pub progress_token: crate::protocol::ProgressToken,
168 pub progress: f64,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub total: Option<f64>,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub message: Option<String>,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize)]
176pub struct CancelledNotification {
177 pub request_id: crate::protocol::RequestId,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub reason: Option<String>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
183pub struct LogMessageNotification {
184 pub level: LoggingLevel,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub logger: Option<String>,
187 pub data: serde_json::Value,
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct ResourceUpdatedNotification {
192 pub uri: String,
193}