use anyhow::Result;
use super::stdio_server::run_mcp_stdio;
use super::streamable_http::run_mcp_http;
use super::transport::TransportType;
#[derive(Clone, Debug)]
pub struct McpConfig {
pub transport: TransportType,
pub bind_address: Option<String>,
pub port: Option<u16>,
pub route_path: Option<String>,
pub allowed_networks: Option<Vec<String>>,
}
impl Default for McpConfig {
fn default() -> Self {
Self {
transport: TransportType::Stdio,
bind_address: None,
port: None,
route_path: None,
allowed_networks: None,
}
}
}
#[tokio::main]
pub async fn run_mcp(config: McpConfig) -> Result<()> {
run_mcp_async(config).await
}
pub async fn run_mcp_async(config: McpConfig) -> Result<()> {
match config.transport {
TransportType::Stdio => run_mcp_stdio().await,
TransportType::StreamableHTTP => {
run_mcp_http(
config.bind_address.as_ref().expect("bind_address required for HTTP"),
config.port.expect("port required for HTTP"),
config.route_path.as_ref().expect("route_path required for HTTP"),
config.allowed_networks.clone(),
)
.await
},
}
}