use kernel::{Address, AxError, Payload, ServerLabel};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct McpHealthAnswer {
pub addr: Address,
pub servers: Vec<McpServerHealth>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct McpServerHealth {
pub label: ServerLabel,
pub transport: String,
pub target: String,
pub state: McpState,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum McpState {
Connected {
protocol_version: String,
server: String,
tools: Vec<McpToolLine>,
},
Authenticating {
recovery: String,
},
Failed { refusal: Box<AxError> },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct McpToolLine {
pub remote: String,
pub name: String,
pub disclosure: String,
pub input_schema: Payload,
}