Compare/Veto vs Pomerium for MCP

Veto vs Pomerium for MCP

Pomerium is an identity-aware reverse proxy from the zero-trust world. Pomerium for MCP brings that same model to Model Context Protocol servers: identity at the front door, scoped access, policy at the gateway. Veto runs inside the agent process and authorizes individual tool calls based on their arguments and context. Pomerium decides who gets in. Veto decides what they are allowed to do once inside. Complementary, not competing.

Honest assessment

Pomerium is an identity-aware proxy with an open-source history and a zero-trust model. Putting that in front of MCP is a natural fit. MCP servers expose broad capabilities and you want identity-bound access. Veto does not replace any of that. What Veto adds is per-call authorization on the actual tool invocations: "this user, with this MCP scope, asked to call create_payment(amount=200000) should it execute?" That decision considers the arguments and runtime context, not just the identity. Teams exposing production MCP servers may need both.

What each product does

Pomerium for MCP

Pomerium's identity-aware proxy, configured to sit in front of MCP servers. It integrates with your IdP (Okta, Google, Azure AD, etc.), terminates the MCP connection, applies policy at the proxy, and forwards authenticated requests to the backing MCP server. Open source under the Pomerium project.

Core capability:

Identity-aware access control at the MCP gateway. Decide which users or service accounts can reach which MCP servers, with which scopes, from which network contexts. Standard zero-trust patterns: identity verification, device posture, context-aware allow and deny at the connection level.

  • Identity termination via OIDC and SAML
  • Per-server access policy at the gateway
  • Device and network posture checks
  • Audit logs of every MCP session
  • Open source with enterprise support

Veto

An open-source runtime authorization SDK. Intercepts individual tool calls inside the agent and evaluates them against YAML policies. Includes native MCP integration and runs inside MCP servers or clients.

Core capability:

Per-tool-call authorization with decision visibility into arguments and context. Decide allow, deny, or require human approval for each invocation. Policies are YAML files in your repo, versioned and reviewable.

  • Per-call authorization on tool arguments
  • Human review approval queues
  • Declarative YAML policies in version control
  • Native MCP, LangChain, and OpenAI integration
  • Apache-2.0 SDK, self-hosted engine option

Feature comparison

The two products overlap on the broad goal of safer MCP, but they sit at different layers. Most rows are about scope, not feature parity.

CapabilityVetoPomerium for MCP
Per-tool-call authorization
Policy on tool arguments
Identity-aware gateway
OIDC and SAML termination
Device posture checks
Human review approvals
YAML policy in your repo
Per-decision record
Works without MCP
In-process SDK
Open-source core
Self-hosted

Choose by control object: identity or action

A classic security split: authentication/authorization at the door vs authorization on every operation. Both matter. They tend to live in different products because they have very different shapes.

Identity-aware gateway (Pomerium's strength)

Verify the agent or user's identity, the device, the network. Decide which MCP servers they can reach, with which scopes. Terminate at a proxy where you can log every session. Good for "this caller should not be talking to this MCP server at all."

Per-call authorization (Veto's strength)

Even when a caller is correctly authenticated and reaching the right server, not requests can look the same at the identity layer. Veto evaluates the specific tool, its arguments, and the context. Approve low-risk calls by policy, escalate expensive or destructive ones to a human, deny anything outside the user's role.

The stack

Pomerium at the front for identity and scope. Veto inside MCP servers (or clients) for per-call decisions. They share the audit story but cover different failure modes.

Pricing

Veto

Open Source runs locally. Core adds shared approvals, decision records, export, and retention. See the pricing page for price, retention, and action limits.

Pomerium for MCP

Pomerium Core is open source (Apache-2.0). Enterprise plans add SSO, advanced audit, and support. Production MCP gateway deployments are procurement-led.

Decision framework

Choose Veto when

  • You need authorization on tool-call arguments, not just identity
  • Human approval queues are required for sensitive operations
  • You want policies as YAML in your code repository
  • Your agents run on multiple frameworks beyond MCP
  • You need detailed per-decision audit records

Choose Pomerium for MCP when

  • You run multiple MCP servers and need a single entry point
  • SSO-bound access to MCP is a hard review requirement
  • Device posture and network context must gate access
  • You already deploy Pomerium for non-AI workloads
  • You want a zero-trust proxy in front of every MCP capability

Frequently asked questions

Does Pomerium replace Veto for MCP authorization?
Not at the same layer. Pomerium for MCP authenticates and authorizes the MCP connection: who is allowed to reach which MCP server, with which scopes. Veto operates one level deeper: for each tool call that comes through that authenticated session, evaluate the call's arguments against policy and decide allow, deny, or escalate. Pomerium asks "can this identity reach this server?". Veto asks "should this specific call execute?".
Why would I need both Pomerium and Veto?
Layered defense. Pomerium decides who gets in at the MCP gateway. Veto decides what each call is allowed to do once it is in. A compromised but authenticated agent can still try to do destructive things; Veto's per-call policy catches that. Conversely, if you trust your identity layer absolutely, you might run Veto alone, but most production systems benefit from both.
Can Veto run without an MCP gateway?
Yes. Veto runs as an SDK inside the agent process and works with LangChain, OpenAI, Anthropic, Vercel AI SDK, CrewAI, MCP, and other frameworks. You do not need an MCP gateway in front of it. Where MCP is in your stack, Veto can run inside the MCP server, inside the client, or both.
Is human approval part of identity-aware proxies like Pomerium?
Pomerium's primary model is real-time policy evaluation at the proxy, not human review approval queues for individual actions. Veto includes a built-in approval workflow: route review-required tool calls to a human, pause execution, resume when approved. That pattern is core to Veto and outside Pomerium's scope.

Related comparisons

Going deeper: MCP integration, Agent authorization, Blog: MCP security guide.

Identity gets agents in. Veto controls what they do next.