Constant ask for MCP Tool approvals
Open 💬 8 comments Opened Apr 6, 2026 by codengine
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
What version of Codex CLI is running?
0.118.0
What subscription do you have?
Pro
Which model were you using?
gpt-5.4
What platform is your computer?
_No response_
What terminal emulator and version are you using (if applicable)?
_No response_
What issue are you seeing?
It is really annoying that I have to approve tool calls continuously even though they already have been approved (Allow always):
Tool call needs your approval. Reason: Tool call in payload; needs confirmation/context.
How can I turn this off? I don't want to nanny Codex for every second tool call?
Moreover, sometimes tool calls are also unnecessarily blocked by some safeguard, which confuses Codex.
The issue started appearing since 0.117.0. Downgrading to 0.116.0 works as usual although I can not mark tools as "Allow always" there.
What steps can reproduce the bug?
It happens irregularly, to me I hooked up ida-pro-mcp
What is the expected behavior?
No more prompts for approvals for already approved tools.
Additional information
_No response_
8 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I have the same issue. This way MCP is unusable with codex
Hello? When is this gonna be fixed?
This is still an issue in v0.124.0
@efrazer-oai Any update? Why did you close the PR for this?
Confirming this is a platform-independent, upstream-side issue. Reports of the same symptom in this thread (and the linked dups below) cover macOS, Windows, and Linux — including via the official Desktop app and via Codex CLI directly. The shared component is the Rust
codex-mcpelicitation manager, not anything platform-specific.(For context on the Linux end of this: I'm running an unofficial repack of the macOS Codex Desktop
app.asar+ the upstreamcodex-rsCLI on Debian/Ubuntu — the wire-level pieces that handle elicitation are byte-identical to upstream, which is what made the absent persistence layer easy to spot from the source.)Following the breadcrumbs through
codex-rsto understand why "Always allow" doesn't persist:In
codex-rs/codex-mcp/src/elicitation.rs, theElicitationRequestManageronly:requested_schema.propertiesis empty (confirm-only dialogs), ortx_eventand resolves once.There is no persistence layer for accepted-with-
_meta.persist=alwaysresponses. Each session starts with an empty allow list, and the user's "Always allow" choice from a previous session is lost.This makes the "Always allow" UI checkbox a no-op for any elicitation with a non-empty schema (= effectively all MCP tool-call confirmations).
The Desktop GUI does persist a narrow subset — browser navigation origins are written to
~/.codex/browser/config.toml[origins].allowed. Everything else (generic MCP tools,js_repl, file edits, custom MCP servers, etc.) is per-session only.A proper fix needs a persistence layer in
ElicitationRequestManager, keyed on(server_name, codex_approval_kind, connector_id, scope)wherescopeisorigin / tool_name / sensitive_data(matches the dimensions the Desktop UI's "Always allow" checkbox already binds to in_meta).On the closed PR mentioned upthread
Looking through related PRs:
+3 / 0inmcp_tool_call.rsplus+71of regression tests. From the body, it targeted an in-session ARCask-userregression — i.e. it would have helped within a single session but does not add cross-session persistence.mcp_app_message_approval_mode), not the general elicitation manager.Neither touches
ElicitationRequestManager, so the cross-session persistence gap that this issue describes is still entirely unaddressed.@efrazer-oai if you have a moment, would you mind sharing why #17822 was closed without comment? Knowing whether the approach was superseded, the scope was felt to be wrong, or it was just deprioritized would help downstream maintainers (and users hitting the duplicates listed below) decide whether to land their own workarounds.
Related (likely all root-caused here): #18133, #18706 (closed-as-dup), #16233, #16171, #15770, #15437, #16536, #17668.
@codengine I am working on this approval-fatigue problem from the policy side.
The model I am testing in Agent_Sudo is scoped delegation instead of repeated prompts or a permanent blanket allow. Example: allow this MCP tool for this actor, under this resource/path/argument scope, for N minutes or N uses; everything else still requires approval or is denied, and each decision is logged.
Would that kind of bounded delegation cover the “constant ask for MCP tool approvals” pain, or would you prefer a simpler static auto-approve list?
The overlap I see in this report is that “Allow always” needs a precise scope. If the remembered approval is too narrow, users get repeated prompts; if it is too broad, it can become a real security problem. The hard part is defining what the approval is bound to: MCP server, tool name, arguments, workspace, session, or some combination.
Limitation: this comment is not about the right Codex UX or whether a particular safeguard is firing correctly. I am only asking about the underlying approval-binding invariant.
Would you want that capability as something Codex depends on, a library, a spec/conformance test-kit, or something implemented directly inside Codex?