Skip to content
122 changes: 19 additions & 103 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ let handler = MyServerHandler {};
// STEP 3: instantiate HyperServer, providing `server_details` , `handler` and HyperServerOptions
let server = hyper_server::create_server(
server_details,
handler,
handler.to_mcp_server_handler(),
HyperServerOptions {
host: "127.0.0.1".to_string(),
sse_support: false,
Expand Down Expand Up @@ -511,7 +511,7 @@ A typical example of creating a HyperServer that exposes the MCP server via Stre

let server = hyper_server::create_server(
server_details,
handler,
handler.to_mcp_server_handler(),
HyperServerOptions {
host: "127.0.0.1".to_string(),
enable_ssl: true,
Expand Down
17 changes: 5 additions & 12 deletions crates/rust-mcp-sdk/src/hyper_servers/hyper_server.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
use std::sync::Arc;

use crate::schema::InitializeResult;

use crate::mcp_server::{server_runtime::ServerRuntimeInternalHandler, ServerHandler};

use super::{HyperServer, HyperServerOptions};
use crate::mcp_traits::mcp_handler::McpServerHandler;
use crate::schema::InitializeResult;
use std::sync::Arc;

/// Creates a new HyperServer instance with the provided handler and options
/// The handler must implement ServerHandler.
Expand All @@ -18,12 +15,8 @@ use super::{HyperServer, HyperServerOptions};
/// * `HyperServer` - A configured HyperServer instance ready to start
pub fn create_server(
server_details: InitializeResult,
handler: impl ServerHandler,
handler: Arc<dyn McpServerHandler + 'static>,
server_options: HyperServerOptions,
) -> HyperServer {
HyperServer::new(
server_details,
Arc::new(ServerRuntimeInternalHandler::new(Box::new(handler))),
server_options,
)
HyperServer::new(server_details, handler, server_options)
}
10 changes: 3 additions & 7 deletions crates/rust-mcp-sdk/src/hyper_servers/hyper_server_core.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use super::{HyperServer, HyperServerOptions};
use crate::mcp_server::{server_runtime_core::RuntimeCoreInternalHandler, ServerHandlerCore};
use crate::mcp_traits::mcp_handler::McpServerHandler;
use crate::schema::InitializeResult;
use std::sync::Arc;

Expand All @@ -15,12 +15,8 @@ use std::sync::Arc;
/// * `HyperServer` - A configured HyperServer instance ready to start
pub fn create_server(
server_details: InitializeResult,
handler: impl ServerHandlerCore,
handler: Arc<dyn McpServerHandler + 'static>,
server_options: HyperServerOptions,
) -> HyperServer {
HyperServer::new(
server_details,
Arc::new(RuntimeCoreInternalHandler::new(Box::new(handler))),
server_options,
)
HyperServer::new(server_details, handler, server_options)
}
5 changes: 4 additions & 1 deletion crates/rust-mcp-sdk/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,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, ToMcpServerHandler};
pub use super::mcp_handlers::mcp_server_handler::ServerHandler;
pub use super::mcp_handlers::mcp_server_handler_core::ServerHandlerCore;

pub use super::mcp_runtimes::server_runtime::mcp_server_runtime as server_runtime;
Expand All @@ -84,6 +84,9 @@ pub mod mcp_server {

#[cfg(feature = "hyper-server")]
pub use super::mcp_http::{McpAppState, McpHttpHandler};
pub use super::mcp_traits::mcp_handler::{
McpServerHandler, ToMcpServerHandler, ToMcpServerHandlerCore,
};
}

#[cfg(feature = "client")]
Expand Down
7 changes: 1 addition & 6 deletions crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
mcp_server::server_runtime::ServerRuntimeInternalHandler,
mcp_traits::mcp_handler::McpServerHandler,
mcp_traits::mcp_handler::{McpServerHandler, ToMcpServerHandler},
schema::{schema_utils::CallToolError, *},
};
use async_trait::async_trait;
Expand Down Expand Up @@ -331,11 +331,6 @@ pub trait ServerHandler: Send + Sync + 'static {
}
}

// Custom trait for conversion
pub trait ToMcpServerHandler {
fn to_mcp_server_handler(self) -> Arc<dyn McpServerHandler + 'static>;
}

impl<T: ServerHandler + 'static> ToMcpServerHandler for T {
fn to_mcp_server_handler(self) -> Arc<dyn McpServerHandler + 'static> {
Arc::new(ServerRuntimeInternalHandler::new(Box::new(self)))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use crate::mcp_server::server_runtime_core::RuntimeCoreInternalHandler;
use crate::mcp_traits::mcp_handler::{McpServerHandler, ToMcpServerHandlerCore};
use crate::mcp_traits::mcp_server::McpServer;
use crate::schema::schema_utils::*;
use crate::schema::*;
Expand Down Expand Up @@ -49,3 +51,9 @@ pub trait ServerHandlerCore: Send + Sync + 'static {
runtime: Arc<dyn McpServer>,
) -> std::result::Result<(), RpcError>;
}

impl<T: ServerHandlerCore + 'static> ToMcpServerHandlerCore for T {
fn to_mcp_server_handler(self) -> Arc<dyn McpServerHandler + 'static> {
Arc::new(RuntimeCoreInternalHandler::new(Box::new(self)))
}
}
Loading