As firms expand their AI adoption, they need to govern more than the harnesses on employee devices. They need to govern the MCP servers those harnesses connect to and the actions available through them.

The way I see it, there are two useful approaches to governing those connections: identity-based controls and an application/API gateway. That’s how I group the approaches in this article, using public documentation for the product capabilities.

Identity-based and application/API approaches enforce control in different places#

An identity-based approach starts with who is connecting and the context of that access. It uses identity policy to decide whether a caller can reach a resource. GSA applies that approach across supported network paths, using context such as user, device and risk.[63]

An application/API gateway approach puts a governed endpoint in the request path. The team operating that endpoint applies authentication, authorization and request policies there. APIM is one example.[1][11] Both approaches can use identity and work together; the distinction is where the decision is enforced and which traffic reaches it.

Identity-based control across the network path#

Global Secure Access (GSA) combines network access with identity context. Microsoft describes Entra Internet Access as an identity-based Secure Web Gateway, with Conditional Access integration that can use context such as user, device and risk.[63]

I’d categorize this as the identity-and-security-led approach: govern access across the network path used by covered clients. The MCP firewall can inspect the supported protocol and allow or block servers and tools; it goes beyond a destination-only filter.[2]

That firewall is in preview. The documented device path requires traffic forwarding and TLS inspection, and covers remote HTTP/SSE MCP traffic. Local servers, stdio and JSON-RPC batches are outside that documented inspection coverage.[2]

Cloud execution needs its own path. A laptop client doesn’t inspect calls made inside a vendor’s cloud runtime. Microsoft separately documents Copilot Studio forwarding to GSA; that integration uses the tenant baseline profile and currently doesn’t support Conditional Access-linked security profiles.[6][9]

Application/API control at the service endpoint#

Azure API Management (APIM) gives a team an explicit gateway endpoint through which to expose and manage APIs and remote MCP servers. It can apply authentication, authorization, traffic policies and monitoring to requests that traverse that endpoint.[1]

I’d categorize this as the application/API-platform approach: the firm operates a governed front door for the service. APIM can validate Entra-issued tokens and use separately configured backend credentials, so identity is part of this approach too.[11] The distinction from GSA is the enforcement point, rather than a clean split between identity and networking.

For example, publishing a vendor MCP endpoint through APIM gives us a policy point for that route. It doesn’t make that route mandatory; the runtime configuration and available origin/network restrictions still have to prevent direct access.[5]

APIM’s AI capabilities and the dedicated Azure AI Gateway preview are distinct products/resource types.[8] The Agent 365 integration guide distinguishes server blocking on supported APIM v2 gateways from AI Gateway tool-level capabilities, requires static allowed tools for tool governance, and excludes classic/v1. Self-hosted APIM support does not establish support for that A365 integration.[5]

API Center and Agent 365: catalog and estate governance#

API Center provides API/MCP inventory and discovery. Agent 365 provides supported agent-estate governance and connections to supported gateways; its Tools Gateway integration is in preview.[17][39] These help answer what is registered, who owns it and which supported access decisions can be managed centrally. They don’t automatically place every call behind a gateway.

Entra ID and Agent ID supply the identity foundation. The MCP resource still has to validate the token and authorize the requested operation.[12]

Defender and Purview: threat and data controls#

Defender and Purview add threat detection, supported runtime protection, audit and data-policy capabilities within their documented workload and integration scope.[33][34] They complement access and gateway controls; buying the entitlement doesn’t automatically inspect every third-party connection.

Why LiteLLM appeals to AI platform teams#

The AI platform team has another set of concerns: applications need access to different models, teams need budgets, provider credentials need protection, and someone needs to explain the bill.

LiteLLM brings several of those tasks into one self-hosted gateway. Its documentation describes an OpenAI-compatible interface across model providers, virtual keys with model access and budgets, spend tracking, routing/fallbacks, and MCP access through the same deployment.[61]

My interpretation of its appeal is the combination:

  • Provider flexibility: give applications a common entry point while configuring the approved models behind it.
  • A team-level operating model: issue controlled gateway keys, assign model access and limits, and attribute estimated spend to teams or applications.
  • Shared operations: manage routing, logs and supported guardrails centrally instead of rebuilding those controls in every application.
  • Models and tools together: govern configured model and MCP routes through a common gateway, while keeping their usage measures separate.[61]

SMS describes adopting LiteLLM to centralize provider access, guardrails, usage logging and cost tracking.[62] That account describes one team’s choices, not a measurement of overall market share or adoption growth.

APIM also has model-token controls, and Microsoft has its dedicated AI Gateway preview.[8][15] LiteLLM’s appeal therefore shouldn’t be reduced to a feature that only LiteLLM has. I’d compare the provider integrations, developer workflow, deployment ownership and cost-management model a team actually needs.

