defect_cli/
mcp_servers.rs1use std::path::PathBuf;
8
9use agent_client_protocol_schema::{
10 EnvVariable, HttpHeader, McpServer, McpServerHttp, McpServerSse, McpServerStdio,
11};
12use defect_config::{LoadedConfig, McpServerConfig as ConfigMcpServerConfig};
13
14pub fn build_default_mcp_servers(config: &LoadedConfig) -> Vec<McpServer> {
17 config
18 .effective
19 .mcp
20 .enabled_servers
21 .iter()
22 .filter_map(|name| {
23 let server = config.effective.mcp.servers.get(name)?;
24 Some(match server {
25 ConfigMcpServerConfig::Stdio(server) => McpServer::Stdio(
26 McpServerStdio::new(name, PathBuf::from(&server.command))
27 .args(server.args.clone())
28 .env(
29 server
30 .env
31 .iter()
32 .map(|(name, value)| EnvVariable::new(name, value))
33 .collect(),
34 ),
35 ),
36 ConfigMcpServerConfig::Http(server) => McpServer::Http(
37 McpServerHttp::new(name, &server.url).headers(
38 server
39 .headers
40 .iter()
41 .map(|(name, value)| HttpHeader::new(name, value))
42 .collect(),
43 ),
44 ),
45 ConfigMcpServerConfig::Sse(server) => McpServer::Sse(
46 McpServerSse::new(name, &server.url).headers(
47 server
48 .headers
49 .iter()
50 .map(|(name, value)| HttpHeader::new(name, value))
51 .collect(),
52 ),
53 ),
54 })
55 })
56 .collect()
57}