AI DevelopmentFramework15 min readPublished August 24, 2026

25 incidents + 2 spec revisions · Apr 2025 → Aug 2026 · patch status as-of-dateline

The MCP Security Incident Ledger: 27 Dated Entries

Twenty-seven dated entries, April 2025 through August 24, 2026 — one row each for date, component, defect class, disclosure route, and patch status. Every row links the record it was captured from, and patch status is reported as of the dateline, never as of whenever a source happened to be written.

DA
Digital Applied Team
Senior strategists · Published Aug 24, 2026
PublishedAugust 24, 2026
Read time15 min
SourcesLinked on every row
Dated entries
27
Apr 2025 → Aug 24, 2026
25 incidents + 2 spec
Command-injection rows
11/25
largest class in the record
No fix documented
3
rows open as of the dateline
Fastest documented fix
2days
Smithery path traversal, Jun 2025

MCP security incidents now have a sixteen-month public record — and nobody had put it in one table. From Invariant Labs naming “tool poisoning” in April 2025 to a Context7 CVE disclosed six days before this post’s dateline, this ledger collects 27 dated entries: 25 incidents and the two protocol revisions that answered them, each pinned to the dated record it came from.

The stakes are not abstract. The Model Context Protocol has crossed into mainstream infrastructure — we tracked MCP’s mainstream adoption numbers earlier this year — which means every incident below happened, or can happen, inside toolchains that agencies, startups, and enterprises already run. When the next MCP incident lands, the first question any journalist, security lead, or buyer asks is: what’s the track record? This page is that record.

What follows: the counting rules, the full 27-row ledger, a frequency breakdown of what actually dominates the disclosed record, a patch-latency table that separates “patched” from “remediated in the field”, the Context7 regression date-match nobody else appears to have published, and the rows no patch can ever close.

Key takeaways
  1. 01
    27 dated entries, every one linked to the record it came from.25 incidents plus 2 protocol revisions, April 2025 through August 24, 2026. An incident that cannot be dated from a primary record gets no row — a shorter accurate ledger beats a longer padded one.
  2. 02
    Command injection dominates the disclosed record.11 of 25 incident rows are command or code injection through unsanitised exec, stdio, or config input — more than double the prompt-injection count. One coordinated advisory alone covered 16 such CVEs across 14+ platforms.
  3. 03
    Sixteen of 27 entries carry a confirmed fix.14 rows name a fixed version or dated production fix and 2 more were hosted remediations with no version to name. Three rows have no fix documented as of the dateline: GitHub Kanban MCP, adb-mcp, and the August Context7 CVE.
  4. 04
    Patched is a version-level fact, not a field-level one.Flowise shipped 3.0.6 in September 2025 and was still under active mass exploitation in April 2026. Nginx UI patched mid-March 2026 and had 2,600+ exposed instances a month later. The ledger records both dates.
  5. 05
    Four rows can never be patched at all.Tool poisoning, the WhatsApp exfiltration demo, the GitHub MCP toxic agent flow, and the Supabase lethal trifecta are architectural: agents trusting untrusted data. Their honest status is ‘mitigated only by agent-side guardrails’ — not a version number.

01MethodWhat counts as a row, and what doesn’t.

A ledger is only as citable as its counting rules, so here they are. A row requires a date from a primary record — a CVE or GHSA publication date, a vendor advisory, or a named researcher’s dated disclosure. An incident that cannot be dated from a primary record gets no row. One row — entry 22, CVE-2026-0755 — is dated to the month rather than the day, and it is shown that way rather than given a precision the record does not support. Where a second identifier for the same product circulated only in secondary coverage, it gets no row either — related identifiers are never merged into one entry on a secondary source’s say-so.

One event equals one entry, even when it spans multiple CVE numbers: Anthropic’s Filesystem MCP Server sandbox escapes (two CVEs, one Cymulate disclosure, one patch release) are one row, and OX Security’s April 2026 advisory — 16 CVEs across 14+ platforms, all the same defect pattern — is one row. Other trackers count every CVE separately and reach 40+; both tallies are defensible, but they measure different things. The 27 here are this ledger’s 27 verified entries, not an industry census.