Self-hosting also creates work: availability, upgrades, secrets, database operations and telemetry are still someone’s responsibility. LiteLLM distinguishes its open-source gateway from Enterprise capabilities such as SSO, management audit logs and delegated administration.[51] Its budgets require a connected database, and a DB-less global-budget configuration fails open.[40]

The Microsoft integration matters because the choice can be complementary. A firm can operate LiteLLM as its AI gateway and separately connect supported governance and threat-evaluation capabilities rather than assume it must choose one vendor for every layer.

The approaches can overlap and work together#

A firm might use GSA to constrain covered clients’ network access, APIM to govern an approved service endpoint, and Agent 365 to manage supported gateway inventory and access decisions.[2][5] The comparison below includes LiteLLM’s AI-platform approach alongside those Microsoft offerings. Symbols show primary responsibility or conditional contribution; the relationship notes explain useful coexistence.

Capability / relationship map

Match the control to the path#

Roles overlap. Coverage depends on the configured product, tier, transport and request path. These symbols describe technical fit, not license inclusion or guaranteed coverage.

  • Primary fit
  • Conditional
  • Outside role

Scroll horizontally to compare columns. Keyboard: focus the table region and use the arrow keys.

Primary role, conditional contribution, or outside this product’s role
ControlIdentity / token trustMCP runtime rulesNetwork / bypassCatalog / estateModel limits / budgetsThreat / data protection
Entra ID / Agent IDIssues/manages identities and claims. Resources enforce their authorization; existing vendor sessions remain separate.[12][25][30]Primary fitConditionalConditionalConditionalOutside roleConditional
APIMApplication/API gateway for routed requests. Model counters are per gateway/region, not an instance-wide aggregate. Origin restrictions close bypass; verify tier/policy support.[1][15][23]ConditionalPrimary fitConditionalConditionalPrimary fitConditional
GSAIdentity-aware network access with MCP inspection on covered paths. Device recipe requires forwarding + TLS inspection; local stdio and JSON-RPC batches are outside coverage.[2][29]ConditionalConditionalPrimary fitConditionalOutside roleConditional
Agent 365Supported estate governance and instrumented visibility. Connected gateways enforce supported actions; it does not reroute agents or impose a universal model budget.[5][35][36]ConditionalConditionalOutside rolePrimary fitOutside roleConditional
API CenterRegistry, discovery and portal onboarding/access. Portal credentials/access do not force arbitrary runtime clients through a gateway.[17][45][54]ConditionalOutside roleOutside rolePrimary fitOutside roleOutside role
LiteLLMConfigured model/MCP proxy. Budgets require a database; team keys use team/team-member budgets, not the owner’s personal budget. A365 inventory and delegated pre-tool evaluation are separate integrations.[4][39][40]ConditionalPrimary fitOutside roleConditionalPrimary fitConditional
Defender / PurviewThreat and data controls for supported, onboarded workloads/integrations. No automatic inspection of every third-party MCP connection.[33][34]ConditionalConditionalOutside roleConditionalOutside rolePrimary fit

Overlap can be useful coexistence#

≈ overlapping responsibility + complementary roles. A pair can have both.

APIM + GSAOverlap and coexistence
Both can constrain covered requests. GSA can restrict a direct network route while APIM applies explicit gateway policy. Neither covers a path that avoids it. [2][5]
Agent 365 + APIMGovernance with enforcement
A365 supplies governance intent; a supported gateway enforces it. The preview guide distinguishes APIM v2 server blocking from AI Gateway tool controls; classic/v1 is unsupported. [5][8]
API Center + Agent 365Overlapping inventory, different scope
API Center catalogs APIs and local/remote MCP assets. A365 governs its supported agent/gateway estate. Keep ownership metadata aligned; neither registry proves runtime coverage. [17][39]
APIM + LiteLLMPotential gateway alternatives
They overlap as model/MCP gateways. Coexistence needs a distinct reason for each hop, one identity/cost correlation design and explicit budget ownership. [1][32]
Agent 365 + LiteLLMSeparate connections to configure
Inventory/governance connector, delegated pre-MCP Defender guardrail and runtime telemetry are separate features. Connecting inventory does not enable all three. [4][35][39]
Entra + vendor authorizationTwo authority boundaries
Corporate authentication can protect the bridge. Vendor credentials, sessions and target permissions still require their own lifecycle, even with corporate SSO. [11][25][27]
Read the row qualification with the symbol. “Outside role” means this is not the control I would select for that job, not a claim that the product has no adjacent features.

A365 and LiteLLM have separate integrations#

Inventory and governance: the preview Tools Gateway connection in the Microsoft 365 admin center can connect LiteLLM and discover its registered MCP servers. Microsoft says this preview is not intended for production use. Discovery is limited to connected gateways, rather than every arbitrary server on the internet.[39]

Pre-tool threat evaluation: LiteLLM’s A365 guardrail sends the pending tool name, arguments, server and available tool metadata for a Defender verdict before execution. It requires a signed-in user’s delegated Entra/OBO context; the current implementation has no service-only identity mode. The user’s prompt isn’t sent, and ordinary model chat routes are untouched.[4]

