1use crate::protocol::types::*;
7use serde::{Deserialize, Serialize};
8use std::collections::HashMap;
9
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
16pub struct InitializeParams {
17 #[serde(rename = "protocolVersion")]
19 pub protocol_version: String,
20 pub capabilities: ClientCapabilities,
22 #[serde(rename = "clientInfo")]
24 pub client_info: Implementation,
25 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
27 pub meta: Option<HashMap<String, serde_json::Value>>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
32pub struct CallToolParams {
33 pub name: String,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub arguments: Option<HashMap<String, serde_json::Value>>,
38 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
40 pub meta: Option<HashMap<String, serde_json::Value>>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
45pub struct ReadResourceParams {
46 pub uri: String,
48 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
50 pub meta: Option<HashMap<String, serde_json::Value>>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
55pub struct SubscribeResourceParams {
56 pub uri: String,
58 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
60 pub meta: Option<HashMap<String, serde_json::Value>>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
65pub struct UnsubscribeResourceParams {
66 pub uri: String,
68 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
70 pub meta: Option<HashMap<String, serde_json::Value>>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
75pub struct GetPromptParams {
76 pub name: String,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub arguments: Option<HashMap<String, String>>,
81 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
83 pub meta: Option<HashMap<String, serde_json::Value>>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
88pub struct ListParams {
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub cursor: Option<String>,
92 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
94 pub meta: Option<HashMap<String, serde_json::Value>>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
99pub struct ListToolsParams {
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub cursor: Option<String>,
103 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
105 pub meta: Option<HashMap<String, serde_json::Value>>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
110pub struct ListResourcesParams {
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub cursor: Option<String>,
114 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
116 pub meta: Option<HashMap<String, serde_json::Value>>,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
121pub struct ListPromptsParams {
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub cursor: Option<String>,
125 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
127 pub meta: Option<HashMap<String, serde_json::Value>>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
132pub struct PingParams {
133 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
135 pub meta: Option<HashMap<String, serde_json::Value>>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
140pub struct CompleteParams {
141 #[serde(rename = "ref")]
143 pub reference: CompletionReference,
144 pub argument: CompletionArgument,
146 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
148 pub meta: Option<HashMap<String, serde_json::Value>>,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
153#[serde(tag = "type")]
154pub enum CompletionReference {
155 #[serde(rename = "ref/prompt")]
156 Prompt { name: String },
157 #[serde(rename = "ref/resource")]
158 Resource { uri: String },
159 #[serde(rename = "ref/tool")]
160 Tool { name: String },
161}
162
163#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
165pub struct CompletionArgument {
166 pub name: String,
168 pub value: String,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
174pub struct CreateMessageParams {
175 pub messages: Vec<SamplingMessage>,
177 #[serde(rename = "maxTokens")]
179 pub max_tokens: u32,
180 #[serde(rename = "systemPrompt", skip_serializing_if = "Option::is_none")]
182 pub system_prompt: Option<String>,
183 #[serde(rename = "includeContext", skip_serializing_if = "Option::is_none")]
185 pub include_context: Option<String>,
186 #[serde(skip_serializing_if = "Option::is_none")]
188 pub temperature: Option<f32>,
189 #[serde(rename = "stopSequences", skip_serializing_if = "Option::is_none")]
191 pub stop_sequences: Option<Vec<String>>,
192 #[serde(rename = "modelPreferences", skip_serializing_if = "Option::is_none")]
194 pub model_preferences: Option<ModelPreferences>,
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub metadata: Option<HashMap<String, serde_json::Value>>,
198 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
200 pub meta: Option<HashMap<String, serde_json::Value>>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
205pub struct SetLoggingLevelParams {
206 pub level: LoggingLevel,
208 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
210 pub meta: Option<HashMap<String, serde_json::Value>>,
211}
212
213#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
219pub struct InitializeResult {
220 #[serde(rename = "protocolVersion")]
222 pub protocol_version: String,
223 pub capabilities: ServerCapabilities,
225 #[serde(rename = "serverInfo")]
227 pub server_info: Implementation,
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub instructions: Option<String>,
231 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
233 pub meta: Option<HashMap<String, serde_json::Value>>,
234}
235
236#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
238pub struct ListToolsResult {
239 pub tools: Vec<Tool>,
241 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
243 pub next_cursor: Option<String>,
244 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
246 pub meta: Option<HashMap<String, serde_json::Value>>,
247}
248
249#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
251pub struct ListResourcesResult {
252 pub resources: Vec<Resource>,
254 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
256 pub next_cursor: Option<String>,
257 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
259 pub meta: Option<HashMap<String, serde_json::Value>>,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
264pub struct ListResourceTemplatesResult {
265 #[serde(rename = "resourceTemplates")]
267 pub resource_templates: Vec<ResourceTemplate>,
268 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
270 pub next_cursor: Option<String>,
271 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
273 pub meta: Option<HashMap<String, serde_json::Value>>,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
278pub struct ReadResourceResult {
279 pub contents: Vec<ResourceContents>,
281 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
283 pub meta: Option<HashMap<String, serde_json::Value>>,
284}
285
286#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
288pub struct ListPromptsResult {
289 pub prompts: Vec<Prompt>,
291 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
293 pub next_cursor: Option<String>,
294 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
296 pub meta: Option<HashMap<String, serde_json::Value>>,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
301pub struct CompleteResult {
302 pub completion: CompletionData,
304 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
306 pub meta: Option<HashMap<String, serde_json::Value>>,
307}
308
309#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
311pub struct CompletionData {
312 pub values: Vec<String>,
314 #[serde(skip_serializing_if = "Option::is_none")]
316 pub total: Option<u32>,
317 #[serde(rename = "hasMore", skip_serializing_if = "Option::is_none")]
319 pub has_more: Option<bool>,
320}
321
322#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
324pub struct ListRootsResult {
325 pub roots: Vec<Root>,
327 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
329 pub meta: Option<HashMap<String, serde_json::Value>>,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
334pub struct PingResult {
335 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
337 pub meta: Option<HashMap<String, serde_json::Value>>,
338}
339
340#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
342pub struct SetLoggingLevelResult {
343 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
345 pub meta: Option<HashMap<String, serde_json::Value>>,
346}
347
348#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
350pub struct SubscribeResourceResult {
351 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
353 pub meta: Option<HashMap<String, serde_json::Value>>,
354}
355
356#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
358pub struct UnsubscribeResourceResult {
359 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
361 pub meta: Option<HashMap<String, serde_json::Value>>,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
366pub struct Root {
367 pub uri: String,
369 #[serde(skip_serializing_if = "Option::is_none")]
371 pub name: Option<String>,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
380pub struct ProgressParams {
381 #[serde(rename = "progressToken")]
383 pub progress_token: ProgressToken,
384 pub progress: f32,
386 #[serde(skip_serializing_if = "Option::is_none")]
388 pub total: Option<f32>,
389 #[serde(skip_serializing_if = "Option::is_none")]
391 pub message: Option<String>,
392}
393
394#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
396pub struct ResourceUpdatedParams {
397 pub uri: String,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
403pub struct CancelledParams {
404 #[serde(rename = "requestId")]
406 pub request_id: RequestId,
407 #[serde(skip_serializing_if = "Option::is_none")]
409 pub reason: Option<String>,
410}
411
412#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
414pub struct InitializedParams {
415 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
417 pub meta: Option<HashMap<String, serde_json::Value>>,
418}
419
420#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
422pub struct LoggingMessageParams {
423 pub level: LoggingLevel,
425 #[serde(skip_serializing_if = "Option::is_none")]
427 pub logger: Option<String>,
428 pub data: serde_json::Value,
430}
431
432#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
434pub struct ToolListChangedParams {
435 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
437 pub meta: Option<HashMap<String, serde_json::Value>>,
438}
439
440#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
442pub struct ResourceListChangedParams {
443 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
445 pub meta: Option<HashMap<String, serde_json::Value>>,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
450pub struct PromptListChangedParams {
451 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
453 pub meta: Option<HashMap<String, serde_json::Value>>,
454}
455
456#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
458pub struct ProgressNotificationParams {
459 #[serde(rename = "progressToken")]
461 pub progress_token: ProgressToken,
462 pub progress: f32,
464 #[serde(skip_serializing_if = "Option::is_none")]
466 pub total: Option<f32>,
467 #[serde(skip_serializing_if = "Option::is_none")]
469 pub message: Option<String>,
470}
471
472#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
474pub struct LoggingMessageNotificationParams {
475 pub level: LoggingLevel,
477 #[serde(skip_serializing_if = "Option::is_none")]
479 pub logger: Option<String>,
480 pub data: serde_json::Value,
482}
483
484impl CallToolParams {
489 pub fn new(name: String) -> Self {
490 Self {
491 name,
492 arguments: None,
493 meta: None,
494 }
495 }
496
497 pub fn new_with_arguments(name: String, arguments: HashMap<String, serde_json::Value>) -> Self {
498 Self {
499 name,
500 arguments: Some(arguments),
501 meta: None,
502 }
503 }
504
505 pub fn with_arguments(mut self, arguments: HashMap<String, serde_json::Value>) -> Self {
506 self.arguments = Some(arguments);
507 self
508 }
509}
510
511impl ReadResourceParams {
512 pub fn new(uri: String) -> Self {
513 Self { uri, meta: None }
514 }
515}
516
517impl GetPromptParams {
518 pub fn new(name: String) -> Self {
519 Self {
520 name,
521 arguments: None,
522 meta: None,
523 }
524 }
525
526 pub fn new_with_arguments(name: String, arguments: HashMap<String, String>) -> Self {
527 Self {
528 name,
529 arguments: Some(arguments),
530 meta: None,
531 }
532 }
533
534 pub fn with_arguments(mut self, arguments: HashMap<String, String>) -> Self {
535 self.arguments = Some(arguments);
536 self
537 }
538}
539
540impl InitializeParams {
541 pub fn new(
542 protocol_version: String,
543 capabilities: ClientCapabilities,
544 client_info: Implementation,
545 ) -> Self {
546 Self {
547 protocol_version,
548 capabilities,
549 client_info,
550 meta: None,
551 }
552 }
553}
554
555impl InitializeResult {
556 pub fn new(
557 protocol_version: String,
558 capabilities: ServerCapabilities,
559 server_info: Implementation,
560 ) -> Self {
561 Self {
562 protocol_version,
563 capabilities,
564 server_info,
565 instructions: None,
566 meta: None,
567 }
568 }
569}
570
571impl Root {
572 pub fn new(uri: String) -> Self {
573 Self { uri, name: None }
574 }
575
576 pub fn with_name(mut self, name: String) -> Self {
577 self.name = Some(name);
578 self
579 }
580}
581
582