diff --git a/Cargo.lock b/Cargo.lock index e0a28a4..1d8b995 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1624,9 +1624,9 @@ dependencies = [ [[package]] name = "rust-mcp-schema" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9966340f5104a8d22b6c2db8901f8626a0f737820a385db3ffbb29b1f6ae0f" +checksum = "a794de25669a2d21c5074ec5082f74f5e88863a112339fe90264d9e480b0ee8b" dependencies = [ "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index cd1c6a2..c9447ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,8 @@ rust-mcp-sdk = { path = "crates/rust-mcp-sdk", default-features = false } rust-mcp-macros = { version = "0.4.1", path = "crates/rust-mcp-macros", default-features = false } # External crates -rust-mcp-schema = { version = "0.5", default-features = false } +rust-mcp-schema = { version = "0.6", default-features = false } + futures = { version = "0.3" } tokio = { version = "1.4", features = ["full"] } serde = { version = "1.0", features = ["derive", "serde_derive"] } diff --git a/Makefile.toml b/Makefile.toml index f878660..7362412 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -27,8 +27,13 @@ args = ["nextest", "run", "--no-tests=pass"] [tasks.doc-test] workspace = false command = "cargo" -args = ["test", "--doc", "-p", "rust-mcp-sdk", "-p", "rust-mcp-transport"] -dependencies = ["doc-test-macros"] +args = ["test", "--doc", "-p", "rust-mcp-sdk"] +dependencies = ["doc-test-macros", "doc-test-transport"] + +[tasks.doc-test-transport] +workspace = false +command = "cargo" +args = ["test", "--doc", "-p", "rust-mcp-sdk"] [tasks.doc-test-macros] workspace = false diff --git a/crates/rust-mcp-macros/src/lib.rs b/crates/rust-mcp-macros/src/lib.rs index a279a39..f7611e0 100644 --- a/crates/rust-mcp-macros/src/lib.rs +++ b/crates/rust-mcp-macros/src/lib.rs @@ -19,34 +19,25 @@ use utils::{is_option, renamed_field, type_to_json_schema}; /// * `name` - An optional string representing the tool's name. /// * `description` - An optional string describing the tool. /// -#[cfg(feature = "2024_11_05")] -struct McpToolMacroAttributes { - name: Option, - description: Option, -} - -/// Represents the attributes for the `mcp_tool` procedural macro. -/// -/// This struct parses and validates the `name` and `description` attributes provided -/// to the `mcp_tool` macro. Both attributes are required and must not be empty strings. -/// -/// # Fields -/// * `name` - An optional string representing the tool's name. -/// * `description` - An optional string describing the tool. +/// The following fields are available only with the `2025_03_26` feature: /// * `destructive_hint` - Optional boolean for `ToolAnnotations::destructive_hint`. /// * `idempotent_hint` - Optional boolean for `ToolAnnotations::idempotent_hint`. /// * `open_world_hint` - Optional boolean for `ToolAnnotations::open_world_hint`. /// * `read_only_hint` - Optional boolean for `ToolAnnotations::read_only_hint`. /// * `title` - Optional string for `ToolAnnotations::title`. /// -#[cfg(feature = "2025_03_26")] struct McpToolMacroAttributes { name: Option, description: Option, + #[cfg(feature = "2025_03_26")] destructive_hint: Option, + #[cfg(feature = "2025_03_26")] idempotent_hint: Option, + #[cfg(feature = "2025_03_26")] open_world_hint: Option, + #[cfg(feature = "2025_03_26")] read_only_hint: Option, + #[cfg(feature = "2025_03_26")] title: Option, } @@ -75,13 +66,20 @@ impl Parse for McpToolMacroAttributes { /// - The `name` attribute is missing or empty. /// - The `description` attribute is missing or empty. fn parse(attributes: syn::parse::ParseStream) -> syn::Result { - let mut name = None; - let mut description = None; - let mut destructive_hint = None; - let mut idempotent_hint = None; - let mut open_world_hint = None; - let mut read_only_hint = None; - let mut title = None; + let mut instance = Self { + name: None, + description: None, + #[cfg(feature = "2025_03_26")] + destructive_hint: None, + #[cfg(feature = "2025_03_26")] + idempotent_hint: None, + #[cfg(feature = "2025_03_26")] + open_world_hint: None, + #[cfg(feature = "2025_03_26")] + read_only_hint: None, + #[cfg(feature = "2025_03_26")] + title: None, + }; let meta_list: Punctuated = Punctuated::parse_terminated(attributes)?; for meta in meta_list { @@ -131,33 +129,38 @@ impl Parse for McpToolMacroAttributes { } }; match ident_str.as_str() { - "name" => name = Some(value), - "description" => description = Some(value), + "name" => instance.name = Some(value), + "description" => instance.description = Some(value), _ => {} } } "destructive_hint" | "idempotent_hint" | "open_world_hint" | "read_only_hint" => { - let value = match &meta_name_value.value { - Expr::Lit(ExprLit { - lit: Lit::Bool(lit_bool), - .. - }) => lit_bool.value, - _ => { - return Err(Error::new_spanned( - &meta_name_value.value, - "Expected a boolean literal", - )); + #[cfg(feature = "2025_03_26")] + { + let value = match &meta_name_value.value { + Expr::Lit(ExprLit { + lit: Lit::Bool(lit_bool), + .. + }) => lit_bool.value, + _ => { + return Err(Error::new_spanned( + &meta_name_value.value, + "Expected a boolean literal", + )); + } + }; + + match ident_str.as_str() { + "destructive_hint" => instance.destructive_hint = Some(value), + "idempotent_hint" => instance.idempotent_hint = Some(value), + "open_world_hint" => instance.open_world_hint = Some(value), + "read_only_hint" => instance.read_only_hint = Some(value), + _ => {} } - }; - match ident_str.as_str() { - "destructive_hint" => destructive_hint = Some(value), - "idempotent_hint" => idempotent_hint = Some(value), - "open_world_hint" => open_world_hint = Some(value), - "read_only_hint" => read_only_hint = Some(value), - _ => {} } } + #[cfg(feature = "2025_03_26")] "title" => { let value = match &meta_name_value.value { Expr::Lit(ExprLit { @@ -171,7 +174,7 @@ impl Parse for McpToolMacroAttributes { )); } }; - title = Some(value); + instance.title = Some(value); } _ => {} } @@ -179,13 +182,19 @@ impl Parse for McpToolMacroAttributes { } // Validate presence and non-emptiness - if name.as_ref().map(|s| s.trim().is_empty()).unwrap_or(true) { + if instance + .name + .as_ref() + .map(|s| s.trim().is_empty()) + .unwrap_or(true) + { return Err(Error::new( attributes.span(), "The 'name' attribute is required and must not be empty.", )); } - if description + if instance + .description .as_ref() .map(|s| s.trim().is_empty()) .unwrap_or(true) @@ -196,20 +205,6 @@ impl Parse for McpToolMacroAttributes { )); } - #[cfg(feature = "2024_11_05")] - let instance = Self { name, description }; - - #[cfg(feature = "2025_03_26")] - let instance = Self { - name, - description, - destructive_hint, - idempotent_hint, - open_world_hint, - read_only_hint, - title, - }; - Ok(instance) } } @@ -304,21 +299,23 @@ pub fn mcp_tool(attributes: TokenStream, input: TokenStream) -> TokenStream { quote! {None} }; - #[cfg(feature = "2025_03_26")] - let tool_token = quote! { - #base_crate::Tool { - name: #tool_name.to_string(), - description: Some(#tool_description.to_string()), - input_schema: #base_crate::ToolInputSchema::new(required, properties), - annotations: #annotations + let annotations_token = { + #[cfg(feature = "2025_03_26")] + { + quote! { annotations: #annotations } + } + #[cfg(not(feature = "2025_03_26"))] + { + quote! {} } }; - #[cfg(feature = "2024_11_05")] + let tool_token = quote! { #base_crate::Tool { name: #tool_name.to_string(), description: Some(#tool_description.to_string()), input_schema: #base_crate::ToolInputSchema::new(required, properties), + #annotations_token } }; diff --git a/crates/rust-mcp-sdk/Cargo.toml b/crates/rust-mcp-sdk/Cargo.toml index 731f5a0..636e0ef 100644 --- a/crates/rust-mcp-sdk/Cargo.toml +++ b/crates/rust-mcp-sdk/Cargo.toml @@ -11,9 +11,9 @@ license = "MIT" edition = "2021" [dependencies] -rust-mcp-schema = { workspace = true, default-features=false } +rust-mcp-schema = { workspace = true, default-features = false } rust-mcp-transport = { workspace = true, default-features = false, optional = true } -rust-mcp-macros = { workspace = true, optional = true, default-features=false, feature=["sdk"] } +rust-mcp-macros = { workspace = true, optional = true, default-features = false } tokio.workspace = true serde = { workspace = true } @@ -46,7 +46,7 @@ default = [ "macros", "hyper-server", "ssl", - "2025_03_26" + "2025_03_26", ] # All features enabled by default server = ["rust-mcp-transport/stdio"] # Server feature client = ["rust-mcp-transport/stdio", "rust-mcp-transport/sse"] # Client feature @@ -61,16 +61,20 @@ ssl = ["axum-server/tls-rustls"] macros = ["rust-mcp-macros/sdk"] # enabled mcp protocol version 2025_03_26 -2025_03_26 = ["rust-mcp-schema/2025_03_26", -"rust-mcp-macros/2025_03_26", -"rust-mcp-transport/2025_03_26", -"rust-mcp-schema/schema_utils"] +2025_03_26 = [ + "rust-mcp-schema/2025_03_26", + "rust-mcp-macros/2025_03_26", + "rust-mcp-transport/2025_03_26", + "rust-mcp-schema/schema_utils", +] # enabled mcp protocol version 2024_11_05 -2024_11_05 = ["rust-mcp-schema/2024_11_05", -"rust-mcp-macros/2024_11_05", -"rust-mcp-transport/2024_11_05", -"rust-mcp-schema/schema_utils"] +2024_11_05 = [ + "rust-mcp-schema/2024_11_05", + "rust-mcp-macros/2024_11_05", + "rust-mcp-transport/2024_11_05", + "rust-mcp-schema/schema_utils", +] [lints] workspace = true diff --git a/crates/rust-mcp-sdk/src/error.rs b/crates/rust-mcp-sdk/src/error.rs index de35f80..63bb1b5 100644 --- a/crates/rust-mcp-sdk/src/error.rs +++ b/crates/rust-mcp-sdk/src/error.rs @@ -1,4 +1,4 @@ -use rust_mcp_schema::RpcError; +use crate::schema::RpcError; use rust_mcp_transport::error::TransportError; use thiserror::Error; @@ -18,7 +18,7 @@ pub enum McpSdkError { #[error("{0}")] AnyError(Box<(dyn std::error::Error + Send + Sync)>), #[error("{0}")] - SdkError(#[from] rust_mcp_schema::schema_utils::SdkError), + SdkError(#[from] crate::schema::schema_utils::SdkError), #[cfg(feature = "hyper-server")] #[error("{0}")] TransportServerError(#[from] TransportServerError), diff --git a/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs b/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs index af572dd..65e77f2 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs @@ -1,6 +1,6 @@ use std::{sync::Arc, time::Duration}; -use rust_mcp_schema::InitializeResult; +use crate::schema::InitializeResult; use rust_mcp_transport::TransportOptions; use crate::mcp_traits::mcp_handler::McpServerHandler; diff --git a/crates/rust-mcp-sdk/src/hyper_servers/hyper_server.rs b/crates/rust-mcp-sdk/src/hyper_servers/hyper_server.rs index eb88feb..b85b8ba 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/hyper_server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/hyper_server.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use rust_mcp_schema::InitializeResult; +use crate::schema::InitializeResult; use crate::mcp_server::{server_runtime::ServerRuntimeInternalHandler, ServerHandler}; diff --git a/crates/rust-mcp-sdk/src/hyper_servers/hyper_server_core.rs b/crates/rust-mcp-sdk/src/hyper_servers/hyper_server_core.rs index d0663f3..9599134 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/hyper_server_core.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/hyper_server_core.rs @@ -1,6 +1,6 @@ use super::{HyperServer, HyperServerOptions}; use crate::mcp_server::{server_runtime_core::RuntimeCoreInternalHandler, ServerHandlerCore}; -use rust_mcp_schema::InitializeResult; +use crate::schema::InitializeResult; use std::sync::Arc; /// Creates a new HyperServer instance with the provided handler and options diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index 94a867a..1078a6d 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -16,8 +16,8 @@ use super::{ routes::app_routes, IdGenerator, InMemorySessionStore, UuidGenerator, }; +use crate::schema::InitializeResult; use axum::Router; -use rust_mcp_schema::InitializeResult; use rust_mcp_transport::TransportOptions; // Default client ping interval (12 seconds) diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index 6c33944..1ea23df 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -93,6 +93,4 @@ pub mod macros { pub use rust_mcp_macros::*; } -pub mod schema { - pub use rust_mcp_schema::*; -} +pub mod schema; diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs index 3b8b65a..c7e11bc 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs @@ -1,10 +1,10 @@ -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ CancelledNotification, CreateMessageRequest, CreateMessageResult, ListRootsRequest, ListRootsResult, LoggingMessageNotification, PingRequest, ProgressNotification, PromptListChangedNotification, ResourceListChangedNotification, ResourceUpdatedNotification, Result, RpcError, ToolListChangedNotification, }; +use async_trait::async_trait; use serde_json::Value; use crate::mcp_traits::mcp_client::McpClient; diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs index 2fb4940..0c29016 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs @@ -1,6 +1,6 @@ +use crate::schema::schema_utils::*; +use crate::schema::*; use async_trait::async_trait; -use rust_mcp_schema::schema_utils::*; -use rust_mcp_schema::*; use crate::mcp_traits::mcp_client::McpClient; 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 778157b..aa362e0 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,5 +1,5 @@ +use crate::schema::{schema_utils::CallToolError, *}; use async_trait::async_trait; -use rust_mcp_schema::{schema_utils::CallToolError, *}; use serde_json::Value; use crate::{mcp_traits::mcp_server::McpServer, utils::enforce_compatible_protocol_version}; diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs index 9729dc9..fffe2fc 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs @@ -1,6 +1,6 @@ +use crate::schema::schema_utils::*; +use crate::schema::*; use async_trait::async_trait; -use rust_mcp_schema::schema_utils::*; -use rust_mcp_schema::*; use crate::mcp_traits::mcp_server::McpServer; diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs index ccc36ad..d6e1e86 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs @@ -1,14 +1,14 @@ pub mod mcp_client_runtime; pub mod mcp_client_runtime_core; -use async_trait::async_trait; -use futures::future::join_all; -use futures::StreamExt; -use rust_mcp_schema::schema_utils::{self, MessageFromClient, ServerMessage}; -use rust_mcp_schema::{ +use crate::schema::schema_utils::{self, MessageFromClient, ServerMessage}; +use crate::schema::{ InitializeRequest, InitializeRequestParams, InitializeResult, InitializedNotification, RpcError, ServerResult, }; +use async_trait::async_trait; +use futures::future::join_all; +use futures::StreamExt; use rust_mcp_transport::{IoStream, McpDispatch, MessageDispatcher, Transport}; use std::sync::{Arc, RwLock}; use tokio::io::{AsyncBufReadExt, BufReader}; diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs index 56220c7..17ae6c9 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs @@ -1,13 +1,13 @@ use std::sync::Arc; -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ schema_utils::{ MessageFromClient, NotificationFromServer, RequestFromServer, ResultFromClient, ServerMessage, }, - InitializeRequestParams, RpcError, + InitializeRequestParams, RpcError, ServerNotification, ServerRequest, }; +use async_trait::async_trait; use rust_mcp_transport::Transport; use crate::{ @@ -73,18 +73,17 @@ impl McpClientHandler for ClientInternalHandler> { ) -> std::result::Result { match server_jsonrpc_request { RequestFromServer::ServerRequest(request) => match request { - rust_mcp_schema::ServerRequest::PingRequest(ping_request) => self + ServerRequest::PingRequest(ping_request) => self .handler .handle_ping_request(ping_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ServerRequest::CreateMessageRequest(create_message_request) => { - self.handler - .handle_create_message_request(create_message_request, runtime) - .await - .map(|value| value.into()) - } - rust_mcp_schema::ServerRequest::ListRootsRequest(list_roots_request) => self + ServerRequest::CreateMessageRequest(create_message_request) => self + .handler + .handle_create_message_request(create_message_request, runtime) + .await + .map(|value| value.into()), + ServerRequest::ListRootsRequest(list_roots_request) => self .handler .handle_list_roots_request(list_roots_request, runtime) .await @@ -118,21 +117,17 @@ impl McpClientHandler for ClientInternalHandler> { match server_jsonrpc_notification { NotificationFromServer::ServerNotification(server_notification) => { match server_notification { - rust_mcp_schema::ServerNotification::CancelledNotification( - cancelled_notification, - ) => { + ServerNotification::CancelledNotification(cancelled_notification) => { self.handler .handle_cancelled_notification(cancelled_notification, runtime) .await?; } - rust_mcp_schema::ServerNotification::ProgressNotification( - progress_notification, - ) => { + ServerNotification::ProgressNotification(progress_notification) => { self.handler .handle_progress_notification(progress_notification, runtime) .await?; } - rust_mcp_schema::ServerNotification::ResourceListChangedNotification( + ServerNotification::ResourceListChangedNotification( resource_list_changed_notification, ) => { self.handler @@ -142,7 +137,7 @@ impl McpClientHandler for ClientInternalHandler> { ) .await?; } - rust_mcp_schema::ServerNotification::ResourceUpdatedNotification( + ServerNotification::ResourceUpdatedNotification( resource_updated_notification, ) => { self.handler @@ -152,7 +147,7 @@ impl McpClientHandler for ClientInternalHandler> { ) .await?; } - rust_mcp_schema::ServerNotification::PromptListChangedNotification( + ServerNotification::PromptListChangedNotification( prompt_list_changed_notification, ) => { self.handler @@ -162,7 +157,7 @@ impl McpClientHandler for ClientInternalHandler> { ) .await?; } - rust_mcp_schema::ServerNotification::ToolListChangedNotification( + ServerNotification::ToolListChangedNotification( tool_list_changed_notification, ) => { self.handler @@ -172,7 +167,7 @@ impl McpClientHandler for ClientInternalHandler> { ) .await?; } - rust_mcp_schema::ServerNotification::LoggingMessageNotification( + ServerNotification::LoggingMessageNotification( logging_message_notification, ) => { self.handler diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs index 04b4552..d8d2400 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs @@ -1,13 +1,13 @@ use std::sync::Arc; -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ schema_utils::{ MessageFromClient, NotificationFromServer, RequestFromServer, ResultFromClient, ServerMessage, }, InitializeRequestParams, RpcError, }; +use async_trait::async_trait; use rust_mcp_transport::Transport; use crate::{ diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs index 5f22a43..6679ae7 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs @@ -1,10 +1,10 @@ pub mod mcp_server_runtime; pub mod mcp_server_runtime_core; +use crate::schema::schema_utils::{self, MessageFromServer}; +use crate::schema::{InitializeRequestParams, InitializeResult, RpcError}; use async_trait::async_trait; use futures::StreamExt; -use rust_mcp_schema::schema_utils::MessageFromServer; -use rust_mcp_schema::{self, schema_utils, InitializeRequestParams, InitializeResult, RpcError}; use rust_mcp_transport::{IoStream, McpDispatch, MessageDispatcher, Transport}; use schema_utils::ClientMessage; use std::pin::Pin; diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs index 51eba77..b3cf6c6 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs @@ -1,13 +1,13 @@ use std::sync::Arc; -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ schema_utils::{ - CallToolError, ClientMessage, MessageFromServer, NotificationFromClient, RequestFromClient, - ResultFromServer, + self, CallToolError, ClientMessage, MessageFromServer, NotificationFromClient, + RequestFromClient, ResultFromServer, }, - CallToolResult, InitializeResult, RpcError, + CallToolResult, ClientNotification, ClientRequest, InitializeResult, RpcError, }; +use async_trait::async_trait; use rust_mcp_transport::Transport; use super::ServerRuntime; @@ -77,26 +77,24 @@ impl McpServerHandler for ServerRuntimeInternalHandler> { runtime: &dyn McpServer, ) -> std::result::Result { match client_jsonrpc_request { - rust_mcp_schema::schema_utils::RequestFromClient::ClientRequest(client_request) => { + schema_utils::RequestFromClient::ClientRequest(client_request) => { match client_request { - rust_mcp_schema::ClientRequest::InitializeRequest(initialize_request) => self + ClientRequest::InitializeRequest(initialize_request) => self .handler .handle_initialize_request(initialize_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::PingRequest(ping_request) => self + ClientRequest::PingRequest(ping_request) => self .handler .handle_ping_request(ping_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::ListResourcesRequest( - list_resources_request, - ) => self + ClientRequest::ListResourcesRequest(list_resources_request) => self .handler .handle_list_resources_request(list_resources_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::ListResourceTemplatesRequest( + ClientRequest::ListResourceTemplatesRequest( list_resource_templates_request, ) => self .handler @@ -106,40 +104,38 @@ impl McpServerHandler for ServerRuntimeInternalHandler> { ) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::ReadResourceRequest(read_resource_request) => { - self.handler - .handle_read_resource_request(read_resource_request, runtime) - .await - .map(|value| value.into()) - } - rust_mcp_schema::ClientRequest::SubscribeRequest(subscribe_request) => self + ClientRequest::ReadResourceRequest(read_resource_request) => self + .handler + .handle_read_resource_request(read_resource_request, runtime) + .await + .map(|value| value.into()), + ClientRequest::SubscribeRequest(subscribe_request) => self .handler .handle_subscribe_request(subscribe_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::UnsubscribeRequest(unsubscribe_request) => self + ClientRequest::UnsubscribeRequest(unsubscribe_request) => self .handler .handle_unsubscribe_request(unsubscribe_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::ListPromptsRequest(list_prompts_request) => { - self.handler - .handle_list_prompts_request(list_prompts_request, runtime) - .await - .map(|value| value.into()) - } + ClientRequest::ListPromptsRequest(list_prompts_request) => self + .handler + .handle_list_prompts_request(list_prompts_request, runtime) + .await + .map(|value| value.into()), - rust_mcp_schema::ClientRequest::GetPromptRequest(prompt_request) => self + ClientRequest::GetPromptRequest(prompt_request) => self .handler .handle_get_prompt_request(prompt_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::ListToolsRequest(list_tools_request) => self + ClientRequest::ListToolsRequest(list_tools_request) => self .handler .handle_list_tools_request(list_tools_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::CallToolRequest(call_tool_request) => { + ClientRequest::CallToolRequest(call_tool_request) => { let result = self .handler .handle_call_tool_request(call_tool_request, runtime) @@ -150,19 +146,19 @@ impl McpServerHandler for ServerRuntimeInternalHandler> { |value| value.into(), )) } - rust_mcp_schema::ClientRequest::SetLevelRequest(set_level_request) => self + ClientRequest::SetLevelRequest(set_level_request) => self .handler .handle_set_level_request(set_level_request, runtime) .await .map(|value| value.into()), - rust_mcp_schema::ClientRequest::CompleteRequest(complete_request) => self + ClientRequest::CompleteRequest(complete_request) => self .handler .handle_complete_request(complete_request, runtime) .await .map(|value| value.into()), } } - rust_mcp_schema::schema_utils::RequestFromClient::CustomRequest(value) => self + schema_utils::RequestFromClient::CustomRequest(value) => self .handler .handle_custom_request(value, runtime) .await @@ -185,43 +181,37 @@ impl McpServerHandler for ServerRuntimeInternalHandler> { runtime: &dyn McpServer, ) -> SdkResult<()> { match client_jsonrpc_notification { - rust_mcp_schema::schema_utils::NotificationFromClient::ClientNotification( - client_notification, - ) => match client_notification { - rust_mcp_schema::ClientNotification::CancelledNotification( - cancelled_notification, - ) => { - self.handler - .handle_cancelled_notification(cancelled_notification, runtime) - .await?; - } - rust_mcp_schema::ClientNotification::InitializedNotification( - initialized_notification, - ) => { - self.handler - .handle_initialized_notification(initialized_notification, runtime) - .await?; - self.handler.on_initialized(runtime).await; - } - rust_mcp_schema::ClientNotification::ProgressNotification( - progress_notification, - ) => { - self.handler - .handle_progress_notification(progress_notification, runtime) - .await?; - } - rust_mcp_schema::ClientNotification::RootsListChangedNotification( - roots_list_changed_notification, - ) => { - self.handler - .handle_roots_list_changed_notification( - roots_list_changed_notification, - runtime, - ) - .await?; + schema_utils::NotificationFromClient::ClientNotification(client_notification) => { + match client_notification { + ClientNotification::CancelledNotification(cancelled_notification) => { + self.handler + .handle_cancelled_notification(cancelled_notification, runtime) + .await?; + } + ClientNotification::InitializedNotification(initialized_notification) => { + self.handler + .handle_initialized_notification(initialized_notification, runtime) + .await?; + self.handler.on_initialized(runtime).await; + } + ClientNotification::ProgressNotification(progress_notification) => { + self.handler + .handle_progress_notification(progress_notification, runtime) + .await?; + } + ClientNotification::RootsListChangedNotification( + roots_list_changed_notification, + ) => { + self.handler + .handle_roots_list_changed_notification( + roots_list_changed_notification, + runtime, + ) + .await?; + } } - }, - rust_mcp_schema::schema_utils::NotificationFromClient::CustomNotification(value) => { + } + schema_utils::NotificationFromClient::CustomNotification(value) => { self.handler.handle_custom_notification(value).await?; } } diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs index a61d0c5..445322a 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs @@ -1,11 +1,11 @@ use std::sync::Arc; -use async_trait::async_trait; -use rust_mcp_schema::schema_utils::{ +use crate::schema::schema_utils::{ self, ClientMessage, MessageFromServer, NotificationFromClient, RequestFromClient, ResultFromServer, }; -use rust_mcp_schema::{InitializeResult, RpcError}; +use crate::schema::{ClientRequest, InitializeResult, RpcError}; +use async_trait::async_trait; use rust_mcp_transport::Transport; use crate::error::SdkResult; @@ -63,9 +63,9 @@ impl McpServerHandler for RuntimeCoreInternalHandler> runtime: &dyn McpServer, ) -> std::result::Result { // store the client details if the request is a client initialization request - if let schema_utils::RequestFromClient::ClientRequest( - rust_mcp_schema::ClientRequest::InitializeRequest(initialize_request), - ) = &client_jsonrpc_request + if let schema_utils::RequestFromClient::ClientRequest(ClientRequest::InitializeRequest( + initialize_request, + )) = &client_jsonrpc_request { // keep a copy of the InitializeRequestParams which includes client_info and capabilities runtime diff --git a/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs b/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs index b3662c8..49ea75f 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs @@ -1,7 +1,6 @@ use std::{sync::Arc, time::Duration}; -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ schema_utils::{ self, McpMessage, MessageFromClient, NotificationFromClient, RequestFromClient, ResultFromServer, ServerMessage, @@ -16,6 +15,7 @@ use rust_mcp_schema::{ SetLevelRequest, SetLevelRequestParams, SubscribeRequest, SubscribeRequestParams, UnsubscribeRequest, UnsubscribeRequestParams, }; +use async_trait::async_trait; use rust_mcp_transport::{McpDispatch, MessageDispatcher}; use crate::{error::SdkResult, utils::format_assertion_message}; @@ -225,7 +225,7 @@ pub trait McpClient: Sync + Send { /// # Returns /// A `SdkResult` containing the `rust_mcp_schema::Result` if the request is successful. /// If the request or conversion fails, an error is returned. - async fn ping(&self, timeout: Option) -> SdkResult { + async fn ping(&self, timeout: Option) -> SdkResult { let ping_request = PingRequest::new(None); let response = self.request(ping_request.into(), timeout).await?; Ok(response.try_into()?) @@ -234,13 +234,13 @@ pub trait McpClient: Sync + Send { async fn complete( &self, params: CompleteRequestParams, - ) -> SdkResult { + ) -> SdkResult { let request = CompleteRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) } - async fn set_logging_level(&self, level: LoggingLevel) -> SdkResult { + async fn set_logging_level(&self, level: LoggingLevel) -> SdkResult { let request = SetLevelRequest::new(SetLevelRequestParams { level }); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -249,7 +249,7 @@ pub trait McpClient: Sync + Send { async fn get_prompt( &self, params: GetPromptRequestParams, - ) -> SdkResult { + ) -> SdkResult { let request = GetPromptRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -258,7 +258,7 @@ pub trait McpClient: Sync + Send { async fn list_prompts( &self, params: Option, - ) -> SdkResult { + ) -> SdkResult { let request = ListPromptsRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -267,7 +267,7 @@ pub trait McpClient: Sync + Send { async fn list_resources( &self, params: Option, - ) -> SdkResult { + ) -> SdkResult { // passing ListResourcesRequestParams::default() if params is None // need to investigate more but this could be a inconsistency on some MCP servers // where it is not required for other requests like prompts/list or tools/list etc @@ -281,7 +281,7 @@ pub trait McpClient: Sync + Send { async fn list_resource_templates( &self, params: Option, - ) -> SdkResult { + ) -> SdkResult { let request = ListResourceTemplatesRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -290,7 +290,7 @@ pub trait McpClient: Sync + Send { async fn read_resource( &self, params: ReadResourceRequestParams, - ) -> SdkResult { + ) -> SdkResult { let request = ReadResourceRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -299,7 +299,7 @@ pub trait McpClient: Sync + Send { async fn subscribe_resource( &self, params: SubscribeRequestParams, - ) -> SdkResult { + ) -> SdkResult { let request = SubscribeRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -308,7 +308,7 @@ pub trait McpClient: Sync + Send { async fn unsubscribe_resource( &self, params: UnsubscribeRequestParams, - ) -> SdkResult { + ) -> SdkResult { let request = UnsubscribeRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) @@ -323,7 +323,7 @@ pub trait McpClient: Sync + Send { async fn list_tools( &self, params: Option, - ) -> SdkResult { + ) -> SdkResult { let request = ListToolsRequest::new(params); let response = self.request(request.into(), None).await?; Ok(response.try_into()?) diff --git a/crates/rust-mcp-sdk/src/mcp_traits/mcp_handler.rs b/crates/rust-mcp-sdk/src/mcp_traits/mcp_handler.rs index 7b3126d..c86a623 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits/mcp_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits/mcp_handler.rs @@ -1,12 +1,12 @@ use async_trait::async_trait; #[cfg(feature = "server")] -use rust_mcp_schema::schema_utils::{NotificationFromClient, RequestFromClient, ResultFromServer}; +use crate::schema::schema_utils::{NotificationFromClient, RequestFromClient, ResultFromServer}; #[cfg(feature = "client")] -use rust_mcp_schema::schema_utils::{NotificationFromServer, RequestFromServer, ResultFromClient}; +use crate::schema::schema_utils::{NotificationFromServer, RequestFromServer, ResultFromClient}; -use rust_mcp_schema::RpcError; +use crate::schema::RpcError; use crate::error::SdkResult; diff --git a/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs b/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs index 79ad5fc..414bf00 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs @@ -1,7 +1,6 @@ use std::time::Duration; -use async_trait::async_trait; -use rust_mcp_schema::{ +use crate::schema::{ schema_utils::{ ClientMessage, McpMessage, MessageFromServer, NotificationFromServer, RequestFromServer, ResultFromClient, @@ -16,6 +15,7 @@ use rust_mcp_schema::{ ResourceUpdatedNotificationParams, RpcError, ServerCapabilities, SetLevelRequest, ToolListChangedNotification, ToolListChangedNotificationParams, }; +use async_trait::async_trait; use rust_mcp_transport::{McpDispatch, MessageDispatcher}; use crate::{error::SdkResult, utils::format_assertion_message}; @@ -185,7 +185,7 @@ pub trait McpServer: Sync + Send { /// # Returns /// A `SdkResult` containing the `rust_mcp_schema::Result` if the request is successful. /// If the request or conversion fails, an error is returned. - async fn ping(&self, timeout: Option) -> SdkResult { + async fn ping(&self, timeout: Option) -> SdkResult { let ping_request = PingRequest::new(None); let response = self.request(ping_request.into(), timeout).await?; Ok(response.try_into()?) diff --git a/crates/rust-mcp-sdk/src/schema.rs b/crates/rust-mcp-sdk/src/schema.rs new file mode 100644 index 0000000..35c676d --- /dev/null +++ b/crates/rust-mcp-sdk/src/schema.rs @@ -0,0 +1,5 @@ +#[cfg(feature = "2025_03_26")] +pub use rust_mcp_schema::*; + +#[cfg(all(feature = "2024_11_05", not(any(feature = "2025_03_26"))))] +pub use rust_mcp_schema::mcp_2024_11_05::*; diff --git a/crates/rust-mcp-sdk/tests/common/common.rs b/crates/rust-mcp-sdk/tests/common/common.rs index 3bebca8..c7e3f19 100644 --- a/crates/rust-mcp-sdk/tests/common/common.rs +++ b/crates/rust-mcp-sdk/tests/common/common.rs @@ -1,9 +1,9 @@ mod test_server; use async_trait::async_trait; -use rust_mcp_schema::{ +use rust_mcp_sdk::mcp_client::ClientHandler; +use rust_mcp_sdk::schema::{ ClientCapabilities, Implementation, InitializeRequestParams, LATEST_PROTOCOL_VERSION, }; -use rust_mcp_sdk::mcp_client::ClientHandler; pub use test_server::*; pub const NPX_SERVER_EVERYTHING: &str = "@modelcontextprotocol/server-everything"; diff --git a/crates/rust-mcp-sdk/tests/common/test_server.rs b/crates/rust-mcp-sdk/tests/common/test_server.rs index 0edc4b5..ea2afb5 100644 --- a/crates/rust-mcp-sdk/tests/common/test_server.rs +++ b/crates/rust-mcp-sdk/tests/common/test_server.rs @@ -3,7 +3,7 @@ pub mod test_server_common { use async_trait::async_trait; use tokio_stream::StreamExt; - use rust_mcp_schema::{ + use rust_mcp_sdk::schema::{ Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools, }; use rust_mcp_sdk::{ diff --git a/crates/rust-mcp-sdk/tests/test_protocol_compatibility.rs b/crates/rust-mcp-sdk/tests/test_protocol_compatibility.rs index cb7983d..5c184cf 100644 --- a/crates/rust-mcp-sdk/tests/test_protocol_compatibility.rs +++ b/crates/rust-mcp-sdk/tests/test_protocol_compatibility.rs @@ -3,8 +3,8 @@ pub mod common; mod protocol_compatibility_on_server { - use rust_mcp_schema::{InitializeRequest, InitializeResult, RpcError, INTERNAL_ERROR}; use rust_mcp_sdk::mcp_server::ServerHandler; + use rust_mcp_sdk::schema::{InitializeRequest, InitializeResult, RpcError, INTERNAL_ERROR}; use crate::common::{ test_client_info, diff --git a/crates/rust-mcp-sdk/tests/test_server_sse.rs b/crates/rust-mcp-sdk/tests/test_server_sse.rs index 5d053c7..1d43811 100644 --- a/crates/rust-mcp-sdk/tests/test_server_sse.rs +++ b/crates/rust-mcp-sdk/tests/test_server_sse.rs @@ -11,11 +11,11 @@ mod tets_server_sse { }, }; use reqwest::Client; - use rust_mcp_schema::{ + use rust_mcp_sdk::mcp_server::HyperServerOptions; + use rust_mcp_sdk::schema::{ schema_utils::{ResultFromServer, ServerMessage}, ServerResult, }; - use rust_mcp_sdk::mcp_server::HyperServerOptions; use tokio::time::sleep; #[tokio::test] diff --git a/crates/rust-mcp-transport/src/client_sse.rs b/crates/rust-mcp-transport/src/client_sse.rs index 9a7183e..cadf03a 100644 --- a/crates/rust-mcp-transport/src/client_sse.rs +++ b/crates/rust-mcp-transport/src/client_sse.rs @@ -11,8 +11,9 @@ use bytes::Bytes; use futures::Stream; use reqwest::header::{HeaderMap, HeaderName, HeaderValue}; use reqwest::Client; -use rust_mcp_schema::schema_utils::{McpMessage, RpcMessage}; -use rust_mcp_schema::RequestId; + +use crate::schema::schema_utils::{McpMessage, RpcMessage}; +use crate::schema::RequestId; use std::cmp::Ordering; use std::collections::HashMap; use std::pin::Pin; diff --git a/crates/rust-mcp-transport/src/error.rs b/crates/rust-mcp-transport/src/error.rs index e9dfa13..462c831 100644 --- a/crates/rust-mcp-transport/src/error.rs +++ b/crates/rust-mcp-transport/src/error.rs @@ -1,4 +1,4 @@ -use rust_mcp_schema::{schema_utils::SdkError, RpcError}; +use crate::schema::{schema_utils::SdkError, RpcError}; use thiserror::Error; use crate::utils::CancellationError; diff --git a/crates/rust-mcp-transport/src/lib.rs b/crates/rust-mcp-transport/src/lib.rs index c8779c2..1634922 100644 --- a/crates/rust-mcp-transport/src/lib.rs +++ b/crates/rust-mcp-transport/src/lib.rs @@ -6,6 +6,7 @@ mod client_sse; pub mod error; mod mcp_stream; mod message_dispatcher; +mod schema; #[cfg(feature = "sse")] mod sse; mod stdio; diff --git a/crates/rust-mcp-transport/src/mcp_stream.rs b/crates/rust-mcp-transport/src/mcp_stream.rs index 67ac37b..f5ed223 100644 --- a/crates/rust-mcp-transport/src/mcp_stream.rs +++ b/crates/rust-mcp-transport/src/mcp_stream.rs @@ -1,3 +1,5 @@ +use crate::schema::schema_utils::RpcMessage; +use crate::schema::{RequestId, RpcError}; use crate::{ error::{GenericSendError, TransportError}, message_dispatcher::MessageDispatcher, @@ -5,7 +7,6 @@ use crate::{ IoStream, }; use futures::Stream; -use rust_mcp_schema::{schema_utils::RpcMessage, RequestId, RpcError}; use std::{ collections::HashMap, pin::Pin, diff --git a/crates/rust-mcp-transport/src/message_dispatcher.rs b/crates/rust-mcp-transport/src/message_dispatcher.rs index 84ddd61..ee1c050 100644 --- a/crates/rust-mcp-transport/src/message_dispatcher.rs +++ b/crates/rust-mcp-transport/src/message_dispatcher.rs @@ -1,9 +1,10 @@ -use async_trait::async_trait; -use rust_mcp_schema::schema_utils::{ +use crate::schema::schema_utils::{ self, ClientMessage, FromMessage, McpMessage, MessageFromClient, MessageFromServer, ServerMessage, }; -use rust_mcp_schema::{RequestId, RpcError}; +use crate::schema::{RequestId, RpcError}; +use async_trait::async_trait; + use std::collections::HashMap; use std::pin::Pin; use std::sync::atomic::AtomicI64; diff --git a/crates/rust-mcp-transport/src/schema.rs b/crates/rust-mcp-transport/src/schema.rs new file mode 100644 index 0000000..35c676d --- /dev/null +++ b/crates/rust-mcp-transport/src/schema.rs @@ -0,0 +1,5 @@ +#[cfg(feature = "2025_03_26")] +pub use rust_mcp_schema::*; + +#[cfg(all(feature = "2024_11_05", not(any(feature = "2025_03_26"))))] +pub use rust_mcp_schema::mcp_2024_11_05::*; diff --git a/crates/rust-mcp-transport/src/sse.rs b/crates/rust-mcp-transport/src/sse.rs index 554826d..a8327a1 100644 --- a/crates/rust-mcp-transport/src/sse.rs +++ b/crates/rust-mcp-transport/src/sse.rs @@ -1,7 +1,7 @@ +use crate::schema::schema_utils::{McpMessage, RpcMessage}; +use crate::schema::RequestId; use async_trait::async_trait; use futures::Stream; -use rust_mcp_schema::schema_utils::{McpMessage, RpcMessage}; -use rust_mcp_schema::RequestId; use std::collections::HashMap; use std::pin::Pin; use std::sync::Arc; diff --git a/crates/rust-mcp-transport/src/stdio.rs b/crates/rust-mcp-transport/src/stdio.rs index b5bf5ed..e9720f3 100644 --- a/crates/rust-mcp-transport/src/stdio.rs +++ b/crates/rust-mcp-transport/src/stdio.rs @@ -1,7 +1,7 @@ +use crate::schema::schema_utils::{McpMessage, RpcMessage}; +use crate::schema::RequestId; use async_trait::async_trait; use futures::Stream; -use rust_mcp_schema::schema_utils::{McpMessage, RpcMessage}; -use rust_mcp_schema::RequestId; use std::collections::HashMap; use std::pin::Pin; use std::sync::Arc; diff --git a/crates/rust-mcp-transport/src/transport.rs b/crates/rust-mcp-transport/src/transport.rs index ca570aa..4c013d1 100644 --- a/crates/rust-mcp-transport/src/transport.rs +++ b/crates/rust-mcp-transport/src/transport.rs @@ -1,7 +1,7 @@ use std::{pin::Pin, time::Duration}; +use crate::schema::{schema_utils::McpMessage, RequestId}; use async_trait::async_trait; -use rust_mcp_schema::{schema_utils::McpMessage, RequestId}; use futures::Stream; diff --git a/crates/rust-mcp-transport/src/utils.rs b/crates/rust-mcp-transport/src/utils.rs index 06ee174..e95aab4 100644 --- a/crates/rust-mcp-transport/src/utils.rs +++ b/crates/rust-mcp-transport/src/utils.rs @@ -18,7 +18,7 @@ pub(crate) use sse_stream::*; #[cfg(feature = "sse")] pub(crate) use writable_channel::*; -use rust_mcp_schema::schema_utils::SdkError; +use crate::schema::schema_utils::SdkError; use tokio::time::{timeout, Duration}; use crate::error::{TransportError, TransportResult}; diff --git a/examples/hello-world-mcp-server/Cargo.toml b/examples/hello-world-mcp-server/Cargo.toml index ad5d544..d33ed14 100644 --- a/examples/hello-world-mcp-server/Cargo.toml +++ b/examples/hello-world-mcp-server/Cargo.toml @@ -12,7 +12,7 @@ rust-mcp-sdk = { workspace = true, default-features = false, features = [ "macros", "hyper-server", "ssl", - "2025_03_26" + "2025_03_26", ] } tokio = { workspace = true } diff --git a/examples/simple-mcp-client-core-sse/Cargo.toml b/examples/simple-mcp-client-core-sse/Cargo.toml index 98f158a..ed12bd0 100644 --- a/examples/simple-mcp-client-core-sse/Cargo.toml +++ b/examples/simple-mcp-client-core-sse/Cargo.toml @@ -10,8 +10,7 @@ license = "MIT" rust-mcp-sdk = { workspace = true, default-features = false, features = [ "client", "macros", - "2025_03_26" - + "2024_11_05", ] } tokio = { workspace = true } diff --git a/examples/simple-mcp-client-core/Cargo.toml b/examples/simple-mcp-client-core/Cargo.toml index 8137309..0d43b04 100644 --- a/examples/simple-mcp-client-core/Cargo.toml +++ b/examples/simple-mcp-client-core/Cargo.toml @@ -10,8 +10,7 @@ license = "MIT" rust-mcp-sdk = { workspace = true, default-features = false, features = [ "client", "macros", - "2025_03_26" - + "2024_11_05", ] } tokio = { workspace = true } diff --git a/examples/simple-mcp-client-sse/Cargo.toml b/examples/simple-mcp-client-sse/Cargo.toml index a1d8876..6cea7d6 100644 --- a/examples/simple-mcp-client-sse/Cargo.toml +++ b/examples/simple-mcp-client-sse/Cargo.toml @@ -10,8 +10,7 @@ license = "MIT" rust-mcp-sdk = { workspace = true, default-features = false, features = [ "client", "macros", - "2025_03_26" - + "2024_11_05", ] } tokio = { workspace = true } diff --git a/examples/simple-mcp-client/Cargo.toml b/examples/simple-mcp-client/Cargo.toml index 49bc52a..4b2484e 100644 --- a/examples/simple-mcp-client/Cargo.toml +++ b/examples/simple-mcp-client/Cargo.toml @@ -10,8 +10,7 @@ license = "MIT" rust-mcp-sdk = { workspace = true, default-features = false, features = [ "client", "macros", - "2025_03_26" - + "2024_11_05", ] } tokio = { workspace = true }