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)]
215pub struct ElicitParams {
216 pub message: String,
218 #[serde(rename = "requestedSchema")]
220 pub requested_schema: ElicitationSchema,
221 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
223 pub meta: Option<HashMap<String, serde_json::Value>>,
224}
225
226#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
232pub struct InitializeResult {
233 #[serde(rename = "protocolVersion")]
235 pub protocol_version: String,
236 pub capabilities: ServerCapabilities,
238 #[serde(rename = "serverInfo")]
240 pub server_info: Implementation,
241 #[serde(skip_serializing_if = "Option::is_none")]
243 pub instructions: 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 ListToolsResult {
252 pub tools: Vec<Tool>,
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 ListResourcesResult {
265 pub resources: Vec<Resource>,
267 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
269 pub next_cursor: Option<String>,
270 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
272 pub meta: Option<HashMap<String, serde_json::Value>>,
273}
274
275#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
277pub struct ListResourceTemplatesResult {
278 #[serde(rename = "resourceTemplates")]
280 pub resource_templates: Vec<ResourceTemplate>,
281 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
283 pub next_cursor: Option<String>,
284 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
286 pub meta: Option<HashMap<String, serde_json::Value>>,
287}
288
289#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
291pub struct ReadResourceResult {
292 pub contents: Vec<ResourceContents>,
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 ListPromptsResult {
302 pub prompts: Vec<Prompt>,
304 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
306 pub next_cursor: Option<String>,
307 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
309 pub meta: Option<HashMap<String, serde_json::Value>>,
310}
311
312#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
314pub struct CompleteResult {
315 pub completion: CompletionData,
317 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
319 pub meta: Option<HashMap<String, serde_json::Value>>,
320}
321
322#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
324pub struct CompletionData {
325 pub values: Vec<String>,
327 #[serde(skip_serializing_if = "Option::is_none")]
329 pub total: Option<u32>,
330 #[serde(rename = "hasMore", skip_serializing_if = "Option::is_none")]
332 pub has_more: Option<bool>,
333}
334
335#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
337pub struct ListRootsResult {
338 pub roots: Vec<Root>,
340 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
342 pub meta: Option<HashMap<String, serde_json::Value>>,
343}
344
345#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
347pub struct PingResult {
348 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
350 pub meta: Option<HashMap<String, serde_json::Value>>,
351}
352
353#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
355pub struct SetLoggingLevelResult {
356 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
358 pub meta: Option<HashMap<String, serde_json::Value>>,
359}
360
361#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
363pub struct ElicitResult {
364 pub action: ElicitationAction,
366 #[serde(skip_serializing_if = "Option::is_none")]
368 pub content: Option<HashMap<String, serde_json::Value>>,
369 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
371 pub meta: Option<HashMap<String, serde_json::Value>>,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
376pub struct SubscribeResourceResult {
377 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
379 pub meta: Option<HashMap<String, serde_json::Value>>,
380}
381
382#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
384pub struct UnsubscribeResourceResult {
385 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
387 pub meta: Option<HashMap<String, serde_json::Value>>,
388}
389
390#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
392pub struct Root {
393 pub uri: String,
395 #[serde(skip_serializing_if = "Option::is_none")]
397 pub name: Option<String>,
398}
399
400#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
406pub struct ProgressParams {
407 #[serde(rename = "progressToken")]
409 pub progress_token: ProgressToken,
410 pub progress: f32,
412 #[serde(skip_serializing_if = "Option::is_none")]
414 pub total: Option<f32>,
415 #[serde(skip_serializing_if = "Option::is_none")]
417 pub message: Option<String>,
418}
419
420#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
422pub struct ResourceUpdatedParams {
423 pub uri: String,
425}
426
427#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
429pub struct CancelledParams {
430 #[serde(rename = "requestId")]
432 pub request_id: RequestId,
433 #[serde(skip_serializing_if = "Option::is_none")]
435 pub reason: Option<String>,
436}
437
438#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
440pub struct InitializedParams {
441 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
443 pub meta: Option<HashMap<String, serde_json::Value>>,
444}
445
446#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
448pub struct LoggingMessageParams {
449 pub level: LoggingLevel,
451 #[serde(skip_serializing_if = "Option::is_none")]
453 pub logger: Option<String>,
454 pub data: serde_json::Value,
456}
457
458#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
460pub struct ToolListChangedParams {
461 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
463 pub meta: Option<HashMap<String, serde_json::Value>>,
464}
465
466#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
468pub struct ResourceListChangedParams {
469 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
471 pub meta: Option<HashMap<String, serde_json::Value>>,
472}
473
474#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
476pub struct PromptListChangedParams {
477 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
479 pub meta: Option<HashMap<String, serde_json::Value>>,
480}
481
482#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
484pub struct ProgressNotificationParams {
485 #[serde(rename = "progressToken")]
487 pub progress_token: ProgressToken,
488 pub progress: f32,
490 #[serde(skip_serializing_if = "Option::is_none")]
492 pub total: Option<f32>,
493 #[serde(skip_serializing_if = "Option::is_none")]
495 pub message: Option<String>,
496}
497
498#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
500pub struct LoggingMessageNotificationParams {
501 pub level: LoggingLevel,
503 #[serde(skip_serializing_if = "Option::is_none")]
505 pub logger: Option<String>,
506 pub data: serde_json::Value,
508}
509
510impl CallToolParams {
515 pub fn new(name: String) -> Self {
516 Self {
517 name,
518 arguments: None,
519 meta: None,
520 }
521 }
522
523 pub fn new_with_arguments(name: String, arguments: HashMap<String, serde_json::Value>) -> Self {
524 Self {
525 name,
526 arguments: Some(arguments),
527 meta: None,
528 }
529 }
530
531 pub fn with_arguments(mut self, arguments: HashMap<String, serde_json::Value>) -> Self {
532 self.arguments = Some(arguments);
533 self
534 }
535}
536
537impl ReadResourceParams {
538 pub fn new(uri: String) -> Self {
539 Self { uri, meta: None }
540 }
541}
542
543impl GetPromptParams {
544 pub fn new(name: String) -> Self {
545 Self {
546 name,
547 arguments: None,
548 meta: None,
549 }
550 }
551
552 pub fn new_with_arguments(name: String, arguments: HashMap<String, String>) -> Self {
553 Self {
554 name,
555 arguments: Some(arguments),
556 meta: None,
557 }
558 }
559
560 pub fn with_arguments(mut self, arguments: HashMap<String, String>) -> Self {
561 self.arguments = Some(arguments);
562 self
563 }
564}
565
566impl InitializeParams {
567 pub fn new(
568 protocol_version: String,
569 capabilities: ClientCapabilities,
570 client_info: Implementation,
571 ) -> Self {
572 Self {
573 protocol_version,
574 capabilities,
575 client_info,
576 meta: None,
577 }
578 }
579}
580
581impl InitializeResult {
582 pub fn new(
583 protocol_version: String,
584 capabilities: ServerCapabilities,
585 server_info: Implementation,
586 ) -> Self {
587 Self {
588 protocol_version,
589 capabilities,
590 server_info,
591 instructions: None,
592 meta: None,
593 }
594 }
595}
596
597impl Root {
598 pub fn new(uri: String) -> Self {
599 Self { uri, name: None }
600 }
601
602 pub fn with_name(mut self, name: String) -> Self {
603 self.name = Some(name);
604 self
605 }
606}
607
608