use adk_rust_mcp_avtool::AVToolServer;
use adk_rust_mcp_common::{Config, McpServerBuilder, TransportArgs};
use anyhow::Result;
use clap::Parser;
#[cfg(feature = "otel")]
use adk_rust_mcp_common::otel::{init_tracing_with_optional_otel, OtelConfig};
#[derive(Parser, Debug)]
#[command(name = "adk-rust-mcp-avtool")]
#[command(about = "MCP server for audio/video processing using FFmpeg")]
#[command(version)]
struct Args {
#[command(flatten)]
transport: TransportArgs,
}
#[tokio::main]
async fn main() -> Result<()> {
#[cfg(feature = "otel")]
let _otel_guard = {
let config = OtelConfig::from_env()
.unwrap_or_default()
.with_service_name("adk-rust-mcp-avtool");
init_tracing_with_optional_otel(config).await
};
#[cfg(not(feature = "otel"))]
tracing_subscriber::fmt()
.with_writer(std::io::stderr)
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.init();
let args = Args::parse();
let config = Config::from_env()?;
tracing::info!(
project_id = %config.project_id,
location = %config.location,
"Starting adk-rust-mcp-avtool server"
);
let server = AVToolServer::new(config);
let transport = args.transport.into_transport();
McpServerBuilder::new(server)
.with_transport(transport)
.run()
.await?;
Ok(())
}