use alou::cli::*;
use alou::tool_registry::ToolRegistry;
use anyhow::Result;
use clap::Parser;
async fn handle_mcp_command_independent(args: MCPArgs) -> Result<()> {
let tool_registry = ToolRegistry::new();
match args.subcommand {
MCPSubcommand::Discover => {
let configs = tool_registry.discover_npm_mcp_servers().await?;
if configs.is_empty() {
println!("❌ 未发现任何可用的MCP服务器");
println!("💡 提示: 确保已安装Node.js和npm,并且网络连接正常");
} else {
println!("🎉 发现 {} 个可用的MCP服务器:", configs.len());
for config in configs {
if let Some(command) = &config.command {
println!(" ✅ {} - {}", "server", command);
}
}
}
}
MCPSubcommand::Test { server } => {
let configs = tool_registry.discover_npm_mcp_servers().await?;
let found_config = configs.iter().find(|config| {
config.command.as_ref().map(|cmd| cmd.contains(&server)).unwrap_or(false) ||
config.args.as_ref().map(|args| args.contains(&server)).unwrap_or(false)
});
match found_config {
Some(config) => {
println!("✅ 服务器测试成功: {}", server);
if let Some(command) = &config.command {
println!(" 命令: {}", command);
}
if let Some(args) = &config.args {
println!(" 参数: {:?}", args);
}
}
None => {
println!("❌ 服务器测试失败: 未找到服务器 {}", server);
println!("💡 提示: 检查服务器名称是否正确,或尝试使用完整包名");
}
}
}
MCPSubcommand::Export { output } => {
let configs = tool_registry.discover_npm_mcp_servers().await?;
if configs.is_empty() {
println!("❌ 没有可用的MCP服务器配置可导出");
return Ok(());
}
tool_registry.export_mcp_config(configs.clone(), &output)?;
println!("✅ 已导出 {} 个MCP服务器配置到: {}", configs.len(), output);
}
MCPSubcommand::Auto { output } => {
tool_registry.auto_discover_and_export(&output).await?;
}
}
Ok(())
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
if let Some(Commands::MCP(args)) = cli.subcommand {
return handle_mcp_command_independent(args).await;
}
let mut app = CliApp::new().await?;
app.run(cli).await?;
Ok(())
}