use aether_core::core::AgentDeps;
use aether_core::mcp::RuntimeServices;
use clap::Parser;
use mcp_servers::workspace_paths::current_dir;
use mcp_servers::{Builtin, SubAgentsMcp, SubAgentsMcpArgs};
use mcp_utils::server::{McpServer, ServeError};
#[derive(Parser)]
#[command(name = "mcp-servers-stdio", about = "Run an MCP server over stdio")]
struct Cli {
#[arg(long, value_enum)]
server: Builtin,
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
args: Vec<String>,
}
#[derive(Debug, thiserror::Error)]
enum StdioError {
#[error(transparent)]
Settings(#[from] aether_project::SettingsError),
#[error(transparent)]
Serve(#[from] ServeError),
}
#[tokio::main]
async fn main() -> Result<(), StdioError> {
let Cli { server, args } = Cli::parse();
let services =
RuntimeServices { root_dir: current_dir(), agent_deps: AgentDeps::default(), deferred_tools_socket: None };
let server: McpServer = match server {
Builtin::Subagents => {
let args = SubAgentsMcpArgs::try_parse_from(args).unwrap_or_else(|error| error.exit());
SubAgentsMcp::standalone(args, &services.root_dir)?.into()
}
builtin => builtin.build(args, &services).unwrap_or_else(|error| error.exit()),
};
Ok(server.serve_stdio().await?)
}