1#![warn(
36 missing_docs,
37 missing_debug_implementations,
38 rust_2018_idioms,
39 unreachable_pub,
40 clippy::all
41)]
42#![cfg_attr(
43 all(not(feature = "mmap"), not(feature = "lock-free")),
44 deny(unsafe_code)
45)]
46#![cfg_attr(docsrs, feature(doc_cfg))]
47#![allow(
48 clippy::module_name_repetitions,
49 clippy::missing_errors_doc, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::cast_precision_loss, clippy::cast_sign_loss, clippy::must_use_candidate, clippy::return_self_not_must_use, clippy::struct_excessive_bools, clippy::missing_panics_doc, clippy::default_trait_access, clippy::significant_drop_tightening, clippy::used_underscore_binding )]
62
63pub mod context;
64pub mod enhanced_registry;
65pub mod error;
66pub mod error_utils;
67pub mod handlers;
68pub mod lock_free;
69pub mod message;
70pub mod registry;
71pub mod session;
72pub mod state;
73pub mod types;
74pub mod utils;
75pub mod zero_copy;
76
77#[cfg(feature = "fancy-errors")]
78pub mod config;
79
80pub use context::{
82 BidirectionalContext, ClientCapabilities, ClientId, ClientIdExtractor, ClientSession,
83 CommunicationDirection, CommunicationInitiator, CompletionCapabilities, CompletionContext,
84 CompletionOption, CompletionReference, ConnectionMetrics, ElicitationContext, ElicitationState,
85 PingContext, PingOrigin, RequestContext, RequestContextExt, RequestInfo,
86 ResourceTemplateContext, ResponseContext, ServerInitiatedContext, ServerInitiatedType,
87 TemplateParameter,
88};
89pub use enhanced_registry::{EnhancedRegistry, HandlerStats};
90pub use error::{Error, ErrorKind, Result};
91pub use handlers::{
92 CompletionItem, CompletionProvider, ElicitationHandler, ElicitationResponse,
93 HandlerCapabilities, PingHandler, PingResponse, ResolvedResource, ResourceTemplate,
94 ResourceTemplateHandler, ServerInitiatedCapabilities, TemplateParam,
95};
96pub use message::{Message, MessageId, MessageMetadata};
97pub use session::{SessionAnalytics, SessionConfig, SessionManager};
98pub use state::StateManager;
99pub use types::{ContentType, ProtocolVersion, Timestamp};
100
101pub const PROTOCOL_VERSION: &str = "2025-06-18";
103
104pub const SUPPORTED_VERSIONS: &[&str] = &["2025-06-18", "2025-03-26", "2024-11-05"];
106
107pub const MAX_MESSAGE_SIZE: usize = 16 * 1024 * 1024;
109
110pub const DEFAULT_TIMEOUT_MS: u64 = 30_000;
112
113pub const SDK_VERSION: &str = env!("CARGO_PKG_VERSION");
115
116pub const SDK_NAME: &str = "turbomcp";
118
119#[cfg(test)]
120mod tests {
121 use super::*;
122
123 #[test]
124 fn test_version_constants() {
125 assert!(SUPPORTED_VERSIONS.contains(&PROTOCOL_VERSION));
127 }
128
129 #[test]
130 fn test_size_constants() {
131 const _: () = assert!(
136 MAX_MESSAGE_SIZE > 1024,
137 "MAX_MESSAGE_SIZE must be larger than 1KB"
138 );
139 const _: () = assert!(
140 MAX_MESSAGE_SIZE == 16 * 1024 * 1024,
141 "MAX_MESSAGE_SIZE must be 16MB"
142 );
143
144 const _: () = assert!(
146 DEFAULT_TIMEOUT_MS > 1000,
147 "DEFAULT_TIMEOUT_MS must be larger than 1 second"
148 );
149 const _: () = assert!(
150 DEFAULT_TIMEOUT_MS == 30_000,
151 "DEFAULT_TIMEOUT_MS must be 30 seconds"
152 );
153 }
154}