From 8ace96f0f3807cfa7110e01b28f6d46b2bb6e648 Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 07:51:54 -0300 Subject: [PATCH 1/2] refactor: expose session store and event store traits and implementations --- crates/rust-mcp-sdk/src/hyper_servers/server.rs | 3 ++- crates/rust-mcp-sdk/src/lib.rs | 6 +++++- .../src/mcp_handlers/mcp_server_handler.rs | 17 ++++++++++++++++- crates/rust-mcp-sdk/src/mcp_http.rs | 4 +--- crates/rust-mcp-sdk/src/mcp_http/app_state.rs | 7 ++----- .../src/{mcp_http => }/session_store.rs | 6 +++--- .../in_memory_session_store.rs} | 0 7 files changed, 29 insertions(+), 14 deletions(-) rename crates/rust-mcp-sdk/src/{mcp_http => }/session_store.rs (93%) rename crates/rust-mcp-sdk/src/{mcp_http/session_store/in_memory.rs => session_store/in_memory_session_store.rs} (100%) 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..9c5f6ea 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -7,6 +7,7 @@ pub(crate) mod mcp_http; mod mcp_macros; mod mcp_runtimes; mod mcp_traits; +pub mod session_store; mod utils; #[cfg(feature = "client")] @@ -65,7 +66,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 +80,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 From 5fd37492cc31d665f97f06c554abaf85a634e30d Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 07:55:47 -0300 Subject: [PATCH 2/2] chore: update cargo feature --- crates/rust-mcp-sdk/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index 9c5f6ea..9a9e0a9 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -7,6 +7,7 @@ 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;