use anyhow::Result;
use clap::Parser;
use mcp_memory::{config, server};
use std::sync::Arc;
use tracing::info;
fn main() -> Result<()> {
let rt = tokio::runtime::Runtime::new()?;
rt.block_on(inner_main())
}
async fn inner_main() -> Result<()> {
let args = mcp_memory::Args::parse();
init_tracing(&args.log_level)?;
info!("Starting MCP Memory Server");
info!("Version: {}", env!("CARGO_PKG_VERSION"));
let config = Arc::new(config::Config::from_args(&args)?);
info!("Memory file: {}", config.memory_file_path);
let mcp_server = server::MCPServer::new((*config).clone())?;
info!("Server initialized successfully");
info!("Running in stdio mode");
mcp_server.run_stdio().await?;
info!("Server shutdown complete");
Ok(())
}
fn init_tracing(log_level: &str) -> Result<()> {
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
let env_filter = EnvFilter::try_from_default_env()
.or_else(|_| EnvFilter::try_new(log_level))
.unwrap_or_else(|_| EnvFilter::new("info"));
tracing_subscriber::registry()
.with(env_filter)
.with(fmt::layer().with_writer(std::io::stderr))
.init();
Ok(())
}