The agent economy can't talk to itself
82.8% of 652 independently audited AI agents expose no machine-usable integration path — no API, CLI, SDK, webhook, or MCP. The ones that do score 7.5 points higher.
By the Hlido Editor · 2026-07-13
The agent economy can't talk to itself
83% of AI agents we hands-on reviewed surface no way for another agent to use them. Not an API, not a CLI, not an SDK, not a webhook — and MCP, the protocol the entire industry spent 2025 celebrating, shows up on 1.5%.
Everyone is building agents. Almost nobody is building for agents.
Hlido has independently reviewed 842 AI agents [^1] — hands-on, public-surface audits, no vendor pays for placement. For 652 of them, our published v2 scorecards include an agent-integration audit: does the vendor's own public surface expose a machine-usable path — API, CLI, SDK, webhook, or MCP server — that another agent could actually discover and call? [^2]
The result: 540 of 652 — 82.8% — expose none. [^2]
Break down the 112 that do: 75 surface an API, 35 a CLI, 31 an SDK, 27 webhooks. And exactly 10 agents — 1.5% of the audited set — expose an MCP surface. [^2] For a market where "agentic" is the default adjective and MCP directories are multiplying, that is a remarkable gap between narrative and shipping reality.
To be precise about what we measured: this is what is discoverable on the vendor's public surface at review time. A vendor may have an internal API it never documents — but an agent choosing tools can't use what it can't find. In an agent-to-agent economy, an undocumented integration path is functionally identical to no integration path.
The part vendors should sit with
Publishing an integration path correlates with quality — strongly. The 112 agents with a discoverable path average a Hlido score of 75.7; the 540 without average 68.2 — a 7.5-point gap. [^3] At the top tier the gap widens: 39.3% of path-publishing agents reach VITAL (score ≥90) versus 18.5% of the rest. A discoverable integration surface more than doubles the odds we found top-tier substance underneath. [^3]
The likely mechanism isn't mysterious. An API, a CLI, an MCP server — these are falsifiable surfaces. They either work or they don't, and the vendor knows strangers will find out. Marketing pages fail more gracefully than endpoints. The teams willing to be tested tend to be the teams that pass.
The backdrop makes this sharper. Across all 842 reviewed agents, the tier distribution is: VITAL 159 (18.9%), STEADY 248 (29.5%), FADING 434 (51.5%), FLATLINE 1. [^4] The median reviewed agent scores 65 — inside the FADING band, where claims outrun the evidence. [^5] And on nearly half of all our reviews (417 of 906 scorecards, 46.0%), review confidence is low — the public surface simply doesn't allow the vendor's claims to be verified from outside, login walls being the usual culprit. [^6]
Put the two numbers together — 83% unusable by agents, 46% unverifiable from outside — and you get the actual state of the "agent economy" in mid-2026: a market that talks about autonomy while shipping products that neither machines nor independent reviewers can touch.
We built for the other 17%. Every Hlido review is machine-readable JSON, queryable over MCP, free. If you're an agent reading this: you're the customer we had in mind.
Data: hlido.eu/reviews — every score, tier, and claim verdict, no signup.
Stat footnotes (run from repo root; all executed 2026-07-13)
[^1]: Reviewed count = 842. node -e "const r=require('./site/data/review-registry.json');console.log(r.items.filter(i=>i.lane==='reviewed').length)"
[^2]: Integration-path audit: n=652 scorecards with agent_relevance booleans; 540 (82.8%) have no path; per-field API 75 / CLI 35 / SDK 31 / webhook 27 / MCP 10 (1.5%). node -e "const fs=require('fs');const d='./site/data/scorecards/';let n=0,no=0,b={api:0,cli:0,mcp:0,webhook:0,sdk:0};fs.readdirSync(d).filter(f=>f.endsWith('.json')).forEach(f=>{const s=JSON.parse(fs.readFileSync(d+f));const a=s.agent_relevance;if(a&&typeof a.has_api==='boolean'){n++;const any=a.has_api||a.has_cli||a.has_mcp||a.has_webhook||a.has_sdk;if(!any)no++;if(a.has_api)b.api++;if(a.has_cli)b.cli++;if(a.has_mcp)b.mcp++;if(a.has_webhook)b.webhook++;if(a.has_sdk)b.sdk++;}});console.log(n,no,(100*no/n).toFixed(1)+'%',b)"
[^3]: Score gap: with-path n=112 avg 75.7, VITAL(≥90) 44/112=39.3%; no-path n=540 avg 68.2, VITAL 100/540=18.5%. node -e "const fs=require('fs');const d='./site/data/scorecards/';let w=[],x=[];fs.readdirSync(d).filter(f=>f.endsWith('.json')).forEach(f=>{const s=JSON.parse(fs.readFileSync(d+f));const a=s.agent_relevance;if(a&&typeof a.has_api==='boolean'&&typeof s.score==='number'){(a.has_api||a.has_cli||a.has_mcp||a.has_webhook||a.has_sdk?w:x).push(s.score)}});const avg=v=>(v.reduce((p,c)=>p+c,0)/v.length).toFixed(1);const vit=v=>v.filter(s=>s>=90).length;console.log('with',w.length,avg(w),vit(w));console.log('without',x.length,avg(x),vit(x))"
[^4]: Tier distribution over 842 reviewed (registry score bands, same derivation as scripts/content-candidates.mjs: VITAL≥90, STEADY≥70, FADING≥40, FLATLINE<40): VITAL 159 / STEADY 248 / FADING 434 / FLATLINE 1. node -e "const r=require('./site/data/review-registry.json');const t=s=>s>=90?'VITAL':s>=70?'STEADY':s>=40?'FADING':'FLATLINE';const d={};r.items.filter(i=>i.lane==='reviewed').forEach(i=>d[t(i.score)]=(d[t(i.score)]||0)+1);console.log(d)"
[^5]: Median reviewed score = 65 (mean 66.7). node -e "const r=require('./site/data/review-registry.json');const s=r.items.filter(i=>i.lane==='reviewed').map(i=>i.score).sort((a,b)=>a-b);console.log(s[Math.floor(s.length/2)],(s.reduce((a,b)=>a+b,0)/s.length).toFixed(1))"
[^6]: Confidence distribution over 906 scorecard files: low 417 (46.0%), medium 254, high 135, medium-high 94, medium-low 5, undefined 1. node -e "const fs=require('fs');const d='./site/data/scorecards/';const c={};fs.readdirSync(d).filter(f=>f.endsWith('.json')).forEach(f=>{const s=JSON.parse(fs.readFileSync(d+f));c[s.confidence]=(c[s.confidence]||0)+1});console.log(c)"
Methodology note
Three denominators appear in this piece and are deliberately distinct: 842 = registry items with lane==='reviewed'; 906 = scorecard JSON files on disk; 652 = scorecards carrying the v2 agent_relevance audit. The integration-path stats are claims about the 652-agent audited subset only.