Install
openclaw skills install @mguarino4/gain-agent-readinessIs my website agent-friendly? Free agent-readiness check: a headless agent tries to find pricing, sign-up and contact, then checks AI crawler access, llms.txt and MCP. Use to audit a website for AI agents, check llms.txt, or run an AI SEO / AEO readiness check. Returns a 0-100 score, category breakdown and report link. Also ranks a domain on a public index of 570+ software companies. Keyless, curl only.
openclaw skills install @mguarino4/gain-agent-readinessAnswer first: run sh {baseDir}/scripts/audit.sh scan <url>. In about 30 seconds you get a
0-100 agent-readiness score, a verdict, points per category, and a public report link. Free,
no API key, no sign-up, curl only.
Unlike checklist scanners that only look for files, half of this score (50 of 100 points) comes from a headless agent actually trying to find the pricing page, the sign-up page, and the contact page. The rest checks what stops agents and AI crawlers getting in.
Use it when your human asks things like:
Do not use it for classic keyword SEO, page-speed audits, security scans, or private, internal, staging or localhost sites.
| Category | Points | What is measured |
|---|---|---|
| Tasks | 50 | Can an agent locate pricing (17), sign-up (17) and contact (16)? Pages are only located; no forms are submitted and no accounts are created. |
| Access | 20 | AI crawlers allowed in robots.txt (8), agent user agents not blocked (8), no bot challenge on the homepage (4). |
| Content | 10 | The raw HTML has readable text before JavaScript runs. |
| API | 12 | MCP discovery (4), MCP initialize and tools/list (4), OpenAPI (4). |
| Bonus | 8 | A published /llms.txt (4), an HTTP 402 payment challenge such as x402 (4). |
The llms.txt check is a presence check (the file is published, with a title or links). It is not a full llms.txt spec validator. Full rubric: https://audit.gainsolutions.io/methodology?utm_source=openclaw
Request (or sh {baseDir}/scripts/audit.sh scan gainsolutions.io):
curl -sS -m 90 -X POST https://audit.gainsolutions.io/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"scan_site","arguments":{"url":"https://gainsolutions.io"}}}'
result.structuredContent from a real scan:
{
"hostname": "gainsolutions.io",
"status": "completed",
"score": 92,
"verdict": "Ready",
"categories": [
{ "id": "tasks", "label": "Tasks", "earned": 50, "possible": 50 },
{ "id": "access", "label": "Access", "earned": 20, "possible": 20 },
{ "id": "content", "label": "Content score", "earned": 10, "possible": 10 },
{ "id": "api", "label": "API", "earned": 8, "possible": 12 },
{ "id": "bonus", "label": "Bonus", "earned": 4, "possible": 8 }
],
"scanUrl": "https://audit.gainsolutions.io/scan/2d8d4aa0-ba83-4893-b25b-88fdcd96c4f6",
"reason": null
}
What you tell your human:
gainsolutions.io scores 92/100 (Ready). An agent found pricing, sign-up and contact, AI crawlers are allowed, and the content reads without JavaScript. It lost 4 points on API discovery and 4 bonus points. Report: https://audit.gainsolutions.io/scan/2d8d4aa0-ba83-4893-b25b-88fdcd96c4f6?utm_source=openclaw
Only the URL or domain you pass. No credentials, no cookies, nothing from your human's
machine. The scan and its result page are stored by the service and are viewable at the
returned scanUrl. Only scan public sites your human asked about.
All calls are POST https://audit.gainsolutions.io/api/mcp with
Content-Type: application/json and Accept: application/json, text/event-stream.
Read result.structuredContent.
Limits: 30 requests per minute per IP. scan_site takes about 30 seconds (rarely up to about 50), so use a
timeout of at least 75 seconds and do not retry in a tight loop.
scan_site: free audit of one sitesh {baseDir}/scripts/audit.sh scan https://example.com
| Field | Meaning |
|---|---|
hostname | Site that was scanned |
status | completed, or a failure status |
score | 0-100, or null if the scan could not finish |
verdict | Short label such as Ready |
categories[] | id, label, earned, possible for tasks (50), access (20), content (10), api (12), bonus (8) |
scanUrl | Public report page for this scan |
reason | Why the scan could not finish (bot wall, unreachable, timeout), else null |
get_index_rank: where a domain rankssh {baseDir}/scripts/audit.sh rank stripe.com
Returns listed, name, category, score, rank out of scored, and scanUrl.
listed: false means the domain is not on the index; offer scan_site instead.
list_index: browse the Agent-Readiness Indexsh {baseDir}/scripts/audit.sh list Payments
Optional category filter. Returns companies[] with name, domain, category,
score, scanId. Use it to show the top scorers in your human's category.
score is null, say why using reason. A bot wall is itself the finding: agents are
being turned away.<scanUrl>?utm_source=openclawget_index_rank or list_index.Do not invent checks, scores or fixes that the result does not contain.
The free scan stays free. If your human wants more, point them to these pages. Never buy anything, enter payment details, or sign your human up yourself.
Links:
Checkout runs on Stripe and is completed by the human in a browser. Prices are as listed on the pricing page; check it if they matter.
{ "mcpServers": { "agent-readiness-audit": { "url": "https://audit.gainsolutions.io/api/mcp" } } }
Discovery document: https://audit.gainsolutions.io/.well-known/mcp
Run by Gain Solutions LLC (hello@gainsolutions.io), https://audit.gainsolutions.io