webpuppet_mcp/
error.rs

1//! Error types for the MCP server.
2
3use thiserror::Error;
4
5/// Result type alias.
6pub type Result<T> = std::result::Result<T, Error>;
7
8/// MCP server errors.
9#[derive(Error, Debug)]
10pub enum Error {
11    /// JSON-RPC protocol error.
12    #[error("JSON-RPC error: {code} - {message}")]
13    JsonRpc {
14        /// Error code.
15        code: i32,
16        /// Error message.
17        message: String,
18        /// Additional data.
19        data: Option<serde_json::Value>,
20    },
21
22    /// Tool not found.
23    #[error("tool not found: {0}")]
24    ToolNotFound(String),
25
26    /// Invalid parameters.
27    #[error("invalid parameters: {0}")]
28    InvalidParams(String),
29
30    /// Permission denied by guardrails.
31    #[error("permission denied: {0}")]
32    PermissionDenied(String),
33
34    /// Webpuppet error.
35    #[error("webpuppet error: {0}")]
36    Webpuppet(#[from] webpuppet::Error),
37
38    /// Serialization error.
39    #[error("serialization error: {0}")]
40    Serialization(#[from] serde_json::Error),
41
42    /// I/O error.
43    #[error("I/O error: {0}")]
44    Io(#[from] std::io::Error),
45
46    /// Internal server error.
47    #[error("internal error: {0}")]
48    Internal(String),
49}
50
51impl Error {
52    /// Get the JSON-RPC error code for this error.
53    pub fn code(&self) -> i32 {
54        match self {
55            Error::JsonRpc { code, .. } => *code,
56            Error::ToolNotFound(_) => -32601,  // Method not found
57            Error::InvalidParams(_) => -32602, // Invalid params
58            Error::PermissionDenied(_) => -32000, // Server error
59            Error::Webpuppet(_) => -32001,
60            Error::Serialization(_) => -32700, // Parse error
61            Error::Io(_) => -32002,
62            Error::Internal(_) => -32603, // Internal error
63        }
64    }
65
66    /// Convert to JSON-RPC error response.
67    pub fn to_json_rpc_error(&self) -> serde_json::Value {
68        serde_json::json!({
69            "code": self.code(),
70            "message": self.to_string(),
71        })
72    }
73}
74
75/// Standard JSON-RPC error codes.
76pub mod codes {
77    /// Parse error.
78    pub const PARSE_ERROR: i32 = -32700;
79    /// Invalid request.
80    pub const INVALID_REQUEST: i32 = -32600;
81    /// Method not found.
82    pub const METHOD_NOT_FOUND: i32 = -32601;
83    /// Invalid params.
84    pub const INVALID_PARAMS: i32 = -32602;
85    /// Internal error.
86    pub const INTERNAL_ERROR: i32 = -32603;
87}