use axum::Json; use serde::Deserialize; use serde_json::Value; use crate::app_error::AppCommandError; use crate::commands::mcp as mcp_commands; use crate::commands::mcp::{ LocalMcpServer, McpAppType, McpMarketplaceItem, McpMarketplaceProvider, McpMarketplaceServerDetail, }; // --------------------------------------------------------------------------- // Param structs // --------------------------------------------------------------------------- #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct SearchMarketplaceParams { pub provider_id: String, pub query: Option, pub limit: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct GetMarketplaceServerDetailParams { pub provider_id: String, pub server_id: String, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct InstallFromMarketplaceParams { pub provider_id: String, pub server_id: String, pub apps: Vec, pub spec_override: Option, pub option_id: Option, pub protocol: Option, pub parameter_values: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct UpsertLocalServerParams { pub server_id: String, pub spec: Value, pub apps: Vec, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct SetServerAppsParams { pub server_id: String, pub apps: Vec, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct RemoveServerParams { pub server_id: String, pub apps: Option>, } // --------------------------------------------------------------------------- // Handlers // --------------------------------------------------------------------------- pub async fn mcp_scan_local() -> Result>, AppCommandError> { let result = mcp_commands::mcp_scan_local().await?; Ok(Json(result)) } pub async fn mcp_list_marketplaces() -> Result>, AppCommandError> { let result = mcp_commands::mcp_list_marketplaces().await?; Ok(Json(result)) } pub async fn mcp_search_marketplace( Json(params): Json, ) -> Result>, AppCommandError> { let result = mcp_commands::mcp_search_marketplace(params.provider_id, params.query, params.limit) .await?; Ok(Json(result)) } pub async fn mcp_get_marketplace_server_detail( Json(params): Json, ) -> Result, AppCommandError> { let result = mcp_commands::mcp_get_marketplace_server_detail(params.provider_id, params.server_id) .await?; Ok(Json(result)) } pub async fn mcp_install_from_marketplace( Json(params): Json, ) -> Result, AppCommandError> { let result = mcp_commands::mcp_install_from_marketplace( params.provider_id, params.server_id, params.apps, params.spec_override, params.option_id, params.protocol, params.parameter_values, ) .await?; Ok(Json(result)) } pub async fn mcp_upsert_local_server( Json(params): Json, ) -> Result, AppCommandError> { let result = mcp_commands::mcp_upsert_local_server(params.server_id, params.spec, params.apps).await?; Ok(Json(result)) } pub async fn mcp_set_server_apps( Json(params): Json, ) -> Result>, AppCommandError> { let result = mcp_commands::mcp_set_server_apps(params.server_id, params.apps).await?; Ok(Json(result)) } pub async fn mcp_remove_server( Json(params): Json, ) -> Result, AppCommandError> { let result = mcp_commands::mcp_remove_server(params.server_id, params.apps).await?; Ok(Json(result)) }