Skip to content

How the scanner decides

How the scanner decides

Three verdicts, open rules. If one looks wrong, tell us: that is the feedback that makes it better.

Agent-ready
The page registers at least one WebMCP tool, the linter finds no errors in them, and the agent-ready score is 70 or more. Warnings, like a long name, don’t block it.
Almost
The page registers tools, but at least one has a linter error (invalid-name, duplicate-name, missing-description, invalid-input-schema, invisible-unicode, or a size past its hard limit), or the score is under 70.
Not yet
The page registers no WebMCP tool. We show how many tokens an agent reading the page would spend instead.

How a scan runs

  1. We open the page in headless Chrome on our server, with no cookies and no login.
  2. Before the page’s scripts run, we add a WebMCP host, so the page registers its tools as it would in an agent’s browser. It also takes the older navigator.modelContext and provideContext, so sites built on them still show their tools.
  3. Once the page has loaded and its tools settle, we read each tool’s name, description, input schema and annotations, and lint them.
  4. Tokens are estimated from the page’s text snapshot: its characters divided by four.
  5. For the score, the same browser fetches the site’s robots.txt, llms.txt, sitemap, Markdown version, Link headers, Agent Skills index and API catalog (3 s each, same origin, no cookies), and only keeps whether each is there.
  6. The score, out of 100: WebMCP 50 (tools 25, no lint errors 15, every tool described 5, every tool annotated 5), agent cost 15 (full with tools; else by the page’s token count), readable 20 and discoverable 15 (5 per check).
  7. A result is reused for 10 minutes; each visitor can start one new scan a minute.

Every lint rule, with its reasons

Think a verdict is wrong? Open an issue with the scan link.