McpError

Enum McpError 

Source
pub enum McpError {
Show 18 variants Parse { message: String, source: Option<BoxError>, }, InvalidRequest { message: String, source: Option<BoxError>, }, MethodNotFound { method: String, available: Box<[String]>, }, InvalidParams(Box<InvalidParamsDetails>), Internal { message: String, source: Option<BoxError>, }, Transport(Box<TransportDetails>), ToolExecution(Box<ToolExecutionDetails>), ResourceNotFound { uri: String, }, ResourceAccessDenied { uri: String, reason: Option<String>, }, ConnectionFailed { message: String, source: Option<BoxError>, }, SessionExpired { session_id: String, }, HandshakeFailed(Box<HandshakeDetails>), CapabilityNotSupported { capability: String, available: Box<[String]>, }, UserRejected { message: String, operation: String, }, Timeout { operation: String, duration: Duration, }, Cancelled { operation: String, reason: Option<String>, }, WithContext { context: String, source: Box<McpError>, }, InternalMessage { message: String, },
}
Expand description

The primary error type for the MCP SDK.

This unified error type replaces nested error hierarchies with a single, context-rich type that preserves error chains and provides excellent diagnostic output.

Large error variants are boxed to keep Result<T, McpError> small (approximately 24 bytes on 64-bit systems).

Variants§

§

Parse

Invalid JSON was received by the server.

Fields

§message: String

Human-readable error message.

§source: Option<BoxError>

The underlying parse error, if available.

§

InvalidRequest

The JSON sent is not a valid Request object.

Fields

§message: String

Human-readable error message.

§source: Option<BoxError>

The underlying error, if available.

§

MethodNotFound

The method does not exist or is not available.

Fields

§method: String

The method that was requested.

§available: Box<[String]>

List of available methods for suggestions (boxed to reduce size).

§

InvalidParams(Box<InvalidParamsDetails>)

Invalid method parameter(s) (details boxed to reduce enum size).

§

Internal

Internal JSON-RPC error.

Fields

§message: String

Human-readable error message.

§source: Option<BoxError>

The underlying error, if available.

§

Transport(Box<TransportDetails>)

Transport-level error (details boxed to reduce enum size).

§

ToolExecution(Box<ToolExecutionDetails>)

A tool execution failed (details boxed to reduce enum size).

§

ResourceNotFound

A requested resource was not found.

Fields

§uri: String

The URI of the resource that was not found.

§

ResourceAccessDenied

Access to a resource was denied.

Fields

§uri: String

The URI of the resource.

§reason: Option<String>

The reason for denial, if available.

§

ConnectionFailed

Connection establishment failed.

Fields

§message: String

Human-readable error message.

§source: Option<BoxError>

The underlying error, if available.

§

SessionExpired

Session has expired.

Fields

§session_id: String

The expired session ID.

§

HandshakeFailed(Box<HandshakeDetails>)

Protocol handshake failed (details boxed to reduce enum size).

§

CapabilityNotSupported

A requested capability is not supported.

Fields

§capability: String

The capability that was requested.

§available: Box<[String]>

List of available capabilities (boxed to reduce size).

§

UserRejected

User rejected an operation.

Fields

§message: String

Human-readable message about what was rejected.

§operation: String

The operation that was rejected.

§

Timeout

An operation timed out.

Fields

§operation: String

The operation that timed out.

§duration: Duration

How long we waited before timing out.

§

Cancelled

An operation was cancelled.

Fields

§operation: String

The operation that was cancelled.

§reason: Option<String>

Reason for cancellation, if provided.

§

WithContext

An error with additional context.

Fields

§context: String

The context message.

§source: Box<McpError>

The underlying error.

§

InternalMessage

A simple internal error with just a message.

Fields

§message: String

Human-readable error message.

Implementations§

Source§

impl McpError

Source

pub fn parse(message: impl Into<String>) -> Self

Create a parse error.

Source

pub fn parse_with_source<E: Error + Send + Sync + 'static>( message: impl Into<String>, source: E, ) -> Self

Create a parse error with a source.

Source

pub fn invalid_request(message: impl Into<String>) -> Self

Create an invalid request error.

Source

pub fn method_not_found(method: impl Into<String>) -> Self

