From 600f5d14842bb71bdcef26265430a23c3c439162 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Tue, 4 Nov 2025 12:51:41 -0700 Subject: [PATCH] refactor: Refactored the use_mcp_servers field to enabled_mcp_servers to make the purpose of the field more clear --- assets/roles/github.md | 2 +- assets/roles/mcp-servers.md | 2 +- assets/roles/slack.md | 2 +- config.example.yaml | 2 +- config.role.example.md | 12 ++++----- src/config/agent.rs | 4 +-- src/config/mod.rs | 49 +++++++++++++++++++------------------ src/config/role.rs | 38 ++++++++++++++++------------ src/config/session.rs | 22 ++++++++--------- src/mcp/mod.rs | 15 +++++++----- src/repl/mod.rs | 25 ++++++++++--------- 11 files changed, 93 insertions(+), 80 deletions(-) diff --git a/assets/roles/github.md b/assets/roles/github.md index 1c9ed41..1283155 100644 --- a/assets/roles/github.md +++ b/assets/roles/github.md @@ -1,5 +1,5 @@ --- -use_mcp_servers: github +enabled_mcp_servers: github --- You are expert GitHub assistant designed to assist users with GitHub related tasks. You can perform various tasks related to GitHub, such as creating issues, searching for issues, and providing information about repositories. diff --git a/assets/roles/mcp-servers.md b/assets/roles/mcp-servers.md index 5ddac86..195baad 100644 --- a/assets/roles/mcp-servers.md +++ b/assets/roles/mcp-servers.md @@ -1,3 +1,3 @@ --- -use_mcp_servers: all +enabled_mcp_servers: all --- diff --git a/assets/roles/slack.md b/assets/roles/slack.md index cfc56c2..4da582c 100644 --- a/assets/roles/slack.md +++ b/assets/roles/slack.md @@ -1,5 +1,5 @@ --- -use_mcp_servers: slack +enabled_mcp_servers: slack temperature: 0.2 --- You are an expert Slack assistant designed to assist with Slack workspaces via the slack MCP server. diff --git a/config.example.yaml b/config.example.yaml index 3cbe640..412fdcb 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -47,7 +47,7 @@ visible_tools: # Which tools are visible to be compiled (and a mcp_servers: true # Enables or disables MCP servers (globally). mapping_mcp_servers: # Alias for an MCP server or set of servers git: github,gitmcp -use_mcp_servers: null # Which MCP servers to use by default (e.g. 'github,slack') +enabled_mcp_servers: null # Which MCP servers to enable by default (e.g. 'github,slack') # ---- prelude ---- repl_prelude: null # Set a default role or session for REPL mode (e.g. role:, session:, :) diff --git a/config.role.example.md b/config.role.example.md index a989b90..08ef0d9 100644 --- a/config.role.example.md +++ b/config.role.example.md @@ -1,10 +1,10 @@ --- # Everything in this section is optional -name: # The name of the role -model: openai:gpt-4o # The model to use for this role -temperature: 0.2 # The temperature to use for this role when querying the model -top_p: null # The top_p to use for this role when querying the model -enabled_tools: fs_ls,fs_cat # A comma-separated list of tools to enable for this role -use_mcp_servers: github,gitmcp # A comma-separated list of MCP servers to enable for this role +name: # The name of the role +model: openai:gpt-4o # The model to use for this role +temperature: 0.2 # The temperature to use for this role when querying the model +top_p: null # The top_p to use for this role when querying the model +enabled_tools: fs_ls,fs_cat # A comma-separated list of tools to enable for this role +enabled_mcp_servers: github,gitmcp # A comma-separated list of MCP servers to enable for this role --- You are an expert at doing things. This is where I would write the instructions for the role. diff --git a/src/config/agent.rs b/src/config/agent.rs index 0729d63..40d40d3 100644 --- a/src/config/agent.rs +++ b/src/config/agent.rs @@ -422,7 +422,7 @@ impl RoleLike for Agent { self.config.global_tools.clone().join(",").into() } - fn use_mcp_servers(&self) -> Option { + fn enabled_mcp_servers(&self) -> Option { self.config.mcp_servers.clone().join(",").into() } @@ -455,7 +455,7 @@ impl RoleLike for Agent { } } - fn set_use_mcp_servers(&mut self, value: Option) { + fn set_enabled_mcp_servers(&mut self, value: Option) { match value { Some(servers) => { let servers = servers diff --git a/src/config/mod.rs b/src/config/mod.rs index 6a9de3c..6d88680 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -135,7 +135,7 @@ pub struct Config { pub mcp_servers: bool, pub mapping_mcp_servers: IndexMap, - pub use_mcp_servers: Option, + pub enabled_mcp_servers: Option, pub repl_prelude: Option, pub cmd_prelude: Option, @@ -221,7 +221,7 @@ impl Default for Config { mcp_servers: true, mapping_mcp_servers: Default::default(), - use_mcp_servers: None, + enabled_mcp_servers: None, repl_prelude: None, cmd_prelude: None, @@ -648,7 +648,7 @@ impl Config { self.temperature, self.top_p, self.enabled_tools.clone(), - self.use_mcp_servers.clone(), + self.enabled_mcp_servers.clone(), ); role } @@ -696,8 +696,8 @@ impl Config { ("top_p", format_option_value(&role.top_p())), ("enabled_tools", format_option_value(&role.enabled_tools())), ( - "use_mcp_servers", - format_option_value(&role.use_mcp_servers()), + "enabled_mcp_servers", + format_option_value(&role.enabled_mcp_servers()), ), ( "max_output_tokens", @@ -771,13 +771,13 @@ impl Config { let value = parse_value(value)?; config.write().set_enabled_tools(value); } - "use_mcp_servers" => { + "enabled_mcp_servers" => { let value: Option = parse_value(value)?; if let Some(servers) = value.as_ref() { if let Some(registry) = &config.read().mcp_registry { if registry.list_configured_servers().is_empty() { bail!( - "No MCP servers are configured. Please configure MCP servers first before setting 'use_mcp_servers'." + "No MCP servers are configured. Please configure MCP servers first before setting 'enabled_mcp_servers'." ); } @@ -788,12 +788,12 @@ impl Config { || s == "all" }) { bail!( - "Some of the specified MCP servers in 'use_mcp_servers' are configured. Please check your MCP server configuration." + "Some of the specified MCP servers in 'enabled_mcp_servers' are configured. Please check your MCP server configuration." ); } } } - config.write().set_use_mcp_servers(value.clone()); + config.write().set_enabled_mcp_servers(value.clone()); if config.read().mcp_servers { config.write().functions.clear_mcp_meta_functions(); let registry = config @@ -854,13 +854,14 @@ impl Config { .mcp_registry .take() .expect("MCP registry should be initialized"); - let use_mcp_servers = if value { - config.read().use_mcp_servers.clone() + let enabled_mcp_servers = if value { + config.read().enabled_mcp_servers.clone() } else { None }; let new_registry = - McpRegistry::reinit(registry, use_mcp_servers, abort_signal.clone()).await?; + McpRegistry::reinit(registry, enabled_mcp_servers, abort_signal.clone()) + .await?; if !new_registry.is_empty() && value { config .write() @@ -977,10 +978,10 @@ impl Config { } } - pub fn set_use_mcp_servers(&mut self, value: Option) { + pub fn set_enabled_mcp_servers(&mut self, value: Option) { match self.role_like_mut() { - Some(role_like) => role_like.set_use_mcp_servers(value), - None => self.use_mcp_servers = value, + Some(role_like) => role_like.set_enabled_mcp_servers(value), + None => self.enabled_mcp_servers = value, } } @@ -1094,7 +1095,7 @@ impl Config { pub async fn use_role(&mut self, name: &str, abort_signal: AbortSignal) -> Result<()> { let role = self.retrieve_role(name)?; let mcp_servers = if self.mcp_servers { - role.use_mcp_servers() + role.enabled_mcp_servers() } else { eprintln!( "{}", @@ -1354,7 +1355,7 @@ impl Config { let mut new_session = false; if let Some(session) = session.as_mut() { let mcp_servers = if self.mcp_servers { - session.use_mcp_servers() + session.enabled_mcp_servers() } else { eprintln!( "{}", @@ -2034,7 +2035,7 @@ impl Config { fn select_enabled_mcp_servers(&self, role: &Role) -> Vec { let mut mcp_functions = vec![]; if self.mcp_servers { - if let Some(use_mcp_servers) = role.use_mcp_servers() { + if let Some(enabled_mcp_servers) = role.enabled_mcp_servers() { let mut server_names: HashSet = Default::default(); let mcp_declaration_names: HashSet = self .functions @@ -2046,10 +2047,10 @@ impl Config { }) .map(|v| v.name.to_string()) .collect(); - if use_mcp_servers == "all" { + if enabled_mcp_servers == "all" { server_names.extend(mcp_declaration_names); } else { - for item in use_mcp_servers.split(',') { + for item in enabled_mcp_servers.split(',') { let item = item.trim(); let item_invoke_name = format!("{}_{item}", MCP_INVOKE_META_FUNCTION_NAME_PREFIX); @@ -2190,7 +2191,7 @@ impl Config { "temperature", "top_p", "enabled_tools", - "use_mcp_servers", + "enabled_mcp_servers", "save_session", "compress_threshold", "rag_reranker_model", @@ -2252,7 +2253,7 @@ impl Config { .collect() } "mcp_servers" => complete_bool(self.mcp_servers), - "use_mcp_servers" => { + "enabled_mcp_servers" => { let mut prefix = String::new(); let mut ignores = HashSet::new(); if let Some((v, _)) = args[1].rsplit_once(',') { @@ -2838,7 +2839,7 @@ impl Config { let mcp_registry = McpRegistry::init( log_path, start_mcp_servers, - self.use_mcp_servers.clone(), + self.enabled_mcp_servers.clone(), abort_signal.clone(), self, ) @@ -2952,7 +2953,7 @@ pub async fn macro_execute( config.temperature = role.temperature(); config.top_p = role.top_p(); config.enabled_tools = role.enabled_tools().clone(); - config.use_mcp_servers = role.use_mcp_servers().clone(); + config.enabled_mcp_servers = role.enabled_mcp_servers().clone(); config.macro_flag = true; config.model = role.model().clone(); config.role = None; diff --git a/src/config/role.rs b/src/config/role.rs index 872eb33..f2cd45d 100644 --- a/src/config/role.rs +++ b/src/config/role.rs @@ -29,12 +29,12 @@ pub trait RoleLike { fn temperature(&self) -> Option; fn top_p(&self) -> Option; fn enabled_tools(&self) -> Option; - fn use_mcp_servers(&self) -> Option; + fn enabled_mcp_servers(&self) -> Option; fn set_model(&mut self, model: Model); fn set_temperature(&mut self, value: Option); fn set_top_p(&mut self, value: Option); fn set_enabled_tools(&mut self, value: Option); - fn set_use_mcp_servers(&mut self, value: Option); + fn set_enabled_mcp_servers(&mut self, value: Option); } #[derive(Debug, Clone, Default, Deserialize, Serialize)] @@ -54,7 +54,7 @@ pub struct Role { #[serde(skip_serializing_if = "Option::is_none")] enabled_tools: Option, #[serde(skip_serializing_if = "Option::is_none")] - use_mcp_servers: Option, + enabled_mcp_servers: Option, #[serde(skip)] model: Model, @@ -88,8 +88,8 @@ impl Role { "enabled_tools" => { role.enabled_tools = value.as_str().map(|v| v.to_string()) } - "use_mcp_servers" => { - role.use_mcp_servers = value.as_str().map(|v| v.to_string()) + "enabled_mcp_servers" => { + role.enabled_mcp_servers = value.as_str().map(|v| v.to_string()) } _ => (), } @@ -131,8 +131,8 @@ impl Role { if let Some(enabled_tools) = self.enabled_tools() { metadata.push(format!("enabled_tools: {enabled_tools}")); } - if let Some(use_mcp_servers) = self.use_mcp_servers() { - metadata.push(format!("use_mcp_servers: {use_mcp_servers}")); + if let Some(enabled_mcp_servers) = self.enabled_mcp_servers() { + metadata.push(format!("enabled_mcp_servers: {enabled_mcp_servers}")); } if metadata.is_empty() { format!("{}\n", self.prompt) @@ -171,8 +171,14 @@ impl Role { let temperature = role_like.temperature(); let top_p = role_like.top_p(); let enabled_tools = role_like.enabled_tools(); - let use_mcp_servers = role_like.use_mcp_servers(); - self.batch_set(model, temperature, top_p, enabled_tools, use_mcp_servers); + let enabled_mcp_servers = role_like.enabled_mcp_servers(); + self.batch_set( + model, + temperature, + top_p, + enabled_tools, + enabled_mcp_servers, + ); } pub fn batch_set( @@ -181,7 +187,7 @@ impl Role { temperature: Option, top_p: Option, enabled_tools: Option, - use_mcp_servers: Option, + enabled_mcp_servers: Option, ) { self.set_model(model.clone()); if temperature.is_some() { @@ -193,8 +199,8 @@ impl Role { if enabled_tools.is_some() { self.set_enabled_tools(enabled_tools); } - if use_mcp_servers.is_some() { - self.set_use_mcp_servers(use_mcp_servers); + if enabled_mcp_servers.is_some() { + self.set_enabled_mcp_servers(enabled_mcp_servers); } } @@ -291,8 +297,8 @@ impl RoleLike for Role { self.enabled_tools.clone() } - fn use_mcp_servers(&self) -> Option { - self.use_mcp_servers.clone() + fn enabled_mcp_servers(&self) -> Option { + self.enabled_mcp_servers.clone() } fn set_model(&mut self, model: Model) { @@ -314,8 +320,8 @@ impl RoleLike for Role { self.enabled_tools = value; } - fn set_use_mcp_servers(&mut self, value: Option) { - self.use_mcp_servers = value; + fn set_enabled_mcp_servers(&mut self, value: Option) { + self.enabled_mcp_servers = value; } } diff --git a/src/config/session.rs b/src/config/session.rs index 743f132..dd88542 100644 --- a/src/config/session.rs +++ b/src/config/session.rs @@ -27,7 +27,7 @@ pub struct Session { #[serde(skip_serializing_if = "Option::is_none")] enabled_tools: Option, #[serde(skip_serializing_if = "Option::is_none")] - use_mcp_servers: Option, + enabled_mcp_servers: Option, #[serde(skip_serializing_if = "Option::is_none")] save_session: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -159,8 +159,8 @@ impl Session { if let Some(enabled_tools) = self.enabled_tools() { data["enabled_tools"] = enabled_tools.into(); } - if let Some(use_mcp_servers) = self.use_mcp_servers() { - data["use_mcp_servers"] = use_mcp_servers.into(); + if let Some(enabled_mcp_servers) = self.enabled_mcp_servers() { + data["enabled_mcp_servers"] = enabled_mcp_servers.into(); } if let Some(save_session) = self.save_session() { data["save_session"] = save_session.into(); @@ -208,8 +208,8 @@ impl Session { items.push(("enabled_tools", enabled_tools)); } - if let Some(use_mcp_servers) = self.use_mcp_servers() { - items.push(("use_mcp_servers", use_mcp_servers)); + if let Some(enabled_mcp_servers) = self.enabled_mcp_servers() { + items.push(("enabled_mcp_servers", enabled_mcp_servers)); } if let Some(save_session) = self.save_session() { @@ -281,7 +281,7 @@ impl Session { self.temperature = role.temperature(); self.top_p = role.top_p(); self.enabled_tools = role.enabled_tools(); - self.use_mcp_servers = role.use_mcp_servers(); + self.enabled_mcp_servers = role.enabled_mcp_servers(); self.model = role.model().clone(); self.role_name = convert_option_string(role.name()); self.role_prompt = role.prompt().to_string(); @@ -591,8 +591,8 @@ impl RoleLike for Session { self.enabled_tools.clone() } - fn use_mcp_servers(&self) -> Option { - self.use_mcp_servers.clone() + fn enabled_mcp_servers(&self) -> Option { + self.enabled_mcp_servers.clone() } fn set_model(&mut self, model: Model) { @@ -625,9 +625,9 @@ impl RoleLike for Session { } } - fn set_use_mcp_servers(&mut self, value: Option) { - if self.use_mcp_servers != value { - self.use_mcp_servers = value; + fn set_enabled_mcp_servers(&mut self, value: Option) { + if self.enabled_mcp_servers != value { + self.enabled_mcp_servers = value; self.dirty = true; } } diff --git a/src/mcp/mod.rs b/src/mcp/mod.rs index 30b8521..524df89 100644 --- a/src/mcp/mod.rs +++ b/src/mcp/mod.rs @@ -57,7 +57,7 @@ impl McpRegistry { pub async fn init( log_path: Option, start_mcp_servers: bool, - use_mcp_servers: Option, + enabled_mcp_servers: Option, abort_signal: AbortSignal, config: &Config, ) -> Result { @@ -109,7 +109,7 @@ impl McpRegistry { if start_mcp_servers && config.mcp_servers { abortable_run_with_spinner( - registry.start_select_mcp_servers(use_mcp_servers), + registry.start_select_mcp_servers(enabled_mcp_servers), "Loading MCP servers", abort_signal, ) @@ -121,7 +121,7 @@ impl McpRegistry { pub async fn reinit( registry: McpRegistry, - use_mcp_servers: Option, + enabled_mcp_servers: Option, abort_signal: AbortSignal, ) -> Result { debug!("Reinitializing MCP registry"); @@ -134,7 +134,7 @@ impl McpRegistry { .await?; abortable_run_with_spinner( - new_registry.start_select_mcp_servers(use_mcp_servers), + new_registry.start_select_mcp_servers(enabled_mcp_servers), "Loading MCP servers", abort_signal, ) @@ -143,13 +143,16 @@ impl McpRegistry { Ok(new_registry) } - async fn start_select_mcp_servers(&mut self, use_mcp_servers: Option) -> Result<()> { + async fn start_select_mcp_servers( + &mut self, + enabled_mcp_servers: Option, + ) -> Result<()> { if self.config.is_none() { debug!("MCP config is not present; assuming MCP servers are disabled globally. Skipping MCP initialization"); return Ok(()); } - if let Some(servers) = use_mcp_servers { + if let Some(servers) = enabled_mcp_servers { debug!("Starting selected MCP servers: {:?}", servers); let config = self .config diff --git a/src/repl/mod.rs b/src/repl/mod.rs index a89f5f0..c60975c 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -700,13 +700,13 @@ pub async fn run_repl_command( .mcp_registry .take() .expect("MCP registry should exist"); - let use_mcp_servers = if config.read().mcp_servers { - config.read().use_mcp_servers.clone() + let enabled_mcp_servers = if config.read().mcp_servers { + config.read().enabled_mcp_servers.clone() } else { None }; let registry = - McpRegistry::reinit(registry, use_mcp_servers, abort_signal.clone()) + McpRegistry::reinit(registry, enabled_mcp_servers, abort_signal.clone()) .await?; if !registry.is_empty() { config @@ -726,14 +726,17 @@ pub async fn run_repl_command( .mcp_registry .take() .expect("MCP registry should exist"); - let use_mcp_servers = if config.read().mcp_servers { - config.read().use_mcp_servers.clone() + let enabled_mcp_servers = if config.read().mcp_servers { + config.read().enabled_mcp_servers.clone() } else { None }; - let registry = - McpRegistry::reinit(registry, use_mcp_servers, abort_signal.clone()) - .await?; + let registry = McpRegistry::reinit( + registry, + enabled_mcp_servers, + abort_signal.clone(), + ) + .await?; if !registry.is_empty() { config .write() @@ -757,13 +760,13 @@ pub async fn run_repl_command( .mcp_registry .take() .expect("MCP registry should exist"); - let use_mcp_servers = if config.read().mcp_servers { - config.read().use_mcp_servers.clone() + let enabled_mcp_servers = if config.read().mcp_servers { + config.read().enabled_mcp_servers.clone() } else { None }; let registry = - McpRegistry::reinit(registry, use_mcp_servers, abort_signal.clone()) + McpRegistry::reinit(registry, enabled_mcp_servers, abort_signal.clone()) .await?; if !registry.is_empty() { config