diff --git a/codex-rs/core/src/tools/spec.rs b/codex-rs/core/src/tools/spec.rs index bfad3cdb3531..188be42ba179 100644 --- a/codex-rs/core/src/tools/spec.rs +++ b/codex-rs/core/src/tools/spec.rs @@ -263,6 +263,15 @@ pub(crate) fn build_specs_with_discoverable_tools( } } } + if let Some(deferred_mcp_tools) = deferred_mcp_tools.as_ref() { + for (name, _) in deferred_mcp_tools.iter().filter(|(name, _)| { + !mcp_tools + .as_ref() + .is_some_and(|tools| tools.contains_key(*name)) + }) { + builder.register_handler(name.clone(), mcp_handler.clone()); + } + } builder } diff --git a/codex-rs/core/src/tools/spec_tests.rs b/codex-rs/core/src/tools/spec_tests.rs index da76a1bb28f2..b0195e4563d5 100644 --- a/codex-rs/core/src/tools/spec_tests.rs +++ b/codex-rs/core/src/tools/spec_tests.rs @@ -909,6 +909,8 @@ fn search_tool_registers_namespaced_mcp_tool_aliases() { assert!(registry.has_handler(&ToolName::plain(TOOL_SEARCH_TOOL_NAME))); assert!(registry.has_handler(&app_alias)); assert!(registry.has_handler(&mcp_alias)); + assert!(registry.has_handler(&ToolName::plain("mcp__codex_apps__calendar_create_event"))); + assert!(registry.has_handler(&ToolName::plain("mcp__rmcp__echo"))); } #[test]