1#![deny(missing_docs)]
56
57pub mod auth;
58pub mod capability;
59pub mod error;
60pub mod protocol;
61pub mod protocol_version;
62pub mod schema;
63pub mod state;
64pub mod types;
65
66pub use capability::{
68 is_version_supported, negotiate_version, negotiate_version_detailed, ClientCapabilities,
69 ClientInfo, InitializeRequest, InitializeResult, ServerCapabilities, ServerInfo,
70 VersionNegotiationResult, PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS,
71};
72pub use error::{JsonRpcError, McpError, McpResultExt};
73pub use protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
74pub use protocol_version::ProtocolVersion;
75pub use state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
76
77pub mod prelude {
85 pub use crate::capability::{
86 is_version_supported, negotiate_version, negotiate_version_detailed, ClientCapabilities,
87 ClientInfo, InitializeRequest, InitializeResult, ServerCapabilities, ServerInfo,
88 VersionNegotiationResult, PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS,
89 };
90 pub use crate::error::{McpError, McpResultExt};
91 pub use crate::protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
92 pub use crate::protocol_version::ProtocolVersion;
93 pub use crate::schema::{Schema, SchemaBuilder, SchemaType};
94 pub use crate::state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
95 pub use crate::types::{
96 CallToolResult,
98 Content,
100 ContentAnnotations,
101 CreateMessageRequest,
103 CreateMessageResult,
104 ElicitAction,
106 ElicitRequest,
107 ElicitResult,
108 ElicitationSchema,
109 GetPromptResult,
111 ModelPreferences,
112 Prompt,
113 PromptArgument,
114 PromptMessage,
115 PromptOutput,
116 PropertySchema,
117 Resource,
119 ResourceContents,
120 ResourceTemplate,
121 Role,
122 SamplingMessage,
123 StopReason,
124 Task,
126 TaskError,
127 TaskId,
128 TaskProgress,
129 TaskStatus,
130 TaskSummary,
131 Tool,
132 ToolAnnotations,
133 ToolOutput,
134 };
135}
136
137#[cfg(test)]
138mod tests {
139 use super::*;
140
141 #[test]
142 fn test_prelude_imports() {
143 use crate::prelude::*;
144
145 let _tool = Tool::new("test");
147 let _caps = ServerCapabilities::new().with_tools();
148 let _conn: Connection<Disconnected> = Connection::new();
149 }
150
151 #[test]
152 fn test_protocol_version() {
153 assert_eq!(PROTOCOL_VERSION, "2025-11-25");
154 }
155
156 #[test]
157 fn test_error_context() {
158 use crate::error::McpResultExt;
159
160 fn might_fail() -> Result<(), McpError> {
161 Err(McpError::InternalMessage {
162 message: "something went wrong".to_string(),
163 })
164 }
165
166 let result = might_fail().context("while doing something important");
167 assert!(result.is_err());
168
169 let err = result.unwrap_err();
170 assert!(err.to_string().contains("while doing something important"));
171 }
172}