systemprompt_cli/commands/plugins/mcp/
validate_output.rs1use 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}