Two entries are not incidents at all: the November 2025 authorization spec revision and the July 2026 stateless revision. They earn rows because a security ledger that omits the protocol’s own dated responses tells half the story. And the patch column obeys one discipline throughout: status is reported as of August 24, 2026. “No fixed version documented at capture” is a fact about the record; “still unpatched” would be a claim about the present that a dated page cannot honestly make. This is the same pin-every-row-to-a-source discipline that shaped our agent-framework SSRF validation census, applied to a timeline instead of a feature matrix. For the catalog of what’s running in the ecosystem rather than what broke, see the 50-server ecosystem tracker.

02The RecordThe ledger: 27 entries, April 2025 → August 2026.

Read the table in four phases. April–June 2025 is the vocabulary phase — researchers naming attack classes before CVE numbers existed for them. June–August 2025 is the CVE wave hitting individual servers and host apps. September–December 2025 brings the first confirmed-malicious package, mass exploitation, and the spec’s first hardening response. And 2026 escalates to platform-level CVEs, a 16-CVE coordinated advisory, and the ledger’s newest open entry.

The MCP security incident ledger: 27 dated entries from April 2025 through August 24, 2026 — 25 incidents plus 2 protocol revisions. Columns: entry number, date, component, defect class, disclosure route and record, and patch status as of August 24, 2026. Every row links the record it was captured from — a CVE, GHSA, vendor advisory, dated researcher disclosure, or the vulnerability database or report that carried it.
#DateComponentClassDisclosure route · recordPatch status as of 2026-08-24
Entries 1–5 · Apr–Jun 2025 · the vocabulary forms — researcher disclosures before the CVE wave
12025-04-01MCP tool descriptions (every client)invariantlabs.ai · tool poisoning notificationTool poisoning / prompt injection — plus the sibling rug-pull and shadowing classes named in the same disclosureResearcher disclosure — Invariant Labs (Luca Beurer-Kellner, Marc Fischer)Not independently patchable — a class disclosure, mitigated only by agent-side guardrails
22025-04-07WhatsApp MCP server (poisoned demo)invariantlabs.ai · follow-up demoTool poisoning — full chat-history exfiltration demonstratedResearcher demo — Invariant Labs; the mcp-scan static analyzer followed 2025-04-11Not patchable — proof-of-class demo, not a fixable defect in one codebase
32025-05-26GitHub official MCP serverinvariantlabs.ai · toxic agent flowConfused deputy — malicious public issue hijacks an agent into leaking private-repo data via a public PRResearcher disclosure — Invariant Labs; covered by Simon WillisonArchitectural — explicitly not a bug in the server’s code; no version fix exists
42025-06-04Asana MCP server (hosted)BleepingComputer · vendor noticeCross-tenant data exposure — incomplete access control; roughly 1,000 customer orgs affectedVendor advisory — AsanaHosted remediation — MCP access disabled 2025-06-05 → 2025-06-17, then restored with all connections reset
52025-06-13Smithery MCP hosting registrySC Media · GitGuardian reportPath traversal → supply-chain credential theft; 3,000+ hosted MCP servers exposed via dockerBuildPath: ".."Researcher report — GitGuardian, reported 2025-06-13; public write-up Oct 2025Hosted fix + credential rotation by 2025-06-15; no in-the-wild exploitation confirmed
Entries 6–13 · Jun–Aug 2025 · the CVE wave hits servers and host apps
62025-06-13Anthropic MCP InspectorOligo Security · CVE-2025-49596Missing auth → unauthenticated RCE — the proxy accepted arbitrary stdio commands from any browser clientCVE-2025-49596, CVSS 9.4 — reported to Anthropic 2025-04-18, published 2025-06-13Patched in 0.14.1 — returns HTTP 401 with a session-token requirement; Shodan showed 560 exposed instances at research time
72025-06-29@cyanheads/git-mcp-serverGHSA-3q26-f695-pp76Command injection — unsanitised child_process.exec in git_add / git_init / git_logsCVE-2025-53107, CVSS 7.5 — GHSAPatched in 2.1.5
82025-07-01Anthropic Filesystem MCP ServerCymulate · “EscapeRoute”Sandbox escape — crafted symlink (CVE-2025-53109, CVSS 8.4) and shared-prefix directory name (CVE-2025-53110, CVSS 7.3)Two CVEs, one disclosure — Cymulate Research LabsBoth patched in npm release 2025.7.1
92025-07-06Supabase MCP serversimonwillison.net · lethal trifectaStored prompt injection → data-exfiltration path via an agent with a live database connectionResearcher blogs — General Analysis and Simon Willison, 2025-07-06 → 09Architectural — vendor mitigations (read-only mode, project-scoped mode, tool feature groups) shipped 2025-09-16; no customer data leak was reported
102025-07-09mcp-remote (npm)GHSA-6xpm-ggf7-wc3pOS command injection — crafted authorization_endpoint response URL executes arbitrary commandsCVE-2025-6514, CVSS 9.6 Critical — GHSAPatched in 0.1.16
112025-07-12@sunwood-ai-labs/github-kanban-mcp-serverGHSA-6jx8-rcjx-vmwfCommand injection (CWE-78) — add_comment passes LLM-controlled input to exec running the gh CLICVE-2025-53818, CVSS 8.9 High — GHSANo fixed version documented as of 2026-08-24 — the GHSA record listed no patched release at capture
122025-07-16Cursor — MCP config handlingCheck Point Research · “MCPoison”Rug pull / trust-on-first-use bypass — approval keyed to file identity, not content, so an approved entry could be silently swappedCVE-2025-54136 — responsibly disclosed by Check Point ResearchFixed in Cursor 1.3 (late July 2025) — re-approval now required on every config modification
132025-08-02Cursor Agent — workspace file writesGHSA-4cxx-hrm3-49rm · “CurXecute”Rug pull via unapproved write — agent could create .cursor/mcp.json without approval; chained with prompt injection for code executionCVE-2025-54135, CVSS 8.5 — GHSAPatched in Cursor 1.3.9
Entries 14–19 · Sep–Dec 2025 · supply chain, mass exploitation, and the spec’s first answer
142025-09-15Flowise — CustomMCP nodeGHSA-3gcm-f6qx-ff7pCode injection → RCE — unsanitised config reaches JavaScript’s Function() constructorCVE-2025-59528 — GHSAPatched in 3.0.6 (Sept 2025); still under active mass exploitation as of April 2026 — 12,000+ exposed instances reported
152025-09-17postmark-mcp (npm impostor package)Koi · disclosure 2025-09-25Supply chain — 15 trust-building releases, then a one-line backdoor in v1.0.16 silently BCC’ing every outbound emailResearcher disclosure — Koi; first confirmed malicious (not merely vulnerable) MCP packageMalicious by design — removal and credential rotation, not a patch; Postmark itself had no involvement
162025-09-24adb-mcpGHSA-54j7-grvr-9xwgCommand injection (CWE-77/78) — inspect_ui’s device parameter reaches Node’s exec() unsanitisedCVE-2025-59834, CVSS 9.8 Critical — GHSANo fixed version documented as of 2026-08-24 — none listed at GHSA capture
172025-09-29Framelink Figma MCP serverEndor Labs · CVE-2025-53967Command injection → unauthenticated RCE — a curl fallback path shelled out on an unsanitised URL; 100k+ downloads per month at the timeCVE-2025-53967 — Endor Labs; public coverage Oct 2025Fixed in 0.6.3 (2025-09-29)
182025-11-25MCP authorization specden.dev · spec analysisSpec hardening (not an incident) — servers become formal OAuth 2.1 resource servers; RFC 9728 metadata + RFC 8707 resource indicators requiredProtocol revisionn/a — directly hardens the token-theft and confused-deputy classes above
192025-12-30@serverless/mcpGHSA-rwc2-f344-q6w6Command injection (CWE-77) — experimental list-projects toolCVE-2025-69256, CVSS 7.5 — GHSAPatched in 4.29.3
Entries 20–27 · Jan–Aug 2026 · platform CVEs, the OX advisory, and a regression
202026-01-09Tencent WeKnora — MCP stdio configurationCVEdetails · CVE-2026-22688Command injection — authenticated user injects stdio_config.command/argsCVE-2026-22688 — disclosed 2026-01-09Patched in 0.2.5
212026-01-10LibreChat — MCP stdio transportGHSA-cxhj-j78r-p88fCommand injection via insecure defaults — any authenticated user triggers root-level shell execution in one API callCVE-2026-22252, CVSS 9.1 Critical — GHSA; affects 0.8.2-rc1Patched in 0.8.2-rc2
222026-01 (Jan)gemini-mcp-toolSentinelOne · CVE-2026-0755Command injection + @file exfiltration — unauthenticated and network-reachable per ZDI analysisCVE-2026-0755, CVSS 9.8 — disclosed Jan 2026Fixed in 1.1.6
232026-02-18Upstash Context7 — “Custom Rules”Noma Security · “ContextCrush”Prompt injection — maintainer-supplied rules served verbatim into every user’s MCP session with zero sanitisationResearcher disclosure — Eli Ainhorn, Noma Security; reported 2026-02-18, public 2026-03-05Production fix shipped 2026-02-23 — five days from report
242026-03-15Nginx UI — /mcp_message endpointThe Hacker News · CVE-2026-33032Missing auth — empty IP allowlist treated as allow-all; any network attacker could invoke privileged MCP toolsCVE-2026-33032, CVSS 9.8 — reported by Pluto Security (Yotam Perkal), early March 2026Patched in 2.3.6 (2026-03-15); in-the-wild exploitation confirmed mid-April with 2,600+ instances still exposed
252026-04-1514+ MCP-integrated platforms (one advisory)OX Security · 16-CVE advisorySystemic command injection — STDIO transport spawning subprocesses from unsanitised config strings; 16 CVEs incl. LiteLLM, Windsurf, DocsGPT, Agent Zero, and a second Flowise flawCoordinated vendor advisory — OX Security; CSA synthesis note followed 2026-04-20Mixed — per-CVE patch status varies across the 14+ platforms; no single status is honest here
262026-07-28MCP spec — “stateless” revisionGoogle Developers BlogSpec hardening (not an incident) — handshake and Mcp-Session-Id removed; RFC 9207 issuer verification required on authorization responsesProtocol revisionn/a — closes a session-hijacking-adjacent gap in multi-server deployments
272026-08-18Upstash Context7 MCP serverNVD · CVE-2026-75130Prompt injection via custom AI instructions — scored 9.0 on CVSS 3.1 and 6.4 on CVSS 4.0; both numbers are part of the recordCVE-2026-75130 — disclosed 2026-08-18; affected ≤2.1.2No public fix documented as of 2026-08-24 — npm latest sat at 4.0.3 (released 2026-08-21) with no GHSA and no release note documenting a fix for this CVE
How to read the patch column
Every status cell is frozen at August 24, 2026. “No fixed version documented as of 2026-08-24” means exactly that — the GHSA or vendor record listed no fix at capture. It does not mean “still unpatched today”, which is a present-tense claim a dated ledger cannot make. Symmetrically, “patched in X” never means the field is safe: two rows above show shipped patches coexisting with mass exploitation months later.

