use project_rag::{mcp_server::RagMcpServer, Config, RagClient};
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
println!("=== Project RAG - MCP Server Example ===");
println!();
println!("This example shows how to programmatically create and run the MCP server.");
println!();
println!("Option 1: Creating MCP server with default configuration...");
let _simple_server = RagMcpServer::new().await?;
println!(" Server created successfully!");
println!();
println!("Option 2: Creating MCP server with custom client...");
let config = Config::new()?;
println!(" Loaded configuration:");
println!(" Vector DB backend: {}", config.vector_db.backend);
println!(" Min search score: {}", config.search.min_score);
println!(" Default search limit: {}", config.search.limit);
let client = RagClient::with_config(config).await?;
println!(" RAG client created!");
let server = RagMcpServer::with_client(Arc::new(client))?;
println!(" MCP server wrapper created!");
println!();
println!("Available MCP Tools:");
println!(" 1. index_codebase - Index a directory for semantic search");
println!(" 2. query_codebase - Semantic search across indexed code");
println!(" 3. search_by_filters - Advanced search with filters");
println!(" 4. get_statistics - Get index statistics");
println!(" 5. clear_index - Clear all indexed data");
println!(" 6. search_git_history - Search git commit history");
println!(" 7. find_definition - Find where a symbol is defined");
println!(" 8. find_references - Find all references to a symbol");
println!(" 9. get_call_graph - Get function call graph");
println!();
println!("Available MCP Prompts (Slash Commands):");
println!(" /project:index /project:query /project:search");
println!(" /project:stats /project:clear /project:git-search");
println!(" /project:definition /project:references /project:callgraph");
println!();
println!("To run the server, use:");
println!(" cargo run --release");
println!("Or:");
println!(" ./target/release/project-rag");
println!();
println!("--- Direct Client Usage Example ---");
println!();
let client = server.client();
let stats = client.get_statistics().await?;
println!("Current index statistics:");
println!(" Total files: {}", stats.total_files);
println!(" Total chunks: {}", stats.total_chunks);
if !stats.language_breakdown.is_empty() {
println!(" Languages indexed:");
for lang in stats.language_breakdown.iter().take(5) {
println!(" - {}: {} files", lang.language, lang.file_count);
}
}
println!();
println!("=== MCP Server Example Complete ===");
Ok(())
}