Tenant onboarding and delegated ThreatProtection.Evaluate.All permission with admin consent are prerequisites. Its unavailable/unscanned fallback defaults to blocking, with configurable behavior. I’d test onboarding, consent and that failure mode rather than infer them from a successful allow.[4]

Runtime observability: custom agents can instrument/export activity through Microsoft OpenTelemetry integration. That is separate again, and supports documented delegated or service-to-service export. The guardrail’s user-token requirement should not be generalized to all A365 telemetry.[35]

Azure AI Gateway’s separate tool-threat policy can evaluate before execution, after execution, or both. It also has delegated-token requirements. A post-execution denial can withhold the result, but cannot undo a write the tool already performed.[7]

Follow the model call and the tool call separately#

For the examples below, I’m using Codex CLI running locally on a managed workstation. Claude Code is another possible client; both document MCP connections to external tools.[65][66] I’ll keep Codex as the named client throughout rather than switch between abstract labels.

  • Codex CLI: the application the employee uses. Its agent runtime coordinates model and tool calls; this is part of the Codex session, not another product to deploy.
  • Model service: the configured model endpoint Codex calls for inference. It is separate from the client application.
  • MCP server: the tool endpoint Codex connects to. In the vendor example, that is Atlassian MCP.
  • Target system: Jira or Confluence, where the data and permitted business actions live.

OpenAI documents the MCP connection configuration separately from the model-provider configuration.[65][67] The gateway and vendor credentials still need to be configured and validated; naming Codex doesn’t turn these diagrams into a tested connector recipe.

I draw two branches from the Codex session: Codex → configured model service and Codex → MCP gateway/server → target system. A compatible model gateway can sit on the first branch when the provider/API and authentication configuration support it.[67] Managing the MCP endpoint alone doesn’t put the model requests through that gateway; APIM documents separate model-token policies and MCP-request telemetry.[15][18]

This example keeps the MCP caller on the workstation. If execution moves to a cloud or remote host, check that host’s actual network path rather than assume the workstation’s GSA client covers it.[2]

There are also two meanings of “token” here. An OAuth access token is an authorization credential. A model token is a unit of model input or output. Counting one tells me nothing useful about the other.

On-premises gives us control of the origin#

Start with an employee using Codex CLI to request information from an internal system. Codex connects to the approved MCP gateway; the on-premises MCP server then queries the internal system or database. Because we own that backend path, I’d restrict it to the approved gateway rather than rely on Codex configuration alone.

APIM can manage remote MCP servers, including through a self-hosted gateway. A managed Azure gateway needs appropriate network connectivity to reach an on-premises backend; a private endpoint into APIM only controls the inbound side.[1][22]

Request path / 01

On-premises: own the last hop#

The private MCP server and its target can reject every path except the approved one.

  1. Codex CLIAI client / hostLocal session on a managed workstation
  2. Agent runtimeCodex session: coordinates model and MCP tool calls

Both branches originate in the Codex session. Client and runtime are logical roles within that session, not two separately deployed services.

Model request Runtime-controlled inference; tokens, limits and estimated spend#

  1. Model gateway (optional)APIM, LiteLLM or dedicated AI Gateway. Configure the model route separately.
  2. Configured model serviceCodex-compatible model/provider; separate authentication and usage from the MCP connection.

Tool request Connection, tool and target authorization#

  1. APIMManaged gateway with private backend reachability, or a supported self-hosted gateway.
  2. Your private networkOn-premises MCPExecutes authorized tools
  3. Your private networkInternal system / databaseEnforces its own permissions

Tool results return to the runtime; credentials remain at their authorized connection boundaries.

Authentication
Entra authenticates the user or agent at the gateway. The MCP server authorizes tools. A separately scoped database/service identity or supported delegated identity authorizes the target operation.
Network / bypass
Allow only approved gateway paths/identities to the MCP origin. Restrict database access to its approved service path. A private endpoint into APIM alone does not establish outbound connectivity to your datacenter. GSA can govern supported traffic actually routed through its network path; it is not a mandatory extra gateway hop.
Catalog / governance
API Center: approved assets, owners and discovery. Agent 365: supported agent inventory and preview connected-gateway governance. Neither is drawn as a data-plane hop; A365 integration is not assumed for classic/self-hosted APIM.
Monitoring
Join runtime/model usage, APIM tool logs and internal application/database audit. Local model compute cost requires its own accounting; a tool-call count is not a model-token count. Join Azure Monitor/Application Insights with supported Defender, Purview and Sentinel collection.

Approve#

Record owner, tools and data in API Center; approve the corporate app/agent and gateway access; have the system owner grant minimum backend permissions.

Restrict#

Validate issuer, audience and caller authorization. Publish approved tools and enforce tool/operation authorization at a supported point. Keep the origin private; require human approval for consequential writes where appropriate.

Revoke#

