There is a distinction in MCP governance that is easy to miss in most announcements: controlling which tools an agent can call is access control. Evaluating the actual arguments on each call — at runtime, before the call executes — is enforcement. The difference matters in practice.
A policy that allows an agent to call stripe.charge is correct for a support agent with a billing mandate. The same policy allows stripe.charge with amount: 50000. The argument value is where the risk is. Prompt injection, a compromised tool response, or a runaway retry loop can all reach valid tools with malicious arguments.
Argument-level policies sound obvious in retrospect: allow refunds under $100, deny above $1,000, require approval in between, deny any SQL tool call matching DROP or TRUNCATE, block force-push when branch is main. These rules do not live at the access control layer. They require an enforcement layer that inspects arguments before execution, every call, not just at session setup.
The market is starting to frame this distinction explicitly. PolicyLayer has built on it since launch.