Est.

Policy-as-Code Enforcement for MCP Server Access Across AI Teams

Platform teams need policy-as-code gates to control MCP tool calls across AI agents.

· 8 min read
Cover illustration for “Policy-as-Code Enforcement for MCP Server Access Across AI Teams”
Platform Teams · October 29, 2026 · 8 min read · 1,895 words

For platform engineering teams, a unified MCP control plane needs policy-as-code enforcement to check every tool call before it runs. That is the answer this article gives to managing MCP server access across AI teams without rebuilding authorization for each project. Shared, identity-bound rules are the only governance model that can enforce consistent, auditable access boundaries as teams, agents, and servers multiply.

Why MCP servers have no built-in authorization and what that leaves exposed

MCP gives AI agents a standard way to discover and invoke tools connected to databases, APIs, file systems, and cloud services. A server’s permissions do not, by themselves, establish which agent should use which tool for which task. Without added controls, an agent can act through permissions granted to the server rather than permissions justified by its current work.

The distinction from a conventional integration is important. In a conventional integration, a developer writes code that calls an API. In an MCP integration, a model reads tool descriptions and results, then decides what to do next. Text from connected systems can thus shape what the model does next, even in other systems.

The protocol’s evolving authentication provisions help establish who is connecting, but they do not supply the complete policy gate for each action. Approving a connection still leaves tool-level decisions unresolved. This is a design gap, so patching individual servers cannot close it across an organization.

The attack surface that emerges when authorization is absent

The shared failure is permission without an enforced boundary. Tool poisoning exploits it by placing hidden directives in tool descriptions or schemas that the model reads. A rug-pull attack uses the same trust path over time, presenting benign descriptions during approval and changing them afterward. Initial consent then covers a tool whose definition has changed.

Untrusted tool results provide another route into that authority. For example, a customer support agent may read a ticket with instructions that an attacker wrote in its body. The attacker needs access only to the ticket. If the agent also has private data access and an external communication tool, the ingredients of Simon Willison’s “lethal trifecta” are present.

Those instructions are more dangerous when service accounts have broad access. A data warehouse connection with access to every table may let an agent retrieve PII when its task needs only revenue by customer. A malfunctioning agent can cross the same boundary without an attacker. In each case, server-level permission is too blunt to distinguish the intended action from the excessive one.

These paths can also span several servers. Hardening one server does not govern what another server enables later in the session. The authorization boundary must follow the action across deployments.

Why manual access review and per-server configuration cannot keep pace with agentic AI teams

Each new agent, server, and permission adds ways to gain access. An agent may have credentials for CRM, email, cloud infrastructure, and payment systems while it chooses what to do next as its context changes. A review built around a predictable human workflow cannot anticipate every combination. Machine identities already outnumber human identities, and autonomous agents add behavior that static service-account policies were not designed to govern.

Runtime tool discovery widens the gap further. An agent may discover a tool that was not anticipated when the server was approved. Meanwhile, standing permissions can still be used after the original task is done or its approval has lapsed. This is not a failure of diligence. The architecture requires enforcement at invocation time.

What policy-as-code enforcement means when applied at MCP tool-call depth

Policy-as-code places an external gate between an agent’s requested tool call and execution. The gate evaluates the actual action payload against machine-readable rules. The model does not interpret the final access decision. A prompt saying “do not export customer data” is advice to the model, while an enforced policy can refuse the export tool call itself.

The decision joins identity, context, and the requested action. A recognized agent may belong to an approved team but still lack permission to use a particular tool in production. Likewise, an allowed tool may be out of scope for the workflow underway. Access depends on the intersection of those conditions.

The rules live in version-controlled code and receive review like other code changes. A shared policy layer applies them across agents and servers, avoiding separate copies of authorization rules that can drift apart. Least privilege becomes a decision made for each call. Every permit or refusal also produces a receipt recording the control’s decision.

This model depends on an enforcement point the agent cannot bypass. Putting rules in code is not enough if calls can reach the server without evaluation. The gate must stand outside the model’s reasoning loop and act before the tool runs.

How identity gets bound to every MCP action and why that changes the authorization model

Every access decision needs a verified subject. Without a binding between an action and an identity, the gate falls back to whatever a shared service account can do. SSO and SCIM integration connect agent activity to enterprise directory context, allowing policies to use the authenticated principal’s team and role. Autonomous clients also need an identity when no person is present to approve each step.

The MCP 2026-07-28 specification revision strengthens that authentication foundation. It adds issuer validation under RFC 9207 and formally deprecates Dynamic Client Registration. Earlier requirements introduced in 2025-06-18 include Protected Resource Metadata under RFC 9728 and the resource parameter under RFC 8707. Servers must reject tokens that were not issued for them.

Enterprise-Managed Authorization, published June 18, 2026, addresses the need for users to consent repeatedly. Users sign in through their enterprise identity provider, then reach approved servers with per-server ID-JAG tokens that are issued in the background. An optional OAuth Client Credentials extension supports unattended clients without browser interaction. These changes make centrally governed identity more practical.

