Which AI Agents Request Markdown? The 2026 Support Matrix Explained
A breakdown of which AI agents send Accept: text/markdown, how they negotiate, and what site owners should do today—even when most browse tools still fetch HTML.
accept-md team
Site owners ask: "Should I implement Accept Markdown?" Agent users ask: "Does this site support it?" The AI agent support matrix answers both by recording what each agent's fetch tool actually sends when it hits a URL—not what a marketing page claims.
The stakes are real. Agents that receive HTML spend context on navigation, footers, scripts, and layout wrappers instead of your prose. Roboto Studio cites a Vercel example where a page compressed from roughly 500 KB of HTML to about 3 KB of Markdown—a 99% reduction. Slower ingestion, burned tokens, and noisier citations follow when agents parse browser markup instead of clean text.
This article explains the matrix, how agents negotiate, and what to do about it. The matrix is a living snapshot (last verified 2026-05-09 on the status page); behavior shifts across versions, plans, and newly added tools.
What the matrix actually measures
The matrix tracks one thing: the HTTP Accept header (and related discovery mechanisms) that an agent's built-in browse or fetch tool sends when it requests a URL.
It does not measure:
- Whether a vendor mentions Markdown in documentation
- Whether an agent could be configured to send a custom header
- Whether a separate
.mdURL exists on your site
It does measure what happens in production when you ask Claude Code to read a doc, Cursor to summarize a page, or Perplexity to fetch a link.
A 30-second primer on content negotiation
HTTP content negotiation lets a client express format preferences via the Accept header. When an agent sends Accept: text/markdown, a server that supports negotiation returns Markdown from the same URL that serves HTML to browsers.
For the full contract, see:
- What Accept Markdown means
- Why AI agents prefer Markdown
- Vary: Accept
- Accept header quality values (q-values)
Test any URL yourself:
curl -sI -H "Accept: text/markdown" https://yoursite.com/page
Look for Content-Type: text/markdown; charset=utf-8 and Vary: Accept in the response.
The 2026 support matrix
The matrix groups agents into three tiers based on observed fetch behavior.
Supports — full Accept negotiation (4 agents)
These agents send Accept: text/markdown (or list it with highest preference) on their first request. A server that honors content negotiation returns Markdown immediately.
| Agent | Vendor | Mechanism | Verified |
|---|---|---|---|
| Claude Code | Anthropic | Accept: text/markdown, text/html, */* · RFC 7763 · RFC 9110 | 2025-11-13 |
| Cursor | Anysphere | Accept: text/markdown, text/plain;q=0.9, */*;q=0.8 · RFC 7763 · RFC 9110 | 2026-04-18 |
| OpenClaw | OpenClaw | Accept: text/markdown, text/html;q=0.9, */*;q=0.1 · RFC 7763 · RFC 9110 | 2026-05-04 |
| OpenCode | SST | Accept: text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1 · RFC 7763 · RFC 9110 | 2026-05-04 |
Notable patterns:
- Claude Code lists
text/markdownfirst and relies on header order rather than explicitq=weights—a pattern Checkly documented in their February 2026 agent tests. - Cursor and OpenCode use explicit quality factors (
q=1.0,q=0.9, etc.) to weight Markdown above HTML. - OpenClaw strongly prefers Markdown with
text/html;q=0.9and*/*;q=0.1as fallbacks.
Cloudflare and Vercel both named Claude Code and OpenCode as early adopters when they launched Markdown-for-agents features in early 2026.
Partial — discovery without Accept negotiation (1 agent)
| Agent | Vendor | Mechanism | Verified |
|---|---|---|---|
| Codex CLI | OpenAI | Follows <link rel="alternate" type="text/markdown" href="https://example.com/page.md"> · RFC 7763 · RFC 8288 | 2026-04-18 |
Codex CLI fetches the canonical URL as HTML first—without an Accept: text/markdown preference—then parses the document <head> for a Markdown alternate link and makes a second request for the .md sibling.
This is partial support: your site must expose discovery metadata even if Accept negotiation is not triggered on the first pass. Vercel's content negotiation guide recommends shipping link rel="alternate" alongside Accept negotiation for exactly this reason.
No — HTML-only fetch (15 agents)
These agents fetch HTML without advertising a Markdown preference:
| Agent | Vendor | Verified |
|---|---|---|
| Aider | Aider | 2026-05-09 |
| ChatGPT (browse) | OpenAI | 2026-04-18 |
| Claude.ai (web app) | Anthropic | 2026-04-18 |
| Cline | Cline | 2026-05-09 |
| Copilot Chat (VS Code) | GitHub / Microsoft | 2026-04-18 |
| Copilot CLI | GitHub / Microsoft | 2026-04-18 |
| Devin | Cognition | 2026-05-09 |
| Gemini (web app) | 2026-04-18 | |
| Gemini CLI | 2026-04-18 | |
| Grok | xAI | 2026-04-18 |
| Microsoft Copilot | Microsoft | 2026-05-09 |
| Perplexity | Perplexity | 2026-04-18 |
| v0 | Vercel | 2026-05-09 |
| Windsurf | Cognition | 2026-05-09 |
| Zed | Zed Industries | 2026-05-09 |
The central insight: coding agents (Claude Code, Cursor, OpenCode, OpenClaw) negotiate for Markdown; general-purpose browse and chat tools largely do not—yet. That split defines who benefits from server-side Accept Markdown today and who will benefit tomorrow.
How each tier negotiates
Header order vs q-values
Not all agents express preference the same way. Checkly's February 2026 analysis found two patterns:
- Order-based preference — Claude Code lists
text/markdownfirst in the Accept header and skips explicitq=values. - Quality-factor weighting — Cursor and OpenCode set
q=1.0for Markdown and lower weights for HTML and wildcards.
Both patterns are valid under RFC 9110. Server implementations must honor proper content negotiation—not just check whether the Accept string contains the substring text/markdown. See Accept header quality values for how q-values affect which representation wins.
Codex CLI's two-step pattern
Codex CLI demonstrates that Accept negotiation is not the only discovery path. Agents can also use RFC 8288 link relations:
<link rel="alternate" type="text/markdown" href="https://example.com/page.md">
Publishers who want maximum agent coverage should implement both:
- Return Markdown when
Accept: text/markdownis sent (covers Claude Code, Cursor, OpenCode, OpenClaw) - Expose
link rel="alternate"in HTML<head>(covers Codex CLI)
Vercel also recommends markdown sitemaps (/sitemap.md) and llms.txt as complementary discovery aids—orthogonal to the matrix but useful for agents that do not negotiate.
What "No" really means
An agent in the "No" tier is not ignoring your site maliciously. Those fetch tools were built for general web browsing, not token-efficient documentation ingestion. They request HTML because that is what browsers request.
This is consistent with how search crawlers behave. Ekamoira's 2026 guide notes that Googlebot and Google-Extended do not send Accept: text/markdown—and that is correct. Google wants the same HTML users see. Content negotiation serves agents without changing what search engines receive.
Serving Markdown via Accept negotiation is not cloaking. Same URL, same content, different representation based on what the client asks for.
The Cloudflare layer
Cloudflare Markdown for Agents converts HTML to Markdown at the edge when a request includes Accept: text/markdown. It adds useful response headers:
Vary: Accept— separate cache entries for HTML and Markdownx-markdown-tokens— estimated token count of the Markdown bodyContent-Signal— AI usage preferences (e.g.ai-train=yes, search=yes, ai-input=yes)
But edge conversion only activates when the agent sends the header. Enabling Cloudflare's toggle helps the four "Supports" agents immediately; it does nothing for the fifteen HTML-only fetchers until they adopt negotiation. See Cloudflare Markdown for Agents vs accept-md for a full comparison of edge vs application-layer conversion.
Two audiences, two playbooks
For site owners and developers
1. Implement Accept Markdown now—even for a minority of agents.
Checkly tested seven agents in February 2026 and found only three requested Markdown. By May 2026, the matrix lists four full supporters plus OpenClaw. Adoption is accelerating, and Vercel, Checkly, and Cloudflare all treat text/markdown as the direction of travel.
2. Return the right headers.
Every Markdown response needs:
Content-Type: text/markdown; charset=utf-8
Vary: Accept
Without Vary: Accept, CDNs and proxies may serve Markdown to browsers or HTML to agents. Optionally return 406 for unsupported Accept types when you want strict negotiation.
3. Cover both negotiation and discovery.
- Accept negotiation for Claude Code, Cursor, OpenCode, OpenClaw
link rel="alternate"for Codex CLI/sitemap.mdorllms.txtfor agents that discover content through indexes (Vercel, Roboto Studio)
4. Keep HTML behavior unchanged for browsers and search crawlers.
Ekamoira recommends handling both Accept-header negotiation and .md URL rewrites through internal routing—not redirects—so the canonical URL stays the same.
5. Pick your implementation layer.
- Cloudflare edge toggle — zero origin code, paid plan required. See the comparison post.
- accept-md in your app — framework-native handlers for Next.js and SvelteKit with configurable cleanup and metadata extraction. See serve Markdown without Puppeteer for the pattern.
npx accept-md init
For agent users
If token efficiency on documentation matters, pick tools that send Accept: text/markdown. Checkly's recommendation is direct: some agents optimize for you, others force HTML parsing. Know which one you are using.
Test your stack:
- Deploy a page on a server where you control access logs.
- Ask your agent to fetch or summarize that URL.
- Grep the log line for
accept=and confirm whethertext/markdownappears.
How to verify an agent yourself
We test the matrix ourselves, but agent behavior shifts. You can corroborate any row—or catch a regression—by reading your own access logs.
Step 1: Log the Accept header
Default log formats usually drop it. Add it once:
# Nginx
log_format with_accept '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'accept="$http_accept"';
access_log /var/log/nginx/access.log with_accept;
# Apache
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" accept=\"%{Accept}i\"" with_accept
Caddy JSON access logs include request.headers.Accept by default.
Full snippets for all three are on the status page.
Step 2: Trigger a known agent
Pick a URL on your site—ideally a unique or freshly published one so the request is not masked by background traffic. Then ask the agent to fetch or summarize it:
- ChatGPT — "Summarize https://yoursite.com/article-xyz" (with browse enabled)
- Claude Code — "What does https://yoursite.com/article-xyz say?"
- Perplexity — paste the URL directly into a query
Step 3: Report what you saw
Grep for the URL in your access log and send the line(s) to feedback, along with the agent you used and the prompt you sent. The accept= field tells us whether text/markdown was advertised.
The status page remains the living canonical matrix. This blog post is the explainer—it does not need rewriting every time a row changes.
What's changing
The landscape is moving fast:
- February 2026: Checkly tested seven agents and found three negotiators.
- Early 2026: Vercel and Cloudflare shipped content negotiation for their own properties and published implementation guides.
- May 2026: The matrix lists four full supporters, Codex CLI as partial, and OpenClaw as a new entrant.
All three infrastructure vendors converge on RFC 7763 text/markdown as the agent representation. Browse tools may follow coding agents. Implement server-side negotiation now so you are ready when they do.
Conclusion
The AI agent support matrix makes the chicken-and-egg problem concrete. Four coding agents already request Markdown via Accept: text/markdown. One (Codex CLI) discovers Markdown through alternate links. Fifteen general-purpose tools still fetch HTML only.
For site owners, the playbook is clear: honor Accept negotiation, set Vary: Accept, add discovery metadata, and keep HTML unchanged for browsers and search crawlers. For agent users, pick tools that negotiate if token efficiency matters.
Next steps:
- Track the matrix: AI agent support matrix
- Check your site: Markdown audit
- Implement:
npx accept-md initor enable Cloudflare Markdown for Agents - Deploy on Vercel: Vercel + Accept header guide
- Compare tooling approaches: Best tools for AI crawlers on Next.js
Related resources
- AI agent support matrix — living compatibility data
- What Accept Markdown means
- Why AI agents prefer Markdown
- Cloudflare Markdown for Agents vs accept-md
- Making agent-friendly pages with content negotiation (Vercel)
- The current state of content negotiation for AI agents (Checkly)
- Introducing Markdown for Agents (Cloudflare)