Deny at the gateway and identity layer, remove backend roles and invalidate relevant credentials/sessions. Test already-issued tokens and disconnected gateway behavior.

Who owns what: Central: identity, gateway/network baselines, registry and log service. Team: runtime, tool authorization, approvals and instrumentation. System owner: database roles, data access and audit.

Illustrative architecture and operating recommendations, not a tested connector deployment. Documented capability boundaries: [1][12][17][21][22][23][24][26][65][66][67]

The database permission still matters. If a tool runs through a broadly privileged service account, authenticating the human at the gateway doesn’t reduce that account’s authority. I’d test both the allowed operation and the operation that same identity should be denied.[12]

Self-hosted deployment also changes the emergency plan. It uses classic Developer/Premium licensing, and a disconnected gateway keeps its last configuration. I’d test how we stop access when a new central deny cannot reach it.[21][26]

Corporate login leaves another API question#

Keep Codex CLI as the client and use Jira as the vendor system. An illustrative request is: “Read Jira issue EXAMPLE-123 and tell me its current status.” The intended path is Codex CLI → APIM → Atlassian MCP → Jira.

In that path, Codex sends the tool request to the configured corporate endpoint. APIM validates the corporate credential on the incoming call and uses separately configured Atlassian authorization on the outgoing call.[11] Atlassian MCP then performs the authorized Jira operation. The result returns to Codex for the answer.

The authentication question is still separate from the name of the client. A vendor supporting corporate SSO doesn’t establish that its MCP endpoint accepts Entra API tokens. APIM’s incoming token and the vendor’s outgoing credential are different authorization boundaries.[11][60]

Request path / 02

Vendor with corporate authentication integration#

Codex CLI reaches Jira through the approved gateway. Corporate sign-in and Atlassian API authorization remain separate.

  1. Codex CLIAI client / hostLocal session on a managed workstation
  2. Agent runtimeCodex session: coordinates model and MCP tool calls

Both branches originate in the Codex session. Client and runtime are logical roles within that session, not two separately deployed services.

Model request Runtime-controlled inference; tokens, limits and estimated spend#

  1. Model gateway (optional)APIM, LiteLLM or dedicated AI Gateway. Configure the model route separately.
  2. Model serviceConfigured model backend for inference this runtime controls and can route.

Tool request Connection, tool and target authorization#

  1. APIMCorporate MCP front door. Validates the configured incoming credential; separately authorizes the Atlassian connection.
  2. Atlassian-controlled boundaryAtlassian MCP serverExecutes authorized tools
  3. Atlassian-controlled boundaryJira / ConfluenceEnforces its own permissions

Tool results return to the runtime; credentials remain at their authorized connection boundaries.

Authentication
Codex CLI uses a configured Entra-authorized gateway connection. Corporate SSO can establish Atlassian sign-in, while outbound MCP access uses separately configured Atlassian OAuth. Do not send the gateway-audience token directly to Atlassian.
Network / bypass
Vendor scopes/roles and SaaS permissions remain authoritative. Restrict direct endpoints with vendor IP, private-connectivity or client controls where offered. Corporate login alone does not force the gateway route. GSA can govern supported traffic actually routed through its network path; it is not a mandatory extra gateway hop.
Catalog / governance
API Center: approved assets, owners and discovery. Agent 365: supported agent inventory and preview connected-gateway governance. Neither is drawn as a data-plane hop; A365 integration is not assumed for classic/self-hosted APIM.
Monitoring
Correlate the trusted corporate actor, gateway connection and vendor identity with SaaS audit. If inference runs inside the SaaS, use vendor reports for hidden model usage; corporate MCP logs cannot reconstruct it. Join Azure Monitor/Application Insights with supported Defender, Purview and Sentinel collection.

Approve#

Approve the enterprise app, consent/scopes and team/agent assignment; verify MCP protected-resource metadata, API issuer/audience and supported delegated or app-only flows; approve the vendor-side permissions too.

Restrict#

Map validated corporate identity to the correct vendor connection. Preserve per-user permissions where supported. Apply separate gateway policy and vendor tool/data permissions.

Revoke#

Remove corporate access and gateway permission, then terminate vendor grants, keys and sessions as required. Confirm whether vendor deprovisioning actually removes API access; test direct access as well as the bridge.

Who owns what: Central: app/consent policy, gateway and vendor review. Team: runtime endpoint, connection mapping and cost tags. Vendor/SaaS admins: OAuth grants, target permissions, origin controls, audit exports and session termination.

Illustrative architecture and operating recommendations, not a tested connector deployment. Documented capability boundaries: [5][10][11][12][25][27][56][60][65][66][67]

Atlassian documents getJiraIssue for the read and transitionJiraIssue for a status change.[57] Asking the same Codex client to change the issue’s status adds a write operation. I’d review those permissions separately, even though the employee is still using the same interface.

