The permissions.json documentation states that Cursor reads permission configuration from:
~/.cursor/permissions.json
<workspace>/.cursor/permissions.json
For mcpAllowlist, the documented behavior is that file-defined entries replace the in-app allowlist, make the Settings list read-only, hide Add to allowlist, merge user- and repository-level entries, and are re-read automatically.
We cannot reproduce this behavior.
We tested permissions.json at both user and repository level. In both cases, the configured mcpAllowlist appears to be ignored:
-
Entries are not reflected in Cursor Settings.
-
MCP/Browser approval behavior does not change.
-
Existing entries created through Always allow remain active.
-
The approval dialog can still offer Add to allowlist.
-
The read-only Settings list does not appear to match either
permissions.json.
There is also a persistence issue: after deleting permissions.json, the MCP allowlist in Settings remains read-only. Previously persisted entries therefore cannot be removed through the UI.
Browser Protection interaction
With Browser Protection enabled, Browser tool calls initially require approval as expected.
However, selecting Always allow / Add to allowlist permanently allows that tool, and subsequent calls can run without approval.
Because those entries can currently become impossible to remove, it is unclear what the intended precedence is between:
-
Browser Protection
-
mcpAllowlist -
permissions.json -
local IDE permission state
In particular: is an MCP allowlist entry intentionally supposed to bypass Browser Protection, or should Browser Protection remain the higher-level approval gate?
Desired configuration
We want a small, explicit allowlist:
-
defined terminal commands and MCP/Browser tools may run automatically;
-
everything else requires approval;
-
the policy is managed declaratively through
permissions.json, ideally also at repository level.
This would make the policy reviewable, version-controlled, reproducible across developers, and independent of local Always allow state.
At the moment, we cannot determine how to configure this reliably.
There is no team-admin MCP, Browser, Auto-run, or permission policy configured that should override the local configuration. We are on a Teams plan.
Could someone clarify the currently supported way to achieve:
Allow a defined set of terminal commands and Browser/MCP tools automatically, require approval for everything else, and manage that policy through permissions.json?
It would also be helpful to know whether the current behavior is expected and we missed something, a regression, or whether the documentation no longer reflects the desktop IDE implementation.