ARS 3.2 · Methodologyscore_version ars-3.2.0129 registered checks

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.

StatusMeaningEffect on score
passThe scanner observed the evidenceEarns the check's full registry points
warn / failChecked, and the evidence was missing or wrongEarns 0. Base checks still count in the layer's denominator; bonus checks have no effect
naThe surface the check inspects does not exist (e.g. no MCP server, no OpenAPI)Excluded
skipThe surface exists but this scan could not verify the checkExcluded
  • No check may pass because a related file merely exists, or by assumption.
  • No partial credit: warn earns 0.
  • Absent surfaces are penalised once, by their existence check (mcp-server-manifest, openapi-spec, llms-txt-exists, ...). Quality checks for an absent surface are na, 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.

Layer weights by archetype
ArchetypeDiscoveryAccessUsabilityPaymentsDenominator
API / devtool203035085
Docs / knowledge base203035085
E-commerce20304010100
Content / media20300050

2. Layer base score. For each layer, only base checks with a verdict (pass, warn or fail) are “verifiable”:

layer base = round(passed base points ÷ verifiable base points × layer weight)

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:

score = min(100, round((Σ layer base + bonus) ÷ (denominator + bonus) × 100))

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.

ScoreGradeBand
95–100A+Agent-Native
86–94AAgent-Native
70–85BAI-Friendly
48–69CAI-Capable
28–47DLegacy
0–27FLegacy

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:

FieldMeaning
checksEvaluated / checksRegisteredChecks that reached a verdict (pass, warn or fail) vs. the 129 registered checks
baseCoverageVerified base points ÷ registered base points, across the scored layers (Payments excluded)
layers.<id>.coverage, lowConfidencePer-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%:

Registered base points a remote URL scan cannot verify (derived from the registry and probe code)
LayerRegistered base ptsNever verifiableWhy
Discovery211514 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
Access547Seven 1-pt checks not probed yet (e.g. http2-support, dns-caa-record, image-alt-prose)
Usability411api-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

Registry at ars-3.2.0: 129 checks
LayerChecksBase (points)Bonus (points)Not yet probed
Discovery1710 (21)7 (14)6
Access4537 (54)8 (14)7
Usability6124 (41)37 (68)12
Payments606 (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 (so www.acme.co.uk probes docs.acme.co.uk), and the root plus standard paths of mcp. 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 9728 WWW-Authenticate: ... resource_metadata= challenge. A generic 401 is not MCP evidence. When several candidates respond, the first to answer is used.
  • Live MCP probe: initialize on 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 and readOnlyHint / destructiveHint annotations 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: true and 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): modelContext tool 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