Create a method not found error.

Source

pub fn method_not_found_with_suggestions( method: impl Into<String>, available: Vec<String>, ) -> Self

Create a method not found error with suggestions.

Source

pub fn invalid_params( method: impl Into<String>, message: impl Into<String>, ) -> Self

Create an invalid params error.

Source

pub fn invalid_params_detailed( method: impl Into<String>, message: impl Into<String>, param_path: Option<String>, expected: Option<String>, actual: Option<String>, ) -> Self

Create an invalid params error with full details.

Source

pub fn internal(message: impl Into<String>) -> Self

Create an internal error.

Source

pub fn internal_with_source<E: Error + Send + Sync + 'static>( message: impl Into<String>, source: E, ) -> Self

Create an internal error with a source.

Source

pub fn transport(kind: TransportErrorKind, message: impl Into<String>) -> Self

Create a transport error.

Source

pub fn transport_with_context( kind: TransportErrorKind, message: impl Into<String>, context: TransportContext, ) -> Self

Create a transport error with context.

Source

pub fn tool_error(tool: impl Into<String>, message: impl Into<String>) -> Self

Create a tool execution error.

Source

pub fn tool_error_detailed( tool: impl Into<String>, message: impl Into<String>, is_recoverable: bool, data: Option<Value>, ) -> Self

Create a tool execution error with full details.

Source

pub fn resource_not_found(uri: impl Into<String>) -> Self

Create a resource not found error.

Source

pub fn handshake_failed(message: impl Into<String>) -> Self

Create a handshake failed error.

Source

pub fn handshake_failed_with_versions( message: impl Into<String>, client_version: Option<String>, server_version: Option<String>, ) -> Self

Create a handshake failed error with version info.

Source

pub fn capability_not_supported(capability: impl Into<String>) -> Self

Create a capability not supported error.

Source

pub fn capability_not_supported_with_available( capability: impl Into<String>, available: Vec<String>, ) -> Self

Create a capability not supported error with available list.

Source

pub fn timeout(operation: impl Into<String>, duration: Duration) -> Self

Create a timeout error.

Source

pub fn cancelled(operation: impl Into<String>) -> Self

Create a cancelled error.

Source

pub fn cancelled_with_reason( operation: impl Into<String>, reason: impl Into<String>, ) -> Self

Create a cancelled error with reason.

Source

pub fn code(&self) -> i32

Get the JSON-RPC error code for this error.

Source

pub fn is_recoverable(&self) -> bool

Check if this is a recoverable error (LLM can retry).

Trait Implementations§

Source§

impl Debug for McpError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Diagnostic for McpError

Source§

fn code(&self) -> Option<Box<dyn Display + '_>>

Unique diagnostic code that can be used to look up more information about this Diagnostic. Ideally also globally unique, and documented in the toplevel crate’s documentation for easy searching. Rust path format (foo::bar::baz) is recommended, but more classic codes like E0123 or enums will work just fine.
Source§

fn help(&self) -> Option<Box<dyn Display + '_>>

Additional help text related to this Diagnostic. Do you have any advice for the poor soul who’s just run into this issue?
Source§

fn severity(&self) -> Option<Severity>

Diagnostic severity. This may be used by ReportHandlers to change the display format of this diagnostic. Read more
Source§

fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>>

URL to visit for a more detailed explanation/help about this Diagnostic.
Source§

fn source_code(&self) -> Option<&dyn SourceCode>

Source code to apply this Diagnostic’s Diagnostic::labels to.
Source§

fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>>

Labels to apply to this Diagnostic’s Diagnostic::source_code
Source§

fn related<'a>( &'a self, ) -> Option<Box<dyn Iterator<Item = &'a dyn Diagnostic> + 'a>>

Additional related Diagnostics.
Source§

fn diagnostic_source(&self) -> Option<&dyn Diagnostic>

The cause of the error.
Source§

impl Display for McpError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for McpError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<&McpError> for JsonRpcError

Source§

fn from(err: &McpError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for McpError

Source§

fn from(err: Error) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for McpError

Source§

fn from(err: Error) -> Self

Converts to this type from the input type.
Source§

impl From<McpError> for JsonRpcError

Source§

fn from(err: McpError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V