fastmcp 0.0.0

A Rust framework for building Model Context Protocol (MCP) services
Documentation
use thiserror::Error;

/// Errors that can occur in the FastMCP framework
#[derive(Debug, Error)]
pub enum Error {
    /// Protocol error (invalid message format, etc.)
    #[error("Protocol error: {0}")]
    Protocol(String),

    /// Error during tool execution
    #[error("Tool execution error: {0}")]
    ToolExecution(String),

    /// Error accessing resources
    #[error("Resource access error: {0}")]
    ResourceAccess(String),

    /// Error in transport layer
    #[error("Transport error: {0}")]
    Transport(String),

    /// Timeout occurred
    #[error("Timeout error: {0}")]
    Timeout(String),

    /// Execution was cancelled
    #[error("Execution cancelled: {0}")]
    Cancelled(String),

    /// Invalid input provided
    #[error("Invalid input: {0}")]
    InvalidInput(String),

    /// I/O error occurred
    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),

    /// JSON serialization/deserialization error
    #[error("JSON error: {0}")]
    Json(#[from] serde_json::Error),

    /// Other error that doesn't fit into the above categories
    #[error(transparent)]
    Other(#[from] anyhow::Error),
}

impl Clone for Error {
    fn clone(&self) -> Self {
        match self {
            Error::Protocol(s) => Error::Protocol(s.clone()),
            Error::ToolExecution(s) => Error::ToolExecution(s.clone()),
            Error::ResourceAccess(s) => Error::ResourceAccess(s.clone()),
            Error::Transport(s) => Error::Transport(s.clone()),
            Error::Timeout(s) => Error::Timeout(s.clone()),
            Error::Cancelled(s) => Error::Cancelled(s.clone()),
            Error::InvalidInput(s) => Error::InvalidInput(s.clone()),
            Error::Io(e) => Error::Io(std::io::Error::other(e.to_string())),
            Error::Json(e) => {
                let json_error_msg = e.to_string();
                Error::Json(
                    serde_json::from_str::<serde_json::Value>(&format!("\"{json_error_msg}\""))
                        .unwrap_err(),
                )
            }
            Error::Other(e) => Error::Other(anyhow::anyhow!(e.to_string())),
        }
    }
}

/// Result type for FastMCP operations
pub type Result<T> = std::result::Result<T, Error>;