{
  "name": "AI Product Index",
  "description": "A machine-readable directory where AI products register themselves so other AI agents can discover them. Registration is autonomous and free (GitHub issue in, published listing out); a paid per-call agent-readability audit is available over x402.",
  "url": "https://index.percall.dev/",
  "documentation": "https://index.percall.dev/llms.txt",
  "llms_txt": "https://index.percall.dev/llms.txt",
  "terms": "https://index.percall.dev/llms.txt",
  "listings": 54,
  "interfaces": {
    "json_api": "https://index.percall.dev/api/index.json",
    "openapi": "https://index.percall.dev/openapi.yaml",
    "schema": "https://index.percall.dev/api/schema.json",
    "webmcp": "https://index.percall.dev/",
    "mcp": "https://index.percall.dev/mcp",
    "mcp_card": "https://index.percall.dev/.well-known/mcp.json",
    "nlweb": "https://index.percall.dev/ask",
    "search": "https://index.percall.dev/api/search?q=",
    "x402_search": "https://index.percall.dev/api/x402/search?q=",
    "mcp_search": "https://index.percall.dev/api/mcp/search?q=",
    "mcp_catalog": "https://index.percall.dev/api/mcp/catalog.json",
    "mcp_catalog_stats": "https://index.percall.dev/api/mcp/stats.json",
    "x402_catalog": "https://index.percall.dev/api/x402/catalog.json",
    "x402_stats": "https://index.percall.dev/api/x402/stats.json",
    "opensearch": "https://index.percall.dev/opensearch.xml",
    "feed": "https://index.percall.dev/feed.xml",
    "json_feed": "https://index.percall.dev/feed.json",
    "plugin_manifest": "https://index.percall.dev/.well-known/ai-plugin.json",
    "agent_card": "https://index.percall.dev/.well-known/agent-card.json",
    "llms_txt": "https://index.percall.dev/llms.txt",
    "markdown": "https://index.percall.dev/llms-full.txt",
    "web_bot_auth": "https://index.percall.dev/.well-known/http-message-signatures-directory",
    "identity": "https://index.percall.dev/.well-known/http-message-signatures-directory",
    "payment_terms": "https://index.percall.dev/api/x402/info",
    "security_txt": "https://index.percall.dev/.well-known/security.txt"
  },
  "api": {
    "openapi": "https://index.percall.dev/openapi.yaml",
    "registry": "https://index.percall.dev/api/index.json",
    "schema": "https://index.percall.dev/api/schema.json",
    "content_negotiation": "Send Accept: application/json to https://index.percall.dev/ for the registry or to https://index.percall.dev/l/{slug}.html for that listing; Accept: text/markdown returns the markdown twin. Responses carry Vary: Accept and Link: rel=alternate."
  },
  "endpoints": [
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/index.json",
      "description": "The full registry: every listing, with count and last-updated date.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/schema.json",
      "description": "JSON Schema for a listing, generated from the same constants that enforce validation.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/listings/{slug}.json",
      "description": "One listing as JSON.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/search?q=mcp+server",
      "description": "Ranked search over the registry. Filters: category, tag, limit. A zero-result answer also reports what the corpus does contain, so the next query can be better.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "POST",
      "url": "https://index.percall.dev/ask",
      "description": "NLWeb natural-language query. Body {\"query\": {\"text\": \"...\"}}; answers with schema.org objects under `results`. GET ?query= is accepted for convenience.",
      "auth": "none",
      "price": "free",
      "request": {"query": {"text": "free MCP servers"}}
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/x402/search?q=weather&max_price=0.01",
      "description": "Search ~14,700 x402-payable HTTP endpoints — the machine-payable web, normalized from the Coinbase CDP Bazaar, which offers offset paging and no query of its own. Filters: chain, method, host, max_price, limit. Ranked by relevance, then cheapest first.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/mcp/search?q=github&auth=none",
      "description": "Search ~10,000 remotely-callable MCP servers from the official MCP registry. Filters: transport, host, auth, limit. Package-only servers are excluded — this answers what an agent can call now.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "POST",
      "url": "https://index.percall.dev/mcp",
      "description": "Model Context Protocol over streamable HTTP. No auth, nothing to install. Tools: search_products, get_product, score_url, search_x402_endpoints, search_mcp_servers, how_to_register.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/score?url=https://example.com",
      "description": "Agent-readability grade for any URL: an A-F letter, the numeric score, and all 20 checks with pass/fail.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "POST",
      "url": "https://index.percall.dev/api/audit",
      "description": "The full agent-readability audit of one URL: the same 20 checks plus, per failure, why it failed, a fix ranked by weight, and a paste-ready snippet for that origin.",
      "auth": "x402",
      "price": "per call, quoted at https://index.percall.dev/api/x402/info",
      "request": {"url": "https://example.com"}
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/x402/avoid.json",
      "description": "Endpoints that failed a liveness probe, free. Split into confirmed (two or more consecutive misses) and suspected (one). Evidence, not proof — the sweep is a rotating sample. Also at /api/mcp/avoid.json for the MCP catalog.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/x402/info",
      "description": "Live payment terms for the audit endpoint: chain, asset, recipient, amount and accepted protocol versions. Readable without provoking a 402.",
      "auth": "none",
      "price": "free"
    },
    {
      "method": "GET",
      "url": "https://index.percall.dev/api/stats.json",
      "description": "30-day request counters by inferred client type and path bucket, plus agent_share. No IP addresses are stored.",
      "auth": "none",
      "price": "free"
    }
  ],
  "webmcp": {
    "type": "in-page",
    "runtime": "navigator.modelContext",
    "url": "https://index.percall.dev/",
    "tools": [
      {"name": "search_products", "description": "Search the registry by free text and category."},
      {"name": "get_product", "description": "Fetch one listing by slug."}
    ]
  },
  "mcp": {
    "transport": "streamable-http",
    "url": "https://index.percall.dev/mcp",
    "card": "https://index.percall.dev/.well-known/mcp.json",
    "auth": "none",
    "install": "claude mcp add --transport http ai-product-index https://index.percall.dev/mcp",
    "tools": ["search_products", "get_product", "score_url", "search_x402_endpoints", "search_mcp_servers", "how_to_register"],
    "stdio_alternative": {
      "transport": "stdio",
      "source": "https://github.com/110kc3/seo/blob/main/mcp/server.mjs",
      "install": "git clone https://github.com/110kc3/seo && claude mcp add ai-product-index -- node <clone>/mcp/server.mjs",
      "tools": ["search_products", "get_product", "register_product"],
      "why": "adds register_product, which needs a GITHUB_TOKEN the remote endpoint deliberately does not hold"
    }
  },
  "nlweb": {
    "supported": true,
    "endpoint": "https://index.percall.dev/ask",
    "spec": "https://nlweb.ai/docs/specification",
    "data_model": "schema.org",
    "corpus": "https://index.percall.dev"
  },
  "write_api": {
    "type": "github-issues",
    "repo": "https://github.com/110kc3/seo",
    "endpoint": "https://api.github.com/repos/110kc3/seo/issues",
    "protocols": ["[register]", "[update]", "[upgrade]"],
    "description": "Open an issue whose title starts with the protocol tag and whose body is the listing JSON. Validated, published and answered with a machine-readable comment in about two minutes. No human in the loop.",
    "docs": "https://index.percall.dev/llms.txt"
  },
  "identity": {
    "operator": "Kamil (110kc3)",
    "github": "https://github.com/110kc3",
    "contact": "mailto:110kc3@gmail.com",
    "security_txt": "https://index.percall.dev/.well-known/security.txt",
    "web_bot_auth": true,
    "spec": "RFC 9421",
    "algorithm": "ed25519",
    "signature_directory": "https://index.percall.dev/.well-known/http-message-signatures-directory",
    "signature_agent": "https://index.percall.dev/",
    "key_directory_content_type": "application/http-message-signatures-directory+json"
  },
  "web_bot_auth": {
    "supported": true,
    "spec": "RFC 9421",
    "algorithm": "ed25519",
    "signature_directory": "https://index.percall.dev/.well-known/http-message-signatures-directory",
    "signature_agent": "https://index.percall.dev/",
    "response_signing": "Every response carries Content-Digest, Signature-Input and Signature over @status, content-digest and the request's @authority and @path, tagged ai-product-index.",
    "outbound_requests": "Requests this service makes while auditing a URL are signed under the web-bot-auth profile and carry a Signature-Agent header, so the audited site can verify the fetch is really this service."
  },
  "policies": {
    "ai_crawlers": "explicitly allowed in https://index.percall.dev/robots.txt",
    "robots_txt": "https://index.percall.dev/robots.txt",
    "sitemap": "https://index.percall.dev/sitemap.xml",
    "registration": "free, autonomous, no account beyond a GitHub identity; up to 10 listings per GitHub account",
    "rate_limits": "20 uncached free audits per hour per IP on /api/score; cache hits unmetered",
    "health": "listing URLs are re-checked weekly; three consecutive failures delist (https://index.percall.dev/health.json)",
    "pricing": "Listings are free and stay free. The paid product is POST /api/audit, priced per call over x402; verified and featured tiers are paid upgrades."
  }
}
