Enforcement
What is MCP authorization?
MCP authorization is the decision about whether a specific Model Context Protocol tool call is permitted — this operation, with these parameters, by this agent, acting for this person. It is distinct from MCP authentication, which the protocol's own OAuth-based specification covers and which settles only which agent may connect to which server. Authentication establishes the connection; authorization rules on each call made across it.
What the protocol settles, and what it leaves open
The Model Context Protocol standardises how an agent discovers and calls tools on a server. Its authorization specification is built on OAuth 2.1 and addresses identity at the connection boundary: the client obtains a token, the server validates it, and the connection is established with a scope attached. That is a real and necessary piece of infrastructure, and it is genuinely better than the credential-sharing it replaced.
What it does not do — and does not attempt to do — is rule on individual calls against enterprise policy. Once a connection is established, the operations that server exposes are reachable. The protocol has no concept of Segregation of Duties, no notion of which human the agent is acting for, and no view of what this agent has already done in the workflow, because none of those are properties of a protocol connection.
| MCP authentication | MCP authorization | |
|---|---|---|
| Question | May this agent connect to this server? | May this agent perform this operation right now? |
| Granularity | Per connection, per server. | Per call, per operation, with parameters. |
| Lifetime | The life of the token. | A single call. |
| Aware of | Client identity and OAuth scope. | Agent, delegating human, workflow history, policy, thresholds. |
| Covered by the spec | Yes. | No — this is enterprise policy, above the protocol. |
Why connection-level trust is not enough
The gap has a concrete shape. An accounts payable agent is properly authenticated to your ERP's MCP server, holding a valid token with a legitimate scope. Everything about the connection is correct. It then calls the operation that approves an invoice — one it raised itself forty minutes earlier.
Nothing in the authentication layer objects, because nothing in the authentication layer is wrong. The agent is who it claims to be, connected to a server it is entitled to reach, calling an operation that server exposes. The violation is a Segregation of Duties breach, and SoD is a statement about the relationship between two actions and one actor, which no connection-scoped token can express.
The same shape recurs across every category of enterprise risk: value thresholds, blast radius, regulated data classes, and whether a named human authorised this particular thing. All of them are properties of the call, not the connection.
Access is granted per server; risk lives per operation
There is a second problem with treating the connection as the security boundary, and it is one of granularity.
An enterprise MCP server commonly exposes dozens of operations, and connecting an agent grants reach to all of them. The grant intended to let an agent read invoices also gives it vendor edits, payment releases, and whatever else lives behind the same server. Nobody decided that; it fell out of the unit at which access is expressed.
Closing it means enumerating operations and deciding per operation, which is only practical if the enumeration is automatic. LangGuard's SCOPE-MCP classifies the operations a server exposes before an agent is permitted to reach it, labelling each against Segregation of Duties rules and regulatory regimes, so the resulting scope is a specific list of permitted operations rather than a list of permitted servers.
How LangGuard authorizes an MCP call
Every tool call is treated as an authorization decision, evaluated after the agent reasons and before the call reaches the server.
Arbiter evaluates the specific call — this tool, this operation, these parameters, this agent, acting for this person — against the scope established at design time, and returns ALLOW, BLOCK, or ESCALATE. Calls inside scope with no threshold applying clear without perceptible latency. Calls outside scope do not execute. Calls inside scope but above a threshold are held and routed to the named approver for that scope. The decision, its policy, and its approver are recorded as evidence at the moment it is made.
Because enforcement attaches at the points where agents reach tools — the MCP catalogue, the gateway, and the agent harness — it applies to agents you did not build, including packaged and vendor-supplied ones, without requiring changes to them.
Governing the movement of enterprise context through MCP, rather than the tool calls themselves, is a related but separate problem: which data may travel down which path, and for what purpose. That is covered by MCP Context Authorization.
Common questions
Does the MCP specification include authorization?
It includes an authorization specification in the OAuth sense — how a client obtains and presents a token, and how a server validates it — which in enterprise terms is authentication plus a coarse connection scope. That is the correct place for the protocol to stop. Whether a particular call is acceptable depends on Segregation of Duties rules, value thresholds, data classifications, and which human delegated the work, none of which a general-purpose protocol could reasonably encode, and all of which differ per organisation. The protocol establishes who is connected; enterprise policy decides what may be done across that connection.
Is an MCP gateway the same as MCP authorization?
No. A gateway sits in the connection path and handles routing, credential brokering, rate limiting, and often a catalogue of approved servers, which is valuable infrastructure and solves the credential-sprawl problem. What it typically does not do is rule on the semantics of an individual call against business policy, because that requires knowing the agent's authorized scope, the delegating human, and the workflow history. Gateways and authorization layers compose: the gateway is where enforcement can conveniently attach, and the authorization decision is what gets attached there.
How do you authorize a call when the agent is acting for a person?
By carrying both identities through to the decision, which is what makes delegated authority expressible. The agent has an identity of its own, and the action is also being taken on behalf of a human or a workflow with its own authority. A policy can then say that an agent may perform an operation only within the authority of the person who delegated it, and that exceeding it escalates to a named approver rather than proceeding. Without both identities you can only ask whether the agent may act, and you lose the ability to ask whether it may act this far on this person's behalf.
What about agents connecting to MCP servers you do not control?
Reaching an external server is itself an action, and it is governed as one. Whether an agent may connect to a given server at all is a scoping decision made at design time — which is what a compliance-classified catalogue is for, as opposed to an enablement registry that lists whatever is available. Beyond that, calls to an external server carry the additional question of what enterprise context is travelling with them, which is a trusted-path problem rather than an operation-permission problem. Shadow MCP servers attached without review are found by discovery rather than by policy, because you cannot write a rule about a connection you do not know exists.
Does authorization run per call, and what does that cost?
Per call, and the cost is negligible for calls that clear. The evaluation compares the operation against a scope computed at design time, so it is a lookup rather than an analysis performed from scratch, and it sits next to a model inference that is orders of magnitude more expensive. Running per call is not an optimisation target to be traded away, either: the whole point is that authorization is a property of the call rather than the session, so caching a decision across calls would reintroduce exactly the connection-level trust the layer exists to replace.
See which MCP operations your agents can call today.
LangGuard maps your complete agent action surface in minutes. Free for the first five managed agents, with every Scope included from day one.