Skip to main content

systemprompt_cli/commands/plugins/mcp/
validate_output.rs

1//! Output builders for `plugins mcp validate`: the per-server result card for a
2//! failed check and for a completed connection probe.
3//!
4//! Copyright (c) systemprompt.io — Business Source License 1.1.
5//! See <https://systemprompt.io> for licensing details.
6
7use systemprompt_identifiers::ServiceName;
8use systemprompt_mcp::services::client::McpConnectionResult;
9
10use super::types::{McpServerInfo, McpValidateOutput};
11
12#[derive(Debug)]
13pub struct FailureDetail {
14    pub health_status: &'static str,
15    pub validation_type: &'static str,
16    pub latency_ms: u32,
17    pub issue: String,
18    pub message: String,
19}
20
21pub fn failure_output(service_name: &ServiceName, detail: FailureDetail) -> McpValidateOutput {
22    McpValidateOutput {
23        server: service_name.clone(),
24        valid: false,
25        health_status: detail.health_status.to_owned(),
26        validation_type: detail.validation_type.to_owned(),
27        tools_count: None,
28        latency_ms: detail.latency_ms,
29        server_info: None,
30        issues: vec![detail.issue],
31        message: detail.message,
32    }
33}
34
35pub fn success_output(
36    service_name: &ServiceName,
37    validation_result: McpConnectionResult,
38) -> McpValidateOutput {
39    let health_status = validation_result.health_status().to_owned();
40    let message = validation_result.status_description();
41
42    let server_info = validation_result.server_info.map(|info| McpServerInfo {
43        name: info.implementation_name,
44        version: info.version,
45        protocol_version: info.protocol_version,
46    });
47
48    let issues = validation_result
49        .error_message
50        .as_ref()
51        .filter(|e| !e.is_empty())
52        .map_or_else(Vec::new, |e| vec![e.clone()]);
53
54    McpValidateOutput {
55        server: service_name.clone(),
56        valid: validation_result.success,
57        health_status,
58        validation_type: validation_result.validation_type,
59        tools_count: validation_result.tools_count,
60        latency_ms: validation_result.connection_time_ms,
61        server_info,
62        issues,
63        message,
64    }
65}