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
+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