use daedra::cache::CacheConfig;
use daedra::server::{DaedraServer, ServerConfig, TransportType};
use std::time::Duration;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let use_sse = std::env::var("USE_SSE").is_ok();
let subscriber = tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
.with_target(false);
if use_sse {
subscriber.init();
println!("Starting SSE server on http://127.0.0.1:3000");
} else {
subscriber.with_writer(std::io::stderr).init();
eprintln!("Starting STDIO server (for MCP clients)");
eprintln!("Note: Logs are written to stderr to keep stdout clean for JSON-RPC");
}
let config = ServerConfig {
cache: CacheConfig {
ttl: Duration::from_secs(600), max_entries: 500,
enabled: true,
},
verbose: true,
max_concurrent_tools: 5,
};
let server = DaedraServer::new(config)?;
let transport = if use_sse {
TransportType::Sse {
port: 3000,
host: [127, 0, 0, 1],
}
} else {
TransportType::Stdio
};
server.run(transport).await?;
Ok(())
}