use clap::Parser;
use mcp_tools::{
common::{McpServerBase, ServerConfig},
servers::CodeAnalysisServer,
Result,
};
use std::path::PathBuf;
use tokio::signal;
use tracing::{error, info};
#[derive(Parser)]
#[command(name = "code-analysis-server")]
#[command(
about = "Code Analysis MCP Server - Provides comprehensive code analysis via MCP protocol"
)]
#[command(version = "1.0.0")]
struct Args {
#[arg(short, long, default_value = "127.0.0.1")]
host: String,
#[arg(short, long, default_value = "8081")]
port: u16,
#[arg(long, default_value = "code-analysis-server")]
name: String,
#[arg(short, long)]
working_dir: Option<PathBuf>,
#[arg(short, long)]
verbose: bool,
#[arg(short, long)]
config: Option<PathBuf>,
}
#[tokio::main]
async fn main() -> Result<()> {
let args = Args::parse();
let log_level = if args.verbose { "debug" } else { "info" };
tracing_subscriber::fmt().with_env_filter(log_level).init();
info!("Starting Code Analysis MCP Server v1.0.0");
info!("Server will bind to {}:{}", args.host, args.port);
let config = ServerConfig {
name: args.name,
description: "Code Analysis MCP Server - Provides comprehensive code analysis".to_string(),
version: "1.0.0".to_string(),
host: args.host,
port: args.port,
max_connections: 100,
request_timeout_secs: 300,
log_requests: args.verbose,
server_config: std::collections::HashMap::new(),
};
let mut server = CodeAnalysisServer::new(config).await?;
server.initialize().await?;
info!("Code Analysis MCP Server initialized successfully");
info!("Supported languages: Rust, Python, JavaScript, TypeScript, Go, Java, C, C++");
info!("Available tools: analyze_code, detect_language, complexity_analysis, security_analysis");
info!("Server is ready to accept connections");
info!("Press Ctrl+C to shutdown");
match signal::ctrl_c().await {
Ok(()) => {
info!("Received shutdown signal");
}
Err(err) => {
error!("Unable to listen for shutdown signal: {}", err);
}
}
info!("Shutting down Code Analysis MCP Server...");
server.shutdown().await?;
info!("Server shutdown complete");
Ok(())
}