use rag::{
mcp::McpServer,
};
use std::io::{self, BufRead, Write};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("OPENAI_API_KEY").ok();
let mcp_server = if let Some(key) = api_key {
McpServer::new_openai(key)
} else {
McpServer::new_ollama()
};
let stdin = io::stdin();
let stdout = io::stdout();
let mut stdout = stdout.lock();
eprintln!("RAG MCP Server started. Waiting for requests...");
for line in stdin.lock().lines() {
let line = line?;
if line.trim().is_empty() {
continue;
}
let request: rag::mcp::McpRequest = match serde_json::from_str(&line) {
Ok(req) => req,
Err(e) => {
eprintln!("Failed to parse request: {}", e);
continue;
}
};
eprintln!("Received request: {}", request.method);
let response = mcp_server.handle_request(request).await;
let response_json = serde_json::to_string(&response)?;
writeln!(stdout, "{}", response_json)?;
stdout.flush()?;
}
Ok(())
}