1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum McpError {
5 #[error("failed to spawn MCP server `{name}`: {source}")]
6 Spawn {
7 name: String,
8 #[source]
9 source: std::io::Error,
10 },
11
12 #[error("MCP server `{name}` exited unexpectedly")]
13 Exited { name: String },
14
15 #[error("MCP I/O error: {0}")]
16 Io(#[from] std::io::Error),
17
18 #[error("invalid JSON-RPC message: {0}")]
19 Json(#[from] serde_json::Error),
20
21 #[error("MCP protocol error on `{server}`: {message}")]
22 Protocol { server: String, message: String },
23
24 #[error("MCP request timed out after {secs}s")]
25 Timeout { secs: u64 },
26
27 #[error("no MCP servers configured")]
28 NoServers,
29}