---
title: "Why reading the MCP spec won't tell you if a server is safe"
date: 2026-05-28
summary: "Anthropic says MCP STDIO injection is by design; four independent scans of thousands of servers say a third have command-injection flaws. The two claims describe different objects."
slug: mcp-spec-vs-probe-evidence
author: "Sebastiaan Hilbers"
hero_glyph: spiral
---

The Model Context Protocol's biggest disclosure of the year came on April 15,
when OX Security published a [coordinated
advisory](https://www.ox.security/blog/the-mother-of-all-ai-supply-chains-critical-systemic-vulnerability-at-the-core-of-the-mcp/)
covering arbitrary command execution across more than 7,000 publicly accessible
MCP servers and 150 million SDK downloads. The flaw is in how Anthropic's
official SDK handles STDIO transport: the `command` field in an MCP
configuration is passed straight to a process launcher with no validation.
[CVE-2026-30623](https://docs.litellm.ai/blog/mcp-stdio-command-injection-april-2026)
is one downstream instance, which LiteLLM patched with a command allowlist;
additional high- and critical-severity CVEs were filed against tools
including Windsurf, LangChain-Chatchat, and Flowise.

The CVEs are not the interesting part. The interesting part is that the spec
author and the researchers do not agree on whether anything broke. Anthropic
told OX that the [STDIO execution model is "expected"
behavior](https://www.theregister.com/2026/04/16/anthropic_mcp_design_flaw/)
and that sanitization is the implementer's responsibility. OX Security
countered that responsibility-shifting is a sleight of hand: "shifting
responsibility to implementers does not transfer the risk. It just obscures
who created it." Neither position is empirically falsifiable from the spec
text. Both are checkable against the install base, and the install base has
been measured.

## The two claims that can't both be true at the population level

Anthropic's defense reduces to a conditional: *if* every implementer sanitizes
correctly, *then* the STDIO model is safe. That is a coherent statement about
the protocol. It is not a statement about the field of MCP deployments. The
field has been scanned independently four times.

[Equixly's
assessment](https://equixly.com/blog/2025/03/29/mcp-server-new-security-nightmare),
conducted against the most popular MCP server implementations, found that 43%
contained command injection vulnerabilities. [Enkrypt AI scanned 1,000+ MCP
servers](https://www.enkryptai.com/blog/we-scanned-1-000-mcp-servers-33-had-critical-vulnerabilities)
over three months and reported 32% with at least one critical vulnerability,
28% with command injection, and 41% with authorization bypass. [Endor Labs
surveyed 2,614
implementations](https://www.endorlabs.com/learn/classic-vulnerabilities-meet-ai-infrastructure-why-mcp-needs-appsec)
and found 34% using sensitive APIs susceptible to command injection (CWE-78),
with 82% touching file-system operations vulnerable to path traversal.
[Knostic catalogued 1,862 MCP servers exposed to the public
internet](https://www.csoonline.com/article/4168979/1800-mcp-servers-exposed-without-authentication-how-zero-trust-can-secure-the-ai-agent-revolution.html);
every manually verified instance accepted unauthenticated requests to list
internal tools.

| Source | Population | Command-injection rate | Other notable findings |
|---|---|---|---|
| Equixly, Mar 2025 | "Most popular" MCP servers | 43% | — |
| Enkrypt AI, Oct 2025 | 1,000+ scanned | 28% | 32% critical, 41% auth bypass |
| Endor Labs, 2026 | 2,614 implementations | 34% (CWE-78) | 82% path-traversal-prone |
| Knostic, 2025 | 1,862 exposed | — | 100% unauthenticated of verified |

<svg viewBox="0 0 640 260" xmlns="http://www.w3.org/2000/svg" style="max-width:100%;height:auto;display:block;margin:28px auto" role="img" aria-labelledby="ci-title ci-desc">
  <title id="ci-title">Command-injection rates across three independent MCP scans</title>
  <desc id="ci-desc">Horizontal bar chart. Equixly found command-injection vulnerabilities in 43% of scanned MCP servers, Endor Labs in 34%, Enkrypt AI in 28%. A dashed violet line at the left axis marks the implicit protocol-spec claim of zero non-conformant servers.</desc>
  <style>
    .lt { font-family: 'Geist', system-ui, sans-serif; font-size: 13px; fill: var(--c-fg, #0a0a0a); }
    .lp { font-family: 'Geist Mono', ui-monospace, monospace; font-size: 14px; fill: var(--c-fg, #0a0a0a); font-weight: 600; }
    .ll { font-family: 'Geist Mono', ui-monospace, monospace; font-size: 10px; fill: var(--c-fg-4, #9ca3af); letter-spacing: 0.14em; }
    .bar { fill: var(--c-pink, #F472B6); opacity: 0.9; }
    .spec { stroke: var(--c-violet, #A855F7); stroke-width: 1.6; stroke-dasharray: 6 4; fill: none; }
    .axis { stroke: var(--c-fg-3, #6b7280); stroke-width: 1; }
  </style>
  <text x="0" y="18" class="ll">COMMAND-INJECTION RATE · INDEPENDENT MCP SCANS</text>
  <text x="0" y="68" class="lt">Equixly</text>
  <rect x="130" y="51" width="226" height="24" class="bar" rx="2"/>
  <text x="365" y="69" class="lp">43%</text>
  <text x="0" y="116" class="lt">Endor Labs</text>
  <rect x="130" y="99" width="178" height="24" class="bar" rx="2"/>
  <text x="317" y="117" class="lp">34%</text>
  <text x="0" y="164" class="lt">Enkrypt AI</text>
  <rect x="130" y="147" width="147" height="24" class="bar" rx="2"/>
  <text x="286" y="165" class="lp">28%</text>
  <line x1="130" y1="38" x2="130" y2="191" class="spec"/>
  <text x="130" y="212" class="ll" text-anchor="start">SPEC CLAIM: 0%</text>
  <line x1="130" y1="191" x2="610" y2="191" class="axis"/>
  <text x="130" y="240" class="ll" text-anchor="start">0%</text>
  <text x="370" y="240" class="ll" text-anchor="middle">50%</text>
  <text x="610" y="240" class="ll" text-anchor="end">100%</text>
</svg>

Four methodologies, four sample sets, four different ways to score what counts
as a vulnerability. The convergent finding is that command-injection-class
flaws appear in roughly a third of MCP servers in the wild. That is not a
result one would expect if the implementer-sanitization model were holding.

It is also not a result that can be rebutted from the spec. The spec describes
intended behavior. The scans describe observed behavior across the population
that adopted it. They are different objects.

## Why "by design" stopped being a security property here

"Secure by design," as the term is used in security literature, describes a
system whose safe operation does not depend on the correctness of every
implementer. PKCE
in OAuth 2.1 is secure by design in that sense; a client that integrates
incorrectly fails closed. STDIO transport in MCP has the opposite shape. A
client that omits sanitization fails open, on a transport the SDK encourages,
with no detection at the protocol layer.

The contrast with MCP's own enterprise direction makes the point sharper. At
the [MCP Dev Summit in April
2026](https://aaif.io/blog/mcp-is-now-enterprise-infrastructure-everything-that-happened-at-mcp-dev-summit-north-america-2026/),
the [Agentic AI Foundation](https://aaif.io) approved a formal project
lifecycle policy, MCP crossed 97 million monthly SDK downloads, and Uber
disclosed that it runs 1,500+ monthly active agents executing 60,000+ tasks
weekly across its internal services. The same summit included researcher
Jonathan Leitschuh demonstrating a DNS rebinding 0-day in Google's MCP
Database Toolbox that had gone unpatched for over 90 days. If a Google project
shipping in production cannot patch a classic web-rebinding flaw inside three
months, the assumption that every MCP implementer in the world will sanitize
STDIO inputs correctly is not a load-bearing assumption.

This is not a moral claim about developers. It is an observation about
populations. Any protocol whose security properties depend on every
implementer being correct has the same problem in the limit. The web learned
this with SQL injection; the fix did not arrive in the form of better SQL
specs.

## The probe is the answer the spec can't give

A registry that publishes "this MCP server claims compliance with spec
version X" is encoding the spec author's intended behavior. That is a useful
claim, and it is not the same claim as "this server, when probed today, did
not respond to a known command-injection pattern." The first is cheap to
produce and trivially falsifiable against the population data above. The
second is more expensive, has to be repeated continuously, and is the only
kind of claim that survives contact with the install base.

The split between "claim" and "evidence" is the load-bearing distinction in
[the Agenstry registry](https://agenstry.com). A card a server published last
week is a claim. A probe run this morning is evidence. We publish both,
separately, because a consumer making a trust decision needs to know which
input they are acting on. The four scans cited above all converge on the same
underlying fact: at the MCP population scale, claims and evidence diverge by
tens of percentage points.

A few practical implications for builders, none of which require a change to
the spec:

- If your agent calls an MCP server you do not control, the spec version it
  advertises is not a safety signal. It is metadata about the server's
  intent, which is a different object from the server's behavior.
- If your platform aggregates MCP servers for end users, the published claims
  of those servers are not a substitute for a periodic probe. The
  population data is clear that one input is roughly a third wrong about
  the other.
- If you maintain an MCP server, the most useful thing you can do for
  downstream trust is publish probe results alongside your claims. The
  spec does not require this, and most servers do not, which is precisely
  why it would be a legible credibility signal.

## What we're watching

Three observable things over the next two quarters, all relevant to whether
the spec/probe gap closes or widens:

1. **Whether the AAIF MCP Registry roadmap absorbs a probe layer.** The
   foundation's enterprise readiness goals include SSO-integrated
   authentication and standardized audit trails. They do not yet name
   continuous conformance probing as part of the registry's mandate. If the
   registry stays publication-only, downstream consumers will have to run
   their own probes or rely on third-party services that do.
2. **Whether the next independent scan finds the same numbers.** Equixly,
   Enkrypt, and Endor converged on roughly a third of servers being
   vulnerable. If a 2026 H2 scan finds the rate dropping under 10%, the
   developer-sanitization model is working at scale and the "by design"
   position becomes empirically defensible. If the rate holds, the position
   becomes structurally unable to address the population problem.
3. **Whether the OAuth 2.1 + PKCE [authorization
   layer](https://modelcontextprotocol.io/specification/draft/basic/authorization)
   reduces the relevant attack surface.** The spec standardizes how clients
   obtain tokens, but does not specify how the non-human MCP server itself
   is identified to the authorization server. That gap is a different shape
   of the same population-vs-spec problem: the protocol describes how to do
   something right, and the work is done by everyone else.

The April 15 disclosure will get described as an Anthropic story or as a
researcher story. It is more usefully read as a measurement story. A
protocol's intended behavior and the population's actual behavior are two
different objects, and only one of them is the object your agent talks to.

## Sources

- [The Mother of All AI Supply Chains: Critical, Systemic Vulnerability at the Core of Anthropic's MCP](https://www.ox.security/blog/the-mother-of-all-ai-supply-chains-critical-systemic-vulnerability-at-the-core-of-the-mcp/) — OX Security, April 15, 2026.
- [Security Update: CVE-2026-30623 — Command Injection via Anthropic's MCP SDK](https://docs.litellm.ai/blog/mcp-stdio-command-injection-april-2026) — LiteLLM Blog, April 2026.
- [MCP 'design flaw' puts 200k servers at risk: Researcher](https://www.theregister.com/2026/04/16/anthropic_mcp_design_flaw/) — The Register, April 16, 2026.
- [MCP Server: A New Security Nightmare](https://equixly.com/blog/2025/03/29/mcp-server-new-security-nightmare) — Equixly, March 29, 2025.
- [We Scanned 1,000 MCP Servers: 32% Had Critical Vulnerabilities](https://www.enkryptai.com/blog/we-scanned-1-000-mcp-servers-33-had-critical-vulnerabilities) — Enkrypt AI, October 2025.
- [Classic Vulnerabilities Meet AI Infrastructure: Why MCP Needs AppSec](https://www.endorlabs.com/learn/classic-vulnerabilities-meet-ai-infrastructure-why-mcp-needs-appsec) — Endor Labs, 2026.
- [1,800+ MCP servers exposed without authentication: How zero trust can secure the AI agent revolution](https://www.csoonline.com/article/4168979/1800-mcp-servers-exposed-without-authentication-how-zero-trust-can-secure-the-ai-agent-revolution.html) — CSO Online citing Knostic research, 2025.
- [MCP Is Now Enterprise Infrastructure: Everything That Happened at MCP Dev Summit North America 2026](https://aaif.io/blog/mcp-is-now-enterprise-infrastructure-everything-that-happened-at-mcp-dev-summit-north-america-2026/) — Agentic AI Foundation, April 13, 2026.
- [Authorization — Model Context Protocol](https://modelcontextprotocol.io/specification/draft/basic/authorization) — MCP Specification, accessed May 2026.
- [Linux Foundation Announces the Formation of the Agentic AI Foundation](https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation) — Linux Foundation, December 9, 2025.
