mcp_protocol/types/completion/
mod.rs

1// mcp-protocol/src/types/completion/mod.rs
2use serde::{Deserialize, Serialize};
3
4/// Reference to a prompt or resource for completion
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(tag = "type")]
7pub enum CompletionReference {
8    /// Reference to a prompt
9    #[serde(rename = "ref/prompt")]
10    Prompt {
11        /// Name of the prompt
12        name: String,
13    },
14    /// Reference to a resource
15    #[serde(rename = "ref/resource")]
16    Resource {
17        /// URI of the resource
18        uri: String,
19    },
20}
21
22/// Argument to complete
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct CompletionArgument {
25    /// Name of the argument
26    pub name: String,
27    
28    /// Current value of the argument
29    pub value: String,
30}
31
32/// Request for completion suggestions
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct CompleteRequest {
35    pub r#ref: CompletionReference,
36    pub argument: CompletionArgument,
37}
38
39/// Completion results
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct CompletionResult {
42    pub values: Vec<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub total: Option<usize>,
45    pub has_more: bool,
46}
47
48/// Response for completion request
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct CompleteResponse {
51    pub completion: CompletionResult,
52}
53
54/// Parameters for the completion/complete request
55/// Maintained for backward compatibility
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct CompletionCompleteParams {
58    /// Reference to what is being completed
59    pub r#ref: CompletionReference,
60    
61    /// Argument being completed
62    pub argument: CompletionArgument,
63}
64
65/// Completion result
66/// Maintained for backward compatibility
67#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct CompletionCompleteResult {
69    /// Completion information
70    pub completion: CompletionInfo,
71}
72
73/// Completion information
74/// Maintained for backward compatibility
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct CompletionInfo {
77    /// List of completion values, sorted by relevance
78    pub values: Vec<String>,
79    
80    /// Total number of available matches (optional)
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub total: Option<u32>,
83    
84    /// Flag indicating if there are more results available
85    #[serde(rename = "hasMore")]
86    pub has_more: bool,
87}
88
89/// A single completion item with more details
90/// This is from our previous implementation and is maintained
91/// for backward compatibility with our resource template completion
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct CompletionItem {
94    /// The completion label to display
95    pub label: String,
96    
97    /// Optional description
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub detail: Option<String>,
100    
101    /// Additional documentation
102    #[serde(skip_serializing_if = "Option::is_none")]
103    pub documentation: Option<String>,
104}