1#![deny(missing_docs)]
60
61pub mod auth;
62pub mod capability;
63pub mod debug;
64pub mod error;
65pub mod extension;
66pub mod methods;
67pub mod pagination;
68pub mod protocol;
69pub mod protocol_version;
70pub mod schema;
71pub mod state;
72pub mod tasks;
73pub mod types;
74
75pub use capability::{
77 ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
78 SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
79 is_version_supported, negotiate_version, negotiate_version_detailed,
80};
81pub use error::{JsonRpcError, McpError, McpResultExt};
82pub use protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
83pub use protocol_version::ProtocolVersion;
84pub use state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
85
86pub mod prelude {
94 pub use serde::{Deserialize, Serialize};
96 pub use serde_json::json;
97
98 pub use crate::capability::{
99 ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
100 SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
101 is_version_supported, negotiate_version, negotiate_version_detailed,
102 };
103 pub use crate::error::{McpError, McpResultExt};
104 pub use crate::protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
105 pub use crate::protocol_version::ProtocolVersion;
106 pub use crate::schema::{Schema, SchemaBuilder, SchemaType};
107 pub use crate::state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
108 pub use crate::types::{
109 Annotations,
110 CallToolResult,
112 CancelTaskRequest,
114 Content,
116 CreateMessageRequest,
118 CreateMessageResult,
119 CreateTaskResult,
120 ElicitAction,
122 ElicitRequest,
123 ElicitResult,
124 ElicitationSchema,
125 GetPromptResult,
127 GetTaskPayloadRequest,
128 GetTaskRequest,
129 ListTasksRequest,
130 ListTasksResult,
131 ModelPreferences,
132 Object,
134 Prompt,
135 PromptArgument,
136 PromptMessage,
137 PromptOutput,
138 PropertySchema,
139 Resource,
141 ResourceContents,
142 ResourceTemplate,
143 Role,
144 SamplingMessage,
145 StopReason,
146 Task,
147 TaskId,
148 TaskMetadata,
149 TaskProgress,
150 TaskStatus,
151 Tool,
152 ToolAnnotations,
153 ToolOutput,
154 };
155}
156
157#[cfg(test)]
158mod tests {
159 use super::*;
160
161 #[test]
162 fn test_prelude_imports() {
163 use crate::prelude::*;
164
165 let _tool = Tool::new("test");
167 let _caps = ServerCapabilities::new().with_tools();
168 let _conn: Connection<Disconnected> = Connection::new();
169 }
170
171 #[test]
172 fn test_protocol_version() {
173 assert_eq!(PROTOCOL_VERSION, "2025-11-25");
174 }
175
176 #[test]
177 fn test_error_context() {
178 use crate::error::McpResultExt;
179
180 fn might_fail() -> Result<(), McpError> {
181 Err(McpError::InternalMessage {
182 message: "something went wrong".to_string(),
183 })
184 }
185
186 let result = might_fail().context("while doing something important");
187 assert!(result.is_err());
188
189 let err = result.unwrap_err();
190 assert!(err.to_string().contains("while doing something important"));
191 }
192}