03FrequencyWhat actually dominates the disclosed record.

Classify the 25 incident rows and the distribution is lopsided. Prompt injection gets the headlines — it is the MCP-native attack, the one that makes agents special. But the disclosed-CVE record is dominated by something far older: command and code injection through unsanitised exec, stdio, and config input, at 11 of 25 rows — more than double the prompt-injection count.

Vulnerability-class frequency · 25 incident rows · Apr 2025 → Aug 2026

Source: this ledger’s 25 incident rows, classified by primary defect — spec revisions excluded
Command & code injectionexec / stdio / config input — incl. the 16-CVE OX advisory as one row
11
Prompt injection / tool poisoningInvariant’s class disclosures, Supabase trifecta, both Context7 entries
5
Confused deputy & isolation failuresGitHub MCP toxic flow, Asana cross-tenant, Filesystem sandbox escape
3
Rug pull / trust-on-first-useMCPoison and CurXecute, both in Cursor
2
Supply chainSmithery registry traversal, malicious postmark-mcp package
2
Missing auth / exposed endpointMCP Inspector, Nginx UI /mcp_message
2

The trend reading matters more than the counts. Command injection dominates the CVE record partly because it is mechanically easy to find — static analysis catches an unsanitised exec() call in a way no scanner catches a poisoned tool description. So the disclosed record likely understates prompt-injection risk relative to its real-world weight: the injection rows are the ones a linter could have prevented, while the poisoning rows are the ones only architecture can address. A team that reads this table as “prompt injection is rare” has read it backwards — it is rare in CVE databases because CVE databases were never built to hold it.

