pub mod cors;
pub mod handler;
pub mod json_rpc_responses;
pub mod mcp_session;
pub mod middleware;
pub mod notification_bridge;
pub mod prelude;
pub mod protocol;
pub mod routes;
pub mod server;
pub mod session_handler;
pub mod sse;
pub mod stream_manager;
pub mod streamable_http;
#[cfg(test)]
mod tests;
pub use cors::CorsLayer;
pub use notification_bridge::{
BroadcastError, NotificationBroadcaster, SharedNotificationBroadcaster,
StreamManagerNotificationBroadcaster,
};
pub use protocol::{
McpProtocolVersion, extract_last_event_id, extract_protocol_version, extract_session_id,
};
pub use routes::{RouteBody, RouteHandler, RouteRegistry, RouteValidationError};
pub use server::{HttpMcpServer, HttpMcpServerBuilder, ServerConfig, ServerStats};
pub use session_handler::{SessionMcpHandler, SessionSseStream};
pub use stream_manager::{StreamConfig, StreamError, StreamManager, StreamStats};
pub use streamable_http::{StreamableHttpContext, StreamableHttpHandler};
#[async_trait::async_trait]
pub trait ToolChangeNotifier: Send + Sync {
async fn notify_tools_changed(&self, session_id: &str) -> std::result::Result<(), String>;
}
pub use turul_mcp_json_rpc_server::{JsonRpcDispatcher, JsonRpcHandler};
pub use turul_mcp_protocol::*;
pub type Result<T> = std::result::Result<T, HttpMcpError>;
#[derive(Debug, thiserror::Error)]
pub enum HttpMcpError {
#[error("HTTP error: {0}")]
Http(#[from] hyper::Error),
#[error("JSON-RPC error: {0}")]
JsonRpc(#[from] turul_mcp_json_rpc_server::JsonRpcError),
#[error("MCP protocol error: {0}")]
Mcp(#[from] turul_mcp_protocol::McpError),
#[error("Serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Invalid request: {0}")]
InvalidRequest(String),
}