What the scanner does, and does not do
  • 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 one tools/call with empty arguments.
  • Tool calls. That one call goes only to a tool the server itself annotates readOnlyHint: true and 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-guard is reported as skip.
  • 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_UNREACHABLE instead of producing a score. If the probe suite itself fails, the scan fails with PROBES_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 MCP initialize requests name the client glintbase-live-probe or glintbase-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-branding

    MCP Registry Branding Metadata

    Verifies name, icon, and description are declared in /.well-known/mcp/manifest.json or /mcp.json.

    DiscoveryBase2 pts
  • ard-catalog

    Agent Resource Discovery (ARD v0.91)

    Probes /.well-known/ard.json or fallback ai-catalog.json enforcing urn:air identifiers.

    DiscoveryBase1 pt
  • ai-catalog-published

    Agent-Card WG Catalog Specification

    Verify /.well-known/ai-catalog.json adhering to the Agent-Card Working Group specification.

    DiscoveryBonus1 pt
  • ard-entries-valid

    ARD Catalog Entries Validated

    Validates each catalog entry carries displayName, valid mediaType, and resolvable url/data.

    DiscoveryBonus2 pts
  • ard-trust-manifest

    Cryptographic Trust Manifest

    Validates presence of cryptographic signatures or attestation blocks in ARD catalog.

    DiscoveryBonus2 pts
  • chatgpt-app-listedNot yet probed

    OpenAI ChatGPT Directory Listing

    Checks inclusion and domain verification in the OpenAI ChatGPT App Directory.

    DiscoveryBonus2 pts
  • brand-search-accuracyNot yet probed

    Brand Apex Search Resolution

    Brand-name queries rank target apex domain as the definitive authoritative origin.

    DiscoveryBase3 pts
  • agentic-search-specificNot yet probed

    Developer Keyword Discoverability

    Developer documentation, OpenAPI specs, and MCP endpoints are ranked in top search results.

    DiscoveryBase3 pts
  • wikipedia-presence

    Wikidata P856 Official Website Claim

    Verifies Wikipedia/Wikidata authority record has property P856 mapped to apex domain.

    DiscoveryBonus4 pts
  • mcp-registry-listedNot yet probed

    Global MCP Registry Listing

    Verifies domain or server presence in major MCP registries (Smithery, mcp.so, npm).

    DiscoveryBase1 pt
  • npm-sdk-package

    Official SDK Package Published

    Official SDK or CLI package verified under matching package scope or repository link.

    DiscoveryBase1 pt
  • agent-rules-repo

    Autonomous 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 pt
  • agent-plugins-repo

    Agent-Plugins Schema Compliance

    Verify presence of plugin.json conforming to agent-plugins.org specification.

    DiscoveryBonus1 pt
  • skills-sh-listedNot yet probed

    Skills.sh Verified Publisher

    Checks skills.sh registry for verified agent skills registered to domain organization.

    DiscoveryBase1 pt
  • robots-ai-policy-quality

    Tiered robots.txt AI Policy

    Permits answer bots (ClaudeBot, GPTBot, PerplexityBot) while regulating training crawlers.

    DiscoveryBase2 pts
  • agentic-search-usecaseNot yet probed

    Complex 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 pts
  • robots-oai-searchbot

    Robots.txt OAI-SearchBot Ingress

    Verifies robots.txt explicitly permits OAI-SearchBot and user-directed AI agent crawlers.

    DiscoveryBonus2 pts
  • content-no-js

    Zero-JS Content Readability

    Clean HTML prose (>500 chars, h1 present, valid heading progression, >5% text density).

    AccessBase3 pts
  • page-token-budget

    Documentation Page Token Budget

    Extracted text across core documentation stays within the 100k character budget (~25k tokens).

    AccessBase1 pt
  • anti-spa-404

    Anti-SPA Canary 404 Guard

    Random canary URLs return genuine HTTP 404/410 rather than soft HTTP 200 SPA shells.

    AccessBase2 pts
  • llms-txt-exists

    Standard llms.txt Context Index

    Standard /llms.txt file is published at apex domain or root directory.

    AccessBase1 pt
  • llms-txt-formatting

    llms.txt Structure & Links

    llms.txt starts with # Heading, contains >=5 non-empty lines, valid markdown links, 100-30k chars.

    AccessBase2 pts
  • llms-txt-links-resolve

    llms.txt Linked Resources Reachable

    Canary checks first 5 declared markdown links; all resolve to valid non-SPA content.

    AccessBase2 pts
  • markdown-negotiation

    Accept: text/markdown Negotiation

    Server returns raw markdown payload when client sends Accept: text/markdown.

    AccessBase1 pt
  • markdown-negotiation-vary

    Vary: Accept CDN Cache Header

    Responses negotiated via Accept send Vary: Accept to prevent CDN cache poisoning.

    AccessBonus1 pt
  • markdown-url-fallback

    Raw Markdown (.md) URL Twins

    Appending .md to content and doc URLs returns raw clean markdown twins.

    AccessBonus2 pts
  • code-fence-validity

    Balanced Column-0 Code Fences

    All markdown fenced blocks (``` or ~~~) are strictly balanced and properly closed.

    AccessBase1 pt
  • openapi-spec

    OpenAPI 3.x Machine Specification

    Valid OpenAPI 3.x schema published at /openapi.json, /swagger.json, or exported in code.

    AccessBase7 pts
  • developer-portal

    Self-Serve Developer Portal Path

    Self-serve developer route discoverable (/developers, /docs, /dashboard, /api-keys).

    AccessBase6 pts
  • api-catalog-rfc9727

    RFC 9727 API Catalog Linkset

    Publishes /.well-known/api-catalog with Accept: application/linkset+json support.

    AccessBonus2 pts
  • ssl-tls-enforced

    Enforced HTTPS / Valid TLS Certificate

    All HTTP traffic permanently redirects (301/308) to HTTPS with valid TLS.

    AccessBase1 pt
  • http2-supportNot yet probed

    HTTP/2 Protocol Support

    Web server supports multiplexed HTTP/2 or HTTP/3 transport for agent requests.

    AccessBase1 pt
  • cors-headers

    CORS Access-Control-Allow-Origin

    API and catalog endpoints return permissive or configured CORS headers for web agents.

    AccessBase1 pt
  • compression-gzip-br

    Payload Compression (Gzip / Brotli)

    Responses support Content-Encoding: gzip or br for efficient token transfer.

    AccessBase1 pt
  • clean-semantic-html

    Semantic HTML Landmarks

    HTML structure leverages semantic elements (<main>, <article>, <nav>, <header>).

    AccessBase1 pt
  • heading-hierarchy

    Strict Heading Level Progression

    Headings do not skip levels (e.g. h1 followed directly by h3 or h4).

    AccessBase1 pt
  • meta-description-quality

    Authoritative Meta Description

    Meta description exists, length is 50-300 characters, and contains clear descriptive prose.

    AccessBase1 pt
  • json-ld-structured-data

    JSON-LD Schema.org Metadata

    Homepage and doc pages include JSON-LD schema (WebSite, SoftwareApplication, Organization).

    AccessBase1 pt
  • sitemap-xml-present

    Standard sitemap.xml Index

    Valid sitemap.xml file accessible at root or declared in robots.txt.

    AccessBase1 pt
  • charset-utf8-declared

    Explicit UTF-8 Charset Declaration

    Content-Type header or HTML meta tag explicitly declares charset=utf-8.

    AccessBase1 pt
  • canonical-url-present

    Authoritative Canonical URL Tag

    Every document carries <link rel="canonical"> to eliminate duplicate agent indexing.

    AccessBase1 pt
  • content-type-charset

    Accurate Content-Type Header

    HTTP response Content-Type matches actual payload (text/html, text/markdown, application/json).

    AccessBase1 pt
  • etag-caching

    ETag Cache Validation Support

    Server returns ETag header allowing conditional 304 Not Modified requests.

    AccessBase1 pt
  • cache-control-headers

    Explicit Cache-Control Directives

    Static and doc assets specify public max-age caching directives.

    AccessBase1 pt
  • response-latency-p95

    Fast First-Byte Latency (TTFB < 800ms)

    P95 response time for documentation pages is under 800ms.

    AccessBase1 pt
  • status-code-accuracy

    Authentic HTTP Status Codes

    Server does not return 200 for error states or masking real error semantics.

    AccessBase1 pt
  • text-density-ratio

    High Text-to-HTML Markup Ratio

    Prose text content represents >= 5% of overall page markup size.

    AccessBase1 pt
  • pagination-rel-linksNot yet probed

    Machine Pagination (rel=next/prev)

    List views and paginated feeds include rel="next" and rel="prev" links.

    AccessBase1 pt
  • link-header-canonical

    Link HTTP Header for Machine Twins

    Link header points agents to alternative representations (e.g. rel="alternate" type="text/markdown").

    AccessBase1 pt
  • dns-caa-recordNot yet probed

    DNS CAA Security Records

    Domain has CAA records configured for authorized certificate authority issuance.

    AccessBase1 pt
  • security-headers-csp

    Standard Security Headers

    Responses include X-Content-Type-Options: nosniff and Referrer-Policy.

    AccessBase1 pt
  • security-txt-rfc9116

    Security Vulnerability Disclosure (security.txt)

    Publishes /.well-known/security.txt conforming to RFC 9116.

    AccessBase1 pt
  • llms-full-txt-present

    Comprehensive llms-full.txt Context

    Optional /llms-full.txt providing consolidated zero-hop documentation context.

    AccessBonus1 pt
  • markdown-table-syntaxNot yet probed

    Standard GFM Table Formatting

    All markdown tables have matching header and body column counts.

    AccessBase1 pt
  • relative-link-resolutionNot yet probed

    Strict Relative URL Resolution

    Documentation markdown avoids unresolvable relative parent hops (../../).

    AccessBase1 pt
  • image-alt-proseNot yet probed

    Descriptive Image Alt Text

    Informative diagram and architectural images include descriptive alt prose.

    AccessBase1 pt
  • plain-text-accessibleNot yet probed

    Raw Plain Text Endpoint (/raw or text/plain)

    Key documentation articles can be consumed as plain UTF-8 text.

    AccessBase1 pt
  • anti-crawler-challenge-free

    Unchallenged Agent Scraping for Public Docs

    Public documentation endpoints do not trigger Cloudflare/Imperva JavaScript captcha walls for AI agents.

    AccessBase2 pts
  • llms-txt-graph-reachability

    llms.txt Navigation Reachability

    Verifies llms.txt is linked from documentation navigation, footer, or sitemap rather than being an isolated orphan file.

    AccessBonus2 pts
  • markdown-html-parity

    Markdown vs HTML Semantic Parity

    Verifies markdown representations preserve tables, code schemas, and headings present in corresponding HTML docs.

    AccessBonus2 pts
  • crosspage-policy-consistency

    Cross-Page Policy Consistency

    Verifies semantic consistency across pricing, rate limits, and authentication across documentation pages.

    AccessBonus2 pts
  • nojs-fact-integrity

    No-JS Critical Fact Integrity

    Verifies critical API parameters, endpoints, and authentication directives exist in server-rendered HTML without JS execution.

    AccessBonus2 pts
  • mcp-server-manifest

    MCP Server Manifest Available

    MCP server endpoint is live and responds to initialization handshake.

    UsabilityBase2 pts
  • mcp-tools-listing

    MCP Tools Catalog (tools/list)

    tools/list returns valid array of tools with schema definitions.

    UsabilityBase3 pts
  • mcp-tools-focus

    Kind-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 pts
  • mcp-tools-breadth

    Kind-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 pts
  • mcp-tools-schema-strict

    Strict JSON Schema Typing for MCP Parameters

    All tool inputSchema definitions declare type, properties, and required arrays.

    UsabilityBase2 pts
  • mcp-tools-readonly-hint

    MCP Tool readOnlyHint Annotations

    Safe query and read tools declare readOnlyHint: true to skip confirmation prompts.

    UsabilityBonus2 pts
  • mcp-tools-destructive-hint

    MCP Tool destructiveHint Annotations

    Mutating or deletion tools declare destructiveHint: true for safety controls.

    UsabilityBonus2 pts
  • mcp-auth-requirement

    Kind-Aware MCP Auth Policy

    Docs MCPs must be public zero-auth; Product MCPs must enforce OAuth metadata.

    UsabilityBase2 pts
  • mcp-transport-streamable

    Streamable HTTP MCP Transport (/api/mcp)

    Mounts modern Streamable HTTP MCP transport handler for stateless agent queries.

    UsabilityBase3 pts
  • mcp-transport-sse

    Server-Sent Events (SSE) MCP Transport

    Supports SSE connection channel for streaming tool updates and execution logs.

    UsabilityBonus2 pts
  • mcp-app-registryNot yet probed

    MCP App UI Resource Schemas

    Declares _meta.ui.resourceUri with ui:// schemes for in-agent visual rendering.

    UsabilityBonus4 pts
  • mcp-apps-ui-qualityNot yet probed

    MCP App HTML Profile Compliance

    Served UI resources adhere to text/html;profile=mcp-app specifications.

    UsabilityBonus4 pts
  • mcp-view-cspNot yet probed

    In-Agent UI Frame CSP Policy

    CSP frame-ancestors permits chatgpt.com, claude.ai, and approved agent hosts.

    UsabilityBonus4 pts
  • mcp-prompts-listing

    MCP Prompt Templates (prompts/list)

    Exposes curated prompt templates guiding agents on workflow execution patterns.

    UsabilityBonus1 pt
  • mcp-resources-listing

    MCP Dynamic Resources (resources/list)

    Exposes structured read-only data files via resources/list.

    UsabilityBonus1 pt
  • mcp-error-reporting

    Standard JSON-RPC 2.0 Error Codes

    Tool failures return standard JSON-RPC error codes with clear error messages.

    UsabilityBase2 pts
  • mcp-protocol-version

    MCP Specification Protocol Versioning

    Client/Server handshake negotiates supported protocolVersion string.

    UsabilityBase1 pt
  • mcp-sampling-supportNot yet probed

    MCP Sampling Capability

    Server declares sampling capability allowing server to request LLM generations via client.

    UsabilityBonus2 pts
  • mcp-roots-supportNot yet probed

    MCP Roots Capability

    Server advertises roots capability for workspace filesystem context.

    UsabilityBonus1 pt
  • mcp-logging-notifications

    MCP Notifications / Logging

    Server emits structured progress notifications during long-running tool execution.

    UsabilityBonus1 pt
  • auth-md-structure

    WorkOS auth.md 8-Stage Canonical Structure

    Validates 8 canonical stages: Discover, Pick Method, Register, Claim, Exchange, Use, Errors, Revocation.

    UsabilityBonus2 pts
  • auth-md-stage-discover

    auth.md Stage 1: Discovery Endpoints

    auth.md documents discovery URLs for OAuth / PRM metadata.

    UsabilityBonus1 pt
  • auth-md-stage-methods

    auth.md Stage 2: Authentication Methods

    auth.md specifies supported methods (id-jag, service_auth, anonymous).

    UsabilityBonus1 pt
  • auth-md-stage-register

    auth.md Stage 3: Client Registration

    auth.md contains fenced HTTP request and JSON response blocks for machine registration.

    UsabilityBonus1 pt
  • auth-md-stage-claim

    auth.md Stage 4: Token Claim Protocol

    auth.md documents claim_token, user_code, and verification_uri flow.

    UsabilityBonus1 pt
  • auth-md-stage-exchange

    auth.md Stage 5: Token Exchange Grant

    auth.md details JWT-bearer token exchange grant URN and parameters.

    UsabilityBonus1 pt
  • auth-md-stage-use

    auth.md Stage 6: Bearer Header Invocation

    auth.md shows clear examples of Authorization: Bearer <token> usage.

    UsabilityBonus1 pt
  • auth-md-stage-errors

    auth.md Stage 7: Auth Error Enumeration

    auth.md enumerates invalid_claim_token, claimed_or_in_flight, authorization_pending.

    UsabilityBonus1 pt
  • auth-md-stage-revocation

    auth.md Stage 8: Token Revocation & Security

    auth.md specifies secevent+jwt token revocation endpoints and event formats.

    UsabilityBonus1 pt
  • auth-md-walkthrough-simulation

    auth.md Read-Only GET Simulation

    Executes non-mutating GET simulation: reads auth.md, follows RFC 9728 PRM and RFC 8414 AS metadata hops.

    UsabilityBonus2 pts
  • agent-auth-www-authenticate

    WWW-Authenticate Resource Metadata Header

    Inspects 401 responses on API routes for WWW-Authenticate: Bearer resource_metadata="...".

    UsabilityBonus1 pt
  • oauth-rfc8414-metadata

    RFC 8414 OAuth Authorization Server Metadata

    Publishes /.well-known/oauth-authorization-server with token_endpoint and agent_auth metadata.

    UsabilityBonus2 pts
  • oauth-rfc9728-prm

    RFC 9728 Protected Resource Metadata (PRM)

    Publishes /.well-known/oauth-protected-resource with authorization_servers array.

    UsabilityBonus2 pts
  • auth-bearer-token-support

    Standard Bearer Token API Protection

    API routes authenticate incoming requests via Authorization: Bearer header.

    UsabilityBase2 pts
  • auth-scoped-permissions

    Granular Scope Declarations

    API routes and OpenAPI document fine-grained scope permissions (e.g. read:items, write:items).

    UsabilityBase1 pt
  • webmcp

    W3C WebMCP DOM & Script Declarations

    Inspects HTML/JS for window.modelContext tool registrations and form toolname attributes.

    UsabilityBonus5 pts
  • webmcp-model-context

    window.modelContext API Registration

    Browser client registers tools dynamically via window.modelContext.registerTool().

    UsabilityBonus2 pts
  • webmcp-form-attributes

    Declarative HTML Form Agent Attributes

    HTML form tags provide declarative toolname and tooldescription attributes for agent interactions.

    UsabilityBonus2 pts
  • api-operation-ids

    Unique operationId in OpenAPI Specification

    All OpenAPI operations declare unique, clean camelCase or snake_case operationIds.

    UsabilityBase2 pts
  • api-json-schemas

    Strict JSON Schemas for Request Payloads

    Request bodies declare explicit schema properties and required field constraints.

    UsabilityBase2 pts
  • api-error-schemas

    Typed Error Response Schemas

    Error responses declare structured JSON bodies with error codes and diagnostic messages.

    UsabilityBase2 pts
  • api-idempotency-keys

    Idempotency-Key Header Support

    POST/PUT mutation routes accept Idempotency-Key header to prevent duplicate execution.

    UsabilityBase2 pts
  • api-rate-limit-headers

    Standard RateLimit-* Response Headers

    API responses return RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers.

    UsabilityBase2 pts
  • api-curl-examples

    Executable cURL Request Examples

    Documentation provides copy-paste ready cURL examples with realistic dummy values.

    UsabilityBase1 pt
  • api-code-samples

    Multi-Language SDK Code Samples

    Documentation displays TypeScript/JavaScript, Python, and Go code snippets.

    UsabilityBase1 pt
  • api-versioning-in-uri

    Explicit API Versioning Strategy

    API paths incorporate explicit version segment (/v1/...) or Accept header versioning.

    UsabilityBase1 pt
  • api-search-endpoint

    Global Search / Filter API Endpoint

    Provides queryable search/filter endpoint (/search or /filter) for autonomous agent discovery.

    UsabilityBase1 pt
  • api-rfc7807-problem-details

    RFC 7807 Problem Details for HTTP APIs

    Error responses use application/problem+json MIME type with type, title, status, and detail.

    UsabilityBase2 pts
  • api-bulk-batch-operationsNot yet probed

    Batch / Bulk API Endpoints

    Offers bulk create/update endpoints (/batch) to conserve agent roundtrips.

    UsabilityBonus1 pt
  • api-pagination-cursor

    Cursor-Based Pagination for Large Collections

    High-volume list endpoints provide cursor or starting_after pagination.

    UsabilityBase1 pt
  • api-webhook-declarations

    Webhook Event Catalog in OpenAPI

    OpenAPI 3.1 webhooks block documents outbound event schemas and HMAC signatures.

    UsabilityBase1 pt
  • api-openapi-3-1-strict

    OpenAPI 3.1 Dialect Compliance

    Validates schema against full OpenAPI 3.1 specification including JSON Schema 2020-12.

    UsabilityBase1 pt
  • api-sandbox-environmentNot yet probed

    Public Testnet / Mock Sandbox URL

    Provides a sandbox or mock environment (api.sandbox.acme.com) for safe agent experimentation.

    UsabilityBonus2 pts
  • api-sdk-documentationNot yet probed

    SDK Setup & Installation Instructions

    Documentation documents npm/pip install commands and client initialization snippets.

    UsabilityBase1 pt
  • api-graphql-schemaNot yet probed

    GraphQL Schema Introspection or SDL

    GraphQL endpoints provide introspection schema or published schema.graphql.

    UsabilityBonus1 pt
  • api-grpc-reflectionNot yet probed

    gRPC Server Reflection / Protobuf Definitions

    gRPC services provide server reflection or downloadable .proto files.

    UsabilityBonus1 pt
  • webmcp-js-registration

    WebMCP Top-Level JavaScript Registration

    Verifies browser tools are registered via document.modelContext.registerTool on top-level window for ChatGPT Site Tools visibility.

    UsabilityBonus2 pts
  • mcp-wire-compatibility

    MCP Dual Wire-Form Compatibility

    Verifies server supports MCP 2026-07-28 wire form (_meta + mcp-protocol-version header) and legacy fallback.

    UsabilityBonus2 pts
  • mcp-ssrf-guardNot yet probed

    MCP 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 pts
  • mcp-honest-schemas

    MCP Tool Schema Honesty

    Verifies declared tool schemas match runtime requirements without hidden undeclared parameters or surprise auth gates.

    UsabilityBonus2 pts
  • api-error-actionabilityNot yet probed

    Agent-Actionable Error Payloads

    Verifies API and MCP error messages name the specific missing parameter, remedial tool, or retry endpoint.

    UsabilityBonus2 pts
  • acp-support

    Agentic Commerce Protocol (ACP /checkout_sessions)

    Implements ACP session creation and preflight validation at /checkout_sessions.

    PaymentsBonus3 pts
  • acp-delegate-payment

    ACP Delegated Payment Authorization

    Implements /agentic_commerce/delegate_payment for autonomous transaction execution.

    PaymentsBonus3 pts
  • ucp-support

    Universal Commerce Protocol (/.well-known/ucp)

    Publishes /.well-known/ucp with ISO date versioning and merchant capabilities.

    PaymentsBonus3 pts
  • ap2-support

    Google Agent Payments Protocol (AP2 Mandates)

    Supports SD-JWT signed authorization mandates under Google Agent Payments Protocol.

    PaymentsBonus3 pts
  • x402-support

    HTTP 402 Micropayments (x402 Header)

    Returns HTTP 402 with PAYMENT-REQUIRED header for per-call autonomous micropayments.

    PaymentsBonus2 pts
  • mpp-supportNot yet probed

    Machine 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 pts

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-signalling removed (duplicate of mcp-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_metadata challenge.
  • Unreachable homepages and incomplete soft-404 canaries produce skip, not fail / 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.