use std::net::SocketAddr;
use clap::{Args, Subcommand};
use super::orchestrator::OrchestratorLocalArgs;
use super::serve::McpServeTransport;
#[derive(Debug, Args)]
pub(crate) struct McpArgs {
#[command(subcommand)]
pub command: McpCommand,
}
#[derive(Debug, Subcommand)]
pub(crate) enum McpCommand {
Serve(McpServeArgs),
Login(McpLoginArgs),
Logout(McpServerRefArgs),
Status(McpServerRefArgs),
RedirectUri,
}
#[derive(Debug, Args)]
pub(crate) struct McpServeArgs {
#[command(flatten)]
pub local: OrchestratorLocalArgs,
#[arg(long, value_enum, default_value_t = McpServeTransport::Stdio)]
pub transport: McpServeTransport,
#[arg(
long,
env = "HARN_MCP_SERVE_BIND",
default_value = "127.0.0.1:8765",
value_name = "ADDR"
)]
pub bind: SocketAddr,
#[arg(long, default_value = "/mcp", value_name = "PATH")]
pub path: String,
#[arg(long = "sse-path", default_value = "/sse", value_name = "PATH")]
pub sse_path: String,
#[arg(
long = "messages-path",
default_value = "/messages",
value_name = "PATH"
)]
pub messages_path: String,
}
#[derive(Debug, Args)]
pub(crate) struct McpLoginArgs {
pub target: Option<String>,
#[arg(long)]
pub url: Option<String>,
#[arg(long = "client-id")]
pub client_id: Option<String>,
#[arg(long = "client-secret")]
pub client_secret: Option<String>,
#[arg(long = "scope")]
pub scope: Option<String>,
#[arg(
long = "redirect-uri",
default_value = "http://127.0.0.1:9783/oauth/callback"
)]
pub redirect_uri: String,
}
#[derive(Debug, Args)]
pub(crate) struct McpServerRefArgs {
pub target: Option<String>,
#[arg(long)]
pub url: Option<String>,
}