The supply-chain rows deserve their own sentence, because one of them crossed a line no earlier entry had: postmark-mcp was not vulnerable, it was hostile — fifteen legitimate releases building trust before v1.0.16 added a single line that BCC’d every outbound email to an attacker’s domain. Postmark’s own statement was blunt: “Postmark had absolutely nothing to do with this package or the malicious activity. This is not an official Postmark tool.” The impostor-package pattern needs no vulnerability at all — only a plausible name and patience.

04Patch LatencyTime-to-fix, and why patched ≠ remediated.

Where the record documents both a report date and a fix date, you can compute latency — original arithmetic no single source in this research published as a distribution. The spread runs from two days to never. And two rows prove that the patch date is only half the story: the field keeps running the vulnerable version long after the fix ships.

Patch-latency distribution for the subset of ledger entries with both a documented report or disclosure date and a documented fix date, plus the three entries with no fix documented as of August 24, 2026. Columns: incident, reported or disclosed date, fix shipped date, elapsed time, and post-patch field evidence. Elapsed days are computed from the two dated columns in the same row.
IncidentReported / disclosedFix shippedElapsedPost-patch field evidence
Fixed — both dates documented
Smithery path traversal2025-06-13by 2025-06-152 daysCredentials rotated; no in-the-wild exploitation confirmed
ContextCrush (Context7 Custom Rules)2026-02-182026-02-235 daysPublic disclosure followed 2026-03-05 — see entry 27 for the August sequel
Asana cross-tenant exposure2025-06-042025-06-1713 daysMCP access disabled throughout; all connections reset on restore
MCPoison (Cursor TOFU bypass)2025-07-16Cursor 1.3, late July 2025≈2 weeksRe-approval on every MCP config change became the default
Nginx UI missing authearly March 20262026-03-15 (v2.3.6)≈2 weeksExploitation confirmed mid-April 2026; 2,600+ instances still exposed a month post-patch
Flowise CustomMCP RCE2025-09-153.0.6, available at disclosurepatch at publicationStill under active mass exploitation April 2026 — 12,000+ exposed instances, seven months post-patch
Open — no fix documented as of 2026-08-24
GitHub Kanban MCP (CVE-2025-53818)2025-07-12none documented408 days to dateline
adb-mcp (CVE-2025-59834)2025-09-24none documented334 days to dateline
Context7 (CVE-2026-75130)2026-08-18none documented6 days to datelineAffected range (≤2.1.2) sits below the npm latest of 4.0.3 — see section 05

Tally the fix column across all 25 incident rows and the honest summary is: 14 rows name a fixed version or a dated production fix, two more (Asana, Smithery) were hosted remediations with no version to name, three have no fix documented at capture, four are architectural and cannot be version-fixed, one was malicious by design, and one — the OX advisory — is a mixed bag across 14+ platforms. That is 16 of 27 entries with a confirmed fix, counting the two hosted remediations. A ledger that printed a flat “Patched: Yes” checkmark column would flatten all six of those categories into false confidence.

Named fixes
Incident rows with a versioned or dated fix
14/25

From MCP Inspector 0.14.1 to Nginx UI 2.3.6. Two more rows — Asana and Smithery — were remediated as hosted services with no client-side version to name.

+2 hosted remediations
Open at capture
Rows with no fix documented
3

GitHub Kanban MCP (408 days to dateline), adb-mcp (334 days), and Context7’s CVE-2026-75130 (6 days). Status is as-of-2026-08-24, from the GHSA and NVD records at capture.

as of 2026-08-24
Patched ≠ safe
Patch-exists-but-exploited rows
2

Flowise: patched Sept 2025, mass-exploited through April 2026. Nginx UI: patched mid-March 2026, 2,600+ exposed a month later. Patch date and field adoption are different facts.

the ledger tracks both

05Forensic DetailThe Context7 date-match nobody else published.

Two ledger entries share one component, and the dates line up in a way worth recording. Entry 23: Noma Security reports ContextCrush in Context7’s Custom Rules on February 18, 2026, and Upstash ships a production fix five days later. Entry 27: CVE-2026-75130, disclosed August 18, 2026, is a prompt injection in the same product’s custom-instruction surface, with an affected range of ≤2.1.2.

Here is the connective fact: npm shows @upstash/context7-mcp@2.1.2 published on February 23, 2026 — the exact date the ContextCrush fix reached production. The version that shipped the February fix sits inside the August CVE’s affected range. Roughly six months separate the fix and the new CVE against the same attack surface — which makes the August entry read as a likely regression or an incompletely closed class, not a novel bug family. We are not aware of anyone else having published this date-match. For the full story of the August CVE itself — mechanism and what to do about it — see our full writeup of CVE-2026-75130; this ledger only records its dates.

Two record-keeping notes on that entry. First, its severity is genuinely double-valued — 9.0 on CVSS 3.1, 6.4 on CVSS 4.0 — and quoting either number alone tells half the story, so this ledger carries both. Second, its patch cell is the strictest in the table: the affected range (≤2.1.2) sits below the npm latest at research time (4.0.3, released August 21), yet no GHSA and no release note through 4.0.3 documents a fix for this specific CVE. “No public fix documented as of the date checked” is the only defensible framing — not “fixed”, and not “still unpatched” either.

"The attack surface isn't what the MCP server can do. It's in what it can make the AI agent do."— Eli Ainhorn, Noma Security threat research, on ContextCrush

06UnpatchableThe rows nothing can patch.

Four incident rows have no version number in their status cell and never will: Invariant’s tool-poisoning class disclosure, its WhatsApp exfiltration demo, the GitHub MCP toxic agent flow, and the Supabase lethal trifecta. Invariant was explicit about the GitHub case: this is not a bug in the server’s code. It is a confused-deputy pattern — an agent granted real privileges, reading attacker-controlled content, with a channel to leak through. You cannot patch a server out of an architecture.

The vendors involved responded the only way the class allows: by narrowing blast radius. Supabase’s September 2025 write-up — which noted no customer data leak had been reported — shipped read-only mode, project-scoped mode, and tool feature groups, while cautioning that “guardrails alone aren’t enough.” That phrasing is the right epitaph for the whole category: these four rows stay open on every future edition of this ledger, managed rather than closed. For how to actually defend against the techniques behind them, see the attack-technique and defense playbook — this page deliberately stays a record, not a manual.

For teams running MCP in production, the operational translation is scope, not patching: least-privilege connections, read-only defaults where the workload allows, and treating every external data source an agent reads as attacker-controlled. Auditing an agent stack against exactly this class of exposure is part of what our AI transformation engagements cover — the ledger above is, in practice, the checklist of what has already gone wrong for someone else.

07Protocol ResponseHow the spec answered its own ledger.

The two non-incident entries are the protocol reading its own incident record. The November 25, 2025 authorization revision made MCP servers formal OAuth 2.1 resource servers — RFC 9728 Protected Resource Metadata so clients discover the correct auth server, RFC 8707 Resource Indicators so a token cannot be replayed against the wrong MCP server. Those are direct answers to the token-theft and confused-deputy classes that fill the 2025 rows. The July 28, 2026 stateless revision then removed the handshake and session header entirely and required RFC 9207 issuer verification, closing a session-hijacking-adjacent gap in multi-server deployments — we cover the mechanics in the July spec’s stateless migration guide, so this ledger records it purely as a dated hardening event.

Looking forward, the honest projection from sixteen months of record is that the ledger grows at both ends. The command-injection rows should thin as the OX advisory’s lesson — never spawn subprocesses from unsanitised config — hardens into SDK defaults and CI linting; that class is mechanically findable and mechanically preventable. The prompt-injection and confused-deputy rows should thicken, because each spec revision that closes one theft target tends to mint the next one — security commentary around the stateless revision has already flagged opaque state handles as the successor to session-ID theft. And the Context7 date-match suggests a third growth lane nobody budgets for: regressions of fixes already shipped. Expect future editions of this page to add rows faster than they retire them.

