Legible
Scan APIChrome extension

How we check

Legible runs 31 checks against the files and URLs an AI agent reads. 18 follow AgentReady v2.0, the open standard for agent readiness; 3 are our own, for email APIs, and count only there. 10 more are our own too, from AFDocs and the agent standards, for any site. We read raw HTML with no JavaScript run, the way an agent without a browser does.

Scoring

  1. Each check is worth 2, 4, 7 or 10 points, by how much it matters to an AI agent.
  2. Your score is the points you earned out of the points available. Half done gets half the points.
  3. A blocker caps the score at 39: agents can't get in, or there's nothing to read.
  4. Find, Read and Act are each scored the same way, over their own checks.

The detail, and where each rule comes from. The points and caps follow AFDocs' scoring (MIT licence), with the changes in the table. Scores from before this version aren't comparable with these, and the old ones stay in history.

  1. Weighted sum: Gate 10, Must 10, High 7, Medium 4, Low 2. Score = 100 × the sum of weight × credit, divided by the sum of the weights of the checks that apply. Source: AFDocs' tiers (agent-ecosystem/afdocs, SCORING.md, MIT); OpenSSF Scorecard's weighted mean.
  2. Credit: a pass is 1, a warn 0.5, a fail 0. A check over several pages or operations earns its share: 7 of 10 pages is 0.7. Source: AFDocs; Is Agentic.
  3. A check that doesn't apply leaves the sum, so it can never count as a fail. The API checks apply only when we find an API or developer tool; the email checks only on email APIs. Source: Is Agentic; Lighthouse's not-applicable audits.
  4. A Gate failing on your homepage or docs page caps the score at 39. Across the pages we read, a Gate that passes on 25% or fewer caps it at 39, on 50% or fewer at 59. The lowest cap wins, and the result says why in one line. Source: AFDocs' score caps; SSL Labs' grade caps.
  5. Find, Read and Act each get a score out of 100 from the same formula, and the email checks count in Act. The weakest step is the lowest. Source: Euro NCAP's area scores; SSL Labs' category scores.
  6. We hold the score back when we could check less than 90% of the weight that applies. Source: Legible (E21).
  7. Each result shows the points earned and available, per check and per step, and how many checks passed. No letter grade. Source: Legible.
  8. Each score says which scoring version made it, and v1 scores stay in history. Source: AFDocs' scoring versions.
  9. Equal scores share a rank. Source: Legible (E26).

Some checks aren't counted, and the result says how many and why:

Every check's tier

