use crate::Config;
use crate::errors::Error;
use crate::mcp::tools::ToolHandler;
use crate::memory::MemoryStore;
use std::path::PathBuf;
use std::sync::{Arc, Mutex};
pub fn run_mcp(embedding_model: String, project_id: &str, db_path: PathBuf) -> Result<(), Error> {
let config = Config {
embedding_model,
database_path: db_path.clone(),
..Config::default()
};
let store = MemoryStore::new(
&config.database_path,
&config.embedding_model,
config.clone(),
)?;
let store = Arc::new(Mutex::new(store));
let handler = ToolHandler::new(store, project_id.to_string(), config);
let runtime = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.map_err(|e| Error::Config(format!("Failed to create tokio runtime: {}", e)))?;
runtime.block_on(async {
let (stdin, stdout) = rmcp::transport::stdio();
let service = rmcp::serve_server(handler, (stdin, stdout))
.await
.map_err(|e| Error::Config(format!("MCP server error: {}", e)))?;
service
.waiting()
.await
.map_err(|e| Error::Config(format!("MCP server task error: {}", e)))?;
Ok(())
})
}