use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Serialize, Eq, PartialEq)]
pub struct McpServer {
pub name: String,
pub description: Option<String>,
pub server_type: McpServerType,
pub tools: HashMap<String, McpTool>,
pub proxy_config: Option<McpServerProxyConfig>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize, Eq, PartialEq)]
#[non_exhaustive]
pub enum McpServerType {
#[default]
Http,
Proxy,
}
#[derive(Debug, Clone, Deserialize, Serialize, Eq, PartialEq)]
pub struct McpServerProxyConfig {
pub url: String,
pub headers: HashMap<String, String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Eq, PartialEq)]
pub struct McpTool {
pub name: String,
pub description: String,
pub input_schema: Option<Value>,
pub route: Route,
}
#[derive(Debug, Clone, Deserialize, Serialize, Eq, PartialEq)]
pub struct Route {
pub route_type: RouteType,
pub service_name: Option<String>,
pub service_path: Option<String>,
pub url: Option<String>,
pub method: Option<String>,
pub request_param: Option<Value>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize, Eq, PartialEq)]
#[non_exhaustive]
pub enum RouteType {
#[default]
NoRoute,
Service,
Url,
}