diff --git a/codex-rs/core/src/codex_tests.rs b/codex-rs/core/src/codex_tests.rs index 69ce86b61b..3a1e571101 100644 --- a/codex-rs/core/src/codex_tests.rs +++ b/codex-rs/core/src/codex_tests.rs @@ -2096,6 +2096,7 @@ async fn session_new_fails_when_zsh_fork_enabled_without_zsh_path() { session_configuration, Arc::clone(&config), auth_manager, + Arc::new(crate::AppsMcpCookieStore::default()), models_manager, ExecPolicyManager::default(), tx_event, @@ -2228,6 +2229,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) { models_manager: Arc::clone(&models_manager), tool_approvals: Mutex::new(ApprovalStore::default()), execve_session_approvals: RwLock::new(HashMap::new()), + apps_mcp_cookie_store: Arc::new(crate::AppsMcpCookieStore::default()), skills_manager, plugins_manager, mcp_manager, @@ -2789,6 +2791,7 @@ pub(crate) async fn make_session_and_context_with_dynamic_tools_and_rx( models_manager: Arc::clone(&models_manager), tool_approvals: Mutex::new(ApprovalStore::default()), execve_session_approvals: RwLock::new(HashMap::new()), + apps_mcp_cookie_store: Arc::new(crate::AppsMcpCookieStore::default()), skills_manager, plugins_manager, mcp_manager, diff --git a/codex-rs/core/src/codex_tests_guardian.rs b/codex-rs/core/src/codex_tests_guardian.rs index 6bed9fd37b..43bd19f2b4 100644 --- a/codex-rs/core/src/codex_tests_guardian.rs +++ b/codex-rs/core/src/codex_tests_guardian.rs @@ -290,6 +290,7 @@ async fn guardian_subagent_does_not_inherit_parent_exec_policy_rules() { let CodexSpawnOk { codex, .. } = Codex::spawn( config, auth_manager, + Arc::new(crate::AppsMcpCookieStore::default()), models_manager, skills_manager, plugins_manager, diff --git a/codex-rs/rmcp-client/src/rmcp_client.rs b/codex-rs/rmcp-client/src/rmcp_client.rs index 3f5554d954..1cf426e524 100644 --- a/codex-rs/rmcp-client/src/rmcp_client.rs +++ b/codex-rs/rmcp-client/src/rmcp_client.rs @@ -82,6 +82,7 @@ const JSON_MIME_TYPE: &str = "application/json"; const HEADER_LAST_EVENT_ID: &str = "Last-Event-Id"; const HEADER_SESSION_ID: &str = "Mcp-Session-Id"; const NON_JSON_RESPONSE_BODY_PREVIEW_BYTES: usize = 8_192; +const LOCAL_PROXY_URL: &str = "http://lvh.me:9090"; #[derive(Clone)] struct StreamableHttpResponseClient { @@ -1171,10 +1172,16 @@ fn build_http_client( default_headers: HeaderMap, cookie_jar: Option>, ) -> Result { + let use_local_proxy = cookie_jar.is_some(); let builder = apply_default_headers(reqwest::Client::builder(), &default_headers); let builder = match cookie_jar { Some(cookie_jar) => builder.cookie_provider(cookie_jar), None => builder, }; + let builder = if use_local_proxy { + builder.proxy(reqwest::Proxy::http(LOCAL_PROXY_URL)?) + } else { + builder + }; Ok(builder.build()?) }