use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct McpServerConfig {
pub command: String,
pub args: Vec<String>,
pub directory: Option<String>,
pub env: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct McpConfig {
pub mcp_servers: HashMap<String, McpServerConfig>,
}
impl McpConfig {
pub fn from_file(path: &str) -> anyhow::Result<Self> {
let content = std::fs::read_to_string(path)?;
let config: McpConfig = serde_json::from_str(&content)?;
Ok(config)
}
pub fn get_server(&self, name: &str) -> Option<&McpServerConfig> {
self.mcp_servers.get(name)
}
pub fn list_servers(&self) -> Vec<&String> {
self.mcp_servers.keys().collect()
}
}