{
 "id": "cloudflare-markdown-for-agents",
 "name": "Markdown for Agents",
 "acronym": "",
 "aliases": [
  "Cloudflare Markdown for Agents",
  "content_converter",
  "Accept: text/markdown"
 ],
 "collisions": [],
 "step": "read",
 "parties": [
  "agent-site"
 ],
 "form": "http-header",
 "track": "single-vendor",
 "scope": "general",
 "question": "Can an agent ask a site for a Markdown version of an HTML page, instead of parsing the HTML itself?",
 "analog": "HTTP content negotiation (as used for languages and image formats), applied to Markdown",
 "origin": {
  "org": "Cloudflare",
  "date": "2026-02-12"
 },
 "governance": "Cloudflare; a feature of its network documented in Cloudflare's developer docs, not submitted to a standards body; it rides on ordinary HTTP content negotiation",
 "native_status": "Vendor feature, available to Pro, Business and Enterprise plans and SSL for SaaS customers at no cost; not a standards-track document",
 "phase": "living",
 "implementation": "shipping",
 "adoption": {
  "level": "observed",
  "by": "Cloudflare's own developer docs and blog answer Accept: text/markdown with text/markdown (our check, 2026-10-20); Cloudflare publishes no count of enabled zones",
  "probe_run": null
 },
 "version": {
  "label": "Generally available on Pro, Business and Enterprise plans; docs last updated 2026-10-09",
  "date": "2026-02-12"
 },
 "spec_url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
 "discovery": {
  "mechanism": "HTTP content negotiation: the client sends Accept: text/markdown and an enabled zone answers with Content-Type: text/markdown; charset=utf-8 and Vary: Accept. There is no manifest or well-known file.",
  "path": null
 },
 "probe": {
  "method": "GET",
  "path": "{origin}/ (request header Accept: text/markdown)",
  "parse": "Content-Type is text/markdown; a Content-Signal response header is present (Cloudflare adds ai-train=yes, search=yes, ai-input=yes when the origin sets none); an x-markdown-tokens header is described in the launch post but was not returned in our 2026-10-20 check",
  "on_absent": "An HTML response means the zone has not turned the feature on, or is not on Cloudflare; the site may still offer Markdown by other means, such as .md mirrors or llms.txt"
 },
 "evidence": [
  {
   "claim": "Cloudflare's docs page (last updated 2026-10-09) says a client that sends Accept: text/markdown to an enabled zone gets the HTML converted at the edge, with Content-Type: text/markdown; charset=utf-8 and Vary: Accept. Output is optional YAML frontmatter from meta tags, the body as Markdown, and any JSON-LD in a fenced json block. Only HTML is converted, up to 6 MiB. When the origin sends no content-signal header, Cloudflare adds Content-Signal: ai-train=yes, search=yes, ai-input=yes. It is enabled in AI Crawl Control, by a Configuration Rule, or via PATCH /zones/{zone_tag}/settings/content_converter, and is free on Pro, Business, Enterprise and SSL for SaaS.",
   "date": "2026-10-09",
   "label": "VERIFIED",
   "url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/"
  },
  {
   "claim": "The launch post (datePublished 2026-02-12) introduces the feature and says converted responses carry an x-markdown-tokens header with the estimated token count of the Markdown document.",
   "date": "2026-02-12",
   "label": "VERIFIED",
   "url": "https://blog.cloudflare.com/markdown-for-agents/"
  },
  {
   "claim": "Our own request on 2026-10-20 to this post and to the docs page with Accept: text/markdown returned HTTP 200, content-type: text/markdown; charset=utf-8 and content-signal: ai-train=yes, search=yes, ai-input=yes, and no x-markdown-tokens header.",
   "date": "2026-10-20",
   "label": "VERIFIED",
   "url": "https://blog.cloudflare.com/markdown-for-agents/"
  }
 ],
 "summary_md": "Markdown for Agents is a Cloudflare network feature: when an agent requests a page with `Accept: text/markdown`, an enabled zone fetches the HTML from the origin, converts it to Markdown at the edge and returns it as `text/markdown` with `Vary: Accept`, so caches keep the HTML and Markdown variants apart [1]. The output has a fixed layout: optional YAML frontmatter built from the page's title, description and og:image meta tags, the body with navigation, scripts and styles stripped, and any JSON-LD kept in a fenced block at the end [1]. Only HTML is converted, up to 6 MiB [1].\n\nIt is a vendor feature, not a standard: any server can do the same content negotiation, and Vercel's Agent Readability Spec lists `Accept: text/markdown` as one of its checks. Cloudflare's version is free on Pro, Business and Enterprise plans and for SSL for SaaS, and is switched on in AI Crawl Control, per path or host by a Configuration Rule, or through the `content_converter` zone setting [1]. Cloudflare launched it on 2026-02-12 and serves its own docs and blog this way [2][3].\n\nTwo details matter. First, if the origin sends no `content-signal` header, Cloudflare adds `Content-Signal: ai-train=yes, search=yes, ai-input=yes` to the converted response [1][3], so a site that turns the feature on without setting its own header advertises consent to every use the Content Signals Policy names. Second, the launch post describes an `x-markdown-tokens` header with an estimated token count [2], but the current docs do not mention it and our check on 2026-10-20 did not receive it [3].",
 "part_of": null,
 "group": null,
 "use_cases": [
  "serve-content-to-agents"
 ],
 "audience": [
  "site-owner",
  "platform"
 ],
 "pairs_with": [
  "cloudflare-content-signals-policy",
  "llms-txt",
  "vercel-agent-readability",
  "ai-crawler-tokens-robots"
 ],
 "prerequisites": [],
 "dispute": {
  "claims": [
   "Cloudflare's launch post (2026-02-12) says converted responses include an x-markdown-tokens header with the estimated token count [2].",
   "The current docs (updated 2026-10-09) do not list that header, and our 2026-10-20 requests to Cloudflare's own docs and blog did not return it [1][3].",
   "When the origin sets no content-signal header, Cloudflare adds Content-Signal: ai-train=yes, search=yes, ai-input=yes, so turning the feature on also publishes a permissive AI-use preference unless the site overrides it [1]."
  ],
  "summary": "The token-count header promised at launch is not in the current docs and was not returned in our check, so agents should not rely on it. The feature also attaches a permissive Content-Signal by default, which a site owner may not expect from a format-conversion switch."
 },
 "last_verified": "2026-10-20",
 "history": [
  {
   "date": "2026-10-20",
   "note": "added from gap scout 2026-10-20; verified against developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ (updated 2026-10-09), blog.cloudflare.com/markdown-for-agents/ (2026-02-12) and our own Accept: text/markdown requests on 2026-10-20"
  }
 ],
 "watch": [
  {
   "type": "page",
   "url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
   "selector": "main",
   "cadence": "weekly"
  },
  {
   "type": "feed",
   "url": "https://blog.cloudflare.com/rss/"
  }
 ],
 "freshness": "current",
 "url": "https://agenticweb.wiki/protocols/cloudflare-markdown-for-agents/",
 "category": "read",
 "type": "protocol"
}