Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 29 additions & 9 deletions src/cortex-cli/src/mcp_cmd/handlers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,20 @@ pub(crate) async fn run_get(args: GetArgs) -> Result<()> {
Ok(())
}

fn existing_mcp_server_message(name: &str, allow_force: bool) -> String {
if allow_force {
format!(
"MCP server '{name}' already exists. Use --force to overwrite, \
'cortex mcp remove {name}' first, or choose a different name."
)
} else {
format!(
"MCP server '{name}' already exists. Use 'cortex mcp remove {name}' first, \
or choose a different name."
)
}
}

/// Run the add command.
pub(crate) async fn run_add(args: AddArgs) -> Result<()> {
let AddArgs {
Expand All @@ -253,11 +267,7 @@ pub(crate) async fn run_add(args: AddArgs) -> Result<()> {
// Check if server already exists
let server_exists = get_mcp_server(&name)?.is_some();
if server_exists && !force {
bail!(
"MCP server '{}' already exists. Use --force to overwrite, or 'cortex mcp remove {}' first.",
name,
name
);
bail!(existing_mcp_server_message(&name, true));
}

// Check for conflicting transport types
Expand Down Expand Up @@ -723,10 +733,7 @@ pub(crate) async fn run_rename(args: RenameArgs) -> Result<()> {

// Check if new name already exists
if get_mcp_server(&args.new_name)?.is_some() {
bail!(
"MCP server '{}' already exists. Remove it first or choose a different name.",
args.new_name
);
bail!(existing_mcp_server_message(&args.new_name, false));
}

let cortex_home =
Expand Down Expand Up @@ -903,6 +910,19 @@ mod tests {
assert_eq!(args.old_name, args.new_name);
}

#[test]
fn test_existing_server_advice_is_consistent() {
let add_message = existing_mcp_server_message("existing", true);
let rename_message = existing_mcp_server_message("existing", false);

assert!(add_message.contains("Use --force to overwrite"));
assert!(add_message.contains("'cortex mcp remove existing' first"));
assert!(add_message.contains("choose a different name"));
assert!(rename_message.contains("'cortex mcp remove existing' first"));
assert!(rename_message.contains("choose a different name"));
assert!(!rename_message.contains("--force"));
}

// ========================================================================
// AddArgs tests
// ========================================================================
Expand Down