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 ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
69 SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
70 is_version_supported, negotiate_version, negotiate_version_detailed,
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 serde::{Deserialize, Serialize};
87 pub use serde_json::json;
88
89 pub use crate::capability::{
90 ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
91 SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
92 is_version_supported, negotiate_version, negotiate_version_detailed,
93 };
94 pub use crate::error::{McpError, McpResultExt};
95 pub use crate::protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
96 pub use crate::protocol_version::ProtocolVersion;
97 pub use crate::schema::{Schema, SchemaBuilder, SchemaType};
98 pub use crate::state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
99 pub use crate::types::{
100 CallToolResult,
102 Content,
104 ContentAnnotations,
105 CreateMessageRequest,
107 CreateMessageResult,
108 ElicitAction,
110 ElicitRequest,
111 ElicitResult,
112 ElicitationSchema,
113 GetPromptResult,
115 ModelPreferences,
116 Prompt,
117 PromptArgument,
118 PromptMessage,
119 PromptOutput,
120 PropertySchema,
121 Resource,
123 ResourceContents,
124 ResourceTemplate,
125 Role,
126 SamplingMessage,
127 StopReason,
128 Task,
130 TaskError,
131 TaskId,
132 TaskProgress,
133 TaskStatus,
134 TaskSummary,
135 Tool,
136 ToolAnnotations,
137 ToolOutput,
138 };
139}
140
141#[cfg(test)]
142mod tests {
143 use super::*;
144
145 #[test]
146 fn test_prelude_imports() {
147 use crate::prelude::*;
148
149 let _tool = Tool::new("test");
151 let _caps = ServerCapabilities::new().with_tools();
152 let _conn: Connection<Disconnected> = Connection::new();
153 }
154
155 #[test]
156 fn test_protocol_version() {
157 assert_eq!(PROTOCOL_VERSION, "2025-11-25");
158 }
159
160 #[test]
161 fn test_error_context() {
162 use crate::error::McpResultExt;
163
164 fn might_fail() -> Result<(), McpError> {
165 Err(McpError::InternalMessage {
166 message: "something went wrong".to_string(),
167 })
168 }
169
170 let result = might_fail().context("while doing something important");
171 assert!(result.is_err());
172
173 let err = result.unwrap_err();
174 assert!(err.to_string().contains("while doing something important"));
175 }
176}