Skip to main content

objectiveai_sdk/mcp/
initialize_result.rs

1//! Types for the MCP `initialize` response.
2
3use indexmap::IndexMap;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7/// The server's response to an `initialize` request.
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
9#[schemars(rename = "mcp.InitializeResult")]
10pub struct InitializeResult {
11    /// The MCP protocol version the server wants to use.
12    #[serde(rename = "protocolVersion")]
13    pub protocol_version: String,
14    /// The server's supported capabilities.
15    pub capabilities: ServerCapabilities,
16    /// Information about the server implementation.
17    #[serde(rename = "serverInfo")]
18    pub server_info: Implementation,
19    /// Optional instructions for LLM integration.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    #[schemars(extend("omitempty" = true))]
22    pub instructions: Option<String>,
23    /// Extension metadata.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    #[schemars(extend("omitempty" = true))]
26    pub _meta: Option<IndexMap<String, serde_json::Value>>,
27}
28
29/// Information about a client or server implementation.
30#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
31#[schemars(rename = "mcp.Implementation")]
32pub struct Implementation {
33    /// The implementation name.
34    pub name: String,
35    /// Human-readable title.
36    #[serde(skip_serializing_if = "Option::is_none")]
37    #[schemars(extend("omitempty" = true))]
38    pub title: Option<String>,
39    /// The implementation version.
40    pub version: String,
41    /// Optional website URL.
42    #[serde(skip_serializing_if = "Option::is_none")]
43    #[schemars(extend("omitempty" = true))]
44    #[serde(rename = "websiteUrl")]
45    pub website_url: Option<String>,
46    /// Optional description.
47    #[serde(skip_serializing_if = "Option::is_none")]
48    #[schemars(extend("omitempty" = true))]
49    pub description: Option<String>,
50    /// Optional icons for UI display.
51    #[serde(skip_serializing_if = "Option::is_none")]
52    #[schemars(extend("omitempty" = true))]
53    pub icons: Option<Vec<super::shared::Icon>>,
54}
55
56/// Capabilities that an MCP server may support.
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
58#[schemars(rename = "mcp.ServerCapabilities")]
59pub struct ServerCapabilities {
60    /// Non-standard experimental capabilities.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    #[schemars(extend("omitempty" = true))]
63    pub experimental: Option<IndexMap<String, serde_json::Value>>,
64    /// Logging support. Presence indicates the server supports sending log messages.
65    #[serde(skip_serializing_if = "Option::is_none")]
66    #[schemars(extend("omitempty" = true))]
67    pub logging: Option<LoggingCapability>,
68    /// Completions support. Presence indicates the server supports completions.
69    #[serde(skip_serializing_if = "Option::is_none")]
70    #[schemars(extend("omitempty" = true))]
71    pub completions: Option<CompletionsCapability>,
72    /// Prompt template capabilities.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    #[schemars(extend("omitempty" = true))]
75    pub prompts: Option<PromptsCapability>,
76    /// Resource capabilities.
77    #[serde(skip_serializing_if = "Option::is_none")]
78    #[schemars(extend("omitempty" = true))]
79    pub resources: Option<ResourcesCapability>,
80    /// Tool capabilities.
81    #[serde(skip_serializing_if = "Option::is_none")]
82    #[schemars(extend("omitempty" = true))]
83    pub tools: Option<ToolsCapability>,
84    /// Task capabilities.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    #[schemars(extend("omitempty" = true))]
87    pub tasks: Option<TasksCapability>,
88}
89
90/// Capabilities for prompt templates.
91#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
92#[schemars(rename = "mcp.PromptsCapability")]
93pub struct PromptsCapability {
94    /// Whether the server emits notifications when the prompt list changes.
95    #[serde(skip_serializing_if = "Option::is_none")]
96    #[schemars(extend("omitempty" = true))]
97    #[serde(rename = "listChanged")]
98    pub list_changed: Option<bool>,
99}
100
101/// Capabilities for resources.
102#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
103#[schemars(rename = "mcp.ResourcesCapability")]
104pub struct ResourcesCapability {
105    /// Whether the server supports resource subscriptions.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    #[schemars(extend("omitempty" = true))]
108    pub subscribe: Option<bool>,
109    /// Whether the server emits notifications when the resource list changes.
110    #[serde(skip_serializing_if = "Option::is_none")]
111    #[schemars(extend("omitempty" = true))]
112    #[serde(rename = "listChanged")]
113    pub list_changed: Option<bool>,
114}
115
116/// Capabilities for tools.
117#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
118#[schemars(rename = "mcp.ToolsCapability")]
119pub struct ToolsCapability {
120    /// Whether the server emits notifications when the tool list changes.
121    #[serde(skip_serializing_if = "Option::is_none")]
122    #[schemars(extend("omitempty" = true))]
123    #[serde(rename = "listChanged")]
124    pub list_changed: Option<bool>,
125}
126
127/// Marker capability for logging support. Presence indicates the server
128/// supports sending log messages to the client.
129#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
130#[schemars(rename = "mcp.LoggingCapability", extend("additionalProperties" = false))]
131pub struct LoggingCapability {}
132
133/// Marker capability for completions support. Presence indicates the server
134/// supports argument value completions.
135#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
136#[schemars(rename = "mcp.CompletionsCapability", extend("additionalProperties" = false))]
137pub struct CompletionsCapability {}
138
139/// Capabilities for task creation and management.
140#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
141#[schemars(rename = "mcp.TasksCapability")]
142pub struct TasksCapability {
143    /// Present if the server supports listing tasks.
144    #[serde(skip_serializing_if = "Option::is_none")]
145    #[schemars(extend("omitempty" = true))]
146    pub list: Option<TasksListCapability>,
147    /// Present if the server supports cancelling tasks.
148    #[serde(skip_serializing_if = "Option::is_none")]
149    #[schemars(extend("omitempty" = true))]
150    pub cancel: Option<TasksCancelCapability>,
151    /// Task creation capabilities for specific request types.
152    #[serde(skip_serializing_if = "Option::is_none")]
153    #[schemars(extend("omitempty" = true))]
154    pub requests: Option<TasksRequestsCapability>,
155}
156
157/// Marker capability for task listing support.
158#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
159#[schemars(rename = "mcp.TasksListCapability", extend("additionalProperties" = false))]
160pub struct TasksListCapability {}
161
162/// Marker capability for task cancellation support.
163#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
164#[schemars(rename = "mcp.TasksCancelCapability", extend("additionalProperties" = false))]
165pub struct TasksCancelCapability {}
166
167/// Task creation capabilities scoped to request types.
168#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
169#[schemars(rename = "mcp.TasksRequestsCapability")]
170pub struct TasksRequestsCapability {
171    /// Task support for tool-related requests.
172    #[serde(skip_serializing_if = "Option::is_none")]
173    #[schemars(extend("omitempty" = true))]
174    pub tools: Option<TasksToolsCapability>,
175}
176
177/// Task capabilities for tool requests.
178#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
179#[schemars(rename = "mcp.TasksToolsCapability")]
180pub struct TasksToolsCapability {
181    /// Present if tools/call supports task creation.
182    #[serde(skip_serializing_if = "Option::is_none")]
183    #[schemars(extend("omitempty" = true))]
184    pub call: Option<TasksToolsCallCapability>,
185}
186
187/// Marker capability for tools/call task creation support.
188#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
189#[schemars(rename = "mcp.TasksToolsCallCapability", extend("additionalProperties" = false))]
190pub struct TasksToolsCallCapability {}