How the Markdown for Agents checker works
- Paste any public URL into the box above and press Check site.
- Keep runs six parallel requests from the server: two to the URL you pasted (one with Accept: text/markdown, one with Accept: text/html), one to the .md variant of the same path, and three to the origin root (/llms.txt, /.well-known/mcp/server-card.json, /agent.json).
- Each check returns pass, missing, blocked, or info with the raw request and first few hundred bytes of the response so you can verify what the checker saw.
Markdown for Agents, in one paragraph
Markdown for Agents is a set of four conventions that let a website serve clean Markdown to AI agents. A site can honour an Accept: text/markdown header, publish a .md variant at the same path, add a <link rel="alternate" type="text/markdown"> tag to the HTML head, or send a Link response header pointing to the Markdown version. Any one of the four is enough to make a page agent-ready. Cloudflare coined the name alongside its Content-Signal and x-markdown-tokens headers, but the conventions themselves work on any web server.
What the nine checks cover
- Accept: text/markdown negotiation. Fetches the URL with the Markdown Accept header and confirms the server actually returned Markdown.
- .md variant at the same path. Fetches /path/page.md (or /path/index.md for directories) and confirms it resolves to a Markdown response.
- HTML <link rel="alternate" type="text/markdown">. Fetches the HTML and scans the head for an explicit Markdown alternate link.
- HTTP Link: header alternate. Parses the Link response header per RFC 8288 and looks for a rel=alternate type="text/markdown" entry. The header path is useful for non-HTML resources like PDFs.
- Vary: Accept. Informational. Without this header a CDN can cache one representation and serve it to clients that asked for the other.
- Cloudflare markdown signals. Informational. Surfaces x-markdown-tokens and Content-Signal response headers if present.
- /llms.txt. Checks that the origin root serves an llms.txt file and that the body starts with an H1, per the spec.
- /.well-known/mcp/server-card.json. Checks that the origin exposes an MCP server card and that the body parses as JSON.
- /agent.json. Checks for a Google A2A agent manifest and parses the JSON.
Blocked is not the same as missing
If the origin returns 403, 429, 503, or a Cloudflare bot-fight challenge page, the checker shows an amber Blocked pill instead of a red Missing pill. The feature might still be implemented. The difference is important when you are trying to explain a failing result to a team that runs the origin, because "blocked" points at bot-fight policy, while "missing" points at server configuration.
Frequently asked questions
What is Markdown for Agents?
Markdown for Agents is a set of four conventions that let a website serve clean Markdown to AI agents. A site can honour an Accept: text/markdown header, publish a .md variant at the same path, add a link rel="alternate" type="text/markdown" tag to the HTML head, or send a Link response header pointing to the Markdown version. Any one of the four is enough to call a page agent-ready.
Why does Markdown matter for AI agents?
Agents that fetch web pages pay tokens for every byte the server returns. HTML carries nav menus, CSS, tracking scripts, and widgets that the model does not need. Markdown drops all of that and keeps only the article structure. On most content pages Markdown is 80 to 95 percent smaller than the HTML, which means faster responses, cheaper context windows, and better comprehension.
What does an amber "blocked" result mean?
The origin returned a 403, 429, 503, or a Cloudflare bot-fight challenge page. The feature might still be implemented correctly. We cannot confirm either way because the server refused the probe. Red means the feature is definitively missing; amber means we could not test it.
Why is Vary: Accept informational instead of pass/fail?
Vary: Accept is not required for Markdown negotiation to work, but it matters for intermediaries that cache the response. Without it, a CDN can cache one version and serve it to clients that asked for the other. The check is listed as nice to have rather than mandatory.
Do I need llms.txt if my site already serves Markdown?
They solve different problems. Markdown content negotiation lets an agent fetch any specific page as Markdown. llms.txt lets an agent see the site index, pick the pages that matter for a task, and stop crawling the rest. A site built for agents usually wants both. If you only implement one, start with Markdown delivery because it compounds across every page.
Why is the MCP server card check on this page?
Keep sits in the MCP ecosystem. Sites that expose an agent.json or /.well-known/mcp/server-card.json are declaring "I have an agent interface, here is how to talk to it." These two checks belong with the markdown checks because they answer the same parent question: can an AI agent do something useful with this domain?
How is this different from isitagentready.com?
isitagentready.com scores the full AI readiness picture and was first to the viral category. This page zooms in on the Markdown delivery and agent-discovery mechanisms that matter for content sites, and shows the exact request and first few hundred bytes of the response for every check. If you are shipping a ticket against your CDN or framework, you want this page. If you want a broad score across OAuth, OIDC, web bot auth, and commerce protocols, that is the other one.
Does this work on private or logged-in sites?
No. The checker runs server-side fetches from Keep, so it can only see what a public crawler sees. Pages behind a login, intranet sites, or staging environments with auth will look blocked or missing to the checker, which matches what an agent would see.
Hand Keep any URL and get Markdown back
Keep turns every URL you bookmark into clean, searchable Markdown, whether or not the source site serves it natively. If this tool confirms your sources are not agent-ready yet, Keep is the upstream version that fixes the problem without waiting for every site on the web to add the header.