CheckStepPointsApplies toSource, and why it moved
AI agents allowed, homepage reachable AR-FIND-01Find10 Gateevery siteAgentReady v2.0: MUST.
Our scanner gets in LG-FIND-01Find10 Gateevery siteAFDocs: bot-protection-interference, High. Up one: in Vercel and Ora's agent readability guide (28 Aug 2026, 190 probes), a 403 to agent user agents stopped both clients reading the page, 5 of 5.
Docs page AR-FIND-02Find7 Highevery siteAgentReady v2.0: SHOULD. Up one: docs pages were the resource agents used most where a site had them, 88% (Ora's field report, What agents actually reach (16 Jun 2026)).
llms.txt linked from your pages LG-FIND-02Find7 Highevery siteAFDocs: llms-txt-directive-html, High.
Sitemap AR-FIND-03Find2 Lowevery siteAgentReady v2.0: SHOULD. Down one: a sitemap didn't change what agents could retrieve (Vercel and Ora's agent readability guide (28 Aug 2026, 190 probes)), and robots.txt and sitemap.xml together were used in 9% of runs where a site had them (Ora's field report, What agents actually reach (16 Jun 2026)).
Readable without JavaScript AR-READ-01Read10 Gateevery siteAgentReady v2.0: MUST; AFDocs: rendering-strategy, Critical.
Docs readable without a login LG-READ-01Read10 Gatea site with a docs pageAFDocs: auth-gate-detection, Critical.
Real 404s AR-READ-02Read10 Mustevery siteAgentReady v2.0: MUST; AFDocs: http-status-codes, High.
llms.txt AR-READ-07Read7 Highevery siteAFDocs: llms-txt-exists, Critical. Down one: no run in our 30-run pilot (E178) named it, and Ahrefs' logs found 97% of llms.txt files got no AI requests (via ppc.land). Against that, agents used it in 46% of runs where a site had one (Ora's field report, What agents actually reach (16 Jun 2026)).
llms.txt links work, and it fits LG-READ-02Read7 Higha site with an llms.txtAFDocs: llms-txt-links-resolve and llms-txt-size, High.
Docs pages fit an agent's context LG-READ-04Read7 Higha site with a docs pageAFDocs: page-size-html and page-size-markdown, High.
Meta description AR-READ-03Read4 Mediumevery siteAgentReady v2.0: SHOULD.
Structured docs page AR-READ-04Read4 Mediumevery siteAgentReady v2.0: SHOULD.
Code samples say their language AR-READ-05Read4 Mediumevery siteAgentReady v2.0: SHOULD; AFDocs: markdown-code-fence-validity, Medium.
Readable pricing AR-READ-11Read4 Mediumevery siteAgentReady v2.0: SHOULD.
Docs in Markdown LG-READ-03Read4 Mediuma site with a docs pageAFDocs: markdown-url-support, High. Down one: Markdown copies didn't change what agents could retrieve (Vercel and Ora's agent readability guide (28 Aug 2026, 190 probes)).
Structured data AR-READ-08Read2 Lowevery siteAgentReady v2.0: SHOULD. Down one: JSON-LD didn't change what agents could retrieve (Vercel and Ora's agent readability guide (28 Aug 2026, 190 probes)).
Machine-readable discovery file AR-READ-06Read2 Lowevery siteAgentReady v2.0: SHOULD. Down to Low: an emerging set of standards. Agents used .well-known files in 34% of runs where a site had them (Ora's field report, What agents actually reach (16 Jun 2026)).
MCP server or CLI AR-ACT-10Act10 Mustan API or developer toolAgentReady v2.0: MUST.
OpenAPI spec AR-ACT-02Act7 Highan API or developer toolAgentReady v2.0: SHOULD; Ora weights OpenAPI highest of its checks (7 points, E176). A spec your docs or llms.txt link gets full credit; one we only found at a standard or guessed address gets half, because agents used an unlinked openapi.json in 17% of runs and a linked one in 72% (Ora's field report, What agents actually reach (16 Jun 2026)).
npm and PyPI packages AR-ACT-06Act7 Highan API or developer toolAgentReady v2.0: SHOULD. Up one: every run in our 30-run pilot (E178), 30 of 30, used the company's official package.
Auth an agent can follow (proxy) AR-ACT-01Act4 Mediuman API or developer toolAgentReady v2.0: SHOULD. No outside source rates it high, so it stays where a SHOULD starts, at Medium.
Every operation has an operationId LG-ACT-01Act4 Mediuman API with an OpenAPI specLegible's call. Our own check. No outside source rates it high, so it starts at Medium.
MCP server AR-ACT-03Act4 Mediuman API or developer toolAgentReady v2.0: SHOULD.
Errors have a schema LG-ACT-02Act4 Mediuman API with an OpenAPI specThe IETF draft agent-friendly API profile; is-agentic and Alpic check it.
Tools for browser agents AR-ACT-07Act2 Lowevery siteAgentReady v2.0: SHOULD; Ora gives it 5 points. Down to Low: a proposed standard, and none of the 28 on our first two boards passed our check when we set the tier on 8 Nov.
An agent skill is published LG-ACT-03Act2 Lowevery siteCloudflare's isitagentready, agenticplug and Alpic check it. Low: an emerging standard.
Sign-in an MCP client can use LG-ACT-04Act2 Lowa site with OAuth metadataThe MCP authorization spec (25 Nov 2025). Low: an emerging standard.
Install shown for four languages EM-01Act4 Mediumemail APIs on our boardLegible's own, for email APIs.
Send operation in the spec EM-02Act4 Mediumemail APIs on our boardLegible's own, for email APIs.
Free tier in emails EM-03Act4 Mediumemail APIs on our boardLegible's own, for email APIs.

Three of today's checks read more under v2:

Before a new check counts, we run it on the companies on our boards, and every fail or partial result is checked again by a separate reviewer given only the address and the rule: an AI agent fetching with plain curl, its answer compared with ours by code. On 8 Nov 2026 that was 51 results. Seven new checks agreed in full. For two more, the reviewer found the same facts as us or missed a file plain curl finds. The skills check was fixed to recognise three more ways a skill is published, and then agreed on all 12 sites on 9 Nov.

Why another scanner gives a different number

Mostly because the two scores are made of different things. We compared our results with Ora's public results on 24 sites, on 2 Nov 2026. Each of its results has its own scan date, some of them weeks old.

Where both tools judge the same thing, the answers mostly agree. Score Ora's answers with our points and count its part marks as passes, and the two land equal or within 7 points on 19 of the 24 sites, and 10 or more apart on 5. On these three, the two tools agree on every check they share:

SiteOra's scoreOra's answers, our pointsPart marks counted as passesOur score, same checks
anthropic.com71 (1 Nov)727878
gumloop.com72 (14 Oct)819494
supabase.com93 (1 Nov)879595

Across the 24 sites and the 15 checks we share, 246 answers agree. In 6 we pass and Ora fails, each one a file we can link to, like Notion's OAuth metadata on its mcp. host. In 18 we fail and Ora passes. The other 90 are part marks, or a check one side couldn't read. Of the 18, 16 are a difference in the rule: on 10, Ora passes a package it finds in a registry where we look for both an npm and a pip install in your docs, because that's what tells an agent which package is yours; on 6, Ora passes a pricing page that exists where we look for a price in its raw text. The other 2 carry a dated note on the result.

So a lower number elsewhere usually means a different mix of questions, not that either of us misread the same file. And no score here, ours or anyone's, measures whether an agent can actually use your product.

Does a higher score mean better code from an agent?

Not on what we've tested so far. On 2 Nov 2026 we gave two coding agents the same task in an empty folder: send a transactional email with a PDF attachment, in TypeScript, using the API's official SDK. Claude Code on Sonnet 5.5 and Codex CLI on GPT-5.6-sol, 5 runs each, on Resend (96), SendGrid (88) and Amazon SES (71). Nothing was sent.

Three well-known APIs and one common task can't show much. It does show what these checks are: a read of the files an agent could use, not a prediction of what it will do. A harder task on smaller APIs is the next test.

Watching an agent use a site

This is built, but it isn't switched on yet: it's waiting on an API key. No run has happened.

Watch runs Claude Haiku 5.5 on one goal: get started, find the API or find pricing. It reads a page at a time without JavaScript, at most 8 pages and 90 seconds, and can only ask for this site or a link a page showed it. A redirect can take it elsewhere, and the step shows where. Pressing Run starts it, and the same site and goal reuses the last run for an hour.

Which pages it opened, how it got there, what came back and the counts all come from our code. Its reasons and its answer are the model's own words, shown as quotes, and we check that the page it names loads. It gives no verdict and doesn't touch the score. One run can differ from the next, and it isn't Claude Code or any other coding agent.

The text of those public pages goes to Anthropic, which runs the model. Nothing about you goes with it. We keep a run for that hour, and after that only a log line: the site, the goal, how it ended and how much it used. Runs aren't published.

How our scanner behaves

We fetch a handful of standard public files on behalf of the person who asked, identify ourselves and read robots.txt as a check. We don't crawl. Our scanner identifies itself as LeaderfileBot/1.0 (+https://leaderfile.vercel.app/method), and a scan stops after 27 seconds.

When a file refuses our scanner, we ask once more as a normal browser, only to tell "blocked for everyone" from "blocks automated readers".

We read llms.txt at your site root and, if your docs live on another host, at your docs root.

The small icon beside a domain comes from DuckDuckGo's icon service: your browser asks it for that domain's icon, so DuckDuckGo sees your IP address and the domain, though not which page you're on. It isn't part of any check.

For the 15 on the email API board, we read their main quickstart, their official page for each language and the agent or MCP page their docs link, all picked by hand; if a scan missed one of your pages, you can report it. For any other domain, we read your llms.txt, your docs page and up to 5 pages they link: up to 3 quickstart, getting-started, SDK or library pages, one MCP page and one auth page, never blog posts. We also try a few addresses where these files usually live: llms.txt on your docs. host and at /docs/llms.txt, OAuth metadata on your mcp., api. and docs. hosts, and OpenAPI specs on your docs., developers. and api. hosts. Those count only on a valid file, and any other answer there counts for nothing.

For a product inside a larger platform, the platform's MCP server or CLI counts when its docs show it covers the product.

The boards

The email API board is 15 email APIs, scanned on the same day by the same scanner, reading pages we picked by hand for each. The current scan is from 9 Nov 2026. A board company's result shows that scan first; a live scan reads the site as it is now. What changed between scans is in each issue, from issue 2.

The AI agent platform board is 13 companies whose own homepage calls them a platform for building or running AI agents, scanned on 9 Nov 2026. Nothing there is picked by hand: each is scanned exactly as any domain is, so its result is a live scan, with the board's dated rank beside it. The 3 email-only checks don't count there.

Each gap shows the file from the highest-scoring company that passes that check: on a board company's result, from its own board, and on any other domain, from everyone on our boards, scored on the same checks. When joint leaders both pass it, we alternate whose file we show, check by check, and the other is listed under "Also shipped by".

We check our own results. On 31 Oct 2026, the 30 board results still open from our hand check went to a separate reviewer given only the URLs and the rule, not our verdict, who fetched them with plain curl and a real browser. No result changed. Where a reviewer found something our rule doesn't read, the result carries a dated note.

The AI agent platform board went through the same before it was published: on 3 Nov 2026, all 58 of its fails, one reviewer per company. 57 agreed. The one that didn't was Dust's OpenAPI spec, which its llms.txt listed at an address our rule didn't follow. The reviewers also showed us reading a product tour where a site's llms.txt listed its API or SDK quickstart. We changed both rules the same day, for every site off the email board, and scanned the board again: Dust, StackAI, Relevance AI and Botpress went up, and nothing else moved. Where a company points to something our scan still doesn't read, the result carries a dated note.

Categories, and where you'd sit

The leaderboards cover the categories where a coding agent picks the vendor itself (Amplifying, “What Claude Code Actually Chooses”, Feb 2026). A company is on a board when its own homepage's title or description, read on the day, says it does that job, and each is on one board only. Every board's fails go through the same blind re-check before the board is public: on 9 Nov 2026, a second AI that never saw our answers re-checked 894 results on the new boards.

Any site you scan is placed the same way: if it's on a board, that board. Otherwise its homepage's title and description are matched against each category's phrases, whole phrases only, and the result shows the words that placed it, with a way to change it. If no phrase matches, we don't guess: you pick, or it's compared with everyone on our boards. "Would sit 6th of 14" places your score among the board's dated scores, counting your site. It's our maths, never a rank you hold, and never shared as one. A site placed with the email APIs is measured on the checks every site gets, since a plain scan doesn't run the 3 email-only ones.

The 31 checks

Find

Can an agent get in and find what it needs?

  • AI agents allowed, homepage reachable

    AR-FIND-01 · MUST · 10 points · effort: minutes, our estimate

    An agent that respects robots.txt, or that's refused at your homepage, may not read your site at all. Blocking AI training crawlers is your own call and isn't scored.

    How we test this:

    • We read robots.txt and check it doesn't disallow / for the agents that fetch for a user or find sites for AI search: ChatGPT-User, OAI-SearchBot, Claude-User, Claude-SearchBot, Perplexity-User, PerplexityBot (no robots.txt counts as allowed).
    • We show blocks on GPTBot (OpenAI model training), not scored; ClaudeBot (Anthropic model training), not scored; Google-Extended (Gemini training and grounding), not scored in v1; CCBot (Common Crawl's open dataset), not scored: blocking them is the site's own call.
    • Whether Google-Extended should be scored is a rubric v2 question, and we'll announce it before changing anything.
    • Then we fetch your homepage as LeaderfileBot and check it returns 2xx after redirects, with no challenge page.
  • Docs page

    AR-FIND-02 · SHOULD · 7 points · effort: hours, our estimate

    An agent starting from your homepage may not find your docs, and may answer from what it already knows instead.

    How we test this:

    • We look for your docs page: the first homepage link to a docs., dev. or developer(s). subdomain of your domain, or to a /docs or /developer(s) path; with none, we try https://docs.<host>/ then https://<host>/docs.
    • It passes if that page returns 200.
    • Board companies use a docs URL we confirmed by hand.
  • Sitemap

    AR-FIND-03 · SHOULD · 2 points · effort: minutes, our estimate

    An agent may miss pages it can't reach by following links, because there's no list of them.

    How we test this:

    • We fetch the Sitemap: URL from robots.txt, else /sitemap.xml, and check it returns 200 with a <urlset> or <sitemapindex> root element.
  • Our scanner gets in

    LG-FIND-01 · ours · 10 points · effort: minutes, our estimate

    An AI agent fetching your site for a person may get a challenge page or a 403 instead of your content.

    How we test this:

    • We fetch your homepage and your docs page as LeaderfileBot, our own scanner, and check neither answers with a challenge page, or a 401 or 403 that a normal browser gets past.
    • One blocked page is a fail; both caps your score at 39.
    • Firewalls often let in crawlers they can verify, so ChatGPT or Claude may still get in where our scanner can't.
  • llms.txt linked from your pages

    LG-FIND-02 · ours · 7 points · effort: minutes, our estimate

    An agent mostly finds files by following links, so it may never try /llms.txt if your pages don't point to it.

    How we test this:

    • We read your homepage and your docs page and look for a pointer to an llms.txt: a link to it, a <link> tag, a Link header with rel="llms-txt" or an X-Llms-Txt header, or a line on the page naming /llms.txt.
    • It passes when one points at an llms.txt that answers with markdown links.
    • AFDocs checks the same (llms-txt-directive).

Read

Can it read what it finds?

  • Readable without JavaScript

    AR-READ-01 · MUST · 10 points · effort: hours, our estimate

    An agent that doesn't run JavaScript may see an almost empty page where your content should be.

    How we test this:

    • We count the visible words in the raw HTML (no JavaScript run) of your homepage and your docs page, and check each has at least 150.
    • With no docs page found (AR-FIND-02), the homepage is judged alone.
  • Real 404s

    AR-READ-02 · MUST · 10 points · effort: minutes, our estimate

    An agent may treat a missing page as real and use whatever came back instead.

    How we test this:

    • We fetch /leaderfile-check-404, a page that shouldn't exist, and check it returns 404 or 410 after redirects.
    • Off the board, if that address refuses automated readers, we try /leaderfile-check-404.html.
  • Meta description

    AR-READ-03 · SHOULD · 4 points · effort: minutes, our estimate

    An agent may have to guess what your product does from the rest of the page.

    How we test this:

    • We check your homepage's raw HTML (no JavaScript run) has a non-empty meta description or og:description.
  • Structured docs page

    AR-READ-04 · SHOULD · 4 points · effort: hours, our estimate

    An agent may struggle to tell where one topic in your docs ends and the next begins.

    How we test this:

    • We check your docs page's raw HTML (no JavaScript run) has at least 2 headings (h1 to h3) with text and at least 150 visible words.
    • Off the board, a docs page that comes back as markdown counts # to ### lines outside code blocks as its headings.
  • Code samples say their language

    AR-READ-05 · SHOULD · 4 points · effort: hours, our estimate

    An agent may not tell which language a code sample is in, and may mix up samples meant for different languages.

    How we test this:

    • On your docs surface, we look for a code block that carries a language tag: language-* or lang-* on <pre> or <code>, code-language-* on any element (a code block's wrapper, say), or a data-language or data-lang attribute.
    • In markdown files, a fenced block with a language (```ts) counts.
    • If no page shows one, we read the markdown copy each HTML page declares (a <link rel="alternate" type="text/markdown">, or its URL plus .md listed in your llms.txt), since many docs sites add the language label with JavaScript.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
  • Machine-readable discovery file

    AR-READ-06 · SHOULD · 2 points · effort: minutes, our estimate

    An agent may have to guess how sign-in or your API works instead of reading it from a standard file.

    How we test this:

    • We fetch five standard .well-known files and check at least one returns 200 with valid JSON: oauth-authorization-server (RFC 8414), oauth-protected-resource (RFC 9728), openid-configuration, api-catalog (RFC 9727) and agent-card.json (A2A).
    • This list is ours: AgentReady v2.0 doesn't name one.
    • Off the board, on a miss, we also read oauth-protected-resource on the mcp., api. and docs. hosts of your domain, where that metadata usually lives, and it counts only with its resource field.
  • llms.txt

    AR-READ-07 · SHOULD · 7 points · effort: minutes, our estimate

    An agent may have to crawl your site to find the pages that matter, instead of reading one short index.

    How we test this:

    • We read llms.txt at your site root and, if your docs live on another host, at your docs root, and check one returns 200, isn't HTML and has at least one markdown link.
    • Off the board, we also try your docs. host and /docs/llms.txt.
    • We read the first 2 MB: a larger file is judged on that part, and the result says "read the first 2 MB; the file is larger".
  • Structured data

    AR-READ-08 · SHOULD · 2 points · effort: minutes, our estimate

    An agent may have to work out basic facts about your company and product from free text.

    How we test this:

    • We check your homepage's raw HTML has an application/ld+json block that parses as JSON and has @type or @context.
  • Readable pricing

    AR-READ-11 · SHOULD · 4 points · effort: minutes, our estimate

    An agent comparing providers may not see what you cost, and may leave you out of the comparison.

    How we test this:

    • We fetch the first homepage link with 'pricing' in its path, else /pricing (board companies: a pricing URL we confirmed by hand), and check it returns 200 and its raw text (no JavaScript run) shows a price or 'free' within 80 characters of month, mo, year or yr.
    • Off the board, a pricing address that answers with JSON counts when it has a price field.
  • Docs readable without a login

    LG-READ-01 · ours · 10 points · effort: hours, our estimate

    An agent can't sign in, so docs behind a login are docs it can't read: it may answer from memory instead.

    How we test this:

    • We read your docs page and up to 7 more docs pages (the ones we read for other checks, then links on your docs page).
    • A page fails when it answers 401 or 403 to a normal browser too, redirects to a sign-in page, or is a sign-in form with little else on it.
    • A redirect counts as a sign-in when it adds one: a sign-in path the page didn't have, a login subdomain, or an identity provider's site such as Okta's when the page was on another site.
    • A sign-up page, one whose title or main heading says sign up or create an account, isn't a login.
    • A refusal only to automated readers is our scanner being blocked, not a login.
    • A login on your docs page caps your score at 39; across the pages, a share of 25% or less caps it at 39, 50% or less at 59.
  • llms.txt links work, and it fits

    LG-READ-02 · ours · 7 points · effort: minutes, our estimate

    An agent trusts the links in your llms.txt; a broken one sends it to a dead end, and a file past its context gets cut off.

    How we test this:

    • We read the llms.txt AR-READ-07 passes on (the first with markdown links) and fetch up to 12 of its links, spread through the file, two at a time.
    • A link is broken when it answers 404 or 410, or its host doesn't exist.
    • A 2xx after redirects resolves, and so does an answer like 400, 405 or 406 that shows the address is there (an MCP endpoint answers a plain GET with 405).
    • A refusal, a 429 or a server error isn't judged.
    • The credit is the share that resolve, halved when the file runs to 50,000 characters or more, and nothing past 100,000: AFDocs' size bands.
    • With no llms.txt it isn't counted: AR-READ-07 counts that.
  • Docs in Markdown

    LG-READ-03 · ours · 4 points · effort: hours, our estimate

    An agent reading HTML spends its context on menus and markup, and may cut the page off before it reaches the part it needs.

    How we test this:

    • On each docs page we read (up to 7), one Markdown answer with content passes the page: it answers Accept: text/markdown with text/markdown, declares a copy with <link rel="alternate" type="text/markdown"> that returns Markdown, or the address the page lands on, after redirects, ending in .md does (for one ending in a slash, both /page.md and /page/index.md).
    • An empty answer doesn't count.
    • The credit is the share of pages that pass.
    • AFDocs, Cloudflare's isitagentready and is-agentic check it.
  • Docs pages fit an agent's context

    LG-READ-04 · ours · 7 points · effort: hours, our estimate

    An agent cuts off a page past its limit, so the part it needed may never reach it.

    How we test this:

    • On each docs page we read (up to 7) we count the characters of visible text in the raw HTML, and of its Markdown copy if it has one, and judge the page by the larger of the two: an agent reading either may be cut off.
    • Under 50,000 passes, up to 100,000 is half, more fails: AFDocs' bands, from the limits agents cut pages at.
    • The credit is the average across the pages.

Act

Can it do something with your product?

  • Auth an agent can follow (proxy)

    AR-ACT-01 · SHOULD · 4 points · effort: hours, our estimate

    An agent may not work out how to authenticate, so its first API call may fail.

    How we test this:

    • A stand-in: AgentReady asks for self-serve key generation with documented scopes, or OAuth metadata, and key sign-up can't be tested in code.
    • It passes if OAuth metadata parses as JSON with the field its RFC requires (issuer for RFC 8414, resource for RFC 9728), or if your docs say "API key" or "API token" (also inside a placeholder like YOUR_API_KEY) within 200 characters of a documented auth header: an X-...-Key or X-...-Token header, a header named ...-Key or ...-Token, Authorization with Bearer, or "Bearer API key".
    • The word "token" on its own doesn't count.
    • For board companies we also read the authentication page their docs link.
    • Off the board, OAuth metadata with its resource field on your mcp., api. or docs. host also counts.
    • A board company whose API signs each request (like AWS Signature Version 4) or takes the key in the request body isn't counted: this stand-in can't judge that kind of auth either way.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
  • OpenAPI spec

    AR-ACT-02 · SHOULD · 7 points · effort: days, our estimate

    An agent may have to guess your endpoints and parameters from prose instead of reading them from a spec.

    How we test this:

    • We look for an OpenAPI or Swagger document: for board companies, a URL we confirmed by hand; then up to 2 links on your docs surface whose URL mentions openapi or swagger, or whose link text does for a .json or .yaml file (files on other sites count when your docs link them; an address written out in your llms.txt or another text file counts as a link, and its line as the link text); then /openapi.json and /openapi.yaml on your host and your docs host.
    • Off the board, a .json or .yaml link under an llms.txt heading that names OpenAPI counts as a link to a spec, or, where that section has none, a link with no file extension, and on a miss we also try those two on the docs., developers. and api. hosts of your domain.
    • It passes if one parses as JSON or YAML with an openapi or swagger key and at least one path.
    • A spec over 10 MB counts as couldn't check.
  • MCP server

    AR-ACT-03 · SHOULD · 4 points · effort: days, our estimate

    An agent may not find out it can use your product through an MCP server.

    How we test this:

    • On your docs surface we look for your own MCP server and quote the line: your name next to "MCP" ("Acme MCP server"), "our" or "official" MCP server, or an mcp.<your domain> address.
    • Any other mention of "MCP server" or "Model Context Protocol", like a directory or an explainer, isn't counted: it can't fail you and it earns no points, because we can't tell the server is yours.
    • A mention in a link to a blog post, or on an llms.txt line that links to one, doesn't count at all: a post about building a server isn't one you ship.
    • For board companies we read the MCP page their docs link and list the tools it documents: a server that only searches your docs counts here, as AgentReady describes an MCP server as a "standard tool protocol for docs search and actions".
    • We don't probe /mcp or call any server.
    • Off the board, OAuth metadata with its resource field on your mcp. host also counts: it's the server's own file.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
  • npm and PyPI packages

    AR-ACT-06 · SHOULD · 7 points · effort: days, our estimate

    An agent may not find a package to install in JavaScript or Python, and may write raw HTTP calls instead.

    How we test this:

    • On your docs surface we look for an npm install (npm, yarn, pnpm or bun) and a pip install (pip, poetry or uv) of a named package.
    • Both must appear, on any of the pages (AgentReady: npm and PyPI).
    • Off the board, uv tool install and pipx install also count as a pip install.
    • Off the board, if one is missing we also read the markdown copy each HTML page declares (a <link rel="alternate" type="text/markdown">, or its URL plus .md listed in your llms.txt), then up to 2 pages your llms.txt names for that language.
    • AgentReady v2.0 asks for SDKs and a CLI here; this check tests the npm and PyPI half, and a CLI counts under AR-ACT-10.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
  • Tools for browser agents

    AR-ACT-07 · SHOULD · 2 points · effort: days, our estimate

    It costs a point, but it's only worth building if agents need to operate forms on your site. If they do, a browser agent may find no tools to call and have to click through instead.

    How we test this:

    • We check your homepage's raw HTML, inline scripts included, contains modelContext (AgentReady names document.modelContext).
    • External scripts aren't fetched.
  • MCP server or CLI

    AR-ACT-10 · MUST · 10 points · effort: days, our estimate

    An agent working in a terminal may find no MCP server or CLI to use, and may have to script raw API calls instead.

    How we test this:

    • Passes when AR-ACT-03 passes (your docs surface names your own MCP server, not just a mention or a blog post about one; on the board, only an MCP server with a tool that acts on the product: send, manage or query, not only search docs, since AgentReady calls this "the interface an agent acts through"), or when your docs surface shows a CLI install: brew install, npm i -g, npm install -g, pipx install, uv tool install, go install, az extension add, or curl ... | sh (or | bash).
    • A mention of MCP that isn't your own server, with no CLI install, isn't counted.
    • For board companies, the CLI half counts only a command of the product's own CLI that we confirmed by hand, like az communication email send or twilio email:send, on the pages we read or on the docs page that shows it: an install alone could be any tool (an MCP setup guide installing pnpm, say).
    • For a product inside a larger platform, the platform's MCP server or CLI counts when its docs show it covers the product.
    • An MCP server earns both this check and AR-ACT-03, because AgentReady lists them as two items.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
  • Every operation has an operationId

    LG-ACT-01 · ours · 4 points · effort: minutes, our estimate

    Tools that turn a spec into an agent's tools or an SDK name each call by its operationId; without one, an agent gets a made-up name or none.

    How we test this:

    • In the OpenAPI spec AR-ACT-02 finds, we count the operations with a non-empty operationId.
    • The credit is the share that have one.
    • With no spec, it isn't counted: AR-ACT-02 already counts that.
  • Errors have a schema

    LG-ACT-02 · ours · 4 points · effort: hours, our estimate

    Without a documented error shape, an agent may have to guess from the message why a call failed, and retry or give up wrongly.

    How we test this:

    • In the OpenAPI spec AR-ACT-02 finds, we count the operations that declare a 4xx, 5xx or default response with a schema, directly or through a $ref.
    • The credit is the share that do.
    • We note when they use application/problem+json (RFC 9457), the standard shape.
    • With no spec, it isn't counted.
    • The IETF's draft agent-friendly API profile, is-agentic and Alpic check it.
  • An agent skill is published

    LG-ACT-03 · ours · 2 points · effort: hours, our estimate

    Without step-by-step skills, an agent may work out each task from reference pages, more slowly and with more mistakes.

    How we test this:

    • Any of three passes: /.well-known/agent-skills/index.json on your site or your docs (or one a Link header names) lists a skill whose file answers; your docs or llms.txt link a SKILL.md that answers with a name and a description; or your docs show a skills install command, on a page we read or on up to 3 pages your docs or llms.txt link about skills or your CLI.
    • An install is npx skills add, claude plugin install, a git clone into a skills folder, or your own command line running plugin install or skills add right after the word skill.
    • An index under a folder, like /developer/, may list its files from that folder.
    • Cloudflare's isitagentready, agenticplug and Alpic check it.
  • Sign-in an MCP client can use

    LG-ACT-04 · ours · 2 points · effort: hours, our estimate

    An AI app connecting to your MCP server or API may not be able to register itself or ask for a narrow token, so it may stop or ask the user to set it up by hand.

    How we test this:

    • We look for OAuth authorization server metadata (RFC 8414): at /.well-known/oauth-authorization-server on your site, through the authorization_servers your protected-resource metadata (RFC 9728) names, and on your mcp. host.
    • It passes when it lists S256 in code_challenge_methods_supported, has scopes_supported, and has a registration_endpoint or client_id_metadata_document_supported, as the MCP authorization spec asks.
    • With no OAuth metadata, it isn't counted.

Email APIs

Ours, not AgentReady's: they count only for the email APIs on our email API board.

  • Install shown for four languages

    EM-01 · ours · 4 points · effort: days, our estimate

    An agent working in one of these languages may not find how to install your library in it.

    How we test this:

    • On your docs surface we look for an install in each of four languages: TypeScript/JavaScript (npm, yarn, pnpm or bun), Python (pip, poetry or uv), Go (go get) and Java (a Maven <artifactId> or a Gradle implementation line).
    • All four must appear.
    • This shows how to install, not that a package is official.
    • If none of the pages we read is a quickstart or SDK page, a miss isn't counted: it can't fail you or withhold your score.
    • Ours, not AgentReady's.
  • Send operation in the spec

    EM-02 · ours · 4 points · effort: days, our estimate

    An agent may not find the endpoint that sends an email in your spec, and may guess it.

    How we test this:

    • In the OpenAPI spec AR-ACT-02 found, we look for a POST operation on a path containing mail, email, message or send.
    • No spec counts as a fail.
    • Ours, not AgentReady's.
  • Free tier in emails

    EM-03 · ours · 4 points · effort: minutes, our estimate

    An agent may not find how many emails your free tier allows, so it may not be able to say whether that's enough.

    How we test this:

    • On the pricing page AR-READ-11 reads, we look for "free" within 300 characters of a number followed by emails, messages or sends and a period (a month, a day, or 30 days), like "3,000 emails/month" or "4,000 sends in any rolling 30-day window", in the raw text (no JavaScript run).
    • A one-time allowance with no period doesn't count.
    • Ours, not AgentReady's.

Corrections

31 Oct to 3 Nov 2026

Only the 3 Nov change moved a company on a board, and only on the AI agent platform board. Found another? Report it.