What MCP does and does not enforce
The Model Context Protocol defines a client-server architecture that lets AI applications connect to external tools and data sources through standardized JSON-RPC messages. MCP's specification includes an authorization framework based on OAuth 2.1 for HTTP-based transports, which allows an MCP server to authenticate and authorize the client making a request. This is useful, but limited in scope. The authorization spec explicitly applies to client-to-server communication and does not define how an MCP server should authorize access to the underlying tools or data sources it proxies. In practice, this means a client can be properly authenticated to an MCP server while the server itself has no standardized mechanism for deciding whether a specific tool call, with specific parameters, should be permitted for that specific agent. That decision is left entirely to the implementer.
Why default MCP deployments create permission gaps
MCP separates resources, tools, and prompts as distinct primitives, which means permission logic needs to differentiate rules per primitive rather than applying one blanket policy at the session level. A single MCP-level token also does not guarantee least-privilege access to every downstream system a server proxies, unless scope is enforced explicitly at each hop. This creates a confused deputy risk: an MCP server frequently holds broader credentials than any individual requesting agent, so without a policy layer mapping agent identity to scoped downstream permissions, the server can be induced to act with more authority than the agent should have. MCP security guidance also identifies tool description manipulation, known as tool poisoning, as a risk, since many client implementations trust tool metadata by default. None of these gaps are hypothetical edge cases. They follow directly from what the protocol is designed to do, which is transport and optional client-server auth, not fine-grained authorization of agent actions.
Local versus remote deployment changes the trust boundary
MCP servers can run as local stdio processes or as remote HTTP or SSE services, and this changes where enforcement has to live. A local stdio server typically inherits the permissions of its host process, so protocol-level authorization is not sufficient on its own; OS-level or container-level controls become part of the enforcement design. A remote server introduces a network trust boundary where OAuth-based client authorization is more directly applicable, but the same gap remains between authenticating the client and authorizing the specific tool action. Platform teams implementing enforcement need to account for both modes rather than assuming a single control point works across the deployment surface.
Sequencing an enforcement rollout
Because MCP does not mandate any of the above, enterprises typically need to implement enforcement incrementally rather than as a single deployment.
Why purpose-built enforcement over ad hoc scripting
Some teams attempt to close these gaps with per-integration scripts that check permissions inline, one MCP server at a time. This tends to fragment quickly: identity mapping diverges across servers, audit formats are inconsistent since MCP does not standardize one, and policy changes require touching every integration point separately. NIST's guidance on access control treats least-privilege enforcement and continuous monitoring as baseline controls that apply to autonomous software agents, not only human users, and OWASP identifies excessive agency and insufficient access control as recognized risk categories for agentic applications. Treating runtime enforcement as shared infrastructure, rather than a property of each individual integration, is what makes it possible to apply those controls consistently as the number of agents and MCP servers grows. This is the specific problem purpose-built runtime governance layers are designed to address: centralized identity, a single policy decision point, and consistent audit logging across all MCP connections, rather than duplicated logic per integration.