ferridriver_mcp/
config.rs1pub use ferridriver_config::mcp::{
8 BrowserConfig, DEFAULT_CACHE_TTL, DEFAULT_SERVER_NAME, DISCOVER_TCP_TIMEOUT, InstanceConfig, McpConfig, ServerConfig,
9 ViewportDef,
10};
11
12pub type FileConfig = McpConfig;
14
15use crate::server::{DEFAULT_INSTRUCTIONS, McpServerConfig};
16use ferridriver::state::ConnectMode;
17
18impl McpServerConfig for McpConfig {
19 fn chrome_args(&self) -> Vec<String> {
20 McpConfig::chrome_args(self)
21 }
22
23 fn chrome_args_for_instance(&self, instance: &str) -> Vec<String> {
24 McpConfig::chrome_args_for_instance(self, instance)
25 }
26
27 fn resolve_instance(&self, instance: &str) -> Option<ConnectMode> {
28 McpConfig::resolve_instance(self, instance)
29 }
30
31 fn server_name(&self) -> &str {
32 McpConfig::server_name(self)
33 }
34
35 fn server_instructions(&self) -> &str {
36 McpConfig::server_instructions(self, DEFAULT_INSTRUCTIONS)
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43 use crate::server::DEFAULT_INSTRUCTIONS;
44 use ferridriver::backend::BackendKind;
45 use std::sync::Arc;
46
47 #[test]
48 fn trait_delegates_to_inherent_methods() {
49 let mut config = McpConfig::default();
50 config.browser.chrome_args = vec!["--base-flag".into()];
51 config.browser.instances.insert(
52 "staging".into(),
53 InstanceConfig {
54 chrome_args: vec!["--staging-flag".into()],
55 connect_url: Some("ws://staging-host:9222".into()),
56 ..Default::default()
57 },
58 );
59
60 let trait_obj: Arc<dyn McpServerConfig> = Arc::new(config);
61 assert_eq!(trait_obj.chrome_args(), vec!["--base-flag"]);
62 assert_eq!(trait_obj.chrome_args_for_instance("staging"), vec!["--staging-flag"]);
63 assert!(matches!(
64 trait_obj.resolve_instance("staging"),
65 Some(ConnectMode::ConnectUrl(url)) if url.contains("staging-host")
66 ));
67 assert_eq!(trait_obj.server_name(), DEFAULT_SERVER_NAME);
68 assert_eq!(trait_obj.server_instructions(), DEFAULT_INSTRUCTIONS);
69 }
70
71 #[test]
72 fn backend_parsing_via_helper() {
73 let mut config = McpConfig::default();
74 assert_eq!(config.backend_kind(), BackendKind::CdpPipe);
75 config.browser.backend = Some("cdp-raw".into());
76 assert_eq!(config.backend_kind(), BackendKind::CdpRaw);
77 }
78}