1use crate::schema::RpcError;
2use rust_mcp_transport::error::TransportError;
3use thiserror::Error;
4
5#[cfg(feature = "hyper-server")]
6use crate::hyper_servers::error::TransportServerError;
7
8pub type SdkResult<T> = core::result::Result<T, McpSdkError>;
9
10#[derive(Debug, Error)]
11pub enum McpSdkError {
12 #[error("{0}")]
13 RpcError(#[from] RpcError),
14 #[error("{0}")]
15 IoError(#[from] std::io::Error),
16 #[error("{0}")]
17 TransportError(#[from] TransportError),
18 #[error("{0}")]
19 AnyError(Box<(dyn std::error::Error + Send + Sync)>),
20 #[error("{0}")]
21 SdkError(#[from] crate::schema::schema_utils::SdkError),
22 #[cfg(feature = "hyper-server")]
23 #[error("{0}")]
24 TransportServerError(#[from] TransportServerError),
25 #[error("Incompatible mcp protocol version: client:{0} server:{1}")]
26 IncompatibleProtocolVersion(String, String),
27}
28
29impl McpSdkError {
30 pub fn rpc_error_message(&self) -> Option<&String> {
32 if let McpSdkError::RpcError(rpc_error) = self {
33 return Some(&rpc_error.message);
34 }
35 None
36 }
37}
38
39#[deprecated(since = "0.2.0", note = "Use `McpSdkError` instead.")]
40pub type MCPSdkError = McpSdkError;