use anyhow::Result;
use axum::routing::get;
use axum::{Json, Router};
use clap::Parser;
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "library-mode-example")]
struct Cli {
#[arg(short, long, default_value = "proxy.toml")]
config: PathBuf,
}
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter("tower_mcp=info,mcp_proxy=info")
.init();
let cli = Cli::parse();
let mut config = mcp_proxy::ProxyConfig::load(&cli.config)?;
config.resolve_env_vars();
let addr = format!("{}:{}", config.proxy.listen.host, config.proxy.listen.port);
let proxy = mcp_proxy::Proxy::from_config(config).await?;
let (proxy_router, _session_handle) = proxy.into_router();
let app_routes = Router::new().route("/app/status", get(app_status));
let app = proxy_router.merge(app_routes);
tracing::info!(listen = %addr, "Library mode example ready");
let listener = tokio::net::TcpListener::bind(&addr).await?;
axum::serve(listener, app).await?;
Ok(())
}
async fn app_status() -> Json<serde_json::Value> {
Json(serde_json::json!({
"app": "my-application",
"status": "running",
}))
}