browser_control/cli/
mcp.rs1use anyhow::{anyhow, Result};
4
5use crate::cli::env_resolver::{self, ResolvedBrowser};
6use crate::mcp::server::{run, ServerState, ToolRegistry};
7use crate::registry::Registry;
8
9pub async fn run_cli(browser_arg: Option<String>, playwright: bool) -> Result<()> {
11 if playwright {
12 let resolved = resolve_browser(browser_arg).await?;
13 let code = crate::mcp::playwright::run(&resolved).await?;
14 std::process::exit(code);
15 }
16 let resolved = resolve_browser(browser_arg).await?;
17 let state = ServerState::new(resolved);
18 let tools = ToolRegistry::new();
19 crate::mcp::tools::register_all(&tools);
20 run(state, tools).await
21}
22
23pub async fn resolve_browser(browser_arg: Option<String>) -> Result<ResolvedBrowser> {
32 let registry = Registry::open()?;
33 if let Some(arg) = browser_arg.as_deref().filter(|s| !s.is_empty()) {
34 let sel = env_resolver::parse(arg)?;
35 return env_resolver::resolve(sel, ®istry).await;
36 }
37 if let Some(value) = crate::config::load()?.default {
38 let sel = env_resolver::parse(&value)?;
39 return env_resolver::resolve(sel, ®istry).await;
40 }
41 Err(anyhow!(
42 "no browser selected: pass a browser argument, set BROWSER_CONTROL, or run `browser-control set default <value>`"
43 ))
44}