use anyhow::Result;
use clap::Parser;
mod cli;
pub mod mcp;
pub mod utils;
use cli::{Cli, Commands};
#[tokio::main]
async fn main() -> Result<()> {
dotenvy::dotenv().ok();
let cli = Cli::parse();
match cli.command {
Commands::Mcp { path, bind } => {
let working_directory = if let Some(p) = path {
p.canonicalize().unwrap_or(p)
} else {
std::env::current_dir()?
};
init_mcp_logging();
let server = mcp::server::McpServer::new(working_directory);
match bind {
Some(addr) => server.run_http(&addr).await?,
None => server.run().await?,
}
}
}
Ok(())
}
fn init_mcp_logging() {
use tracing_subscriber::EnvFilter;
let filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("octofs=warn"));
tracing_subscriber::fmt()
.with_env_filter(filter)
.with_writer(std::io::stderr)
.with_target(false)
.init();
}