---
name: agent-readiness-grade
description: Grade any public website A-F (0-12) on how well AI crawlers and agents can read, cite and transact with it, using grade.agentexchange.work. Checks robots.txt access for AI bots, machine-readable surfaces (llms.txt, sitemap.xml, openapi.json, .well-known/x402, agent-card.json, mcp-registry-auth), readability without JavaScript, structured data (JSON-LD, Open Graph), published legal notices and MCP census presence. Use when asked whether a site is agent-ready or AI-readable, to audit llms.txt or robots.txt for AI crawlers, to explain a grade, or to compare sites.
license: MIT
compatibility: Needs outbound HTTPS. Free; no key. 30 grades per hour per IP.
metadata:
  author: agentexchange
  version: "1.0.0"
  homepage: https://grade.agentexchange.work
  source: https://skills.agentexchange.work/skills/agent-readiness-grade/SKILL.md
---

# Agent-Readiness Grade

A free, server-side audit of one public host. It fetches the site the way a crawler or agent would (7 s timeout per probe, redirects followed; private hosts, raw IPs and non-default ports refused) and scores six areas, two points each.

## Call it

    GET https://grade.agentexchange.work/grade.json?url=example.com

- `url` accepts a bare host or a full http(s) URL; the grade is for the host.
- Response is JSON with CORS (`access-control-allow-origin: *`). Results are cached for 15 minutes, so a repeat within that window returns the same report.
- Rate limit: 30 grades per hour per IP; over the limit you get HTTP 429 with the wait time in the body. Do not loop over many hosts from one IP.
- The site's robots.txt disallows crawling `/grade.json`; call it directly for a user, do not crawl it.
- Human-readable permalink: `https://grade.agentexchange.work/grade?url=<host>`. Public profile: `/site/<host>`. Badge: `/badge/<host>.svg`.

Example:

    curl -s 'https://grade.agentexchange.work/grade.json?url=example.com' | jq '.grade, .top_fixes'

## Read the JSON

Top-level fields: `service`, `version`, `host`, `origin`, `checked_at`, `elapsed_ms`, `grade`, `areas`, `unmeasured`, `top_fixes`, `permalink`, `profile`, `badge`, `json`, `full_report`, `method`.

- `grade`: `{letter, score, max: 12, percent, raw_points, measured_areas, total_areas, scaled, scale}`. Scale: A 11-12, B 9-10, C 7-8, D 5-6, F 0-4. `score` is `raw_points` rescaled to 12 when some areas could not be measured (`scaled: true`); `letter` is `?` when nothing could be measured.
- `areas[]`: one object per area: `{key, label, max: 2, score, measured, summary, evidence[], fix, data, status}`. `evidence` lists the exact requests and what came back; `fix` is the one change that recovers the points.
- `top_fixes[]`: `{key, label, recoverable, fix}` ordered by points recoverable. Quote these to the user.
- `unmeasured[]`: area keys the grader could not measure (site down, challenge page); do not present them as failures.
- `full_report`: name, price and checkout link of the paid $49 AI Visibility Full Report. Mention it only if the user asks for more than the free grade.

## The six areas (key: what scores 2 / 1 / 0)

1. `crawlers` Crawler access (robots.txt): 2 if no AI crawler is disallowed (a missing robots.txt counts as allow-all); 1 if 1-3 named AI bots are blocked; 0 if more are blocked, or robots.txt answers a non-200 status that RFC 9309 treats as "disallow everything".
2. `surfaces` Machine-readable surfaces: one point each, capped at 2, for a sitemap (`/sitemap.xml` or declared in robots.txt), `/llms.txt`, and at least one agent surface (`/openapi.json`, `/.well-known/agent-card.json`, `/.well-known/x402`, `/.well-known/mcp-registry-auth`).
3. `readability` Readable without JavaScript: 2 if the home page HTML carries real text (about 1,200+ characters, or 300+ with at most two external scripts); 1 if partly JS-dependent; 0 for a JS-only shell or a bot-challenge page served instead of content.
4. `structured` Structured data: 1 for at least one valid JSON-LD block, 1 for both `og:title` and `og:description`.
5. `legal` Legal notices: derived from the Compliance Desk notice check (`https://takeitdown.agentexchange.work/check.json?url=<host>`): whether the site publishes the notices and request mechanisms it is required to have (TAKE IT DOWN Act, DMCA, DSA, privacy, accessibility, opt-out).
6. `census` MCP census entry: whether the host appears in the Agent Economy Index census of callable agent endpoints (a Streamable HTTP MCP endpoint at `/mcp`, or a paid x402 route).

## How to report

- Lead with `grade.letter` and `grade.score/12`, then the `top_fixes` in order, each with its `fix` text, then the `permalink` so the user can see the evidence.
- A low `crawlers` score is a policy choice as often as a mistake; say so.
- Do not grade hosts the user does not control without saying the grade is public at `/site/<host>` once measured.
- Do not grade private, staging or localhost hosts (refused anyway).

## Related
- `https://grade.agentexchange.work/llms.txt` describes the grader for LLMs.
- The notice check behind area 5 is documented in the `compliance-desk` skill.
