diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index 881d4b3..4cd8eb6 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -5,10 +5,11 @@ use crate::{ utils::{ DEFAULT_MESSAGES_ENDPOINT, DEFAULT_SSE_ENDPOINT, DEFAULT_STREAMABLE_HTTP_ENDPOINT, }, - InMemorySessionStore, McpAppState, + McpAppState, }, mcp_server::hyper_runtime::HyperRuntime, mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, + session_store::InMemorySessionStore, }; #[cfg(feature = "ssl")] use axum_server::tls_rustls::RustlsConfig; diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index 2f88673..9a9e0a9 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -7,6 +7,8 @@ pub(crate) mod mcp_http; mod mcp_macros; mod mcp_runtimes; mod mcp_traits; +#[cfg(any(feature = "server", feature = "hyper-server"))] +pub mod session_store; mod utils; #[cfg(feature = "client")] @@ -65,7 +67,7 @@ pub mod mcp_server { //! handle each message based on its type and parameters. //! //! Refer to [examples/hello-world-mcp-server-stdio-core](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/examples/hello-world-mcp-server-stdio-core) for an example. - pub use super::mcp_handlers::mcp_server_handler::ServerHandler; + pub use super::mcp_handlers::mcp_server_handler::{ServerHandler, ToMcpServerHandler}; pub use super::mcp_handlers::mcp_server_handler_core::ServerHandlerCore; pub use super::mcp_runtimes::server_runtime::mcp_server_runtime as server_runtime; @@ -79,6 +81,9 @@ pub mod mcp_server { #[cfg(feature = "hyper-server")] pub use super::hyper_servers::*; pub use super::utils::enforce_compatible_protocol_version; + + #[cfg(feature = "hyper-server")] + pub use super::mcp_http::{McpAppState, McpHttpHandler}; } #[cfg(feature = "client")] diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs index 9b9577e..9f8c9e3 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs @@ -1,4 +1,8 @@ -use crate::schema::{schema_utils::CallToolError, *}; +use crate::{ + mcp_server::server_runtime::ServerRuntimeInternalHandler, + mcp_traits::mcp_handler::McpServerHandler, + schema::{schema_utils::CallToolError, *}, +}; use async_trait::async_trait; use serde_json::Value; use std::sync::Arc; @@ -326,3 +330,14 @@ pub trait ServerHandler: Send + Sync + 'static { Ok(()) } } + +// Custom trait for conversion +pub trait ToMcpServerHandler { + fn to_mcp_server_handler(self) -> Arc; +} + +impl ToMcpServerHandler for T { + fn to_mcp_server_handler(self) -> Arc { + Arc::new(ServerRuntimeInternalHandler::new(Box::new(self))) + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http.rs b/crates/rust-mcp-sdk/src/mcp_http.rs index 59cfedc..3f443d5 100644 --- a/crates/rust-mcp-sdk/src/mcp_http.rs +++ b/crates/rust-mcp-sdk/src/mcp_http.rs @@ -1,11 +1,9 @@ mod app_state; mod mcp_http_handler; pub(crate) mod mcp_http_utils; -mod session_store; -pub(crate) use app_state::*; +pub use app_state::*; pub use mcp_http_handler::*; -pub use session_store::*; pub(crate) mod utils { pub use super::mcp_http_utils::*; diff --git a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs index 95ae297..cada97d 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs @@ -1,12 +1,9 @@ -use std::{sync::Arc, time::Duration}; - -use super::session_store::SessionStore; use crate::mcp_traits::mcp_handler::McpServerHandler; +use crate::session_store::SessionStore; use crate::{id_generator::FastIdGenerator, mcp_traits::IdGenerator, schema::InitializeResult}; - use rust_mcp_transport::event_store::EventStore; - use rust_mcp_transport::{SessionId, TransportOptions}; +use std::{sync::Arc, time::Duration}; /// Application state struct for the Hyper ser /// diff --git a/crates/rust-mcp-sdk/src/mcp_http/session_store.rs b/crates/rust-mcp-sdk/src/session_store.rs similarity index 93% rename from crates/rust-mcp-sdk/src/mcp_http/session_store.rs rename to crates/rust-mcp-sdk/src/session_store.rs index 4384b1a..b3dea76 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/session_store.rs +++ b/crates/rust-mcp-sdk/src/session_store.rs @@ -1,15 +1,15 @@ -mod in_memory; +mod in_memory_session_store; use std::sync::Arc; use async_trait::async_trait; -pub use in_memory::*; +pub use in_memory_session_store::*; use rust_mcp_transport::SessionId; use tokio::sync::Mutex; use crate::mcp_server::ServerRuntime; // Type alias for the server-side duplex stream used in sessions -pub type TxServer = Arc; +type TxServer = Arc; /// Trait defining the interface for session storage operations /// diff --git a/crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs b/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs similarity index 100% rename from crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs rename to crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs