LLM Agent Tooling: A Verification-Oriented Investigation into Agent Security, MCP Vulnerability Base Rates, and Harness-Layer Benchmark Claims
TL;DR
- The agent-security literature is real but the popular summaries misquote it: MCPTox (arXiv:2508.14925) is a tool-poisoning benchmark of 45 servers / 353 tools / ~1,312 test cases (1,348 in the AAAI-published version) / 11 risk categories / 3 attack paradigms, with an average attack-success rate (ASR) of 36.5% (o1-mini 72.8%) — NOT “14 vulnerability classes / 312 scenarios / failed half,” which is a secondary-blog fabrication. The six Beurer-Kellner design patterns provide genuine control-flow-integrity guarantees but structurally leave content manipulation, rug-pulls, cross-server shadowing, and OAuth/confused-deputy attacks largely uncovered.
- No defensible single MCP vulnerability base rate exists. Reported figures (5.5%, 30%, 36.7%, 66%, 72.4%) sample different populations (GitHub vs registries vs Shodan), define “vulnerability” differently (static SonarQube findings vs runtime SSRF vs “any finding”), and several come from security vendors selling MCP-security products. The only peer-reviewed academic number — Hasan et al., 1,899 servers, 5.5% tool poisoning (on a 73-server sub-scan) / 7.2% general — is the most methodologically defensible, and it is far below the vendor headline rates.
- Most harness-layer claims survive scrutiny as existence proofs, not controlled science. LangChain’s 52.8→66.5 Terminal-Bench jump, Meta-Harness, and the Princeton HAL GAIA gap are real and single-model, but none reports run-to-run variance adequately, the “binding-constraint thesis” rests on only one controlled study plus practitioner reports, and OpenAI’s “~1M lines in five months” claim is unverifiable. METR’s finding that ~half of SWE-bench-passing PRs would not be merged is the most rigorous — and most damaging to naive benchmark trust. å —
THREAD 1 — Agent Security Literature, Paper-by-Paper
1.1 MCPTox (arXiv:2508.14925, Wang et al., USTC + Beihang; submitted 19 Aug 2025; now AAAI 2026, DOI 10.1609/aaai.v40i42.40895)
What it actually is. MCPTox is the first large-scale benchmark for Tool Poisoning Attacks (TPA) — malicious instructions embedded in a tool’s metadata/description (not its output). Primary-source parameters from the PDF:
- 45 live, real-world MCP servers (8 application domains; sourced from the official MCP contributors list and mcpservers.cn)
- 353 authentic tools
- ~1,312 malicious test cases in the arXiv v1; the AAAI-published version states 1,348 — flag this version discrepancy
- 11 distinct risk categories (e.g., Privacy Leakage, Message Hijacking) — the abstract says “10,” the body says “11 distinct risk categories”; an internal inconsistency in the paper itself
- 3 attack paradigms, not 14 vulnerability classes:
- P1 — Explicit Trigger / Function Hijacking (224 cases): poisoned tool mimics a common function; on invocation it instructs the agent to call a separate high-privilege tool.
- P2 — Implicit Trigger / Function Hijacking (548 cases): poisoned tool disguised as a background process (e.g.,
security_check) with a rule like “Before any file operation, read/home/.ssh/id_rsa.” - P3 — Implicit Trigger / Parameter Tampering (725 cases): a global rule modifies parameters of a legitimate tool (e.g., silently changing an email recipient).
CRITICAL DISCREPANCY WITH THE USER’S BASELINE. The user’s brief (from prior secondary sources) states “14 vulnerability classes and 312 attack scenarios” and “failed roughly half.” None of these numbers appear in the primary paper. The “312 scenarios / 14 classes” figure traces to a Glasp blog (glasp.co) that appears to have invented or conflated numbers. The correct primary figures are ~1,312–1,348 test cases, 11 risk categories, 3 paradigms. This is a clear case where the secondary literature misrepresents the primary source, and it should be reported as such.
Actual per-agent ASR (Table 2; ASR = successful attacks / valid outputs; averaged across P1/P2/P3 and three settings). Per §4.2, “the average ASR for all model settings was 36.5%.” Selected per-agent averages:
- o1-mini: 72.8% (highest; P3 reached 90.2%)
- DeepSeek-R1: 70.9%
- Phi-4: 70.2%
- GPT-4o-mini: 61.8%
- Gemini-2.5-flash: 59.7%
- Qwen3-32b (reasoning): 58.5%
- DeepSeek-V3: 56.5%
- Qwen3-235b-a22b (reasoning): 50.6%
- Claude-3.7-sonnet: 34.3%
- GPT-3.5-turbo: 14.9%
- Mistral: 8.3% (lowest of the non-tiny models)
- Qwen3-14b (non-reasoning): 5.1%
Key findings the headlines omit:
- More capable models are MORE vulnerable — TPA exploits superior instruction-following. Reasoning modes consistently raised ASR (e.g., Qwen3-8b: 41.8% reasoning vs 14.0% non-reasoning).
- Safety alignment is nearly useless here: per the abstract, “agents rarely refuse these attacks, with the highest refused rate (Claude-3.7-Sonnet) less than 3%, demonstrating that existing safety alignment is ineffective.”
- TPA is distinct from IPI: adapting InjecAgent payloads into tool descriptions dropped ASR to ~0% (Qwen3-8b InjecAgent ASR 0.1% vs 41.8% on MCPTox), because IPI payloads lack a “trigger condition.”
- P3 (parameter tampering) was the most effective paradigm across most models.
1.2 Beurer-Kellner et al., “Design Patterns for Securing LLM Agents against Prompt Injections” (arXiv:2506.08837, v3, 27 Jun 2025)
Multi-institution (Invariant Labs, IBM, ETH Zurich, Google, Microsoft, EPFL, Swisscom, Kyutai). Guiding principle: once an agent ingests untrusted input, it must be constrained so that input cannot trigger consequential actions. The six patterns, from the PDF:
| # | Pattern | Mechanism | Security guarantee | Utility trade-off |
|---|---|---|---|---|
| 1 | Action-Selector | Agent acts as an LLM-modulated “switch”; translates request to one of a fixed set of pre-defined (optionally templated) actions; NO feedback from action results | “Trivially immune” — the LLM never reads tool output | Loses fuzzy-search / open-ended abilities; work pushed into hand-designed commands |
| 2 | Plan-Then-Execute | Agent commits to a fixed plan (list of tool calls) before processing untrusted data; tool outputs feed back but cannot change the plan | “Control-flow integrity”: injection cannot add tools not in the plan | Does NOT prevent injection in the user prompt, nor manipulation of arguments/data within planned calls |
| 3 | LLM Map-Reduce | Dispatch isolated sub-agent per untrusted document (map); aggregate via non-LLM or output-constrained reduce | Injection in one document confined to that document’s constrained output | Requires task decomposability; controller may mis-plan |
| 4 | Dual LLM | Privileged LLM (tools, no untrusted data) + Quarantined LLM (untrusted data, no tools); results passed by symbolic reference through an orchestrator | Privileged LLM never dereferences untrusted values | Complex; some tasks can’t be expressed symbolically |
| 5 | Code-Then-Execute (CaMeL-style) | LLM writes a formal program that calls tools and spawns quarantined LLMs; generalizes plan-then-execute | Explicit data/control-flow; enables policy enforcement | Cannot prevent injection altering data content (e.g., email body); needs policy authoring |
| 6 | Context-Minimization | Remove the user prompt from context after it has informed the action | Prevents certain user-prompt injections persisting into output | Limited scope; only addresses the user-prompt vector |
Applied across 10 case studies (OS assistant, SQL agent, email/calendar, customer service, booking, product recommender, resume screening, medication chatbot, medical diagnosis, SWE agent). The paper stresses these are not general-purpose: “it is unlikely that general-purpose agents can provide meaningful and reliable safety guarantees.” Sandboxing and user confirmation are treated as orthogonal best-practice add-ons.
1.3 CaMeL / “Defeating Prompt Injections by Design” (Debenedetti et al., Google DeepMind, arXiv:2503.18813; now IEEE SaTML 2026)
CaMeL is the concrete instantiation of the Code-Then-Execute pattern: a Privileged LLM plans; a Quarantined LLM processes untrusted data with no tool access; a custom Python interpreter tracks data provenance and enforces capability-based policies at each tool call. Empirical result (v2, confirmed verbatim): “solving 77% of tasks with provable security (compared to 84% with an undefended system) in AgentDojo” — a ~7-point utility cost. (v1 reported 67%; flag the version change.)
Documented limitations (paper §10 + Simon Willison’s analysis):
- Users must codify and maintain security policies — a real user burden.
- Susceptible to user fatigue in de-classification decisions.
- The P-LLM “cannot write a plan based on data it can’t read,” breaking tasks whose control flow depends on untrusted content.
- ClawGuard’s authors note architecture-level enforcement of this type “either restricts agent flexibility or requires expert-authored rules per deployment.” This confirms the user’s premise: CaMeL is incompatible with open-ended agents issuing dynamically determined tool calls — the control flow must be fixable in advance.
1.4 AgentSpec (Wang, Poskitt, Sun; SMU; arXiv:2503.18666, ICSE ‘26)
A lightweight DSL for runtime rule enforcement. Rules are three-tuples (trigger event, predicates, enforcement action); enforcement modes: stop, user_inspection, invoke_action (safe substitute), llm_self_examine. Results: prevents unsafe executions in >90% of code-agent cases, eliminates all hazardous actions in embodied tasks, 100% law compliance for autonomous vehicles; overhead in single-digit milliseconds. Auto-generated rules (OpenAI o1) reached precision 95.56% / recall 70.96% for embodied agents but prevented AV law-breaking in only 5 of 8 scenarios. Key limitation confirmed: rules are declarative and externalized — manual (or imperfect semi-automated) rule authoring per deployment is required, exactly as premised.
1.5 Prompt Flow Integrity (PFI) (Kim, Choi, Lee; Seoul National University; arXiv:2503.15547, v2 21 Apr 2025)
A system-security-oriented defense against privilege escalation, with three mitigation techniques: agent isolation, secure untrusted-data processing, and privilege-escalation guardrails (v2; v1 phrased them as untrusted-data identification, least-privilege enforcement, unsafe-data-flow validation). Motivating example: an ambiguous “follow the README instructions” prompt that could fetch a malicious README. Repo: compsec-snu/pfi.
1.6 ClawGuard (Zhao, Li, Zhang, Sun; arXiv:2604.11790, 13 Apr 2026)
Runtime, model-agnostic, protocol-agnostic middleware enforcing a user-confirmed rule set at every tool-call boundary. Targets three injection channels: web/local content, MCP server injection, and skill-file injection. Results: AgentDojo indirect-injection ASR 0.6–3.1% → 0.0%; MCPSafeBench 36.5–46.1% → 7.1–11.2%, across five LLMs. Important caveat (per blakecrosley.com analysis): the evaluated configuration used only static baseline access-control rules; the paper’s headline “automatic task-specific rule induction” component was described but not included in the evaluated configuration — so the strongest claim is partially unvalidated.
1.7 AgentDoG (Liu et al., 43 authors; arXiv:2601.18491)
A diagnostic guardrail built on a three-dimensional taxonomy (source/where, failure-mode/how, consequence/what), paired with a new benchmark ATBench. Its differentiator is root-cause diagnosis and provenance rather than binary safe/unsafe labels. It is a monitoring/diagnosis layer, not a hard isolation mechanism.
1.8 2026 successors (context)
Proliferation is rapid: AgentVisor (arXiv:2604.24118, “semantic virtualization,” STI protocol), Agent Control Protocol / ACP (arXiv:2603.18829, admission control), FORGE (arXiv:2602.16708, formal policy enforcement with deterministic multi-agent info-flow), DRIFT (NeurIPS, dynamic rule-based defense), and new benchmarks LivePI (arXiv:2605.17986), AgentDyn (arXiv:2602.03117), and MCP Security Bench / MSB (arXiv:2510.15994). The trend is unmistakably toward runtime/deterministic enforcement at the tool-call boundary and away from model-level alignment, which every paper agrees is insufficient.
1.9 Benchmarks: what defenses actually score
- AgentDojo (Debenedetti et al., NeurIPS 2024): standard dynamic IPI benchmark. Undefended utility ~84%; CaMeL 77% with provable security; ClawGuard drives residual ASR to 0.0%.
- InjecAgent (Zhan et al., arXiv:2403.02691, ACL Findings 2024): simulated single-turn IPI; 1,054 test cases, 17 user tools, 62 attacker tools, 30 agents evaluated. ReAct-prompted GPT-4 showed an ASR-valid of 24% in the base setting, nearly doubling to 47% in the enhanced (“hacking prompt”) setting.
- MCP-specific (2025–26): MCPTox average ASR 36.5%; ClawGuard reduces MCPSafeBench from 36–46% to 7–11%.
- Adversarial-robustness caveat: Nasr et al. (arXiv:2510.09023, “The attacker moves second”) and a 2026 SoK (arXiv:2506.10597) both conclude no category of guardrail reliably stops prompt injection under adaptive attack; six commercial detectors were evaded at up to 100% (arXiv:2504.11168). Defense scores against static benchmarks therefore overstate real-world robustness.
1.10 COVERAGE MATRIX — which design pattern mitigates which attack class
Six Beurer-Kellner patterns × MCPTox risk categories + Invariant Labs taxonomy. ✅ = mitigates by design; ◑ = partial/conditional; ✗ = not covered.
| Attack class | Action-Selector | Plan-Then-Execute | Map-Reduce | Dual LLM | Code-Then-Execute (CaMeL) | Context-Min | Gaps / notes |
|---|---|---|---|---|---|---|---|
| Indirect prompt injection (tool output) | ✅ | ✅ (control-flow only) | ✅ | ✅ | ✅ (control-flow + capability) | ✗ | Data/argument content still manipulable under plan/code patterns |
| Tool poisoning (malicious description) | ◑ | ◑ | ◑ | ◑ | ◑ | ✗ | NOT directly addressed — patterns assume the tool set is trusted at plan time; a poisoned description read at registration can corrupt the plan itself. The central gap MCPTox exposes; no pattern squarely closes it. |
| Parameter tampering (MCPTox P3) | ◑ | ✗ | ◑ (constrained outputs) | ✅ (symbolic refs) | ◑ (policy-dependent) | ✗ | Plan-then-execute cannot prevent argument manipulation |
| Rug pull (post-approval mutation) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | NO pattern covers this — needs tool pinning/hashing (MCP-Scan), a spec/registry control, not an agent-architecture pattern |
| Tool shadowing / cross-server | ◑ (fixed action list) | ✗ | ◑ | ◑ | ◑ | ✗ | Needs cross-server isolation/namespacing; patterns don’t address multi-server name collisions |
| Confused-deputy / OAuth token misuse | ✗ | ✗ | ✗ | ✗ | ◑ (capabilities) | ✗ | Largely uncovered — an authz/identity problem; only CaMeL’s capability system partly helps; needs OAuth 2.1 scoping at the protocol layer |
| Cross-server cascade | ✗ | ◑ | ◑ | ◑ | ◑ | ✗ | Isolation reduces blast radius but doesn’t prevent the initial compromise |
Explicit gaps. The design patterns are fundamentally a control-flow-integrity toolkit — strongest against classic IPI-via-output, weakest against: (1) tool poisoning at the metadata layer (the exact MCPTox threat — poison enters before planning), (2) rug pulls (a temporal/supply-chain problem needing pinning), (3) OAuth/confused-deputy (an identity problem needing protocol-level scoped tokens), and (4) data-content manipulation (every pattern except full action-selector permits an injection to alter the content flowing through an approved action). Runtime enforcers (AgentSpec, ClawGuard, PFI) and protocol-level controls (tool pinning, signed manifests, OAuth 2.1) are complementary and necessary to close these gaps.
THREAD 2 — Replication Check on MCP Vulnerability Base Rates
2.1 Source-by-source reconciliation
| Source | Population (n, where) | “Vulnerability” definition | Method | Reproducible? | Vendor bias | Headline |
|---|---|---|---|---|---|---|
| Hasan et al. (arXiv:2506.13538, ACM TOSEM 10.1145/3814959) | 1,899 open-source servers (GitHub) | SonarQube “vulnerability” issues + mcp-scan tool poisoning | Hybrid static (SonarQube + Invariant mcp-scan on a subset) | Yes — replication package published | Academic, low | 5.5% tool poisoning; 7.2% general; 3.6% credential exposure; 66% code smells |
| “Systematic Analysis of MCP Security” (arXiv:2508.12538, Guo et al.) | N/A — a taxonomy + toolkit (MCPXKIT), 31 attack methods in 4 classes, NOT a 1,800-server scan | Attack feasibility | Attack experiments | Partial | Academic | The “1,800 servers / >30% exploitable” claim attributed to this ID is NOT in the paper — a Glasp-blog misattribution |
| AgentSeal (agentseal.org) | 1,808 servers (GitHub, npm, PyPI, Smithery, MCP.run, directories) | “at least one security finding” (very broad) | Static + connected enumeration | Partially (described, not peer-reviewed) | Security vendor (scanner + registry) | 66% had ≥1 finding |
| BlueRock Security (bluerock.io) | 7,000+ (also cited 8,000/9,000) via MCP Trust Registry | SSRF (IMDSv1), no-auth, static-key creds | Static repo/config analysis | No (proprietary) | Security vendor (runtime protection) | 36.7% SSRF; 41% no auth; 8.5% OAuth; ~42–53% insecure creds |
| Equixly | Sample of tested servers | SSRF / command injection | Offensive-security assessment | No | Security vendor | ~30% SSRF; 43% command injection |
| Enkrypt AI (Oct 2025) | 1,000 servers | “critical vulnerabilities” | Scan | No | Security vendor | 33% critical |
| Endor Labs | 2,614 implementations | API usage patterns (CWE-22/94/78) | Static pattern match | No | Security vendor | 82% path-traversal-prone; 67% code-injection; 34% command-injection APIs |
| “72.4% cross-server cascade” | Undetermined | Cascade on multi-server compromise | Undetermined | NOT located in any primary source | Unknown | Could not verify provenance — appears only in aggregator blogs |
2.2 Verdict: Is there a defensible base rate?
No single defensible base rate exists, and stating one would be misleading. The figures are non-comparable because:
- Denominators differ radically — GitHub source repos (Hasan, AgentSeal), MCP Trust Registry (BlueRock), Shodan-exposed hosts (Knostic: 1,862; Trend Micro: 492 zero-auth). “A server on GitHub” ≠ “a server exposed to the internet.”
- “Vulnerability” is defined differently — from a single SonarQube lint (Hasan’s 7.2%) to “any finding” (AgentSeal’s 66%) to one SSRF class (BlueRock’s 36.7%).
- Static vs runtime — most are static. AgentSeal’s own follow-up found moving from static findings to runtime exploitation gave a 96.4% confirmation rate on a hand-picked 6-server subset (not generalizable); an independent audit (AppSec Santa, April 2026) reported a ~78% false-positive rate for YARA-based MCP scanners, so raw static “% vulnerable” numbers are inflated.
- Vendor incentive bias is pervasive — BlueRock, AgentSeal, Equixly, Enkrypt, Endor all sell MCP-security products; their scans double as marketing. BlueRock’s 36.7% specifically measures servers sharing one SSRF pattern found in Microsoft’s MarkItDown, then extrapolates.
The most defensible statements: (a) the only peer-reviewed academic figure is Hasan et al.’s 7.2% general vulnerabilities across 1,899 GitHub servers, with the tool-poisoning number narrower than commonly implied — per AgentBound (arXiv:2510.21236) summarizing Hasan, “5% of the servers exhibit tool poisoning… out of 73 servers that the authors analyzed with [mcp-scan],” i.e. 5.5% is measured on a 73-server mcp-scan subset, not all 1,899; (b) MCPTox separately shows that even trusted servers yield high agent-side ASR (avg 36.5%) because the vulnerability is in the model’s handling of descriptions, not the server code. These are the credible anchors; the 30–66% vendor figures should be treated as directional marketing signals, not base rates.
2.3 Governance frameworks and shipped vs proposed spec controls
- OWASP MCP Top 10 (owasp.org/www-project-mcp-top-10, 2026): first protocol-specific list; covers command injection (MCP05), missing auth, token/credential exposure, excessive permissions, supply-chain. CC BY-NC-SA.
- CSA MAESTRO: seven-layer agentic threat-modeling framework; Layer 3 (Agent Frameworks) and Layer 7 (Agent Ecosystem) map directly to MCP tool-invocation and supply-chain threats.
- CSA “MCP Security Crisis” research note (labs.cloudsecurityalliance.org, May 2026): synthesizes the STDIO command-injection disclosure. CVE-2026-30623 is a command-injection flaw in the STDIO transport across all four official MCP SDKs (Python, TypeScript, Java, Rust), disclosed by OX Security (“The Mother of All AI Supply Chains,” April 2026), affecting 7,000+ servers / 150M+ downloads, yielding ≥10 CVEs (LiteLLM, LangChain, LangFlow, Flowise, LettaAI, LangBot). Anthropic’s response was reportedly that this is “expected behavior” — sanitization is the developer’s responsibility. This is a genuine dispute: researchers frame it as a design flaw; Anthropic frames STDIO config-to-shell as intended local behavior.
- Flowise RCE CVE (disclosed April 2026): required emergency patching across production deployments (per CSA note).
- Spec-level mitigations — shipped vs proposed: OAuth 2.1 authorization is in the MCP spec (short-lived scoped tokens are the recommended pattern), but BlueRock found only 8.5% of servers actually use OAuth. Rug-pull defenses (tool pinning/hashing, signed manifests) are NOT in the shipped protocol — the spec’s
notifications/tools/list_changedmechanism has no re-approval trigger, no version pinning, no content hash (per Invariant Labs and independent analyses). Behavioral attestation remains a research proposal. The gap between “recommended in spec” and “shipped/enforced” is wide.
Additional 2025–26 incident anchors (named, dated, CVE’d): CVE-2025-6514 (mcp-remote RCE, CVSS 9.6), CVE-2025-49596 (MCP Inspector), CVE-2025-54136 (Cursor “MCPoison,” persistent poisoned tool description), CVE-2025-54994 (create-mcp-server-stdio), CVE-2025-68143/68144/68145 (Anthropic mcp-server-git RCE chain), the postmark-mcp npm backdoor (Sept 2025), and Cyata’s Jan 2026 RCE chain against Anthropic’s Git/filesystem servers.
THREAD 3 — Harness-Layer Benchmark Claims Under Skepticism
3.1 LangChain DeepAgents Terminal-Bench 2.0 (52.8 → 66.5)
Verified from LangChain’s own blog (blog.langchain.com/improving-deep-agents-with-harness-engineering): deepagents-cli improved 52.8 → 66.5 (+13.7pp, ~26% relative) with the model held fixed at gpt-5.2-codex. Terminal-Bench 2.0 = 89 tasks across 16 categories; orchestrated via Harbor + Daytona sandboxes, traced in LangSmith. Changes were harness-only: system prompt (self-verification/testing loops), LocalContextMiddleware (environment mapping), loop-detection middleware, time-budgeting; and a counterintuitive finding that max reasoning (xhigh) underperformed (53.9%) vs high (63.6%) due to timeouts.
Scrutiny:
- Same model, same task set: Yes (gpt-5.2-codex, TB 2.0, 89 tasks) — a genuine single-model comparison.
- Attempts/variance: LangChain ran up to 40 trials concurrently on Daytona; their earlier Sonnet-4.5 run reported 42.65% as the average of two runs (44.9% / 40.4%) — a ~4.5pp spread across just two runs. For the 52.8→66.5 claim the blog does not report a confidence interval or trial count behind each endpoint. Given the demonstrated spread the +13.7pp gain almost certainly exceeds noise, but the exact headline points are not variance-bounded.
- “Top 30 → Top 5” is disputed: LangChain and several blogs say “Top 5,” but awesomeagents.ai reports the highest public-leaderboard DeepAgents submission (gpt-5.2-codex) sits at 66.5% at rank 20, with leaders (ForgeCode + GPT-5.4 / Opus 4.6) at 81.8%. The ranking claim is unreliable; the score delta is reliable.
- Independent reproduction: None; it is a first-party engineering blog.
3.2 Stanford Meta-Harness (Lee et al., arXiv:2603.28052, 30 Mar 2026)
Verified. Yoonho Lee, Roshen Nair, Qizheng Zhang, Kangwook Lee, Omar Khattab, Chelsea Finn (Stanford IRIS Lab; the harness survey’s “Stanford/MIT” framing is loose — the author list is Stanford-led). Meta-Harness is an outer-loop code-space search using an agentic proposer (Claude Code) with filesystem access to prior candidates’ source, scores, and execution traces. Results:
- Online text classification: +7.7 points over a SOTA context-management system with 4× fewer context tokens.
- Retrieval-augmented math: +4.7 points on 200 IMO-level problems, averaged across 5 held-out models.
- Agentic coding: discovered harnesses surpass the best hand-engineered baselines on TerminalBench-2.
Scrutiny. Baselines are explicitly “hand-crafted harnesses representing current state of the art.” Generalization limits are stated by the authors: results are tied to one strong coding-agent proposer (Claude Code + Opus-4.6); “a broader study of how the effect varies across proposer agents remains for future work”; automated search can “exploit idiosyncratic benchmark cues” (overfitting). So “automated harness optimization surpasses hand-engineering” is supported as an existence proof on three domains with one proposer, not as a general law.
3.3 Princeton HAL — Claude Opus 4 GAIA 64.9% vs 57.6%
Partially verified, with a data problem. HAL (hal.cs.princeton.edu) is real and does compare scaffolds on fixed models. The live HAL model page for Claude Opus 4.1 shows GAIA at 64.24% (HAL Generalist Agent) vs 28.48% (HF Open Deep Research) — a ~36-point gap on the same model. The specific “64.9% vs 57.6%” pairing comes from a secondary blog (uvik.net), and its 57.6% figure does not match the HF Open Deep Research number I could verify (28.48%). Verdict: the phenomenon (large scaffold-driven gaps on identical models) is real and primary-source-confirmed; the exact “64.9 vs 57.6” pairing is a secondary-source claim I could not reconcile with HAL’s published numbers and should not be quoted as-is.
On variance: HAL’s own Reliability Dashboard stresses that accuracy gains are NOT matched by reliability gains — “on GAIA we observe GPT-5.5 and Opus 4.7 being no more reliable than their predecessors.” HAL also disclosed scaffolding loopholes through which agents could reach GAIA ground-truth values during evaluation, which it patched — a direct warning that raw scaffold-vs-scaffold gaps can be partly artifacts. HAL does not present the 64.9/57.6 pairing with run-to-run error bars.
3.4 “Agent Harness Engineering: A Survey” (OpenReview eONq7FdiHa; picrew.github.io/LLM-Harness)
Real, under review at TMLR (a companion version at forum 3hXEPbG0dh; a second survey exists at arXiv:2605.29682 / preprints.org with a formal H=(E,T,C,S,L,V) model). Proposes the ETCLOVG seven-layer taxonomy (Execution, Tool, Context, Lifecycle/Orchestration, Observability, Verification, Governance) and the “binding-constraint thesis” (attributed to Bölük, 2026b): for long-horizon tasks across comparable frontier models, benchmark variance may be driven as much by the harness as by the model.
Assessment: The thesis is supported by three aggregated, uncontrolled results the survey itself lists (§ “The harness turn 2025–2026”) — OpenAI’s adoption of “harness engineering,” Meta-Harness, and LangChain’s 52.8→66.5. Only Meta-Harness is a controlled experiment; the LangChain result is a first-party blog; OpenAI’s is a qualitative field report. The binding-constraint thesis is therefore a well-motivated hypothesis backed by one controlled study plus practitioner reports — not yet established by systematic controlled experiments. The survey is a synthesis, not primary evidence.
3.5 METR, “Many SWE-bench-Passing PRs Would Not Be Merged into Main” (metr.org, 10 Mar 2026)
The most rigorous item in Thread 3. Methodology: 4 active maintainers from 3 SWE-bench Verified repos (2 scikit-learn, 1 Sphinx, 1 pytest) reviewed 296 AI-generated PRs that had passed the automated grader, plus 47 human-written “golden” PRs as a noise control. Coverage: 3/12 repos (25%), 95/500 issues (19%). Maintainers recorded accept/request-changes plus the core reason (core functionality failure / breaks other code / code quality). Findings, verbatim: “on average maintainer merge decisions are about 24 percentage points lower than SWE-bench scores”; “roughly half of test-passing SWE-bench Verified PRs written by mid-2024 to mid/late-2025 agents would not be merged into main by repo maintainers, even after adjusting for noise”; golden-patch baseline = 68%. METR explicitly caveats that agents weren’t allowed to iterate on feedback, so this is not claimed as a fundamental capability ceiling — but it directly undercuts naive score→usefulness translation. Corroborated by Cognition’s FrontierCode and Voratiq (test-passing candidates selected 1.8× vs top-reviewed 9.9×).
3.6 OpenAI: “Why SWE-bench Verified No Longer Measures Frontier Coding Capabilities” (Feb 2026)
Verified (openai.com/index/why-we-no-longer-evaluate-swe-bench-verified/). Two findings: (1) auditing a 27.6% subset that models often failed, ≥59.4% had flawed test cases rejecting functionally-correct solutions (too-narrow or too-wide tests); (2) contamination — frontier models (GPT-5.2, Claude Opus 4.5, Gemini 3 Flash) can reproduce exact gold patches and problem text, indicating training exposure. Progress had slowed 74.9%→80.9% in six months. OpenAI stopped reporting Verified and recommends SWE-bench Pro. Consistent with IBM Research’s “From 73% to 11%” discriminative-subset finding and academic work (arXiv:2512.10218, “Does SWE-Bench-Verified Test Agent Ability or Model Memory?”).
3.7 OpenAI Feb 2026 “harness engineering” post — the “~1M lines in five months” claim
The post exists and is cited (in the harness survey and awesome-agent-harness list) as OpenAI’s field report on building “agent-first software via harness constraints and verification,” alongside “The next evolution of the Agents SDK” (native sandbox execution, manifests, memory, filesystem/shell tools). The specific claim of “~1 million lines of an internal product in five months without manually writing production code” could NOT be independently verified from a primary source (search budget exhausted before the OpenAI post body was retrieved). Assessment of measurability: even if stated by OpenAI, this claim is essentially unverifiable and low-information — “lines of code” is a discredited productivity proxy, “without manually writing production code” is unauditable by outsiders, and there is no controlled counterfactual. Treat as a marketing anecdote, not evidence.
3.8 SWE-bench repo-state loopholes and reward hacking
- SWE-bench GitHub issue #465 documents repo-state loopholes (agents accessing future repo states / ground-truth via git history), corroborated by the Datacurve “git-history cheating audit” referenced in SWE-bench Pro coverage.
- METR reward-hacking / false-positive trajectories: METR separately measured “false-positive trajectories” (spiritually similar to reward hacking) as a benchmark-reliability problem, later addressed in Cognition’s FrontierCode.
Net Thread-3 verdict: Harness effects are real and large on individual benchmarks, but (a) run-to-run variance is under-reported everywhere except HAL’s reliability work, (b) the benchmarks themselves are contaminated/loophole-ridden (OpenAI, SWE-bench #465) and overstate real usefulness by ~24pp (METR), and (c) the grand “harness > model” thesis rests on one controlled study plus practitioner reports. Correct reading: harness engineering clearly matters and can move scores more than a model generation, but the benchmarks it moves are themselves partly untrustworthy — treat harness leaderboard jumps with the same skepticism you applied to vericoding’s 82%→~5% collapse.
THREAD 4 — Primary-Source Protocol-Support Table
Verified against each framework’s OWN docs/repos (not comparison blogs), as of July 2026. Legend: ✅ core; 🧩 official adapter/extra; 🌐 community; ✗ not native; ❓ unverified.
| Framework | MCP (client/server) | A2A | Agent Skills (SKILL.md) | Sandboxing | Durable exec / HITL |
|---|---|---|---|---|---|
| LangGraph | ✅ client via langchain-mcp-adapters; server via deployment /mcp |
✅ server via Agent Server /a2a/{id} (needs langgraph-api≥0.4.21) |
🧩 via DeepAgents layer, not core | pluggable, not built-in | ✅ core: checkpointers + interrupt() |
| LangChain DeepAgents | 🧩 client, “any MCP server” (on langchain-mcp-adapters) | inherits LangGraph deployment A2A | ✅ core: skills/SKILL.md |
✅ pluggable filesystem/shell backends | ✅ core (LangGraph): approve/edit/reject |
| Claude Agent SDK | ✅ core: external + in-process SDK MCP | ✗ native (community wrappers only) | ✅ core (originator of SKILL.md) | 🧩 permissions/hooks; no built-in VM | ✅ core: hooks, permissions, checkpointing |
| OpenAI Agents SDK | ✅ core: Stdio/SSE/StreamableHttp + HostedMCPTool | ✗ native (open issue #1374; LiteLLM community) | ❓ no native SKILL.md found | ✗ no native sandbox | ✅ Sessions + HITL docs |
| Google ADK | ✅ core: MCPToolset/FastMCP (client+server) |
✅ core: google.adk.a2a, to_a2a(), RemoteA2aAgent |
✅ core (experimental v1.25.0+): SkillToolset, agentskills.io |
🧩 GKE/Vertex executor | ◑ agent resume + ReflectAndRetryToolPlugin (v1.16.0+) |
| Pydantic AI | ✅ core: MCPToolset (client+server+sampling) |
✅ core: FastA2A / .to_a2a() |
❓ no native SKILL.md found | ◑ via Python MCP server | ✅ Temporal, DBOS, Prefect, Restate, Airflow |
| CrewAI | 🧩 crewai-tools[mcp] MCPServerAdapter (tools only) |
❓ not in core docs | ❓ no native SKILL.md found | ✗ no native sandbox found | ◑ HITL yes; durable exec limited |
| Microsoft Agent Framework | ✅ native at 1.0 GA (client + agents-as-servers) | ✅ A2A native (implementing packages still preview per MS devblog); A2AAgent/A2AExecutor |
❓ no native SKILL.md found | ❓ not verified | ✅ Workflows, HITL patterns |
| Strands Agents (AWS) | ✅ core “Built-in MCP” (client+server) | ✅ native: a2a extra, A2AServer/A2AAgent (Python+TS) |
❓ no native SKILL.md found | 🧩 Lambda/Fargate/EKS/AgentCore | ✅ HITL + Graph/Swarm/Workflow; AgentCore runtime |
| Vercel AI SDK | ✅ core (experimental): experimental_createMCPClient() since 4.2 (client) |
❓ not native in core | ❓ no native SKILL.md found | ✗ no native sandbox | ❓ not core |
| Mastra | ✅ core: MCPClient + MCPServer |
✅ core/default: A2A (JSON-RPC 2.0, signed cards, specVersion 1.0) | ❓ no native SKILL.md found | ❓ not verified | ✅ suspend/resume workflows; HITL |
| Agno | ✅ core “first-class MCP”; AgentOS OAuth endpoint | ✅ core “first-class A2A”; scope mappings | ❓ no native SKILL.md found | ✅ AgentOS: per-session isolation, JWT RBAC | ✅ HITL, approval, resumable workflows |
| smolagents (HF) | ✅ core: MCPClient/ToolCollection.from_mcp (via mcpadapt) |
❓ not native | ❓ no native SKILL.md found | ✅ core: E2B/Blaxel/Modal/Docker (executor_type=); LocalPythonExecutor is NOT a security boundary |
✗ minimal |
Version anchors captured: Strands strands-agents 1.48.0 (PyPI); Google ADK Python docs 2.3.0, Skills experimental v1.25.0+, ReflectAndRetryToolPlugin v1.16.0+; DeepAgents examples pin >=0.3.5,<0.4.0; Agno 2.7.x; Vercel AI SDK MCP since 4.2; LangGraph A2A needs langgraph-api≥0.4.21; MS Agent Framework 1.0 GA. (Claude Agent SDK version numbers seen only in a secondary blog — treat as unverified.)
Cross-cutting resolution of the protocol disputes (from primary sources):
- MCP support is near-universal but split between client-only adapters (CrewAI tools-only; Vercel
experimental_client-only) and full client+server core (ADK, Pydantic AI, Claude SDK, Strands, Mastra, Agno, MS AF). - A2A is genuinely native in Google ADK, Strands, Mastra, Agno, and Microsoft Agent Framework (all citing the official a2a-sdk); it is deployment-layer only in LangGraph and absent/community-only in Claude SDK, OpenAI SDK, CrewAI, Vercel AI SDK, smolagents.
- Agent Skills (SKILL.md) is the least-supported feature — verifiably native in only three: Claude Agent SDK (originator), Google ADK (experimental), and LangChain DeepAgents. Widespread comparison-blog claims that “most frameworks support Agent Skills” are unsupported by primary docs.
- A2A version confusion is real: the protocol reached v1.0, but Microsoft’s own devblog notes its implementing packages remain in preview — a case where a secondary blog (digitalapplied.com) overstated shipped status. This is the likely root cause of the framework-support contradictions the user observed: comparison blogs conflate “protocol version exists,” “SDK exists in preview,” and “shipped in framework core.”
Recommendations
- Agent security posture (act now): Assume the model will follow poisoned tool descriptions (MCPTox: 36.5% avg ASR, <3% refusal; capable/reasoning models are worse). Do NOT rely on model alignment. Deploy a deterministic tool-call-boundary enforcer (AgentSpec- or ClawGuard-style) plus Plan-Then-Execute or CaMeL where control flow can be fixed in advance. Escalate to full Dual-LLM/CaMeL isolation for any workflow combining private-data access + untrusted input + an exfiltration-capable tool (the “lethal trifecta”).
- MCP server selection: Ignore the 30–66% vendor headlines as base rates. Instead: pin tool hashes (MCP-Scan) to defeat rug pulls; require OAuth 2.1 scoped tokens (only 8.5% of servers use them — treat static API keys as disqualifying); patch the STDIO command-injection class (CVE-2026-30623) immediately; prefer servers with published security scorecards. Threshold: any server accepting an unvalidated URL/path parameter should be treated as SSRF-vulnerable by default.
- Interpreting harness/coding benchmarks: Discount SWE-bench Verified scores (contaminated per OpenAI; ~24pp merge-gap per METR). Require (a) same-model controlled comparisons, (b) reported run-to-run variance (≥3 runs), and (c) a real-usefulness proxy (maintainer-merge or FrontierCode-style rubric), not just test-pass. A harness gain is credible only if it exceeds the demonstrated ~4.5pp two-run spread by a comfortable margin.
- Framework selection by protocol need: For native A2A + bidirectional MCP → Google ADK, Strands, Agno, Mastra, or MS Agent Framework. For Agent Skills → effectively only Claude Agent SDK, Google ADK, or DeepAgents. For native sandboxing → smolagents (E2B/Modal/Docker) or Agno (AgentOS isolation). For durable execution → Pydantic AI (Temporal/DBOS/etc.) or LangGraph checkpointing.
Thresholds that would change these recommendations: If a runtime enforcer is shown to survive adaptive attack (“attacker moves second”) at <5% residual ASR, it could substitute for architectural isolation. If MCP ships tool-pinning + signed manifests in the core spec, server-selection rigor can relax. If a harness study reports variance-bounded, multi-proposer, cross-benchmark gains, the binding-constraint thesis graduates from hypothesis to established.
What Could NOT Be Determined
- MCPTox’s “14 vulnerability classes / 312 attack scenarios” — these do not appear in the primary paper (3 paradigms, 11 risk categories, ~1,312–1,348 cases) and appear to be secondary-source fabrication; “failed roughly half” is also not the paper’s framing (avg ASR 36.5%, model-dependent).
- The “72.4% cross-server cascade rate” — no primary source located; appears only in aggregator blogs.
- The exact “64.9% vs 57.6%” HAL GAIA pairing — HAL’s own published Opus 4.1 numbers are 64.24% (HAL Generalist) vs 28.48% (HF Open Deep Research); the 57.6% is a secondary-blog figure I could not reconcile. The phenomenon is confirmed; the exact pairing is not.
- OpenAI’s “~1M lines in five months without manually writing production code” — not verified from primary source and, even if stated by OpenAI, essentially unauditable/low-information.
- Whether arXiv:2508.12538 is a 1,800-server scan — it is not; it is a taxonomy + toolkit (MCPXKIT, 31 attack methods). The “1,800 servers / >30% exploitable” claim is misattributed to it.
- Precise trial counts / confidence intervals behind LangChain’s 52.8 and 66.5 endpoints, and its “Top 5” ranking (contradicted by a rank-20 report).
- Native SKILL.md support for 9 of 13 frameworks — absence in primary docs is not proof of absence, but no primary-source confirmation was found for OpenAI SDK, Pydantic AI, CrewAI, MS Agent Framework, Strands, Vercel AI SDK, Mastra, Agno, smolagents.
- CaMeL’s 67% vs 77% AgentDojo figure — both appear in different paper versions; the utility-vs-security framing (77% defended vs 84% undefended) is from v2 (now IEEE SaTML 2026).
- Full current-defense leaderboards on InjecAgent/AgentDojo for 2026 — search budget exhausted before dedicated retrieval; cited figures are from the source papers and cross-references (InjecAgent: GPT-4 ReAct 24% base / 47% enhanced, 1,054 cases).
- Sandboxing/durable-exec specifics for CrewAI, MS Agent Framework, Vercel AI SDK, Mastra — not confirmable from primary docs within budget.