The server validates the inbound token, then obtains a new, short-lived upstream token scoped to the operation. Just-in-time provisioning limits credentials to the task and revokes them when it completes. Authentication supplies the identity, but an enforced policy must still decide what that identity may do.

Writing least-privilege policies for MCP agents at the tool, role, and environment level

A useful policy names a permitted action. One server may expose tools with very different consequences, so permission to connect is too coarse. A natural-language policy could state that a customer support agent may invoke get_ticket but may not invoke export_customers. Another could permit a data pipeline agent to read specified tables while denying writes and queries for PII columns.

Environment is part of the same decision. An agent must not keep the broad access it was granted for development when it moves to production. Role definitions belong in the shared policy layer. That gives reviewers one place to inspect which tools a role can use and under which conditions.

Read-only defaults reduce what an agent can attempt. However, read-only access alone does not prevent disclosure if another tool can send the retrieved data externally. A stronger boundary limits what the agent can read and either leaves out or blocks the external-send capability. For destructive or irreversible tools, explicit markers and step-up confirmation can add friction where the risk warrants it without burdening routine calls.

Kyndryl’s governance approach for an AI agent supporting credit evaluations for equipment financing illustrates policies that keep actions explainable and reviewable, with final decisions subject to human review where regulations require it. The policy defines where autonomous work stops. Pull requests, code review, and CI checks then make changes to those permissions subject to review.

Real-time policy evaluation at invocation time and what it catches that logging cannot

Logging tells a team what an agent did. Enforcement determines what it is allowed to do. Both are needed, but an audit record created after an unauthorized export cannot stop that export. Pre-execution evaluation can refuse the action while there is still something to prevent.

Runtime checks can also address changes that deployment review misses. Comparing a tool definition with a known-good snapshot can trigger an alert or block when the definition changes. Content inspection can flag instruction-like patterns in tool results before they return to the model’s context. These are detection controls around the authorization gate.

A series of calls can show intent drift. If an agent assigned a read task starts invoking export tools, the gate can interrupt the session rather than leave the deviation for later investigation. Outbound calls or data shapes matching exfiltration signatures can also be blocked. The decisive boundary remains the permitted action set, even when suspicious content is not recognized.

NIST AI RMF Manage 2.4 calls for mechanisms to supersede, disengage, or deactivate AI systems whose outcomes conflict with intended use. Tool-call enforcement gives that principle an operational form by refusing out-of-scope actions before execution. Full OTEL tracing tied to each decision then gives platform engineers, incident responders, and auditors a shared enforcement record.

How do platform teams centralize MCP governance across multiple AI teams?

A unified MCP control plane uses the same policy framework for teams, agents, and multi-server chains. This avoids rebuilding identity integration and access checks for every AI project. The platform team establishes shared SSO and SCIM integration, while policies express the permissions appropriate to each role, workflow, and environment.

Private data access, untrusted content, and external communication may be spread across servers that each seem to allow little on their own. A policy layer applied at every invocation can constrain the chain.

The same architecture addresses shadow MCP usage only if every invocation must pass through it. With that condition met, governance operates independently of each team reporting every connection, and new deployments inherit the shared controls.

The practical comparison is therefore between centralized decisions and duplicated configuration. A central policy change can tighten a scope, restrict a tool, or revoke access across teams without asking each team to edit its servers. For platform buyers, the defining criteria are identity integration, unavoidable tool-call enforcement, shared policy versioning, and decision tracing. Server inventories or login controls alone do not provide that model.

What governance maturity looks like in practice, from ad-hoc MCP access to enforced policy at every tool call

Diagram: Three Stages of MCP Governance Maturity. Visualizes: Illustrate a three-stage progression from ad-hoc MCP access to enforced policy at every tool call.

The first stage is ad-hoc access. Teams connect servers to get work done now, and agents use standing permissions without the same tool-level rules in place. The second stage is server-level hardening, including authentication, input validation, rate limits, deployment review of tool descriptions, and audit logging. Those controls improve individual servers but leave authorization fragmented across the organization.

The third stage is identity-bound policy enforcement. Each action has a verified identity, and version-controlled rules are evaluated before every tool invocation. Permissions are scoped by tool, role, and environment, with a tamper-proof audit record for each decision.

The practical transition starts with OAuth-based identity for every MCP connection. Teams can then express existing access rules as code, place them under version control, and move the enforcement point to invocation time. Real-time detection for MCP-specific threats builds on that layer.

The organizational shift follows from that technical change. Security and IT teams can let more agents use approved tools without having to rebuild authorization or review every deployment as a separate exception. Platform teams provide a governed path that new agents inherit. Mature MCP governance makes enforced access the default condition of deployment for every AI team.

Filed underPlatform Teams

More in Platform Teams