The agent-readiness score
Send AI to a website and ask it to book a job. Either it can, or it cannot. The score measures that, out of 100, and this page is the whole method.
The score answers one question and nothing else: if a customer’s AI arrives at this site and is told to book, quote or enquire, how much of what it needs is actually there?
It is five categories, 20 points each, 100 in total. Each category is capped at 20, so no single check can carry a site, and a category can only earn points for something the scanner positively found. There is no "nothing looked broken" route to a good score.
The walk the score counts
- HomeReadableHours and address found. An agent can read them.
- ServicesReadableEvery service listed. Nothing here to book.
- Book onlineDead endA CAPTCHA. It stops a customer’s agent as surely as it stops a bot.
- Get a quoteDead endThe send button is a picture. Nothing for an agent to press.
- ContactDead endA phone number. That hands off to a human, so the agent stops here.
- AboutReadableReadable, and nothing for an agent to do.
- The score: this walk, counted.
The three bands
| Score | Grade | What it means |
|---|---|---|
| 70–100 | agent-ready | An agent sent here to book, quote or enquire has a structured way in and can complete at least one job end to end. |
| 40–69 | partially ready | An agent can read the site. It cannot reliably finish a job, the ways in are built for a person with a mouse, not for software. |
| 0–39 | invisible to agents | An agent asked to book or enquire here has almost nothing it can call directly. It can still try driving a browser through whatever is on the page, but that is slow, unverified, and gives the business no say, most agents read the page and move to the next business instead. |
The five categories
1. Crawlability and discovery: 20 points
Has the site published anything about itself at the addresses agents look first?
| Signal | Points | Note |
|---|---|---|
robots.txt present and not locking agents out | 5 | A file that blocks everything, or blocks an AI agent by name, scores nothing. |
No robots.txt at all | 3 | Open by default, but recorded as a warning. |
sitemap.xml found | 3 | |
/llms.txt present | 3 | A plain description of the site for language models. |
/.well-known/ard.json published (or the predecessor /.well-known/ai-catalog.json) | 5 | The Agent Readiness Discovery catalogue, renamed from ai-catalog.json on 26 Aug 2026. |
| Canonical URL declared | 2 | |
Page not set to noindex | 2 | A noindex page scores nothing here. |
2. Structured data: 20 points
Does the page tell a machine what this business is? Without it, an agent has to guess the type, hours and address from prose.
| Signal | Points |
|---|---|
| Any parsable JSON-LD present | 6 |
A business entity type declared (LocalBusiness, Dentist, RealEstateAgent…) | 5 |
| Machine-readable opening hours | 3 |
| Phone in structured data | 2 |
| Address in structured data | 2 |
Service, Offer or Product entities | 2 |
3. Action affordances: 20 points
Is there anything on the page for an agent to do? A booking or quote form, a known booking widget, a clickable phone number, real buttons.
| Signal | Points |
|---|---|
| A known booking-widget signature detected | 6 |
| At least one booking, quote, callback or contact form that survives the non-action filter | 6 |
A tel: link | 3 |
Not overrun with clickable divs styled as buttons | 3 |
Real <button> or <a> elements present | 2 |
Two rules keep the count honest. Search boxes, newsletter sign-ups and forms with nothing to submit are not counted as actions, even if they use a word like "book" or "contact". A booking widget only counts when the page actually points at the vendor’s booking address, not when a footer or blog post merely names the vendor.
4. Form quality: 20 points
Judged on action forms only, never on a search box.
| Signal | Points |
|---|---|
| At least one action form exists | 4 |
| 80% or more of fields properly labelled | 4 |
90% or more of fields carry a name attribute | 3 |
Half or more of fields use a semantic input type (email, tel, date…) | 3 |
Any autocomplete attributes | 2 |
| A real submit control inside the form | 2 |
At least one field marked required | 2 |
| A CAPTCHA anywhere on the page | −2 |
5. Agent interface: 20 points
Does the site say what it can do to software, rather than leaving software to guess from the layout?
| Signal | Points |
|---|---|
| WebMCP signals, the page declares its tools to the browser | 8 |
| A persistent MCP endpoint advertised, or an ARD catalogue published | 6 |
Semantic landmarks and at least one h1 | 3 |
| Images carry alt text (or there are no images) | 3 |
WebMCP is a proposal. A page declares its tools through document.modelContext, which browsers have not shipped; navigator.modelContext is a deprecated alias, and using either today means loading the @mcp-b/global polyfill.
The ARD catalogue at /.well-known/ard.json was published as a discovery standard in June 2026; its earlier path, /.well-known/ai-catalog.json, is still served. A persistent MCP endpoint is the third route, found through a link in the page or a server card in /.well-known/. Frontlatch emits to all three from one Action Graph, so a business does not have to bet on one.
Agent-callable is a separate answer, and it is not part of the score
A site can have a contact form and still have nothing an agent can use directly. An agent that drives a browser might fill it in, but that is weaker than software using it on its own. So each action gets its own yes or no, based only on evidence found, and it does not feed the 0–100 number. The score describes a site; agentCallable describes one action.
| Route | What has to be true |
|---|---|
webmcp-tool-declaration | The form itself declares a tool for agents. |
mcp-endpoint | The page advertises a standing endpoint for agents to connect to. |
ard-catalog | The site publishes an ARD catalogue at /.well-known/ard.json (or the predecessor /.well-known/ai-catalog.json). |
booking-widget | A known booking widget. A weaker claim: we could drive it, but no agent is proven to do it unaided today. |
machine-completable-form | Every field labelled and named, an email or phone reply channel, a real submit button, and no CAPTCHA. |
false and lists exactly what is missing. That list is the fix list. A phone link is never agent-callable: it hands off to a human.What fifteen real sites scored
Fifteen service businesses (five trades, five clinics, five real estate agencies), scanned read-only on 25 August 2026. The sample report pages were retired on 9 October 2026; the figures stay as the record, and every business in the index has its own live page.
| Vertical | Mean score | With a form or widget | With an agent-callable action |
|---|---|---|---|
| Trades | 58.0 | 4 of 5 | 1 of 5 |
| Clinics | 47.6 | 1 of 5 | 0 of 5 |
| Real estate | 31.4 | 0 of 5 | 0 of 5 |
| All fifteen | 45.7 | 5 of 15 | 1 of 15 |
15 of 15
published no WebMCP declaration, no MCP endpoint and no ARD catalogue. Every site in the sample scored zero on all three routes at once.
What the score does not claim
An instrument that hides its error bars is not an instrument. Each item below is recorded in the scanner’s own repository.
- The bare instrument reads one page, once, and does not run JavaScript. A booking flow two clicks deep scores as if it were not there. A live scan from
/get-scannedor a rescan from/appadds a renderer and a crawl of up to 15 pages; the fifteen examples above were scored by the bare instrument and not rescanned. - It understates most sites. In a real browser, the same fifteen sites showed 28 actions this pass did not see, on 14 of the 15.
- A saved HTML file skips the
robots.txt, sitemap,llms.txtand catalogue checks, so the same page can score up to about 11 points higher as a live URL. - It is not a ranking. A category score is a direction; the fix list is the useful part. The fifteen examples are not re-scored when the scanner changes.
- It says nothing about mappability or execution success. Those need a real browser and a sandbox, so the benchmark prints
n/afor both. - A zero in the agent-callable column is a fact about those sites. One site in fifteen did earn it.
The scanner is a read-only visitor. It scans one site at a time, with spaced requests (eight per site, never a burst), and names the project in its user-agent. A form is never filled and never submitted.
How the measurement is made
You do not install the scanner. To scan your own site, enter your domain at /get-scanned and the report opens in the same tab when the scan finishes. The run commands are in the scanner’s own README.