use clap::Parser;
use mcp_tools::{
common::{McpServerBase, ServerConfig},
servers::GitToolsServer,
Result,
};
use std::path::PathBuf;
use tokio::signal;
use tracing::{error, info};
#[derive(Parser)]
#[command(name = "git-server")]
#[command(about = "Git Tools MCP Server - Provides Git operations 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 = "8080")]
port: u16,
#[arg(long, default_value = "git-tools-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 Git Tools MCP Server v1.0.0");
info!("Server will bind to {}:{}", args.host, args.port);
let config = ServerConfig {
name: args.name,
description: "Git Tools MCP Server - Provides Git repository operations".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 = GitToolsServer::new(config).await?;
server.initialize().await?;
info!("Git Tools MCP Server initialized successfully");
info!("Available tools: git_status, git_diff, git_log, git_blame, git_branches");
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 Git Tools MCP Server...");
server.shutdown().await?;
info!("Server shutdown complete");
Ok(())
}