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(
130    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
131)]
132#[schemars(rename = "mcp.LoggingCapability", extend("additionalProperties" = false))]
133pub struct LoggingCapability {}
134
135/// Marker capability for completions support. Presence indicates the server
136/// supports argument value completions.
137#[derive(
138    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
139)]
140#[schemars(rename = "mcp.CompletionsCapability", extend("additionalProperties" = false))]
141pub struct CompletionsCapability {}
142
143/// Capabilities for task creation and management.
144#[derive(
145    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
146)]
147#[schemars(rename = "mcp.TasksCapability")]
148pub struct TasksCapability {
149    /// Present if the server supports listing tasks.
150    #[serde(skip_serializing_if = "Option::is_none")]
151    #[schemars(extend("omitempty" = true))]
152    pub list: Option<TasksListCapability>,
153    /// Present if the server supports cancelling tasks.
154    #[serde(skip_serializing_if = "Option::is_none")]
155    #[schemars(extend("omitempty" = true))]
156    pub cancel: Option<TasksCancelCapability>,
157    /// Task creation capabilities for specific request types.
158    #[serde(skip_serializing_if = "Option::is_none")]
159    #[schemars(extend("omitempty" = true))]
160    pub requests: Option<TasksRequestsCapability>,
161}
162
163/// Marker capability for task listing support.
164#[derive(
165    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
166)]
167#[schemars(rename = "mcp.TasksListCapability", extend("additionalProperties" = false))]
168pub struct TasksListCapability {}
169
170/// Marker capability for task cancellation support.
171#[derive(
172    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
173)]
174#[schemars(rename = "mcp.TasksCancelCapability", extend("additionalProperties" = false))]
175pub struct TasksCancelCapability {}
176
177/// Task creation capabilities scoped to request types.
178#[derive(
179    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
180)]
181#[schemars(rename = "mcp.TasksRequestsCapability")]
182pub struct TasksRequestsCapability {
183    /// Task support for tool-related requests.
184    #[serde(skip_serializing_if = "Option::is_none")]
185    #[schemars(extend("omitempty" = true))]
186    pub tools: Option<TasksToolsCapability>,
187}
188
189/// Task capabilities for tool requests.
190#[derive(
191    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
192)]
193#[schemars(rename = "mcp.TasksToolsCapability")]
194pub struct TasksToolsCapability {
195    /// Present if tools/call supports task creation.
196    #[serde(skip_serializing_if = "Option::is_none")]
197    #[schemars(extend("omitempty" = true))]
198    pub call: Option<TasksToolsCallCapability>,
199}
200
201/// Marker capability for tools/call task creation support.
202#[derive(
203    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema,
204)]
205#[schemars(rename = "mcp.TasksToolsCallCapability", extend("additionalProperties" = false))]
206pub struct TasksToolsCallCapability {}