Microsoft documents Entra SAML SSO for Atlassian Cloud, while Atlassian’s MCP documentation describes OAuth 2.1 and administrator-enabled API-token authentication.[56][60] I’d use Jira to illustrate corporate sign-in alongside vendor API authorization. Those documents don’t establish native acceptance of Entra-issued API tokens by the vendor MCP endpoint.

The diagram’s corporate connection and Atlassian OAuth connection require their own setup. Codex’s MCP configuration supports bearer credentials and OAuth with compatible servers; that documents a connection mechanism, not proof this complete APIM-to-Atlassian design has been validated.[65]

Atlassian can restrict MCP access with app permissions, OAuth client/domain controls and IP allowlists. Its domain restrictions do not cover API-token access; its applicable IP restrictions cover both OAuth and API-token calls.[10]

Worked example: Jira through APIM, directly, through GSA, or through both

Worked example / Reading or updating Jira

The endpoint you configure
is only one possible path.#

Separate the network route from the credentials carried on it.

01 / The configured gateway path

APIM evaluates calls sent to its endpoint.#

  1. Codex CLI
  2. APIM
  3. Atlassian MCP
  4. Jira / Confluence

Authentication: Codex CLI: configured corporate MCP connection. Into APIM: separately obtained Entra token for the gateway API. Out of APIM: separately configured Atlassian OAuth authorization. Codex sign-in alone establishes neither connection.

Coverage: Illustrative Codex CLI route, not a tested connector recipe or an automatic Entra-to-Atlassian token exchange. Client registration and gateway/broker compatibility require validation.

02 / The direct path

A permitted direct call never reaches APIM.#

  1. Codex CLI
  2. Atlassian MCP
  3. Jira / Confluence

Authentication: The caller authenticates directly through the permitted Atlassian flow. APIM does not evaluate this request.

Coverage: Possible only when Atlassian authentication, app permissions, client/domain policy, and any IP allowlists permit the call.

03 / The inspected network path

GSA can allow or block covered MCP traffic.#

  1. Codex CLI
  2. GSA MCP firewall
  3. Atlassian MCP
  4. Jira / Confluence

Authentication: The MCP request still needs Atlassian authorization. GSA adds network-path inspection and policy enforcement.

Coverage: Device MCP firewall preview: supported remote HTTP traffic must traverse GSA, with TLS inspection. A laptop client does not cover an unrelated cloud execution path.

04 / One approved route, enforced together

GSA can close the direct path while APIM governs the service.#

  1. Codex CLI
  2. GSA
  3. APIM
  4. Atlassian MCP
  5. Jira / Confluence

Policy and authentication: GSA permits the approved APIM destination and blocks direct Atlassian MCP access on the covered client traffic. APIM applies its own authentication and upstream authorization.

Coverage: One possible policy design, not an automatic configuration. Check traffic forwarding, inspection, destination rules, and Atlassian-side access restrictions.

Illustrative paths, not a production deployment claim. APIM authentication · Atlassian access controls · GSA coverage · A365 integration

I would also test revocation at both boundaries. Entra can’t directly revoke an application-issued session. Already-issued tokens, vendor grants, keys and sessions need their own termination or reevaluation behavior; turning off corporate sign-in doesn’t prove every existing path stopped.[25]

A vendor credential needs an owner and an exit path#

Keep Codex CLI on the workstation, but replace Atlassian with a hypothetical vendor that cannot integrate with our corporate authentication approach. The employee still authenticates to the corporate gateway. The gateway or broker then connects to the vendor MCP server using the vendor’s credential. APIM supports separately configured outbound OAuth credentials, subject to provider and gateway compatibility.[11][24]

I’d prefer a per-user vendor connection where individual permissions matter. If the broker uses a shared vendor account, our gateway can identify the employee using Codex while the vendor may see only that shared account. I’d approve its permissions explicitly and preserve the mapping between the corporate caller and vendor credential.

Request path / 03

Vendor without corporate authentication integration#

A corporate front door can govern its own bridge. The vendor still owns the other credential.

  1. Codex CLIAI client / hostLocal session on a managed workstation
  2. Agent runtimeCodex session: coordinates model and MCP tool calls

Both branches originate in the Codex session. Client and runtime are logical roles within that session, not two separately deployed services.

Model request Runtime-controlled inference; tokens, limits and estimated spend#

  1. Model gateway (optional)APIM, LiteLLM or dedicated AI Gateway. Configure the model route separately.
  2. Model serviceSeparate model authentication and accounting for inference this runtime controls and can route.

Tool request Connection, tool and target authorization#

  1. APIM + credential brokerEntra inbound; separately configured vendor OAuth or key outbound. Validate vendor/transport compatibility.
  2. Vendor-controlled boundaryVendor MCP serverExecutes authorized tools
  3. Vendor-controlled boundaryVendor SaaS / dataEnforces its own permissions

Tool results return to the runtime; credentials remain at their authorized connection boundaries.

