{
  "version": "0.2.0",
  "rubricVersion": "0.9",
  "target": "https://cloudflare.com",
  "host": "cloudflare.com",
  "https": true,
  "measured": {
    "origin": "https://www.cloudflare.com",
    "host": "www.cloudflare.com",
    "https": true,
    "url": "https://www.cloudflare.com/"
  },
  "redirect": {
    "from": "https://cloudflare.com/",
    "to": "https://www.cloudflare.com/",
    "status": 301,
    "hops": 1,
    "chain": [
      {
        "url": "https://cloudflare.com/",
        "status": 301
      }
    ],
    "sameSite": true
  },
  "scannedAt": "2026-10-20T17:05:39.352Z",
  "durationMs": 4251,
  "requests": 89,
  "score": 88.5,
  "parts": {
    "standards": {
      "score": 92.4,
      "share": 0.7,
      "points": {
        "earned": 93.75,
        "available": 101.5
      },
      "counts": {
        "pass": 16,
        "warn": 4,
        "fail": 1,
        "na": 7,
        "total": 28
      }
    },
    "conventions": {
      "score": 79.4,
      "share": 0.3,
      "points": {
        "earned": 6.75,
        "available": 8.5
      },
      "counts": {
        "pass": 6,
        "warn": 1,
        "fail": 1,
        "na": 0,
        "total": 8
      }
    }
  },
  "previous": null,
  "level": 5,
  "levelName": "Agent-native",
  "levelBlurb": "The action surface is discoverable, its auth is described, and its status is published.",
  "levelCeiling": 5,
  "verdict": "Agent-native",
  "confidence": 100,
  "confidenceLabel": "high",
  "fingerprint": "53b19edfed7ea4ff0fa43e4aa5ef50c2354074259610da27c840862fdfbac45a",
  "modules": {
    "commerce": {
      "inScope": false,
      "signals": []
    },
    "agentApi": {
      "inScope": true,
      "kinds": [
        "rest-api"
      ],
      "signals": [
        {
          "kind": "rest-api",
          "evidence": "Link rel=\"api-catalog\" <https://www.cloudflare.com/.well-known/api-catalog> on the homepage"
        },
        {
          "kind": "rest-api",
          "evidence": "/openapi.json is an OpenAPI 3.1 document"
        },
        {
          "kind": "rest-api",
          "evidence": "homepage links https://developers.cloudflare.com/"
        }
      ]
    }
  },
  "isCommerce": false,
  "commerceSignals": [],
  "blocked": null,
  "blockedNote": null,
  "deadline": {
    "ms": 60000,
    "reached": false
  },
  "profile": {
    "id": "api",
    "identified": true,
    "declared": false,
    "ambiguous": [],
    "evidence": [
      "API / developer platform (score 7), matched: An OpenAPI document responds; A documentation path responds; A developer portal responds."
    ],
    "scores": [
      {
        "id": "api",
        "score": 7,
        "signals": [
          "An OpenAPI document responds",
          "A documentation path responds",
          "A developer portal responds"
        ]
      },
      {
        "id": "saas",
        "score": 4,
        "signals": [
          "A pricing page responds",
          "A documentation path responds"
        ]
      },
      {
        "id": "ecommerce",
        "score": 1,
        "signals": [
          "The homepage links a product listing"
        ]
      },
      {
        "id": "services",
        "score": 1,
        "signals": [
          "A pricing path responds"
        ]
      }
    ]
  },
  "categories": [
    {
      "id": "discoverability",
      "label": "Discoverability",
      "score": 98,
      "counted": true,
      "pass": 5,
      "warn": 1,
      "fail": 0,
      "na": 0,
      "total": 6,
      "unscored": {
        "present": 0,
        "defective": 0,
        "absent": 0
      }
    },
    {
      "id": "content",
      "label": "Content",
      "score": 90.3,
      "counted": true,
      "pass": 7,
      "warn": 2,
      "fail": 0,
      "na": 1,
      "total": 10,
      "unscored": {
        "present": 0,
        "defective": 0,
        "absent": 1
      }
    },
    {
      "id": "botaccess",
      "label": "Crawler access",
      "score": 100,
      "counted": true,
      "pass": 1,
      "warn": 0,
      "fail": 0,
      "na": 0,
      "total": 1,
      "unscored": {
        "present": 0,
        "defective": 1,
        "absent": 1
      }
    },
    {
      "id": "protocol",
      "label": "API and agent",
      "score": 89.1,
      "counted": true,
      "pass": 3,
      "warn": 1,
      "fail": 1,
      "na": 1,
      "total": 6,
      "unscored": {
        "present": 1,
        "defective": 1,
        "absent": 2
      }
    },
    {
      "id": "commerce",
      "label": "Commerce",
      "score": null,
      "counted": false,
      "pass": 0,
      "warn": 0,
      "fail": 0,
      "na": 5,
      "total": 5,
      "unscored": {
        "present": 0,
        "defective": 0,
        "absent": 0
      }
    }
  ],
  "checks": [
    {
      "id": "reachable",
      "category": "discoverability",
      "module": "core",
      "tier": "essential",
      "weight": 3,
      "conditional": false,
      "label": "Readable homepage",
      "why": "The homepage is the first URL every agent requests. An error or an empty page gives it nothing to read.",
      "skill": "agent-access",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Measured at https://www.cloudflare.com/, where https://cloudflare.com/ redirects (HTTP 301). HTTP 200 text/html, 1303 KB, 1092 words of visible text.",
      "evidence": "HTTP 200 · text/html · 1303 KB · final https://www.cloudflare.com/",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "robots-txt",
      "category": "botaccess",
      "module": "core",
      "tier": "essential",
      "weight": 2,
      "conditional": false,
      "label": "robots.txt crawl policy",
      "why": "Crawlers read robots.txt before they fetch a page (RFC 9309). Its Sitemap line tells them where the URL list is.",
      "skill": "robots-txt",
      "standards": [
        "RFC 9309"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "/robots.txt has 9 groups and 9 rules across all groups, and 1 Sitemap line.",
      "evidence": "HTTP 200 · text/plain · 1.1 KB · # Robots.txt for www.cloudflare.com User-agent: * Allow: / # Sitemap Sitemap: https://www.cloudflare.com/sitemap.xml # AI/LLM friendly cont…",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "sitemap-xml",
      "category": "discoverability",
      "module": "core",
      "tier": "essential",
      "weight": 2,
      "conditional": false,
      "label": "XML sitemap",
      "why": "A sitemap lists the URLs a site wants crawled. Google says a small, well-linked site may not need one.",
      "skill": "sitemap",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Sitemap https://www.cloudflare.com/sitemap.xml parses and lists 1011 URLs, each with <lastmod>.",
      "evidence": "HTTP 200 · application/xml · 1591 KB · root <urlset>",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "llms-txt",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "/llms.txt published and well-structured",
      "why": "A 2024 proposal for a markdown index of a site. Google Search does not use it.",
      "skill": "llms-txt",
      "standards": [
        "llmstxt.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "/llms.txt opens with H1 \"Cloudflare\", with 12 H2 link sections and 90 links, 16.8 KB. The scan requested 7 links it names, and each answered 2xx. Not requested: 7 links on another origin and 76 same-origin links (the scan samples up to 6).",
      "evidence": "HTTP 200 · text/plain · 16.8 KB · headings: Cloudflare | About Cloudflare | Developer Platform - Compute | Developer Platform - Storage | Developer Platform - AI |…",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "link-headers",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Discovery via Link response headers",
      "why": "A Link header (RFC 8288) points a client at a resource before it parses the HTML.",
      "skill": "link-headers",
      "standards": [
        "RFC 8288"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "The homepage Link header names the OpenAPI document at /openapi.json (rel=service-desc) and /llms.txt (rel=service-doc). It does not name a markdown variant of the homepage.",
      "evidence": "link: <https://www.cloudflare.com/.well-known/api-catalog>; rel=\"api-catalog\", <https://www.cloudflare.com/.well-known/agents.json>; rel=\"service-desc\", <https://www.cloudflare.com/.well-known/webmcp.json>; rel=\"service-desc\", <https://www.cloudflare.com/openapi.json>; rel=\"service-desc\", <https://www.cloudflare.com/llms.txt>; rel=\"service-doc\", <https://www.cloudflare.com/sit…",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "canonical",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 2,
      "conditional": false,
      "label": "Canonical URL",
      "why": "A canonical link names the one URL a page is known by. Google treats it and redirects as canonical signals.",
      "skill": "canonical",
      "standards": [
        "RFC 6596"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Measured at https://www.cloudflare.com/, where https://cloudflare.com/ redirects (HTTP 301). Canonical https://www.cloudflare.com/ matches the page reached.",
      "evidence": "<link rel=\"canonical\" href=\"https://www.cloudflare.com/\">",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "http-caching",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "HTTP caching of the homepage",
      "why": "Cache-Control says how long the homepage may be reused. A validator lets a crawler ask whether it changed, and a 304 answer skips the body.",
      "skill": "http-caching",
      "standards": [
        "RFC 9111",
        "RFC 9110"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "The homepage sends Cache-Control \"max-age=10\" and no ETag or Last-Modified header, so a crawler cannot ask whether it changed, and no conditional request was made.",
      "evidence": "Cache-Control: max-age=10 · ETag: (none) · Last-Modified: (none) · no conditional GET",
      "fix": "ETag: \"<choose: a value that changes when the page changes>\"\n",
      "fixNote": "Most servers send an ETag or a Last-Modified header for a static page and answer If-None-Match with 304 Not Modified. A page rendered on each request needs the framework to set them.",
      "part": "standards"
    },
    {
      "id": "indexing-directives",
      "category": "discoverability",
      "module": "core",
      "tier": "essential",
      "weight": 2,
      "conditional": false,
      "label": "Homepage indexable: no noindex directive",
      "why": "A noindex in a meta tag or in a response header keeps the page out of search results. Bing keeps it out of Copilot too.",
      "skill": "indexing-directives",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "No noindex: the homepage has no robots meta tag for robots, bingbot or googlebot, and no X-Robots-Tag header.",
      "evidence": "no robots meta tag for robots, bingbot or googlebot, no X-Robots-Tag header",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "not-found-status",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "A real 404 for a missing page",
      "why": "A URL that does not exist answers 404 or 410 (RFC 9110). A 200 there makes every mistyped link look like a page.",
      "skill": "not-found-status",
      "standards": [
        "RFC 9110"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "/aws-probe-b7f46872c3f5, a path that does not exist, answered HTTP 404 after a redirect to https://www.cloudflare.com/aws-probe-b7f46872c3f5/.",
      "evidence": "HTTP 404 · text/html · first 16 KB read · final https://www.cloudflare.com/aws-probe-b7f46872c3f5/",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "structured-errors",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Structured errors for JSON requests",
      "why": "An agent that asks for JSON and gets an HTML error page has to read a page meant for people. RFC 9457 defines a JSON error format.",
      "skill": "problem-details",
      "standards": [
        "RFC 9457"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not used: /aws-probe-b7f46872c3f5, asked for JSON, answered HTTP 404 with an HTML page, not a JSON error.",
      "evidence": "HTTP 404 · text/html · first 16 KB read · final https://www.cloudflare.com/aws-probe-b7f46872c3f5/",
      "fix": "{\n  \"type\": \"about:blank\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"Nothing is published at this address.\"\n}\n",
      "fixNote": "Send this with Content-Type: application/problem+json and the status 404 when a request for a missing path asks for JSON. Browsers can keep the HTML page (RFC 9457).",
      "part": "conventions"
    },
    {
      "id": "llms-full",
      "category": "discoverability",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "/llms-full.txt expanded context",
      "why": "A convention that puts a site's text in one file. The llms.txt proposal does not define it.",
      "skill": "llms-full-txt",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "/llms-full.txt carries 17307 words of page text in 166 KB. /llms.txt links it.",
      "evidence": "HTTP 200 · text/plain · 166 KB · # Cloudflare - Full Documentation > This is the expanded llms.txt for Cloudflare, containing full content from all page…",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "markdown-negotiation",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Markdown content negotiation",
      "why": "Some coding agents ask for text/markdown. Google Search does not use markdown.",
      "skill": "markdown-negotiation",
      "standards": [
        "RFC 9110"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "The homepage serves text/markdown to `Accept: text/markdown, text/html;q=0.5`, with Vary: Accept, accept-encoding (HTTP 200).",
      "evidence": "HTTP 200 · text/markdown · Vary: Accept, accept-encoding · markdown body: yes",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "headings",
      "category": "content",
      "module": "core",
      "tier": "essential",
      "weight": 2,
      "conditional": false,
      "label": "Semantic heading structure",
      "why": "Headings outline the page for screen readers and for any client that splits text by section.",
      "skill": "semantic-headings",
      "standards": [
        "WCAG 2.2"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "2 H1s, 4 H2s, and 12 H3s in an outline of 51 headings. It jumps from H2 to H6, which the WAI tutorial advises against; more than one H1 is valid HTML.",
      "evidence": "outline: H1 H2 H6 H6 H3 H3 H3 H2 H3 H2 H3 H3 H2 H3 H4 H4 H4 H4 H6 H6 H6 H4 H4 H4 H6 H4 H6 H6 H6 H6 H6 H6 H6 H6 H6 H4 H6 H6 H6 H6 (first 40 of 51)",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "meta",
      "category": "content",
      "module": "core",
      "tier": "essential",
      "weight": 2,
      "conditional": false,
      "label": "Title and description",
      "why": "The title and the description say what a page is about. Google uses them for the title link and the snippet.",
      "skill": "page-metadata",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Title \"Cloudflare: Build for the agent era\" (35 characters) and a description of 68 characters. The first H1 \"Everything we learned from powering 20% of the Internet—yours by defa…\" shares 0 of 3 words with the title, brand names aside. The other H1 does not reflect it either. Microsoft's guide to AI search answers (October 2025) asks for an H1 that matches the title or closely reflects it.",
      "evidence": "title (35 characters): Cloudflare: Build for the agent era · description (68 characters): Welcome to Cloudflare - Powering the next generation of applications · first H1: Everything we learned from powering 20% of the Internet—yours by default",
      "fix": null,
      "fixNote": "Give the first H1 and the title the same subject. Either can change, and brand names do not count.",
      "part": "standards"
    },
    {
      "id": "jsonld",
      "category": "content",
      "module": "core",
      "tier": "essential",
      "weight": 3,
      "conditional": false,
      "label": "JSON-LD structured data",
      "why": "Structured data names the entity a page describes. Google reads JSON-LD, Microdata and RDFa alike.",
      "skill": "structured-data",
      "standards": [
        "schema.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "3 JSON-LD blocks parse, and the page entity, Organization \"Cloudflare\", is stated under a schema.org @context.",
      "evidence": "JSON-LD: 3 blocks, 3 parsed · schema.org @context: yes · Microdata: 0 items · RDFa: 0 items · top-level types: Organization, WebSite, WebPage",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "lang",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Language declaration and multilingual access",
      "why": "The lang attribute names the language of the text. WCAG 3.1.1 requires it at level A. Google reads hreflang, not lang.",
      "skill": "language-declaration",
      "standards": [
        "WCAG 2.2",
        "BCP 47"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "html lang=\"en\" with 10 hreflang alternates (x-default, es-es, fr-fr, de-de, it-it, pt-br), each with an absolute href, and one refers to this page.",
      "evidence": "html lang=\"en\" · alternates: x-default -> https://www.cloudflare.com/, es-es -> https://www.cloudflare.com/es-es/, fr-fr -> https://www.cloudflare.com/fr-fr/, de-de -> https://www.cloudflare.com/de-de/, it-it -> https://www.cloudflare.com/it-it/, pt-br -> https://www.cloudflare.com/pt-br/, zh-cn -> https://www.cloudflare.com/zh-cn/, ja-jp -> https://www.cloudflare.com/ja-jp/, …",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "no-js-fallback",
      "category": "content",
      "module": "core",
      "tier": "essential",
      "weight": 3,
      "conditional": false,
      "label": "Content that needs no JavaScript",
      "why": "Several AI crawlers do not run JavaScript. Text that appears only after scripts run is invisible to them.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "6984 characters of text are in the HTML before any script runs.",
      "evidence": "static text: 6984 characters · inside <noscript>: 0 characters · markup: 1334077 characters",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "spa-fallback",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Per-page content separation (no SPA fallback)",
      "why": "A route that answers every URL with the same page makes every URL look alike to a crawler.",
      "skill": "server-rendering",
      "standards": [
        "RFC 9110"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "The homepage and /about have different titles (\"Cloudflare: Build for the agent era\" and \"About us | Cloudflare\") and different main text (13% word overlap).",
      "evidence": "compared / with /about · titles \"Cloudflare: Build for the agent era\" / \"About us | Cloudflare\" · skeleton 31% · main-text word overlap 13% · main text 4513 characters",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "viewport",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Responsive markup",
      "why": "Google indexes the smartphone rendering of a page. A viewport that blocks zoom fails WCAG 1.4.4.",
      "skill": "responsive-markup",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "viewport content \"width=device-width, initial-scale=1.0, viewport-fit=cover\" sets width=device-width and leaves zoom on.",
      "evidence": "viewport meta: width=device-width, initial-scale=1.0, viewport-fit=cover",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "ai-rules",
      "category": "botaccess",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "AI crawler policy in robots.txt",
      "why": "A crawler follows the robots.txt group that names it, otherwise the * group. A named group states the site's rules for that crawler.",
      "skill": "ai-rules",
      "standards": [
        "RFC 9309"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "7 of 18 AI crawler tokens have their own robots.txt group: GPTBot, ChatGPT-User, PerplexityBot, Google-Extended, CCBot and anthropic-ai allowed, and 1 more. The other 11 follow the * group (1 of the file's 9 rules).",
      "evidence": "GPTBot: own group, 1 rule, allowed · ChatGPT-User: own group, 1 rule, allowed · PerplexityBot: own group, 1 rule, allowed · Google-Extended: own group, 1 rule, allowed · CCBot: own group, 1 rule, allowed · anthropic-ai: own group, 1 rule, allowed · cohere-ai: own group, 1 rule, allowed · * group: 1 rule, allowed, followed by 11 AI crawler tokens · robots.txt: 9 groups, 9 rules",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "content-signal",
      "category": "botaccess",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Content-Signal preferences",
      "why": "Content-Signal states search, ai-input and ai-train preferences in robots.txt. No crawler documents honouring it.",
      "skill": "content-signals",
      "standards": [
        "contentsignals.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "robots.txt states Content-Signal search=yes, ai-input=yes, ai-train=yes in the Cohere-ai group.",
      "evidence": "robots.txt: ai-train=yes, search=yes, ai-input=yes",
      "fix": null,
      "part": "conventions"
    },
    {
      "id": "mcp-server",
      "category": "protocol",
      "module": "agent-api",
      "tier": "essential",
      "weight": 3,
      "conditional": true,
      "label": "MCP server answers and lists its tools",
      "why": "An agent given the address of an MCP server can call its tools. The scan opens one session to see that the server answers and what it offers.",
      "skill": "mcp-server",
      "standards": [
        "MCP 2025-11-25"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "The server card at /.well-known/mcp/server-card.json names https://docs.mcp.cloudflare.com/mcp. It answered initialize with protocol version 2025-11-25, and tools/list named 2 tools: \"search_cloudflare_documentation\" and \"migrate_pages_to_workers_guide\". The scan called no tool.",
      "evidence": "{\"endpoint\":\"https://docs.mcp.cloudflare.com/mcp\",\"discoveredBy\":\"server-card\",\"protocolVersion\":\"2025-11-25\",\"tools\":[\"search_cloudflare_documentation\",\"migrate_pages_to_workers_guide\"],\"requests\":[\"initialize 200\",\"notifications/initialized 202\",\"tools/list 200\"]}",
      "fix": null,
      "discoveredBy": "server-card",
      "mcp": {
        "endpoint": "https://docs.mcp.cloudflare.com/mcp",
        "protocolVersion": "2025-11-25",
        "tools": [
          {
            "name": "search_cloudflare_documentation",
            "title": "Search Cloudflare docs"
          },
          {
            "name": "migrate_pages_to_workers_guide",
            "title": "Get Pages migration guide"
          }
        ],
        "toolCount": 2,
        "more": false,
        "auth": false
      },
      "part": "standards"
    },
    {
      "id": "openapi",
      "category": "protocol",
      "module": "agent-api",
      "tier": "essential",
      "weight": 3,
      "conditional": true,
      "label": "OpenAPI definition",
      "why": "An OpenAPI document describes an HTTP API so a client can call it without guessing.",
      "skill": "openapi",
      "standards": [
        "OpenAPI 3.x"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "OpenAPI 3.1.0 at /openapi.json (Link header rel=service-desc) declares info.title \"Cloudflare Public Site API\", info.version 1.0.0, and 4 paths. Not scored: the scan requested 4 of its 4 GET operations on this origin, and 3 answered with 2xx: /llms.txt answered HTTP 200; /llms-full.txt answered HTTP 200; /.well-known/api-catalog redirected to https://www.cloudflare.com/.well-known/api-catalog/ and answered HTTP 404; and 1 more.",
      "evidence": "tried: /.well-known/agents.json 200 | /.well-known/webmcp.json not requested | /openapi.json 200",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "oauth-discovery",
      "category": "protocol",
      "module": "agent-api",
      "tier": "essential",
      "weight": 2,
      "conditional": true,
      "label": "OAuth discovery documents",
      "why": "OAuth metadata tells a client where and how to authorise against the API.",
      "skill": "oauth-discovery",
      "standards": [
        "RFC 8414",
        "RFC 9728"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to a site that uses OAuth, and the scan found none.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "api-catalog",
      "category": "protocol",
      "module": "agent-api",
      "tier": "recommended",
      "weight": 2,
      "conditional": true,
      "label": "API catalog",
      "why": "An API catalog lists a publisher's APIs in one document at a fixed address (RFC 9727).",
      "skill": "api-catalog",
      "standards": [
        "RFC 9727"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No API catalog linkset was served: /.well-known/api-catalog answered HTTP 404.",
      "evidence": null,
      "fix": "{\n  \"linkset\": [\n    {\n      \"anchor\": \"<choose: URL that identifies the API>\",\n      \"service-desc\": [\n        {\n          \"href\": \"https://www.cloudflare.com/openapi.json\"\n        }\n      ]\n    }\n  ]\n}",
      "part": "standards"
    },
    {
      "id": "webmcp",
      "category": "protocol",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "WebMCP browser tool declaration",
      "why": "WebMCP lets a page register tools for an in-browser agent. It is a W3C Community Group draft.",
      "skill": "webmcp",
      "standards": [
        "W3C WebMCP"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "The homepage declares 1 WebMCP tool: 1 registerTool call, 0 with a name, a description, and an inputSchema. An incomplete tool cannot be called reliably.",
      "evidence": null,
      "fix": "// WebMCP (W3C Community Group draft): register a tool an in-browser agent can call.\nif ('modelContext' in navigator) {\n  navigator.modelContext.registerTool({\n    name: 'search_site',\n    description: 'Search this site and return the matching pages.',\n    inputSchema: {\n      type: 'object',\n      properties: { query: { type: 'string', description: 'The words to search for' } },\n      required: ['query'],\n    },\n    async execute({ query }) {\n      // Call the site's own search here and return its results as text.\n      return { content: [{ type: 'text', text: 'Results for ' + query }] };\n    },\n  });\n}",
      "fixNote": "Give every tool a name, a description, and an input schema: registerTool() takes them as members, and a form takes toolname and tooldescription.",
      "part": "conventions"
    },
    {
      "id": "docs",
      "category": "protocol",
      "module": "agent-api",
      "tier": "recommended",
      "weight": 2,
      "conditional": true,
      "label": "Documentation reachable",
      "why": "Documentation linked as service-doc (RFC 8631), or from the homepage, is how a client learns the API.",
      "skill": "documentation",
      "standards": [
        "RFC 8631"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Documentation is reachable at /llms.txt (Link header rel=service-doc) and returns HTTP 200 text/plain with 1638 readable words.",
      "evidence": "tried: /llms.txt 200 | /docs 200 | /documentation 404 | /developers 200 | /gelistiriciler 404",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "pricing-structured",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 2,
      "conditional": false,
      "label": "Structured pricing information",
      "why": "A price in markup is read without parsing prose. An Offer with a price and no currency is ambiguous.",
      "skill": "pricing-schema",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Markup on /pricing carries 136 complete price nodes; the first, Offer \"Requests\", states 0.3 USD.",
      "evidence": "{\"price\":0.3,\"priceCurrency\":\"USD\",\"where\":\"/pricing\"}",
      "fix": null,
      "part": "standards"
    },
    {
      "id": "service-schema",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Service/product scope machine-readable",
      "why": "Service markup states what is offered, by whom and where. An incomplete node leaves a client to guess.",
      "skill": "service-schema",
      "standards": [
        "schema.org/Service"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage markup declares no Service-type node.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "contact",
      "category": "content",
      "module": "core",
      "tier": "recommended",
      "weight": 1,
      "conditional": false,
      "label": "Structured contact information",
      "why": "A ContactPoint in the Organization markup makes the contact route machine-readable.",
      "skill": "contact-schema",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Homepage markup declares 1 organization-type node with 0 contact details, while the page itself carries 0 plain-text contact signals. Organization \"Cloudflare\": no contact detail.",
      "evidence": null,
      "fix": "{\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"contactType\": \"<choose: what this contact is for, such as customer service>\",\n    \"email\": \"<choose: email address>\"\n  }\n}",
      "fixNote": null,
      "part": "standards"
    },
    {
      "id": "status-page",
      "category": "protocol",
      "module": "agent-api",
      "tier": "recommended",
      "weight": 1,
      "conditional": true,
      "label": "Service status and changelog feed",
      "why": "A status page and a changelog feed say whether the service is up and what changed.",
      "skill": "status-changelog",
      "standards": [
        "RFC 9727",
        "RFC 4287"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "A status page answered at /status (HTTP 200), but the homepage links no status or changelog feed.",
      "evidence": null,
      "fix": "<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Changelog\" href=\"https://www.cloudflare.com<choose: path of the changelog feed>\">",
      "part": "standards"
    },
    {
      "id": "product-schema",
      "category": "commerce",
      "module": "commerce",
      "tier": "essential",
      "weight": 3,
      "conditional": true,
      "label": "Product/catalog schema",
      "why": "Product and Offer markup on product pages feeds merchant listings.",
      "skill": "product-schema",
      "standards": [
        "schema.org/Product"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "returns",
      "category": "commerce",
      "module": "commerce",
      "tier": "recommended",
      "weight": 1,
      "conditional": true,
      "label": "Return policy machine-readable",
      "why": "A MerchantReturnPolicy states return terms in markup, also under the Organization.",
      "skill": "return-policy-schema",
      "standards": [
        "schema.org/MerchantReturnPolicy"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "inventory-freshness",
      "category": "commerce",
      "module": "commerce",
      "tier": "recommended",
      "weight": 2,
      "conditional": true,
      "label": "Inventory and price freshness",
      "why": "availability says whether an item is in stock. A past priceValidUntil can hide a product snippet.",
      "skill": "inventory-freshness",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "seller-identity",
      "category": "commerce",
      "module": "commerce",
      "tier": "recommended",
      "weight": 1,
      "conditional": true,
      "label": "Seller identity declared",
      "why": "On a marketplace, the seller named on an offer is who the buyer contracts with.",
      "skill": "seller-identity",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    },
    {
      "id": "shipping-costs",
      "category": "commerce",
      "module": "commerce",
      "tier": "recommended",
      "weight": 2,
      "conditional": true,
      "label": "Shipping cost and delivery declared",
      "why": "shippingDetails lets a client compute the delivered price.",
      "skill": "shipping-costs",
      "standards": [
        "schema.org/OfferShippingDetails"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "part": "standards"
    }
  ],
  "unscored": [
    {
      "id": "dns-aid",
      "category": "discoverability",
      "module": "agent-api",
      "label": "DNS-AID discovery record",
      "group": "convention",
      "maturity": "experimental",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that runs an MCP server or runs an A2A agent, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "faq-schema",
      "category": "content",
      "module": "core",
      "label": "FAQ markup for visible questions",
      "group": "choice",
      "maturity": "adopted",
      "state": "out-of-scope",
      "detail": "Not scored: no heading on the homepage names a FAQ section, and the homepage carries no FAQPage markup.",
      "evidence": "visible questions under a FAQ heading: 0",
      "fix": null,
      "fixNote": null
    },
    {
      "id": "breadcrumb",
      "category": "content",
      "module": "core",
      "label": "Breadcrumb markup on an inner page",
      "group": "choice",
      "maturity": "adopted",
      "state": "absent",
      "detail": "The inner page /resource/contact-enterprise-sales/ has no BreadcrumbList in its JSON-LD, Microdata, or RDFa.",
      "evidence": "https://www.cloudflare.com/resource/contact-enterprise-sales/ · HTTP 200 · text/html · BreadcrumbList: 0",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 1,\n      \"name\": \"Cloudflare\",\n      \"item\": \"https://www.cloudflare.com/\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 2,\n      \"name\": \"<choose: name of this section>\",\n      \"item\": \"<choose: URL of the /resource page, if the site has one>\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 3,\n      \"name\": \"Contact Enterprise Sales\",\n      \"item\": \"https://www.cloudflare.com/resource/contact-enterprise-sales/\"\n    }\n  ]\n}\n</script>",
      "fixNote": "Replace each <choose: …> with the name or the URL the site uses for that section, and drop a level that has no page. Show the same trail as links on the page."
    },
    {
      "id": "webbotauth",
      "category": "botaccess",
      "module": "agent-api",
      "label": "Web Bot Auth key directory",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that runs an A2A agent, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "ai-policy",
      "category": "botaccess",
      "module": "core",
      "label": "AI usage policy page",
      "group": "choice",
      "maturity": "experimental",
      "state": "out-of-scope",
      "detail": "Not scored: robots.txt and Content-Signal state no AI restriction, so there is none for a policy page to explain.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "security-txt",
      "category": "botaccess",
      "module": "core",
      "label": "security.txt (RFC 9116)",
      "group": "choice",
      "maturity": "adopted",
      "state": "defective",
      "detail": "security.txt at /.well-known/security.txt: 2 Contact lines; no Expires line. RFC 9116 says every file carries a Contact and an Expires line. Not scored: its Policy URL /disclosure/ answered HTTP 200.",
      "evidence": "Contact: https://hackerone.com/cloudflare # All abuse reports should be submitted to our Trust & Safety team through # our dedicated page. Contact: https://www.cloudflare.com/abuse/ Policy: https://www.cloudflare.com/disclosure/ Hiring: https://www.cloudflare…",
      "fix": "Expires: 2027-04-18T17:05:35.000Z\n",
      "fixNote": "Add this line to /.well-known/security.txt, in place of any Expires line it has. RFC 9116 recommends an Expires less than a year ahead."
    },
    {
      "id": "ai-grounding-directives",
      "category": "botaccess",
      "module": "core",
      "label": "Snippet and AI grounding directives",
      "group": "choice",
      "maturity": "adopted",
      "state": "absent",
      "detail": "Not used: the homepage has no noarchive, nocache, nosnippet or max-snippet:0 directive, and no data-nosnippet attribute, so Bing applies none of the limits they set on snippets and Copilot answers.",
      "evidence": "no robots meta tag for robots, bingbot or googlebot, no X-Robots-Tag header · data-nosnippet: 0 elements",
      "fix": null,
      "fixNote": null
    },
    {
      "id": "mcp-card",
      "category": "protocol",
      "module": "agent-api",
      "label": "MCP server card",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that runs an MCP server, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "agent-skills",
      "category": "protocol",
      "module": "agent-api",
      "label": "Agent Skills declaration",
      "group": "convention",
      "maturity": "draft",
      "state": "present",
      "detail": "Agent skills index at /.well-known/agent-skills/index.json lists 19 skills, each with name, type, description, url, and a sha256 digest under $schema https://schemas.agentskills.io/discovery/0.2.0/schema.json. 19 artifacts (https://developers.cloudflare.com/.well-known/agent-skills/agents-sdk.tar.gz, …) are on another host, which this scan does not request (declared, not observed).",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "a2a-card",
      "category": "protocol",
      "module": "agent-api",
      "label": "A2A agent card",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that runs an A2A agent, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "a2a-signed",
      "category": "protocol",
      "module": "agent-api",
      "label": "Cryptographically signed agent card",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that runs an A2A agent, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "auth-md",
      "category": "protocol",
      "module": "agent-api",
      "label": "/auth.md agent authentication guide",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to a site that uses OAuth, and the scan found none.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "ard-manifest",
      "category": "protocol",
      "module": "agent-api",
      "label": "ARD resource discovery manifest",
      "group": "convention",
      "maturity": "experimental",
      "state": "out-of-scope",
      "detail": "Not scored: the homepage links no ARD manifest, and the 4 manifest paths served none (/.well-known/ard.json 404 text/plain; /.well-known/agent-resources.json 404 text/plain; /.well-known/ai-catalog.json 404 text/plain; /ard.json 404 text/plain).",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "mpp-discovery",
      "category": "protocol",
      "module": "agent-api",
      "label": "MPP discovery in OpenAPI (x-payment-info)",
      "group": "convention",
      "maturity": "draft",
      "state": "absent",
      "detail": "Not declared: /openapi.json describes 4 operations, and none declares x-payment-info.",
      "evidence": "/openapi.json: HTTP 200, 1 KB; 4 operations read",
      "fix": null,
      "fixNote": null
    },
    {
      "id": "payment-protocols",
      "category": "commerce",
      "module": "commerce",
      "label": "Agent payment protocol (UCP profile or x402)",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "agent-purchase",
      "category": "commerce",
      "module": "commerce",
      "label": "Agent purchase policy",
      "group": "choice",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "ucp-manifest",
      "category": "commerce",
      "module": "commerce",
      "label": "UCP manifest (/.well-known/ucp)",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "acp-discovery",
      "category": "commerce",
      "module": "commerce",
      "label": "ACP discovery (/.well-known/acp.json)",
      "group": "convention",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: the homepage shows no commercial signal, so commerce checks are not asked of this site.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "sandbox-environment",
      "category": "protocol",
      "module": "agent-api",
      "label": "Sandbox or test environment documented",
      "group": "choice",
      "maturity": "experimental",
      "state": "defective",
      "detail": "A sandbox is referenced at /docs, but it names no non-production base URL, so an agent cannot integrate safely.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "rate-limits-declared",
      "category": "protocol",
      "module": "agent-api",
      "label": "Rate limits and quotas documented",
      "group": "choice",
      "maturity": "experimental",
      "state": "absent",
      "detail": "Not published: the developer documentation (/docs/rate-limits answered HTTP 404) states no quota, and the probe responses carry 0 quota headers.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "licensing-terms",
      "category": "content",
      "module": "core",
      "label": "Reuse and licensing terms declared",
      "group": "choice",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites; this site was measured as API platform.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "provenance-declared",
      "category": "content",
      "module": "core",
      "label": "Content provenance declared",
      "group": "choice",
      "maturity": "adopted",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites; this site was measured as API platform.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "booking-action",
      "category": "commerce",
      "module": "core",
      "label": "Machine-readable booking action",
      "group": "choice",
      "maturity": "draft",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to services sites; this site was measured as API platform.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    },
    {
      "id": "document-formats",
      "category": "content",
      "module": "core",
      "label": "Documents in machine-readable formats",
      "group": "choice",
      "maturity": "adopted",
      "state": "out-of-scope",
      "detail": "Not scored: this check applies to institution sites; this site was measured as API platform.",
      "evidence": null,
      "fix": null,
      "fixNote": null
    }
  ],
  "counts": {
    "pass": 16,
    "warn": 4,
    "fail": 1,
    "na": 7,
    "total": 28
  },
  "unscoredCounts": {
    "present": 1,
    "defective": 2,
    "absent": 4,
    "out-of-scope": 17,
    "not-measured": 0,
    "total": 24
  },
  "blockedBy": null,
  "nextLevelGaps": [],
  "ratio": {
    "passed": 16,
    "applicable": 21,
    "label": "16/21"
  },
  "meta": {
    "title": "Cloudflare: Build for the agent era",
    "description": "Welcome to Cloudflare - Powering the next generation of applications",
    "lang": "en",
    "words": 1092,
    "tokensEst": 1474,
    "bytes": 1334443,
    "status": 200
  },
  "requests_log": [
    {
      "path": "/",
      "status": 200,
      "bytes": 1334443,
      "ms": 223,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/robots.txt",
      "status": 200,
      "bytes": 1099,
      "ms": 49,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/sitemap.xml",
      "status": 200,
      "bytes": 1629609,
      "ms": 37,
      "contentType": "application/xml",
      "hops": 0
    },
    {
      "path": "/llms.txt",
      "status": 200,
      "bytes": 17173,
      "ms": 52,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/security.txt",
      "status": 200,
      "bytes": 368,
      "ms": 76,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/security.txt",
      "status": 404,
      "bytes": 12,
      "ms": 166,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/about",
      "status": 200,
      "bytes": 259591,
      "ms": 222,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/contact",
      "status": 403,
      "bytes": 5707,
      "ms": 29,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/pricing",
      "status": 200,
      "bytes": 713737,
      "ms": 197,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/docs",
      "status": 200,
      "bytes": 220549,
      "ms": 94,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/developers",
      "status": 200,
      "bytes": 220549,
      "ms": 89,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/.well-known/api-catalog",
      "status": 404,
      "bytes": 16462,
      "ms": 402,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/openapi.json",
      "status": 200,
      "bytes": 1535,
      "ms": 57,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/openapi.json",
      "status": 404,
      "bytes": 12,
      "ms": 92,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/mcp/server-card.json",
      "status": 200,
      "bytes": 1320,
      "ms": 44,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ai-catalog.json",
      "status": 404,
      "bytes": 12,
      "ms": 182,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-card.json",
      "status": 404,
      "bytes": 12,
      "ms": 173,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/oauth-protected-resource",
      "status": 404,
      "bytes": 16410,
      "ms": 510,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/oauth-authorization-server",
      "status": 404,
      "bytes": 16410,
      "ms": 504,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/openid-configuration",
      "status": 404,
      "bytes": 16410,
      "ms": 507,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/llms-full.txt",
      "status": 200,
      "bytes": 169547,
      "ms": 90,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/mcp",
      "status": 404,
      "bytes": 16410,
      "ms": 715,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/openapi.yaml",
      "status": 404,
      "bytes": 16410,
      "ms": 535,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/api/openapi.json",
      "status": 404,
      "bytes": 12,
      "ms": 130,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/swagger.json",
      "status": 404,
      "bytes": 12,
      "ms": 252,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills/index.json",
      "status": 200,
      "bytes": 9060,
      "ms": 62,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills.json",
      "status": 404,
      "bytes": 12,
      "ms": 95,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/skills.json",
      "status": 404,
      "bytes": 12,
      "ms": 175,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/ard.json",
      "status": 404,
      "bytes": 12,
      "ms": 199,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-resources.json",
      "status": 404,
      "bytes": 12,
      "ms": 173,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/ard.json",
      "status": 404,
      "bytes": 12,
      "ms": 255,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/documentation",
      "status": 404,
      "bytes": 16462,
      "ms": 542,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/gelistiriciler",
      "status": 404,
      "bytes": 16462,
      "ms": 543,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/plans",
      "status": 200,
      "bytes": 713737,
      "ms": 197,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/status",
      "status": 200,
      "bytes": 29618,
      "ms": 328,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/changelog",
      "status": 404,
      "bytes": 20297,
      "ms": 564,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/releases",
      "status": 404,
      "bytes": 16410,
      "ms": 842,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/whats-new",
      "status": 200,
      "bytes": 398706,
      "ms": 776,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/docs/sandbox",
      "status": 404,
      "bytes": 16410,
      "ms": 610,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sandbox",
      "status": 404,
      "bytes": 16462,
      "ms": 742,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/developers/sandbox",
      "status": 404,
      "bytes": 16410,
      "ms": 589,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/rate-limits.json",
      "status": 404,
      "bytes": 12,
      "ms": 214,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/rate-limits.json",
      "status": 404,
      "bytes": 12,
      "ms": 175,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/docs/rate-limits",
      "status": 404,
      "bytes": 16410,
      "ms": 474,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/resource/contact-enterprise-sales/",
      "status": 200,
      "bytes": 418860,
      "ms": 186,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/disclosure/",
      "status": 200,
      "bytes": 401195,
      "ms": 402,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/products/workers.md",
      "status": 200,
      "bytes": 3314,
      "ms": 22,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/products/containers.md",
      "status": 200,
      "bytes": 2442,
      "ms": 21,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/products/durable-objects.md",
      "status": 200,
      "bytes": 3428,
      "ms": 22,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/products/sandboxes.md",
      "status": 200,
      "bytes": 2025,
      "ms": 22,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/products/workflows.md",
      "status": 200,
      "bytes": 2179,
      "ms": 23,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/products/pages.md",
      "status": 200,
      "bytes": 1010,
      "ms": 22,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/.well-known/agents.json",
      "status": 200,
      "bytes": 4762,
      "ms": 45,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/",
      "status": 200,
      "bytes": 2986,
      "ms": 43,
      "contentType": "text/markdown",
      "hops": 0
    },
    {
      "path": "/aws-probe-b7f46872c3f5",
      "status": 404,
      "bytes": 20297,
      "ms": 485,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/aws-probe-b7f46872c3f5",
      "status": 404,
      "bytes": 16410,
      "ms": 484,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "https://docs.mcp.cloudflare.com/mcp",
      "status": 200,
      "bytes": 224,
      "ms": 36,
      "contentType": "text/event-stream",
      "hops": 0,
      "method": "POST"
    },
    {
      "path": "https://docs.mcp.cloudflare.com/mcp",
      "status": 202,
      "bytes": 0,
      "ms": 12,
      "contentType": "",
      "hops": 0,
      "method": "POST"
    },
    {
      "path": "https://docs.mcp.cloudflare.com/mcp",
      "status": 200,
      "bytes": 1801,
      "ms": 17,
      "contentType": "text/event-stream",
      "hops": 0,
      "method": "POST"
    }
  ],
  "usable": {
    "kind": "mcp",
    "tools": [
      "search_cloudflare_documentation",
      "migrate_pages_to_workers_guide"
    ],
    "toolCount": 2
  }
}