How the Agent Readiness Score is computed.
Exactly what the Glintbase scanner checks, how points become a score, and what the score does not claim. Every number on this page comes from the open-source scanner engine and its methodology document.
Last updated 2026-10-12 · score_version ars-3.2.0 · Markdown version
01 / Scope
What ARS measures, and what it does not
ARS 3.2 measures which agent-readiness signals a product publicly exposes, and whether they work when probed: machine-readable docs, specs, MCP servers, auth metadata, and content that agents can read without a browser.
ARS is not validated as a predictor of agent task success. No study correlates ARS with measured agent outcomes yet. Read a score as “readiness signals present and verified”, not “agents will succeed”.
02 / Core Rule
Points only for observed evidence
Every check ends in one of five states. The registry fixes each check's points and whether it is a base or bonus check; the probes only decide the state.
| Status | Meaning | Effect on score |
|---|---|---|
pass | The scanner observed the evidence | Earns the check's full registry points |
warn / fail | Checked, and the evidence was missing or wrong | Earns 0. Base checks still count in the layer's denominator; bonus checks have no effect |
na | The surface the check inspects does not exist (e.g. no MCP server, no OpenAPI) | Excluded |
skip | The surface exists but this scan could not verify the check | Excluded |
- No check may pass because a related file merely exists, or by assumption.
- No partial credit:
warnearns 0. - Absent surfaces are penalised once, by their existence check (
mcp-server-manifest,openapi-spec,llms-txt-exists, ...). Quality checks for an absent surface arena, so a missing MCP server is not counted again for every MCP quality check.
03 / Scoring
From checks to a 0–100 score
1. Archetype. The site is classified into one of four archetypes, which sets each layer's weight. In a URL scan the classifier sees only the URL: docs., /docs, /documentation or /kb point to docs; /api or api. to API / devtool; /shop, /store, /cart, /checkout or /pricing to e-commerce; /blog, /news or /article to content / media. Anything else defaults to API / devtool. A scan can also be run with an explicit archetype; such scans are stored as history only and never replace a company's latest score.
| Archetype | Discovery | Access | Usability | Payments | Denominator |
|---|---|---|---|---|---|
| API / devtool | 20 | 30 | 35 | 0 | 85 |
| Docs / knowledge base | 20 | 30 | 35 | 0 | 85 |
| E-commerce | 20 | 30 | 40 | 10 | 100 |
| Content / media | 20 | 30 | 0 | 0 | 50 |
2. Layer base score. For each layer, only base checks with a verdict (pass, warn or fail) are “verifiable”:
3. Bonus. Bonus = registry points of passed bonus checks. Payments checks are excluded from the bonus: the Payments layer uses its own OR-scoring. In a URL scan it is scored only for the e-commerce archetype (weight 10), where any one verified payment protocol (ACP, UCP, AP2 or x402) earns the full 10 points; otherwise the layer earns 0.
4. Final score. Bonus points are added to both the numerator and the denominator, so a bonus can raise a score but a missing bonus never lowers one:
Illustrative example (API / devtool, denominator 85)
Discovery: 4 of 6 verifiable base pts passed → round(4/6 × 20) = 13
Access: 40 of 50 → round(0.8 × 30) = 24
Usability: 10 of 30 → round(10/30 × 35) = 12
Bonus: 6 pts from passed bonus checks
score = round((13 + 24 + 12 + 6) ÷ (85 + 6) × 100) = round(60.4) = 60 → grade C
Grades and bands are defined once; bands are groups of grades, so the two can never disagree.
| Score | Grade | Band |
|---|---|---|
| 95–100 | A+ | Agent-Native |
| 86–94 | A | Agent-Native |
| 70–85 | B | AI-Friendly |
| 48–69 | C | AI-Capable |
| 28–47 | D | Legacy |
| 0–27 | F | Legacy |
04 / Evidence
Evidence coverage
Because unverifiable checks are excluded, a layer with few verifiable checks rests on little evidence. Every scorecard therefore reports how much evidence the score stands on, and the web report, CLI and Markdown report show it alongside the score:
| Field | Meaning |
|---|---|
checksEvaluated / checksRegistered | Checks that reached a verdict (pass, warn or fail) vs. the 129 registered checks |
baseCoverage | Verified base points ÷ registered base points, across the scored layers (Payments excluded) |
layers.<id>.coverage, lowConfidence | Per-layer share of registered base points that could be verified; the layer is flagged low evidence below 50% (MIN_LAYER_COVERAGE) |
Publish the number of checks a scan actually measured, not the registry size. 26 of the 129 registered checks are not probed yet (they report na or skip, or, for mpp-support, can never pass), so no scan evaluates all 129.
Registered base points of unprobed checks still count in the coverage denominator. On a remote URL scan this caps coverage below 100%:
| Layer | Registered base pts | Never verifiable | Why |
|---|---|---|---|
| Discovery | 21 | 15 | 14 pts in unprobed checks (brand-search-accuracy, agentic-search-specific, mcp-registry-listed, skills-sh-listed, agentic-search-usecase); agent-rules-repo (1 pt) is checked only for local codebases |
| Access | 54 | 7 | Seven 1-pt checks not probed yet (e.g. http2-support, dns-caa-record, image-alt-prose) |
| Usability | 41 | 1 | api-sdk-documentation (not probed yet). Docs archetype: mcp-tools-breadth (3 pts) is also skip |
As a consequence, Discovery can verify at most 6 of its 21 registered base points on a URL scan (29%), so it is always flagged low evidence there, and its 20-point weight rests on four checks: registry-branding, ard-catalog, npm-sdk-package and robots-ai-policy-quality.
05 / Probes
What each layer probes
| Layer | Checks | Base (points) | Bonus (points) | Not yet probed |
|---|---|---|---|---|
| Discovery | 17 | 10 (21) | 7 (14) | 6 |
| Access | 45 | 37 (54) | 8 (14) | 7 |
| Usability | 61 | 24 (41) | 37 (68) | 12 |
| Payments | 6 | 0 | 6 (16) | 1 |
Discovery
robots.txt AI-crawler policy (ClaudeBot, GPTBot, PerplexityBot, Google-Extended, anthropic-ai, cohere-ai, OAI-SearchBot), ARD / AI catalog files (/.well-known/ard.json, /.well-known/ai-catalog.json, /ai-catalog.json), MCP manifest branding, a Wikidata official-website claim (P856, matched on the registrable domain) and an npm package under the brand name that links back to the brand's domain or GitHub org. The brand is derived from the registrable domain (docs.stripe.com → stripe). An HTML page served at /robots.txt counts as no robots.txt, and # comments are stripped before directives are read. Agent rules files are only checked for local codebases (skip on URL scans).
Access
Zero-JS content, a soft-404 canary (a random path that must return 404 or 410), llms.txt (exists, formatting, and up to 8 declared links actually fetched; at least 80% must resolve), llms-full.txt, markdown content negotiation, OpenAPI at 13 standard paths (JSON specs are parsed), HTTP hygiene headers, sitemap, security.txt, and bot challenges (challenge-page markers or cf-mitigated: challenge, re-reading 403 / 429 / 503 bodies).
If the homepage cannot be fetched (no successful response and no body), every check derived from its HTML or response headers is skip (“Homepage could not be fetched”), and anti-crawler-challenge-free is skip unless a challenge was actually observed. If the soft-404 canary request does not complete, anti-spa-404 is skip.
Usability
- MCP discovery tries standard paths on the site, the
docs./api./mcp.subdomains of the registrable domain (sowww.acme.co.ukprobesdocs.acme.co.uk), and the root plus standard paths ofmcp.subdomains. A 401/403 only counts as an MCP server on an MCP-like path or host and when the response is a JSON-RPC envelope or carries an RFC 9728WWW-Authenticate: ... resource_metadata=challenge. A generic 401 is not MCP evidence. When several candidates respond, the first to answer is used. - Live MCP probe:
initializeon the 2026-07-28 and legacy wire forms (2026-07-28 support requires the server to answer with that version),tools/list(carrying the session id), schema strictness andreadOnlyHint/destructiveHintannotations read from the real tool definitions, capabilities (prompts, resources, logging) from the initialize result, and an unknown-tool canary call that must be answered with an in-channel error. - Safety rule: the prober calls a real tool only if the server annotates it
readOnlyHint: trueand it takes no required arguments. Unannotated tools are never called. SSRF behaviour is not probed. - Transports: Streamable HTTP is a base check; legacy SSE is bonus only.
- auth.md stage checks are bonus only (an emerging proposal) and each stage must appear in the file. OAuth protected-resource (RFC 9728) and authorization-server (RFC 8414) metadata must be valid JSON with the expected fields; the bearer and scope checks read them.
- OpenAPI inspection of the parsed spec: unique operationIds, JSON request schemas, typed error responses (on at least 50% of operations), Idempotency-Key, rate-limit headers, versioned URIs, search, cursor pagination, webhooks, problem+json, OpenAPI 3.1. YAML specs are detected but not parsed (
skip). - WebMCP (bonus):
modelContexttool registration or declarative form tool attributes in the homepage HTML.
Payments
Only for the e-commerce archetype, or local codebase scans with commerce signals: ACP (/checkout_sessions, /agentic_commerce/delegate_payment), UCP (/.well-known/ucp), AP2 (/.well-known/ap2), x402 (HTTP 402 at /api/payment) and MPP. MPP detection is not implemented yet, so mpp-support never passes. For other archetypes all six checks are skip.
06 / Safety
Safety and etiquette
- Read-only probing. Pages, files and metadata are fetched with GET (the unscored surface inventory also sends HEAD requests). The only POST requests are MCP JSON-RPC messages:
initialize,tools/list, one call to a non-existent canary tool, and at most onetools/callwith empty arguments. - Tool calls. That one call goes only to a tool the server itself annotates
readOnlyHint: trueand that declares no required arguments. Unannotated tools are never called. - No SSRF probing. The scanner does not send private-network URLs to MCP servers;
mcp-ssrf-guardis reported asskip. - Private-network targets are refused. Loopback, private, link-local, shared (CGNAT), reserved and cloud-metadata addresses and host names (
localhost,*.local,*.internal), URLs with embedded credentials and non-standard ports are rejected before the scan starts. In the scored probes the policy is applied to every request and re-checked on every redirect hop (up to 5). The policy checks host names and IP literals; it does not resolve DNS. - Unreachable sites are not scored. If the homepage never answers (no HTTP response at all, after one retry), the scan stops with
TARGET_UNREACHABLEinstead of producing a score. If the probe suite itself fails, the scan fails withPROBES_FAILED; there is no fallback score. - Bounded requests. Every scored probe request has a timeout (1.5 to 15 seconds) and a response size cap (2 MB by default; up to 12 MB for OpenAPI specs). MCP endpoint candidates and OpenAPI paths are tried four at a time and probing stops at the first hit; at most 8 llms.txt links are fetched. The unscored surface inventory that runs alongside the probes has a 25-second budget.
- Rate limits. The hosted scanner accepts 5 scans per hour per IP on
/api/scan, and the hosted MCP endpoint 60 requests per minute. - Identification. Scored probe requests carry a desktop browser User-Agent string; the unscored surface inventory sends
Glintscanner-V2/2.0, and MCPinitializerequests name the clientglintbase-live-probeorglintbase-audit. Discovery also queries two third parties by brand name: the Wikidata API and the npm registry.
07 / Registry
All 129 checks
The complete registry at ars-3.2.0: 71 base checks (116 points) and 58 bonus checks (112 points). Descriptions are the registry's own. “Not yet probed” marks the 26 checks the current probe code can never pass; they are excluded from scoring (or, as bonus checks, never add points).
Showing 129 of 129 checks
registry-brandingMCP Registry Branding Metadata
Verifies name, icon, and description are declared in /.well-known/mcp/manifest.json or /mcp.json.
DiscoveryBase2 ptsDiscoveryBase2ard-catalogAgent Resource Discovery (ARD v0.91)
Probes /.well-known/ard.json or fallback ai-catalog.json enforcing urn:air identifiers.
DiscoveryBase1 ptDiscoveryBase1ai-catalog-publishedAgent-Card WG Catalog Specification
Verify /.well-known/ai-catalog.json adhering to the Agent-Card Working Group specification.
DiscoveryBonus1 ptDiscoveryBonus1ard-entries-validARD Catalog Entries Validated
Validates each catalog entry carries displayName, valid mediaType, and resolvable url/data.
DiscoveryBonus2 ptsDiscoveryBonus2ard-trust-manifestCryptographic Trust Manifest
Validates presence of cryptographic signatures or attestation blocks in ARD catalog.
DiscoveryBonus2 ptsDiscoveryBonus2chatgpt-app-listedNot yet probedOpenAI ChatGPT Directory Listing
Checks inclusion and domain verification in the OpenAI ChatGPT App Directory.
DiscoveryBonus2 ptsDiscoveryBonus2brand-search-accuracyNot yet probedBrand Apex Search Resolution
Brand-name queries rank target apex domain as the definitive authoritative origin.
DiscoveryBase3 ptsDiscoveryBase3agentic-search-specificNot yet probedDeveloper Keyword Discoverability
Developer documentation, OpenAPI specs, and MCP endpoints are ranked in top search results.
DiscoveryBase3 ptsDiscoveryBase3wikipedia-presenceWikidata P856 Official Website Claim
Verifies Wikipedia/Wikidata authority record has property P856 mapped to apex domain.
DiscoveryBonus4 ptsDiscoveryBonus4mcp-registry-listedNot yet probedGlobal MCP Registry Listing
Verifies domain or server presence in major MCP registries (Smithery, mcp.so, npm).
DiscoveryBase1 ptDiscoveryBase1npm-sdk-packageOfficial SDK Package Published
Official SDK or CLI package verified under matching package scope or repository link.
DiscoveryBase1 ptDiscoveryBase1agent-rules-repoAutonomous Agent Instruction Rules
Repository contains explicit AI agent guidelines (.claude/, .cursor/, .windsurf/ rules).
Only checked when scanning a local codebase; skip on remote URL scans.
DiscoveryBase1 ptDiscoveryBase1agent-plugins-repoAgent-Plugins Schema Compliance
Verify presence of plugin.json conforming to agent-plugins.org specification.
DiscoveryBonus1 ptDiscoveryBonus1skills-sh-listedNot yet probedSkills.sh Verified Publisher
Checks skills.sh registry for verified agent skills registered to domain organization.
DiscoveryBase1 ptDiscoveryBase1robots-ai-policy-qualityTiered robots.txt AI Policy
Permits answer bots (ClaudeBot, GPTBot, PerplexityBot) while regulating training crawlers.
DiscoveryBase2 ptsDiscoveryBase2agentic-search-usecaseNot yet probedComplex Agentic Query Resolution
Evaluates zero-shot search accuracy for multi-step agent queries (held at N/A in standard mode).
Held at na (unscored) pending noise reduction.
DiscoveryBase6 ptsDiscoveryBase6robots-oai-searchbotRobots.txt OAI-SearchBot Ingress
Verifies robots.txt explicitly permits OAI-SearchBot and user-directed AI agent crawlers.
DiscoveryBonus2 ptsDiscoveryBonus2content-no-jsZero-JS Content Readability
Clean HTML prose (>500 chars, h1 present, valid heading progression, >5% text density).
AccessBase3 ptsAccessBase3page-token-budgetDocumentation Page Token Budget
Extracted text across core documentation stays within the 100k character budget (~25k tokens).
AccessBase1 ptAccessBase1anti-spa-404Anti-SPA Canary 404 Guard
Random canary URLs return genuine HTTP 404/410 rather than soft HTTP 200 SPA shells.
AccessBase2 ptsAccessBase2llms-txt-existsStandard llms.txt Context Index
Standard /llms.txt file is published at apex domain or root directory.
AccessBase1 ptAccessBase1llms-txt-formattingllms.txt Structure & Links
llms.txt starts with # Heading, contains >=5 non-empty lines, valid markdown links, 100-30k chars.
AccessBase2 ptsAccessBase2llms-txt-links-resolvellms.txt Linked Resources Reachable
Canary checks first 5 declared markdown links; all resolve to valid non-SPA content.
AccessBase2 ptsAccessBase2markdown-negotiationAccept: text/markdown Negotiation
Server returns raw markdown payload when client sends Accept: text/markdown.
AccessBase1 ptAccessBase1markdown-negotiation-varyVary: Accept CDN Cache Header
Responses negotiated via Accept send Vary: Accept to prevent CDN cache poisoning.
AccessBonus1 ptAccessBonus1markdown-url-fallbackRaw Markdown (.md) URL Twins
Appending .md to content and doc URLs returns raw clean markdown twins.
AccessBonus2 ptsAccessBonus2code-fence-validityBalanced Column-0 Code Fences
All markdown fenced blocks (``` or ~~~) are strictly balanced and properly closed.
AccessBase1 ptAccessBase1openapi-specOpenAPI 3.x Machine Specification
Valid OpenAPI 3.x schema published at /openapi.json, /swagger.json, or exported in code.
AccessBase7 ptsAccessBase7developer-portalSelf-Serve Developer Portal Path
Self-serve developer route discoverable (/developers, /docs, /dashboard, /api-keys).
AccessBase6 ptsAccessBase6api-catalog-rfc9727RFC 9727 API Catalog Linkset
Publishes /.well-known/api-catalog with Accept: application/linkset+json support.
AccessBonus2 ptsAccessBonus2ssl-tls-enforcedEnforced HTTPS / Valid TLS Certificate
All HTTP traffic permanently redirects (301/308) to HTTPS with valid TLS.
AccessBase1 ptAccessBase1http2-supportNot yet probedHTTP/2 Protocol Support
Web server supports multiplexed HTTP/2 or HTTP/3 transport for agent requests.
AccessBase1 ptAccessBase1cors-headersCORS Access-Control-Allow-Origin
API and catalog endpoints return permissive or configured CORS headers for web agents.
AccessBase1 ptAccessBase1compression-gzip-brPayload Compression (Gzip / Brotli)
Responses support Content-Encoding: gzip or br for efficient token transfer.
AccessBase1 ptAccessBase1clean-semantic-htmlSemantic HTML Landmarks
HTML structure leverages semantic elements (<main>, <article>, <nav>, <header>).
AccessBase1 ptAccessBase1heading-hierarchyStrict Heading Level Progression
Headings do not skip levels (e.g. h1 followed directly by h3 or h4).
AccessBase1 ptAccessBase1meta-description-qualityAuthoritative Meta Description
Meta description exists, length is 50-300 characters, and contains clear descriptive prose.
AccessBase1 ptAccessBase1json-ld-structured-dataJSON-LD Schema.org Metadata
Homepage and doc pages include JSON-LD schema (WebSite, SoftwareApplication, Organization).
AccessBase1 ptAccessBase1sitemap-xml-presentStandard sitemap.xml Index
Valid sitemap.xml file accessible at root or declared in robots.txt.
AccessBase1 ptAccessBase1charset-utf8-declaredExplicit UTF-8 Charset Declaration
Content-Type header or HTML meta tag explicitly declares charset=utf-8.
AccessBase1 ptAccessBase1canonical-url-presentAuthoritative Canonical URL Tag
Every document carries <link rel="canonical"> to eliminate duplicate agent indexing.
AccessBase1 ptAccessBase1content-type-charsetAccurate Content-Type Header
HTTP response Content-Type matches actual payload (text/html, text/markdown, application/json).
AccessBase1 ptAccessBase1etag-cachingETag Cache Validation Support
Server returns ETag header allowing conditional 304 Not Modified requests.
AccessBase1 ptAccessBase1cache-control-headersExplicit Cache-Control Directives
Static and doc assets specify public max-age caching directives.
AccessBase1 ptAccessBase1response-latency-p95Fast First-Byte Latency (TTFB < 800ms)
P95 response time for documentation pages is under 800ms.
AccessBase1 ptAccessBase1status-code-accuracyAuthentic HTTP Status Codes
Server does not return 200 for error states or masking real error semantics.
AccessBase1 ptAccessBase1text-density-ratioHigh Text-to-HTML Markup Ratio
Prose text content represents >= 5% of overall page markup size.
AccessBase1 ptAccessBase1pagination-rel-linksNot yet probedMachine Pagination (rel=next/prev)
List views and paginated feeds include rel="next" and rel="prev" links.
AccessBase1 ptAccessBase1link-header-canonicalLink HTTP Header for Machine Twins
Link header points agents to alternative representations (e.g. rel="alternate" type="text/markdown").
AccessBase1 ptAccessBase1dns-caa-recordNot yet probedDNS CAA Security Records
Domain has CAA records configured for authorized certificate authority issuance.
AccessBase1 ptAccessBase1security-headers-cspStandard Security Headers
Responses include X-Content-Type-Options: nosniff and Referrer-Policy.
AccessBase1 ptAccessBase1security-txt-rfc9116Security Vulnerability Disclosure (security.txt)
Publishes /.well-known/security.txt conforming to RFC 9116.
AccessBase1 ptAccessBase1llms-full-txt-presentComprehensive llms-full.txt Context
Optional /llms-full.txt providing consolidated zero-hop documentation context.
AccessBonus1 ptAccessBonus1markdown-table-syntaxNot yet probedStandard GFM Table Formatting
All markdown tables have matching header and body column counts.
AccessBase1 ptAccessBase1relative-link-resolutionNot yet probedStrict Relative URL Resolution
Documentation markdown avoids unresolvable relative parent hops (../../).
AccessBase1 ptAccessBase1image-alt-proseNot yet probedDescriptive Image Alt Text
Informative diagram and architectural images include descriptive alt prose.
AccessBase1 ptAccessBase1plain-text-accessibleNot yet probedRaw Plain Text Endpoint (/raw or text/plain)
Key documentation articles can be consumed as plain UTF-8 text.
AccessBase1 ptAccessBase1anti-crawler-challenge-freeUnchallenged Agent Scraping for Public Docs
Public documentation endpoints do not trigger Cloudflare/Imperva JavaScript captcha walls for AI agents.
AccessBase2 ptsAccessBase2llms-txt-graph-reachabilityllms.txt Navigation Reachability
Verifies llms.txt is linked from documentation navigation, footer, or sitemap rather than being an isolated orphan file.
AccessBonus2 ptsAccessBonus2markdown-html-parityMarkdown vs HTML Semantic Parity
Verifies markdown representations preserve tables, code schemas, and headings present in corresponding HTML docs.
AccessBonus2 ptsAccessBonus2crosspage-policy-consistencyCross-Page Policy Consistency
Verifies semantic consistency across pricing, rate limits, and authentication across documentation pages.
AccessBonus2 ptsAccessBonus2nojs-fact-integrityNo-JS Critical Fact Integrity
Verifies critical API parameters, endpoints, and authentication directives exist in server-rendered HTML without JS execution.
AccessBonus2 ptsAccessBonus2mcp-server-manifestMCP Server Manifest Available
MCP server endpoint is live and responds to initialization handshake.
UsabilityBase2 ptsUsabilityBase2mcp-tools-listingMCP Tools Catalog (tools/list)
tools/list returns valid array of tools with schema definitions.
UsabilityBase3 ptsUsabilityBase3mcp-tools-focusKind-Aware Focus (Docs MCP: 1-3 Focused Tools)
Docs MCPs provide 1 to 3 focused search/retrieval tools to prevent agent prompt pollution.
Docs archetype only (1-3 tools); skip for other archetypes.
UsabilityBonus3 ptsUsabilityBonus3mcp-tools-breadthKind-Aware Breadth (Product MCP: Rich Toolset)
Product MCPs provide >=3 tools or code-mode dispatcher for complete workflow execution.
Non-docs archetypes only (3+ tools); skip for docs.
UsabilityBase3 ptsUsabilityBase3mcp-tools-schema-strictStrict JSON Schema Typing for MCP Parameters
All tool inputSchema definitions declare type, properties, and required arrays.
UsabilityBase2 ptsUsabilityBase2mcp-tools-readonly-hintMCP Tool readOnlyHint Annotations
Safe query and read tools declare readOnlyHint: true to skip confirmation prompts.
UsabilityBonus2 ptsUsabilityBonus2mcp-tools-destructive-hintMCP Tool destructiveHint Annotations
Mutating or deletion tools declare destructiveHint: true for safety controls.
UsabilityBonus2 ptsUsabilityBonus2mcp-auth-requirementKind-Aware MCP Auth Policy
Docs MCPs must be public zero-auth; Product MCPs must enforce OAuth metadata.
UsabilityBase2 ptsUsabilityBase2mcp-transport-streamableStreamable HTTP MCP Transport (/api/mcp)
Mounts modern Streamable HTTP MCP transport handler for stateless agent queries.
UsabilityBase3 ptsUsabilityBase3mcp-transport-sseServer-Sent Events (SSE) MCP Transport
Supports SSE connection channel for streaming tool updates and execution logs.
UsabilityBonus2 ptsUsabilityBonus2mcp-app-registryNot yet probedMCP App UI Resource Schemas
Declares _meta.ui.resourceUri with ui:// schemes for in-agent visual rendering.
UsabilityBonus4 ptsUsabilityBonus4mcp-apps-ui-qualityNot yet probedMCP App HTML Profile Compliance
Served UI resources adhere to text/html;profile=mcp-app specifications.
UsabilityBonus4 ptsUsabilityBonus4mcp-view-cspNot yet probedIn-Agent UI Frame CSP Policy
CSP frame-ancestors permits chatgpt.com, claude.ai, and approved agent hosts.
UsabilityBonus4 ptsUsabilityBonus4mcp-prompts-listingMCP Prompt Templates (prompts/list)
Exposes curated prompt templates guiding agents on workflow execution patterns.
UsabilityBonus1 ptUsabilityBonus1mcp-resources-listingMCP Dynamic Resources (resources/list)
Exposes structured read-only data files via resources/list.
UsabilityBonus1 ptUsabilityBonus1mcp-error-reportingStandard JSON-RPC 2.0 Error Codes
Tool failures return standard JSON-RPC error codes with clear error messages.
UsabilityBase2 ptsUsabilityBase2mcp-protocol-versionMCP Specification Protocol Versioning
Client/Server handshake negotiates supported protocolVersion string.
UsabilityBase1 ptUsabilityBase1mcp-sampling-supportNot yet probedMCP Sampling Capability
Server declares sampling capability allowing server to request LLM generations via client.
UsabilityBonus2 ptsUsabilityBonus2mcp-roots-supportNot yet probedMCP Roots Capability
Server advertises roots capability for workspace filesystem context.
UsabilityBonus1 ptUsabilityBonus1mcp-logging-notificationsMCP Notifications / Logging
Server emits structured progress notifications during long-running tool execution.
UsabilityBonus1 ptUsabilityBonus1auth-md-structureWorkOS auth.md 8-Stage Canonical Structure
Validates 8 canonical stages: Discover, Pick Method, Register, Claim, Exchange, Use, Errors, Revocation.
UsabilityBonus2 ptsUsabilityBonus2auth-md-stage-discoverauth.md Stage 1: Discovery Endpoints
auth.md documents discovery URLs for OAuth / PRM metadata.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-methodsauth.md Stage 2: Authentication Methods
auth.md specifies supported methods (id-jag, service_auth, anonymous).
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-registerauth.md Stage 3: Client Registration
auth.md contains fenced HTTP request and JSON response blocks for machine registration.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-claimauth.md Stage 4: Token Claim Protocol
auth.md documents claim_token, user_code, and verification_uri flow.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-exchangeauth.md Stage 5: Token Exchange Grant
auth.md details JWT-bearer token exchange grant URN and parameters.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-useauth.md Stage 6: Bearer Header Invocation
auth.md shows clear examples of Authorization: Bearer <token> usage.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-errorsauth.md Stage 7: Auth Error Enumeration
auth.md enumerates invalid_claim_token, claimed_or_in_flight, authorization_pending.
UsabilityBonus1 ptUsabilityBonus1auth-md-stage-revocationauth.md Stage 8: Token Revocation & Security
auth.md specifies secevent+jwt token revocation endpoints and event formats.
UsabilityBonus1 ptUsabilityBonus1auth-md-walkthrough-simulationauth.md Read-Only GET Simulation
Executes non-mutating GET simulation: reads auth.md, follows RFC 9728 PRM and RFC 8414 AS metadata hops.
UsabilityBonus2 ptsUsabilityBonus2agent-auth-www-authenticateWWW-Authenticate Resource Metadata Header
Inspects 401 responses on API routes for WWW-Authenticate: Bearer resource_metadata="...".
UsabilityBonus1 ptUsabilityBonus1oauth-rfc8414-metadataRFC 8414 OAuth Authorization Server Metadata
Publishes /.well-known/oauth-authorization-server with token_endpoint and agent_auth metadata.
UsabilityBonus2 ptsUsabilityBonus2oauth-rfc9728-prmRFC 9728 Protected Resource Metadata (PRM)
Publishes /.well-known/oauth-protected-resource with authorization_servers array.
UsabilityBonus2 ptsUsabilityBonus2auth-bearer-token-supportStandard Bearer Token API Protection
API routes authenticate incoming requests via Authorization: Bearer header.
UsabilityBase2 ptsUsabilityBase2auth-scoped-permissionsGranular Scope Declarations
API routes and OpenAPI document fine-grained scope permissions (e.g. read:items, write:items).
UsabilityBase1 ptUsabilityBase1webmcpW3C WebMCP DOM & Script Declarations
Inspects HTML/JS for window.modelContext tool registrations and form toolname attributes.
UsabilityBonus5 ptsUsabilityBonus5webmcp-model-contextwindow.modelContext API Registration
Browser client registers tools dynamically via window.modelContext.registerTool().
UsabilityBonus2 ptsUsabilityBonus2webmcp-form-attributesDeclarative HTML Form Agent Attributes
HTML form tags provide declarative toolname and tooldescription attributes for agent interactions.
UsabilityBonus2 ptsUsabilityBonus2api-operation-idsUnique operationId in OpenAPI Specification
All OpenAPI operations declare unique, clean camelCase or snake_case operationIds.
UsabilityBase2 ptsUsabilityBase2api-json-schemasStrict JSON Schemas for Request Payloads
Request bodies declare explicit schema properties and required field constraints.
UsabilityBase2 ptsUsabilityBase2api-error-schemasTyped Error Response Schemas
Error responses declare structured JSON bodies with error codes and diagnostic messages.
UsabilityBase2 ptsUsabilityBase2api-idempotency-keysIdempotency-Key Header Support
POST/PUT mutation routes accept Idempotency-Key header to prevent duplicate execution.
UsabilityBase2 ptsUsabilityBase2api-rate-limit-headersStandard RateLimit-* Response Headers
API responses return RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers.
UsabilityBase2 ptsUsabilityBase2api-curl-examplesExecutable cURL Request Examples
Documentation provides copy-paste ready cURL examples with realistic dummy values.
UsabilityBase1 ptUsabilityBase1api-code-samplesMulti-Language SDK Code Samples
Documentation displays TypeScript/JavaScript, Python, and Go code snippets.
UsabilityBase1 ptUsabilityBase1api-versioning-in-uriExplicit API Versioning Strategy
API paths incorporate explicit version segment (/v1/...) or Accept header versioning.
UsabilityBase1 ptUsabilityBase1api-search-endpointGlobal Search / Filter API Endpoint
Provides queryable search/filter endpoint (/search or /filter) for autonomous agent discovery.
UsabilityBase1 ptUsabilityBase1api-rfc7807-problem-detailsRFC 7807 Problem Details for HTTP APIs
Error responses use application/problem+json MIME type with type, title, status, and detail.
UsabilityBase2 ptsUsabilityBase2api-bulk-batch-operationsNot yet probedBatch / Bulk API Endpoints
Offers bulk create/update endpoints (/batch) to conserve agent roundtrips.
UsabilityBonus1 ptUsabilityBonus1api-pagination-cursorCursor-Based Pagination for Large Collections
High-volume list endpoints provide cursor or starting_after pagination.
UsabilityBase1 ptUsabilityBase1api-webhook-declarationsWebhook Event Catalog in OpenAPI
OpenAPI 3.1 webhooks block documents outbound event schemas and HMAC signatures.
UsabilityBase1 ptUsabilityBase1api-openapi-3-1-strictOpenAPI 3.1 Dialect Compliance
Validates schema against full OpenAPI 3.1 specification including JSON Schema 2020-12.
UsabilityBase1 ptUsabilityBase1api-sandbox-environmentNot yet probedPublic Testnet / Mock Sandbox URL
Provides a sandbox or mock environment (api.sandbox.acme.com) for safe agent experimentation.
UsabilityBonus2 ptsUsabilityBonus2api-sdk-documentationNot yet probedSDK Setup & Installation Instructions
Documentation documents npm/pip install commands and client initialization snippets.
UsabilityBase1 ptUsabilityBase1api-graphql-schemaNot yet probedGraphQL Schema Introspection or SDL
GraphQL endpoints provide introspection schema or published schema.graphql.
UsabilityBonus1 ptUsabilityBonus1api-grpc-reflectionNot yet probedgRPC Server Reflection / Protobuf Definitions
gRPC services provide server reflection or downloadable .proto files.
UsabilityBonus1 ptUsabilityBonus1webmcp-js-registrationWebMCP Top-Level JavaScript Registration
Verifies browser tools are registered via document.modelContext.registerTool on top-level window for ChatGPT Site Tools visibility.
UsabilityBonus2 ptsUsabilityBonus2mcp-wire-compatibilityMCP Dual Wire-Form Compatibility
Verifies server supports MCP 2026-07-28 wire form (_meta + mcp-protocol-version header) and legacy fallback.
UsabilityBonus2 ptsUsabilityBonus2mcp-ssrf-guardNot yet probedMCP Endpoint Private Network Guard
Verifies MCP tool schemas and endpoints reject private IP loopback/link-local ranges (127.0.0.1, 169.254.169.254).
Deliberately not probed: it would require sending private-network URLs to the server.
UsabilityBonus2 ptsUsabilityBonus2mcp-honest-schemasMCP Tool Schema Honesty
Verifies declared tool schemas match runtime requirements without hidden undeclared parameters or surprise auth gates.
UsabilityBonus2 ptsUsabilityBonus2api-error-actionabilityNot yet probedAgent-Actionable Error Payloads
Verifies API and MCP error messages name the specific missing parameter, remedial tool, or retry endpoint.
UsabilityBonus2 ptsUsabilityBonus2acp-supportAgentic Commerce Protocol (ACP /checkout_sessions)
Implements ACP session creation and preflight validation at /checkout_sessions.
PaymentsBonus3 ptsPaymentsBonus3acp-delegate-paymentACP Delegated Payment Authorization
Implements /agentic_commerce/delegate_payment for autonomous transaction execution.
PaymentsBonus3 ptsPaymentsBonus3ucp-supportUniversal Commerce Protocol (/.well-known/ucp)
Publishes /.well-known/ucp with ISO date versioning and merchant capabilities.
PaymentsBonus3 ptsPaymentsBonus3ap2-supportGoogle Agent Payments Protocol (AP2 Mandates)
Supports SD-JWT signed authorization mandates under Google Agent Payments Protocol.
PaymentsBonus3 ptsPaymentsBonus3x402-supportHTTP 402 Micropayments (x402 Header)
Returns HTTP 402 with PAYMENT-REQUIRED header for per-call autonomous micropayments.
PaymentsBonus2 ptsPaymentsBonus2mpp-supportNot yet probedMachine Payments Protocol (MPP x-payment-info)
Declares x-payment-info OpenAPI extensions for machine pricing tiers.
MPP detection is not implemented; this check never passes.
PaymentsBonus2 ptsPaymentsBonus2
08 / Limitations
Known limitations
- No outcome validation. ARS is not yet shown to predict agent task success.
- Single-sample measurements. Latency and availability come from one request per URL.
- Keyword heuristics. auth.md stage detection and WebMCP detection match keywords and can be gamed.
- Fixed paths. OpenAPI is only found at standard paths; it is not followed from links, headers or llms.txt.
- Endpoint choice. When several MCP candidates respond, the first to answer is used.
- Auth-gated MCP without RFC 9728. A gated MCP server that answers 401 with neither a JSON-RPC body nor
resource_metadata=is not detected. - Absent MCP weighs heavily. For API and docs archetypes, a site without an MCP server or OpenAPI spec typically scores 0 on most of the 35-point usability layer. This is intended by the current weights but is a policy choice worth revisiting.
- Archetype drives rubric. A docs host whose MCP server is a product (action) server is judged by the docs rubric (e.g. auth-gated MCP is a
warn). - Unprobed registry checks. 26 registered checks are not probed yet; on URL scans the Discovery layer is always low evidence (see Evidence coverage).
09 / Changelog
Changes from ARS 3.1 to 3.2
- Checks pass only on observed evidence; MCP, OpenAPI, auth.md, llms.txt link and bot-challenge checks were rewritten accordingly.
- The registry owns points and bonus flags; no partial credit for
warn. - Legacy SSE transport and the 8 auth.md stage checks moved to bonus.
mcp-inchannel-signallingremoved (duplicate ofmcp-error-reporting); the registry is 129 checks.- 2026-07-28 wire-form support requires the server to negotiate that version.
- MCP servers at the root of
mcp.subdomains are discovered. - Evidence coverage and low-evidence layers are reported on every scan.
- Grades and bands unified.
- Auth-gated MCP detection requires a JSON-RPC envelope or an RFC 9728
resource_metadatachallenge. - Unreachable homepages and incomplete soft-404 canaries produce
skip, notfail/warn/pass. - A failed probe suite fails the scan (
PROBES_FAILED) instead of falling back to a discovery-only score. - Scans run with an explicit archetype override are stored as history only and never replace a company's latest score.
ARS 3.1 and earlier scores are not comparable with 3.2. Scorecard pages flag older scans and offer a rescan. Every scan is stamped with its score_version; compare scores only within the same version.
10 / Sources
Sources and links
Run an ARS 3.2 scan on any public URL.
Published ARS scores.
The scanner and scoring code behind every number on this page.
The methodology specification this page is based on.
Source of each check's points and base / bonus status.
This page as plain Markdown for agents and LLMs.
Corrections to the State of Agent Readiness 2026 report (2026-10-12).
Corrections to the Sandboxes Edition 1 benchmark (2026-10-12).
CLI, MCP servers and API reference.
Last updated 2026-10-12 · score_version ars-3.2.0