Authentication
Entra → corporate gateway → authorized connection lookup → vendor-supported OAuth/key → vendor MCP. The corporate identity never automatically becomes a vendor user. Store secrets in an approved broker/vault rather than distributing them to clients.
Network / bypass
Keep vendor credentials at the bridge and use vendor source/client restrictions where possible. Covered device/cloud egress can block direct destinations. A public endpoint plus an independently valid vendor credential remains a bypass path outside those controls. GSA can govern supported traffic actually routed through its network path; it is not a mandatory extra gateway hop.
Catalog / governance
API Center: approved assets, owners and discovery. Agent 365: supported agent inventory and preview connected-gateway governance. Neither is drawn as a data-plane hop; A365 integration is not assumed for classic/self-hosted APIM.
Monitoring
The bridge can identify the corporate caller while vendor audit may show only a shared account. Preserve the mapping and correlation ID. Report missing user attribution or hidden vendor model cost as a gap, not as zero. Join Azure Monitor/Application Insights with supported Defender, Purview and Sentinel collection.

Approve#

Approve the bridge, vendor account, data scope, credential owner and emergency revocation plan. Prefer individual connections when user-level permissions matter; approve any shared application/team account explicitly.

Restrict#

Bind validated user/app identity to its permitted connection; never accept an arbitrary caller-selected connection ID. Constrain tools and target roles. A shared vendor key exposes that shared account’s authority, not each caller’s individual rights.

Revoke#

Block the corporate caller/route, remove broker access, and revoke or rotate the vendor credential. Shared credentials affect every dependent caller. If the vendor offers no usable containment, explicitly accept the residual risk or decline the integration.

Who owns what: Central: gateway/broker, secret lifecycle, egress and risk acceptance. Team: safe tool design, connection mapping and attribution. Vendor/SaaS admins: key/grant revocation, SaaS permissions, billing and authoritative target audit.

Illustrative architecture and operating recommendations, not a tested connector deployment. Documented capability boundaries: [5][11][24][25][65][66][67]

The uncomfortable case is a public vendor endpoint, independently valid credentials and no useful origin restriction. The gateway can deny its own route. It cannot stop a call that never reaches it. Microsoft’s guidance recommends origin/network restrictions precisely because gateway configuration alone doesn’t close that path.[5]

That’s a risk decision I want written down. We can use supported egress controls for covered clients, negotiate better vendor controls, accept the remaining gap, or decline the integration. A registry entry doesn’t resolve it.

Keep usage accounting honest#

For the Codex-to-Jira example, I’d account for model inference and Jira tool operations separately, then reconcile them against actual charges:

  • Model usage: provider/model, input/output/cache usage, policy outcome and estimated cost for the model requests we actually observe.
  • Tool usage: MCP server/tool, caller and connection, allow/block outcome, latency and target result. Any configured per-call price is separate from model consumption.
  • Actual charges: provider and vendor billing reconciled against the first two records.

APIM can apply model-token limits by a configured counter key. LiteLLM supports model spend tracking by key, user and team, and separate configured or custom MCP cost accounting. Neither mechanism discovers the model spend hidden inside an unrelated SaaS tool.[15][28][32]

For per-user, team and application reporting, I’d bind the actor/app/agent identifiers to validated identity, derive the team from an owned mapping, and carry run/conversation and trace IDs through both branches. A caller-supplied team_id header is not evidence that the caller belongs to that team. Shared upstream credentials may leave the target seeing only the shared account.[4][36]

I’d turn that trusted attribution into separate limit keys:

  • User: validated user ID for an APIM counter or a personal/team-member budget.
  • Team: centrally maintained membership mapping for a shared team counter/budget.
  • Application: validated app identity or dedicated virtual key for its assigned counter/budget.

APIM counters are independent at each gateway/region, rather than one instance-wide aggregate. LiteLLM team-associated keys use team/team-member budgets; the key owner’s personal budget does not apply. I’d design the total allowance around those scopes instead of assuming they add up automatically.[15][40]

I’d use request logs for the detailed attribution ledger, then aggregate for dashboards. APIM’s custom token metrics have cardinality limits and can silently discard new series at those limits. They should not be assumed to provide a complete per-employee audit trail.[16]

Limits need failure tests too. APIM documents streaming estimates and temporary concurrency overshoot. LiteLLM’s budget enforcement requires a connected database; a DB-less global-budget configuration fails open. Operational budgets and token caps are useful controls, but provider billing remains the actual-charge source.[15][38][40]

Finally, reconcile pricing, cache accounting, interrupted streams and calls that bypassed the proxy. A gateway estimate and a supplier invoice can legitimately differ.[16][31]

Collect the evidence without collecting everything#

For the Jira example, I want to identify the employee using Codex, the corporate credential admitted by the gateway, the tool requested, the policy decision, and the action Jira actually performed. A model trace alone doesn’t answer what changed in Jira. That requires joining evidence across the path.

Operational evidence map

Collect evidence from each plane#

My collection checklist. None of these consoles supplies every other plane’s evidence automatically.

