Skip to content

Commit bc3f863

Browse files
zmanianclaude
andcommitted
fix(mcp): normalize names in CLI lookup commands, guard empty names
Address follow-up review feedback: - Add normalize_server_name() to remove_server, auth_server, test_server, and toggle_server CLI commands so lookups match the normalized name stored by add_server - Add empty-name guard in web API extensions install handler to reject names like "@#$" that normalize to "" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent deb16af commit bc3f863

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

src/channels/web/handlers/extensions.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ pub async fn extensions_install_handler(
140140
});
141141

142142
let normalized_name = crate::tools::mcp::config::normalize_server_name(&req.name);
143+
if normalized_name.is_empty() {
144+
return Ok(Json(ActionResponse::fail(
145+
"Server name contains no valid characters".to_string(),
146+
)));
147+
}
143148
match ext_mgr
144149
.install(
145150
&normalized_name,

src/cli/mcp.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ async fn add_server(args: McpAddArgs) -> anyhow::Result<()> {
300300

301301
/// Remove an MCP server.
302302
async fn remove_server(name: String) -> anyhow::Result<()> {
303+
let name = normalize_server_name(&name);
303304
let (db, owner_id) = connect_db().await;
304305
let mut servers = load_servers(db.as_deref(), &owner_id).await?;
305306
if !servers.remove(&name) {
@@ -421,6 +422,7 @@ async fn list_servers(verbose: bool) -> anyhow::Result<()> {
421422

422423
/// Authenticate with an MCP server.
423424
async fn auth_server(name: String, user_id: String) -> anyhow::Result<()> {
425+
let name = normalize_server_name(&name);
424426
// Get server config
425427
let (db, owner_id) = connect_db().await;
426428
let servers = load_servers(db.as_deref(), &owner_id).await?;
@@ -505,6 +507,7 @@ async fn auth_server(name: String, user_id: String) -> anyhow::Result<()> {
505507

506508
/// Test connection to an MCP server.
507509
async fn test_server(name: String, user_id: String) -> anyhow::Result<()> {
510+
let name = normalize_server_name(&name);
508511
// Get server config
509512
let (db, owner_id) = connect_db().await;
510513
let servers = load_servers(db.as_deref(), &owner_id).await?;
@@ -630,6 +633,7 @@ async fn test_server(name: String, user_id: String) -> anyhow::Result<()> {
630633

631634
/// Toggle server enabled/disabled state.
632635
async fn toggle_server(name: String, enable: bool, disable: bool) -> anyhow::Result<()> {
636+
let name = normalize_server_name(&name);
633637
let (db, owner_id) = connect_db().await;
634638
let mut servers = load_servers(db.as_deref(), &owner_id).await?;
635639

0 commit comments

Comments
 (0)