refactor: Refactored the use_mcp_servers field to enabled_mcp_servers to make the purpose of the field more clear

This commit is contained in:
2025-11-04 12:51:41 -07:00
parent 7f71317acd
commit 600f5d1484
11 changed files with 93 additions and 80 deletions
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -1,3 +1,3 @@
---
use_mcp_servers: all
enabled_mcp_servers: all
---
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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:<name>, session:<name>, <session>:<role>)
+6 -6
View File
@@ -1,10 +1,10 @@
---
# Everything in this section is optional
name: <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
use_mcp_servers: github,gitmcp # A comma-separated list of MCP servers to enable for this role
name: <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.
+2 -2
View File
@@ -422,7 +422,7 @@ impl RoleLike for Agent {
self.config.global_tools.clone().join(",").into()
}
fn use_mcp_servers(&self) -> Option<String> {
fn enabled_mcp_servers(&self) -> Option<String> {
self.config.mcp_servers.clone().join(",").into()
}
@@ -455,7 +455,7 @@ impl RoleLike for Agent {
}
}
fn set_use_mcp_servers(&mut self, value: Option<String>) {
fn set_enabled_mcp_servers(&mut self, value: Option<String>) {
match value {
Some(servers) => {
let servers = servers
+25 -24
View File
@@ -135,7 +135,7 @@ pub struct Config {
pub mcp_servers: bool,
pub mapping_mcp_servers: IndexMap<String, String>,
pub use_mcp_servers: Option<String>,
pub enabled_mcp_servers: Option<String>,
pub repl_prelude: Option<String>,
pub cmd_prelude: Option<String>,
@@ -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<String> = 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<String>) {
pub fn set_enabled_mcp_servers(&mut self, value: Option<String>) {
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<FunctionDeclaration> {
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<String> = Default::default();
let mcp_declaration_names: HashSet<String> = 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;
+22 -16
View File
@@ -29,12 +29,12 @@ pub trait RoleLike {
fn temperature(&self) -> Option<f64>;
fn top_p(&self) -> Option<f64>;
fn enabled_tools(&self) -> Option<String>;
fn use_mcp_servers(&self) -> Option<String>;
fn enabled_mcp_servers(&self) -> Option<String>;
fn set_model(&mut self, model: Model);
fn set_temperature(&mut self, value: Option<f64>);
fn set_top_p(&mut self, value: Option<f64>);
fn set_enabled_tools(&mut self, value: Option<String>);
fn set_use_mcp_servers(&mut self, value: Option<String>);
fn set_enabled_mcp_servers(&mut self, value: Option<String>);
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
@@ -54,7 +54,7 @@ pub struct Role {
#[serde(skip_serializing_if = "Option::is_none")]
enabled_tools: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
use_mcp_servers: Option<String>,
enabled_mcp_servers: Option<String>,
#[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<f64>,
top_p: Option<f64>,
enabled_tools: Option<String>,
use_mcp_servers: Option<String>,
enabled_mcp_servers: Option<String>,
) {
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<String> {
self.use_mcp_servers.clone()
fn enabled_mcp_servers(&self) -> Option<String> {
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<String>) {
self.use_mcp_servers = value;
fn set_enabled_mcp_servers(&mut self, value: Option<String>) {
self.enabled_mcp_servers = value;
}
}
+11 -11
View File
@@ -27,7 +27,7 @@ pub struct Session {
#[serde(skip_serializing_if = "Option::is_none")]
enabled_tools: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
use_mcp_servers: Option<String>,
enabled_mcp_servers: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
save_session: Option<bool>,
#[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<String> {
self.use_mcp_servers.clone()
fn enabled_mcp_servers(&self) -> Option<String> {
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<String>) {
if self.use_mcp_servers != value {
self.use_mcp_servers = value;
fn set_enabled_mcp_servers(&mut self, value: Option<String>) {
if self.enabled_mcp_servers != value {
self.enabled_mcp_servers = value;
self.dirty = true;
}
}
+9 -6
View File
@@ -57,7 +57,7 @@ impl McpRegistry {
pub async fn init(
log_path: Option<PathBuf>,
start_mcp_servers: bool,
use_mcp_servers: Option<String>,
enabled_mcp_servers: Option<String>,
abort_signal: AbortSignal,
config: &Config,
) -> Result<Self> {
@@ -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<String>,
enabled_mcp_servers: Option<String>,
abort_signal: AbortSignal,
) -> Result<Self> {
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<String>) -> Result<()> {
async fn start_select_mcp_servers(
&mut self,
enabled_mcp_servers: Option<String>,
) -> 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
+14 -11
View File
@@ -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