diff --git a/codex-rs/core/src/connectors.rs b/codex-rs/core/src/connectors.rs index af1b5c5ab..c879e9875 100644 --- a/codex-rs/core/src/connectors.rs +++ b/codex-rs/core/src/connectors.rs @@ -469,7 +469,7 @@ pub fn connector_display_label(connector: &AppInfo) -> String { } pub fn connector_mention_slug(connector: &AppInfo) -> String { - sanitize_name(&connector_display_label(connector)) + sanitize_slug(&connector_display_label(connector)) } pub(crate) fn accessible_connectors_from_mcp_tools( @@ -918,11 +918,15 @@ fn normalize_connector_value(value: Option<&str>) -> Option { } pub fn connector_install_url(name: &str, connector_id: &str) -> String { - let slug = sanitize_name(name); + let slug = sanitize_slug(name); format!("https://chatgpt.com/apps/{slug}/{connector_id}") } pub fn sanitize_name(name: &str) -> String { + sanitize_slug(name).replace("-", "_") +} + +fn sanitize_slug(name: &str) -> String { let mut normalized = String::with_capacity(name.len()); for character in name.chars() { if character.is_ascii_alphanumeric() { diff --git a/codex-rs/core/src/mcp_connection_manager.rs b/codex-rs/core/src/mcp_connection_manager.rs index 74422d074..f0165d4e4 100644 --- a/codex-rs/core/src/mcp_connection_manager.rs +++ b/codex-rs/core/src/mcp_connection_manager.rs @@ -1231,12 +1231,11 @@ fn normalize_codex_apps_tool_name( return tool_name.to_string(); } - let tool_name = sanitize_name(tool_name).replace('-', "_"); + let tool_name = sanitize_name(tool_name); if let Some(connector_name) = connector_name .map(str::trim) .map(sanitize_name) - .map(|name| name.replace('-', "_")) .filter(|name| !name.is_empty()) && let Some(stripped) = tool_name.strip_prefix(&connector_name) && !stripped.is_empty() @@ -1247,7 +1246,6 @@ fn normalize_codex_apps_tool_name( if let Some(connector_id) = connector_id .map(str::trim) .map(sanitize_name) - .map(|name| name.replace('-', "_")) .filter(|name| !name.is_empty()) && let Some(stripped) = tool_name.strip_prefix(&connector_id) && !stripped.is_empty()