use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct McpServer { pub id: String, pub name: String, pub url: String, pub transport_type: String, pub transport_config: String, pub auth_type: String, #[serde(skip_serializing_if = "Option::is_none")] pub auth_value: Option, pub enabled: bool, #[serde(skip_serializing_if = "Option::is_none")] pub last_discovered_at: Option, pub discovery_status: String, #[serde(skip_serializing_if = "Option::is_none")] pub discovery_error: Option, pub created_at: String, pub updated_at: String, #[serde(skip_serializing_if = "Option::is_none")] pub env_config: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct McpTool { pub id: String, pub server_id: String, pub name: String, pub tool_key: String, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, pub parameters: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct McpResource { pub id: String, pub server_id: String, pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct McpServerStatus { pub server_id: String, pub status: String, #[serde(skip_serializing_if = "Option::is_none")] pub error: Option, pub tool_count: usize, pub resource_count: usize, #[serde(skip_serializing_if = "Option::is_none")] pub last_discovered_at: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CreateMcpServerRequest { pub name: String, pub url: String, pub transport_type: String, pub transport_config: String, pub auth_type: String, #[serde(skip_serializing_if = "Option::is_none")] pub auth_value: Option, pub enabled: bool, #[serde(skip_serializing_if = "Option::is_none")] pub env_config: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct UpdateMcpServerRequest { #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, #[serde(skip_serializing_if = "Option::is_none")] pub transport_type: Option, #[serde(skip_serializing_if = "Option::is_none")] pub transport_config: Option, #[serde(skip_serializing_if = "Option::is_none")] pub auth_type: Option, #[serde(skip_serializing_if = "Option::is_none")] pub auth_value: Option, #[serde(skip_serializing_if = "Option::is_none")] pub enabled: Option, #[serde(skip_serializing_if = "Option::is_none")] pub env_config: Option, }