08ConclusionA record is a security control.

The ledger, kept

Twenty-seven dated entries, and a column discipline that keeps them honest.

Sixteen months of MCP security history compresses into three findings. Command injection through unsanitised input — not prompt injection — dominates the disclosed record, at 11 of 25 incident rows. Patch status decays the moment it is written: 16 of 27 entries carry a confirmed fix, three carry none at capture, and two of the “patched” rows were still being mass-exploited months after their fix shipped. And the classes that define MCP specifically — poisoned tools, confused deputies — are the ones no version number will ever close.

The dateline discipline is the part worth stealing for your own records. Every status in this table is a claim about August 24, 2026, verifiable against the record linked in its row — never a present-tense assertion that quietly rots. That is what makes a ledger citable a year later, and it is why a shorter accurate table beats a longer padded one: the dates are the citation value.

If the table above made your MCP stack feel less audited than it should be, the companion piece is a 75-point security audit checklist — the ledger tells you what has happened; the checklist tells you what to check before your stack becomes entry 28.

Audit your agent stack

Every row in this ledger happened to a team that didn’t expect it.

Our team audits MCP toolchains and agent stacks against exactly the incident classes in this ledger — least-privilege server scoping, injection-surface review, and patch-currency checks, delivered in days not quarters.

Free consultationExpert guidanceTailored solutions
What we work on

Agent-security engagements

  • MCP server inventory & least-privilege scoping
  • Injection-surface review across agent toolchains
  • Patch-currency audits against the live CVE record
  • Guardrail architecture for untrusted-data flows
  • Incident-response runbooks for agent stacks
FAQ · MCP incident ledger

The questions the record gets asked.

An entry requires a date from a primary record — a CVE or GHSA publication, a vendor advisory, or a named researcher’s dated disclosure; one row, CVE-2026-0755, is dated to the month rather than the day and is shown that way. The 27 entries break down as 25 incidents plus 2 protocol revisions (the November 2025 authorization spec and the July 2026 stateless revision), which earn rows because the protocol’s dated responses are part of the security record. One event equals one entry even when it spans multiple CVEs: Anthropic’s Filesystem MCP Server escapes (two CVEs, one disclosure, one patch) are one row, and OX Security’s April 2026 advisory covering 16 CVEs across 14+ platforms is one row. An incident that cannot be dated from a primary record gets no row at all — the dates are the entire citation value.
Related dispatches

Continue exploring agent security.

AI Development

CrewAI Quietly Fixed an SSRF Gap Agent Fetch Tools Can Share

CrewAI 1.15.17 pins SSRF checks to every redirect hop and the resolved peer IP. The same pattern can sit in any agent tool that fetches a model-supplied URL.

August 20, 2026 · 18 minRead
AI Development

Anthropic Published Its Auto-Mode Classifier Numbers

Anthropic's engineering post publishes auto-mode classifier results across three separate datasets. Why an FPR and an FNR from different sets cannot be paired.

August 16, 2026 · 13 minRead
AI Development

Grok Bot: xAI's AI Teammates Get Their Own Computer

xAI's Grok Bot launched in beta on August 11. The launch page says Bots have their own computer; xAI's own docs say an account's Bots all share one.

August 11, 2026 · 15 minRead
AI Development

Vercel AI SDK Tool Drift Defenses: Stop MCP Rug Pulls

Vercel's AI SDK 7.0.19 (July 9, 2026) adds fingerprintTools and detectToolDrift to catch MCP tools that mutate after you trust them. Detection, not prevention.

July 11, 2026 · 13 minRead
AI Development

State of AI Agents 2026: 200+ Data Points Compiled

The definitive State of AI Agents 2026 — 247 data points across adoption, ROI, autonomy, and governance, sourced from McKinsey, Stanford HAI, and Gartner.

May 22, 2026 · 16 minRead
AI Development

AI Video Generation 2026: Omni vs Sora vs Veo 3 Compared

Gemini Omni, OpenAI Sora 2, and Google Veo 3.1 compared for video — quality, per-second cost spread of 17x, and the September 24 Sora API sunset clock.

May 22, 2026 · 15 minRead