IdentityEntra sign-in / audit#

Evidence: Who authenticated; agent/app identity, directory and grant changes.

Setup / gap: A sign-in is not a tool execution. Export and join it to runtime/backend events. [30]

Gateway + modelAPIM / LiteLLM / AI Gateway#

Evidence: Routed requests, tool/method, latency, policy outcome; model tokens and estimated spend where configured.

Setup / gap: Enable diagnostics/export and trusted attribution. Inspect MCP/JSON-RPC outcomes, not only HTTP status. No visibility into bypassed calls or hidden SaaS inference. [18][32][41]

NetworkGSA traffic + GenAI Insights#

Evidence: Covered destinations, allow/block, inspected remote MCP operations and supported content.

Setup / gap: Forwarding/inspection and log configuration apply. Local MCP is absent; captured content has size limits. [2][29]

Agent runtimeAgent 365 + Microsoft OpenTelemetry#

Evidence: Instrumented agent, model and tool spans linked by conversation/run and trace context.

Setup / gap: Custom agents must instrument/export. Token counts are optional; inventory is not runtime instrumentation. Review required content fields before enabling export. [35][36]

Threat / complianceDefender / Purview#

Evidence: Supported agent activity/alerts, threat verdicts, audit and policy-scoped data protection.

Setup / gap: Requires supported workloads, onboarding/collection and policy scope. Near-real-time alerts differ from a configured pre-execution block. [33][34]

Correlation / targetSentinel + vendor/system audit#

Evidence: Joined identity/network/runtime evidence and the target’s authoritative action/permission record.

Setup / gap: Enable appropriate connectors and retention. Shared vendor credentials may expose only the shared account. Vendor audit exports may need additional rights. [25][37]

Record the policy decision and the target outcome separately. A blocked response after execution cannot undo an action already completed.

APIM doesn’t capture tool arguments/results by default. Enabling payload logging can collect sensitive data and secrets. I’d define redaction, access and retention before enabling it.[18]

A365 custom-agent telemetry also has a specific schema: token counts are optional, while some content fields are required for its documented integration. I’d review that data contract against our collection policy instead of promising full security visibility after removing every payload.[36]

Defender and Purview depend on supported workloads, onboarding, emitted signals and policy scope. GSA/Sentinel correlation likewise requires configured diagnostic export and connectors. Buying the entitlement doesn’t populate those records automatically.[33][34][37]

E7 rights are one part of the operating cost#

Microsoft 365 E7 includes E5, Microsoft 365 Copilot, Entra Suite and Agent 365. That covers substantial identity, security and governance rights. It doesn’t make every gateway, model, log destination or vendor service part of the same bill.[13][20]

I would keep this entitlement check beside the architecture review, rather than assume that a technically supported integration is already licensed and configured.

Entitlement / consumption map

E7 rights and the bill behind the path#

Public guidance checked October 30, 2026. Entitlement, rollout, configuration and consumption are separate checks. Your agreement and Product Terms govern.

Entra ID P2 + Entra Suite / GSA#

Included rights

E7 includes P2 and the Suite, including Internet Access and Private Access. Assign licenses and configure client/connectors, routing and policy. P2 by itself is not full GSA licensing. [14][20]

Agent 365#

Included rights

Commercial licensing is per user for people interacting with, managing or sponsoring premium-capability agents. Included rights do not remove preview/onboarding or supported-gateway constraints. [19][52]

Defender XDR services#

Included E5 rights

E7 inherits E5 Defender for Endpoint P2, Cloud Apps, Identity and Office 365 P2. Onboarding, connectors and protection policies remain required. This is not blanket Defender for Cloud workload licensing. [20][33]

Purview AI / DSPM, Audit / eDiscovery#

Included + conditional meters

E5 user-based and relevant Copilot/A365 protections apply within their scope. Other AI/data/workload features can require PAYG; not all agent protection is PAYG. Beneficiary licensing and configured policies matter; ten-year audit retention needs an add-on. [34][43][49]

Security Copilot#

Bounded included capacity

E5/E7 includes a shared monthly capacity pool subject to paid-license count, cap and rollout. It is not unlimited and does not pay underlying Sentinel storage/compute or partner-service bills. [42]

Azure API Management#

Separate Azure service

Tier/service and associated resource charges are separate from E7. Self-hosted production licensing and networking/policy support need their own validation. [21][26][44]

Dedicated AI Gateway preview#

Pricing not yet published

Current docs describe a separate product/resource from APIM. The pricing page still uses “AI Gateway tier” and says details are coming soon. The dedicated product’s rate remains unconfirmed; verify current commercial terms rather than inferring free production service or E7 inclusion. [8][53]

Azure API Center#

Free / Standard plans

Not an E7 benefit. Standard is available at no extra cost while linked to eligible APIM Standard, Standard v2, Premium or Premium v2. Otherwise assess the plan and its limits. [45]

