AISeeWhy

AISeeWhy API and MCP server

Send one POST with a URL to https://api.aiseewhy.com/v1/audit and get a JSON report: findings with priority, evidence and ready-to-paste fixes, in any of 30 languages. AI agents connect to https://api.aiseewhy.com/mcp over MCP and call audit_url. Without a key you get five audits per hour.

How do I call the API?

curl -s https://api.aiseewhy.com/v1/audit \
  -H 'content-type: application/json' \
  -d '{"url": "https://example.com/pricing", "language": "en", "markdown": false}'

Fields: url (required; https:// is added when missing), language (report language code, default en), bots (optional list of crawler names), markdown (add a Markdown report). With a key, send x-api-key: …; sitemap batches use POST /v1/sitemap with {"sitemap_url": …, "max_urls": 50} and need a key. The OpenAPI description is at https://api.aiseewhy.com/v1/docs.

How do I connect an AI agent over MCP?

Add a remote MCP server with the URL https://api.aiseewhy.com/mcp (streamable HTTP). Tools: audit_url, audit_sitemap (up to 10 pages) and explain_finding. The Model Context Protocol documentation explains how clients add servers.

{
  "mcpServers": {
    "aiseewhy": { "type": "http", "url": "https://api.aiseewhy.com/mcp" }
  }
}

What does a finding look like?

{
  "id": "access.blocked", "priority": "P1", "bot": "OAI-SearchBot", "bot_class": "search",
  "title": "OAI-SearchBot is blocked",
  "evidence": { "status": 403, "control_status": 200, "waf": "cloudflare" },
  "fixes": [ { "kind": "cloudflare", "title": "Let OAI-SearchBot through in Cloudflare", "body": "…" } ]
}

Priorities: P1 means AI answers cannot read or cite the page, P2 is important, P3 is nice to have or a policy choice (for example, blocking a training crawler). robots.txt is read as defined in RFC 9309.

What are the limits?

AccessLimit
No key (website, API, MCP)5 audits per hour and 20 per day per network
API keyNo per-network limit; sitemap batches up to 50 URLs
Batch audits by sitemapUp to 5,000 URLs per run, paid per audited URL

Requests to private or internal addresses are refused. Pages that cannot be audited are reported with a fetch.error or fetch.status finding.