Monitor / App Insights / Log Analytics#

Separate Azure consumption

No blanket E7 log-consumption inclusion. Ingestion, retention and other meters depend on destination/table configuration; workspace-based App Insights uses its Log Analytics billing. [46]

Microsoft Sentinel#

Separate + limited benefit

Eligible E5/E7 agreements have a bounded ingestion benefit for specified M365 data. This does not make arbitrary MCP logs, additional retention, lake processing or automation free. Check unified pricing rather than double-counting ingestion. [50][55]

Models / Foundry + Copilot Studio#

Scenario-dependent usage

Direct model/deployment consumption is separate. E7’s Copilot includes qualifying employee-facing Studio usage under the authenticated licensed user, subject to fair use. Other triggers/scenarios use credits; Computer-Using Agents are excluded; BYO Foundry models bill separately. [47][48]

LiteLLM / vendor SaaS#

Separate vendor terms

LiteLLM Enterprise, hosting and model consumption require their own terms/resources. Entra SSO or Marketplace purchase does not add a vendor SaaS license to E7. [31][51]

Included user rights do not create an enforced request path or unlimited model/log capacity. Preview features and unpublished pricing need separate validation.

Two qualifications are easy to miss: API Center Standard can be included through a linked eligible APIM instance, and Sentinel has a bounded benefit for specified M365 ingestion. Those are narrower than “E7 includes all the Azure services in this diagram.”[45][50]

Put a name beside each remaining decision#

My proposed ownership split is central control of identity, gateway/network baselines, registry, secrets infrastructure and log policy; team ownership of runtime configuration, requested tools, human approvals, connection mapping and cost attribution; and target/vendor ownership of backend permissions, credential termination, audit and billing.

Before approving the Codex-to-Jira connection, I’d ask Codex to perform an allowed read, attempt a status change the caller should be denied, and try the direct MCP route. Then I’d revoke access and repeat the request using the previously issued credential. I’d follow the same run through the model record, gateway tool log and Jira audit, including what happens during a gateway or telemetry outage.

In my last post, I started with the authority an agent receives. Here, I’d require an owner, an enforcement point and evidence for each connection carrying that authority. That’s the map I want beside the product list.

Thanks for reading!

Sources#

[1] Microsoft: MCP servers in API Management

[2] Microsoft: GSA MCP firewall preview

[4] LiteLLM: Microsoft Agent 365 guardrail

[5] Microsoft: Agent 365 and APIM governance

[6] Microsoft: GSA for Copilot Studio agents

[7] Microsoft: AI Gateway tool threat protection

[8] Microsoft: Dedicated AI Gateway preview

[9] Microsoft: Configure cloud-agent network controls

[10] Atlassian MCP access controls

[11] APIM inbound and outbound MCP authentication

[12] Entra Agent ID and MCP authorization

[13] Microsoft 365 E7 included products

[14] Microsoft Entra licensing and E7

[15] APIM model token limits

[16] APIM model token metrics and cardinality

[17] API Center MCP catalog

[18] APIM MCP traffic monitoring

[19] Agent 365 service description

[20] Microsoft subscription suite licensing

[21] APIM self-hosted gateway

[22] APIM private networking

[23] APIM gateway capability differences

[24] APIM credential manager

[25] Entra and application-session revocation

[26] APIM tier support

[27] Entra delegated OBO flow

[28] LiteLLM MCP cost accounting

[29] GSA Generative AI Insights

[30] Entra agent sign-in and audit logs

[31] LiteLLM cost reconciliation

[32] LiteLLM spend tracking

[33] Defender agent detection and protection

[34] Purview Agent 365 protections

[35] Agent 365 Microsoft OpenTelemetry integration

[36] Agent 365 observability attributes

[37] GSA Sentinel connectors

[38] Dedicated AI Gateway concepts

[39] Agent 365 Tools Gateway setup

[40] LiteLLM budget enforcement prerequisites

[41] Dedicated AI Gateway live observability

[42] Security Copilot included capacity

[43] Purview per-user and metered billing

[44] APIM Azure costs

[45] API Center plans and APIM benefit

[46] Azure Monitor and Log Analytics costs

[47] Foundry model consumption

[48] Copilot Studio included usage and credits

[49] Purview service entitlements

[50] Sentinel Microsoft 365 data benefit

[51] LiteLLM Enterprise licensing

[52] Agent 365 per-user licensing FAQ

[53] Azure gateway pricing status

[54] API Center portal authorization

[55] Sentinel unified billing

[56] Atlassian MCP authentication methods

[57] Atlassian MCP supported tools and scopes

[60] Entra SAML SSO for Atlassian Cloud

[61] LiteLLM AI Gateway capabilities

[62] SMS engineering: adopting LiteLLM for governance

[63] Microsoft Global Secure Access identity-centric network security

[65] OpenAI: Codex MCP connections

[66] Anthropic: Claude Code MCP connections

[67] OpenAI: Codex custom model-provider configuration