---
title: Websites won't die, they'll stop being the front door
description: Liad Yosef, co-creator of MCP Apps, says personal assistants will replace websites as the main entry point to the web. I checked my own site against his research and found my MCP server two clicks deep, behind the one file agents skip.
date: 2026-09-27
updated: 2026-09-27
tags: MCP Apps, agentic web, AI agents, llms.txt
---

Websites aren't going away. They're losing their job as the front door. That's the claim Liad Yosef, co-creator of MCP Apps, made at AGNTCon + MCPCon Europe: personal assistants become the main entry point to the web, and the website becomes one surface among several.

I've spent the last two weeks making this site readable by agents, so that line stopped me. Then his research data hit my own setup even harder.

<figure class="fd-fig fd-door" aria-labelledby="fd1-cap">
<input class="fd-radio" type="radio" name="fd1" id="fd1-today" checked>
<input class="fd-radio" type="radio" name="fd1" id="fd1-agentic">
<div class="fd-tabs"><label for="fd1-today">Today</label><label for="fd1-agentic">Agentic web</label></div>
<div class="fd-canvas">
<svg viewBox="0 0 440 356" role="img" aria-labelledby="fd1-title fd1-desc">
<title id="fd1-title">Who walks through the front door</title>
<desc id="fd1-desc">Today you open a browser tab for each business and go in through its website. In the agentic web your assistant calls each business's MCP server directly, and only a small piece of branded interface, like a seat map, comes back to you.</desc>
<defs>
<marker id="fd1-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<marker id="fd1-head-c" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head-c" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd1-p1" d="M220,52 V140 L46,266"/>
<path id="fd1-p2" d="M220,52 V140 L191,266"/>
<path id="fd1-p3" d="M220,52 V140 L336,266"/>
<path id="fd1-a1" d="M220,52 V140 L104,266"/>
<path id="fd1-a2" d="M220,52 V140 L249,266"/>
<path id="fd1-a3" d="M220,52 V140 L394,266"/>
<path id="fd1-r" d="M410,266 L320,124 L272,40"/>
</defs>
<path class="fd-line" d="M220,52 V96"/>
<g class="fd-stage fd-in-today">
<path class="fd-line" d="M220,140 L97,228" marker-end="url(#fd1-head)"/>
<path class="fd-line" d="M220,140 L200,228" marker-end="url(#fd1-head)"/>
<path class="fd-line" d="M220,140 L302,228" marker-end="url(#fd1-head)"/>
<text class="fd-note" x="10" y="186">you learn</text>
<text class="fd-note" x="10" y="201">every menu</text>
</g>
<g class="fd-stage fd-in-agentic">
<path class="fd-line fd-line-agent" d="M220,140 L138,228" marker-end="url(#fd1-head-c)"/>
<path class="fd-line fd-line-agent" d="M220,140 L240,228" marker-end="url(#fd1-head-c)"/>
<path class="fd-line fd-line-agent" d="M220,140 L343,228" marker-end="url(#fd1-head-c)"/>
<path class="fd-line fd-line-back" d="M410,266 L320,124 L274,44" marker-end="url(#fd1-head-c)"/>
<text class="fd-note fd-note-agent" x="10" y="186">calls, no</text>
<text class="fd-note fd-note-agent" x="10" y="201">clicking</text>
<text class="fd-note fd-note-agent" x="436" y="150" text-anchor="end">seat map</text>
<text class="fd-note fd-note-agent" x="436" y="165" text-anchor="end">comes back</text>
</g>
<g class="fd-box fd-you"><rect x="170" y="12" width="100" height="40"/><text class="fd-t" x="220" y="37" text-anchor="middle">You</text></g>
<g class="fd-box fd-stage fd-in-today"><rect x="120" y="96" width="200" height="44"/><text class="fd-t" x="220" y="115" text-anchor="middle">Browser</text><text class="fd-s" x="220" y="131" text-anchor="middle">a tab per business</text></g>
<g class="fd-box fd-box-agent fd-stage fd-in-agentic"><rect x="120" y="96" width="200" height="44"/><text class="fd-t" x="220" y="115" text-anchor="middle">Your assistant</text><text class="fd-s fd-s-agent" x="220" y="131" text-anchor="middle">already knows what you want</text></g>
<g class="fd-box"><rect x="10" y="230" width="130" height="112"/><text class="fd-t" x="75" y="253" text-anchor="middle">Travel</text></g>
<g class="fd-box"><rect x="155" y="230" width="130" height="112"/><text class="fd-t" x="220" y="253" text-anchor="middle">Shop</text></g>
<g class="fd-box"><rect x="300" y="230" width="130" height="112"/><text class="fd-t" x="365" y="253" text-anchor="middle">Tickets</text></g>
<g class="fd-stage fd-in-today">
<rect class="fd-door fd-door-on" x="22" y="266" width="48" height="62"/><rect class="fd-door fd-door-off" x="80" y="266" width="48" height="62"/>
<rect class="fd-door fd-door-on" x="167" y="266" width="48" height="62"/><rect class="fd-door fd-door-off" x="225" y="266" width="48" height="62"/>
<rect class="fd-door fd-door-on" x="312" y="266" width="48" height="62"/><rect class="fd-door fd-door-off" x="370" y="266" width="48" height="62"/>
</g>
<g class="fd-stage fd-in-agentic">
<rect class="fd-door fd-door-off" x="22" y="266" width="48" height="62"/><rect class="fd-door fd-door-mcp" x="80" y="266" width="48" height="62"/>
<rect class="fd-door fd-door-off" x="167" y="266" width="48" height="62"/><rect class="fd-door fd-door-mcp" x="225" y="266" width="48" height="62"/>
<rect class="fd-door fd-door-off" x="312" y="266" width="48" height="62"/><rect class="fd-door fd-door-mcp" x="370" y="266" width="48" height="62"/>
</g>
<g class="fd-door-labels">
<text x="46" y="301" text-anchor="middle">web</text><text x="104" y="301" text-anchor="middle">MCP</text>
<text x="191" y="301" text-anchor="middle">web</text><text x="249" y="301" text-anchor="middle">MCP</text>
<text x="336" y="301" text-anchor="middle">web</text><text x="394" y="301" text-anchor="middle">MCP</text>
</g>
<g class="fd-token fd-stage fd-in-today">
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="9s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0.29;0.29;1;1" keyTimes="0;0.1;0.5;0.9;1"><mpath href="#fd1-p1"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="9s" begin="-3s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0.405;0.405;1;1" keyTimes="0;0.1;0.5;0.9;1"><mpath href="#fd1-p2"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="9s" begin="-6s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0.339;0.339;1;1" keyTimes="0;0.1;0.5;0.9;1"><mpath href="#fd1-p3"/></animateMotion></rect>
</g>
<g class="fd-token fd-stage fd-in-agentic">
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.4s" repeatCount="indefinite"><mpath href="#fd1-a1"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.4s" begin="-0.8s" repeatCount="indefinite"><mpath href="#fd1-a2"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.4s" begin="-1.6s" repeatCount="indefinite"><mpath href="#fd1-a3"/></animateMotion></rect>
</g>
<g class="fd-token fd-token-ui fd-stage fd-in-agentic">
<rect x="-9" y="-6" width="18" height="12"><animateMotion dur="2.4s" begin="-1.2s" repeatCount="indefinite"><mpath href="#fd1-r"/></animateMotion></rect>
</g>
</svg>
</div>
<figcaption id="fd1-cap">
<span class="fd-stage fd-in-today">Today: every business is a website. You open a tab for each one and learn its menus just to say what you want.</span>
<span class="fd-stage fd-in-agentic">Agentic web: your assistant calls each business behind the scenes. The website is still there, it's just not the way in. Only the last mile, like a seat map, comes back to you as UI.</span>
<span class="fd-credit">Based on Liad Yosef's <a href="https://www.youtube.com/watch?v=-w6RDNBAI0E&amp;t=17860s" target="_blank" rel="noopener noreferrer">MCP Apps and the agentic web</a>, AGNTCon + MCPCon Europe 2026. Switch the tabs.</span>
</figcaption>
</figure>

## What he actually said

The talk is [MCP Apps and the agentic web](https://www.youtube.com/watch?v=-w6RDNBAI0E&t=17860s), same livestream as the Dex Horthy keynote I wrote about in [the software factory note](/notes/software-factory-2022-to-lights-off.html). The line:

> We might have websites and browsers lose their position as the main entry point to the web.

He doesn't say the web dies. He compares it to mobile. Desktop didn't go away, but social moved to phones and stayed there. Nobody opens Instagram on a laptop. His bet is that a lot of what we do on websites moves to agents the same way, and stays.

His evidence was a list of companies already moving: Sentry now aiming at agents first (a year after its CPO bet him that websites would still be around in 25 years), Salesforce going headless, DoorDash shipping a CLI. He also cited Cloudflare saying bot traffic passed human traffic faster than expected.

## A website is a way to tell a business what you want

This was the part that made it click for me. When you land on booking.com, the site doesn't know if you want to book a hotel, file a complaint or log in. The whole interface exists so you can express that intent to the business.

If you already told your assistant what you want, the assistant doesn't need to click through a website to pass that intent along. It can just call the business.

What's left is what he calls the last mile. Some things are hard to do in text: picking a seat in a venue, checking a calendar. That's where MCP Apps come in. An MCP server doesn't only return data, it can send a chunk of its own interactive UI into the chat.

<figure class="fd-fig fd-chat-fig" aria-labelledby="fd2-cap">
<div class="fd-chat" role="img" aria-label="A chat where the user asks to plan an anniversary. The assistant answers with a slice of a calendar app showing the 14th free, then a ticketing app's seat map with two seats selected and a Book button.">
<div class="fd-msg fd-msg-you">Plan something for our anniversary on the 14th</div>
<div class="fd-msg fd-msg-bot">You're free after 7 pm that day, and there's a show at 8. Pick your seats:</div>
<div class="fd-app"><div class="fd-app-head"><span>Calendar</span><span>MCP App</span></div><div class="fd-week"><span>11</span><span>12</span><span>13</span><span class="on">14</span><span>15</span><span>16</span><span>17</span></div><div class="fd-app-foot"><span>Sat 14 · free from 19:00</span></div></div>
<div class="fd-app"><div class="fd-app-head"><span>Tickets</span><span>MCP App</span></div><div class="fd-stagebar">stage</div><div class="fd-seats"><i></i><i class="x"></i><i class="x"></i><i></i><i></i><i class="x"></i><i></i><i></i><i class="x"></i><i></i><i></i><i></i><i class="on"></i><i class="on"></i><i class="x"></i><i></i><i class="x"></i><i></i><i></i><i></i><i></i><i class="x"></i><i></i><i></i></div><div class="fd-app-foot"><span>2 seats · row B</span><span class="fd-btn">Book</span></div></div>
</div>
<figcaption id="fd2-cap">An illustration of MCP Apps, not a real product: each service sends its own small piece of interface into the chat, and you never leave the assistant.</figcaption>
</figure>

Everybody wins there. Ticketmaster keeps its brand and you already know how to use its seat map. The assistant doesn't have to invent one, because the domain expert ships its own.

His example: plan an anniversary. Instead of 20 tabs, the assistant shows you a slice of Google Calendar, then a slice of Amazon, and you never leave the chat. Apps stop owning the user journey. They only own the last mile. He calls this the nearly headless web.

MCP Apps started less than a year ago as MCP-UI, which he built with Ido Salomon. Anthropic and OpenAI then sat down with them to turn it into the MCP Apps spec, released in January.

## Every category gets its own assistant

Liad frames who feels this first as a spectrum. Coding agents already changed how dev tools get picked: if your agent reaches for Supabase, MongoDB or Sentry, their business goes up, and if it doesn't, it goes down. Chat apps like Claude, ChatGPT and Gemini are doing the same to B2B SaaS, with people using Salesforce through their chat app.

The next wave is consumer assistants going mainstream. That one hits ten times more companies, the Walmarts and Targets. People stop browsing a store and ask their assistant to buy the thing, and the assistant doesn't much care which store it comes from.

<figure class="fd-fig" aria-labelledby="fd6-cap">
<div class="fd-waves">
<div class="fd-wave"><p class="fd-wave-when">Happening</p><p class="fd-wave-who">Coding agents</p><p class="fd-wave-arrow" aria-hidden="true">↓</p><p class="fd-wave-what">Dev tools</p><p class="fd-wave-note">Picked by the agent, or not picked at all.</p></div>
<div class="fd-wave"><p class="fd-wave-when">Happening</p><p class="fd-wave-who">Claude, ChatGPT, Gemini</p><p class="fd-wave-arrow" aria-hidden="true">↓</p><p class="fd-wave-what">B2B SaaS, productivity</p><p class="fd-wave-note">Salesforce, used from inside a chat.</p></div>
<div class="fd-wave fd-wave-next"><p class="fd-wave-when">Next</p><p class="fd-wave-who">Personal assistants</p><p class="fd-wave-arrow" aria-hidden="true">↓</p><p class="fd-wave-what">Consumer apps, e-commerce</p><p class="fd-wave-note">Ten times more companies.</p></div>
</div>
<figcaption id="fd6-cap">Each wave of assistants becomes the new entry point for a whole category. Redrawn from Liad's slide.</figcaption>
</figure>

## The new UX is AX plus UAX

He splits user experience in two.

<figure class="fd-fig fd-eq-fig" aria-labelledby="fd7-cap">
<p class="fd-eq"><span>UX</span><span class="fd-eq-op">=</span><span class="fd-eq-ax">AX</span><span class="fd-eq-op">+</span><span class="fd-eq-uax">UAX</span></p>
<div class="fd-eq-defs"><p><b>AX</b>how an agent experiences your product</p><p><b>UAX</b>how a human experiences that agent</p></div>
<figcaption id="fd7-cap">Headless, but with a human eye at the end. From Liad's slide.</figcaption>
</figure>

There's always a human at the end of the chain, so both halves count. And it means being agent ready on every front at once. You still need a website, now visited by people and by browser agents. You also need an MCP endpoint, visited by the user's own AI agent or by the app's own agent working for them.

<figure class="fd-fig" aria-labelledby="fd8-cap">
<div class="fd-canvas">
<svg viewBox="0 0 440 300" role="img" aria-labelledby="fd8-title fd8-desc">
<title id="fd8-title">Agent ready on all fronts</title>
<desc id="fd8-desc">Four kinds of visitors reach your product through two surfaces. A person in a browser and a browser agent use the human interface. The user's own AI agent and the app's own agent use the MCP endpoint.</desc>
<defs>
<marker id="fd8-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<marker id="fd8-head-c" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head-c" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd8-p1" d="M290,36 L242,64"/>
<path id="fd8-p2" d="M290,96 L242,78"/>
<path id="fd8-p3" d="M290,206 L242,224"/>
<path id="fd8-p4" d="M290,266 L242,238"/>
</defs>
<path class="fd-line" d="M290,36 L242,63" marker-end="url(#fd8-head)"/>
<path class="fd-line" d="M290,96 L242,78" marker-end="url(#fd8-head)"/>
<path class="fd-line fd-line-agent" d="M290,206 L242,223" marker-end="url(#fd8-head-c)"/>
<path class="fd-line fd-line-agent" d="M290,266 L242,238" marker-end="url(#fd8-head-c)"/>
<path class="fd-line fd-line-dim" d="M140,72 L102,136"/>
<path class="fd-line fd-line-dim" d="M140,228 L102,166"/>
<g class="fd-box"><rect x="10" y="126" width="92" height="48"/><text class="fd-t" x="56" y="145" text-anchor="middle">Your</text><text class="fd-t" x="56" y="166" text-anchor="middle">product</text></g>
<g class="fd-box"><rect x="140" y="50" width="100" height="42"/><text class="fd-t" x="190" y="76" text-anchor="middle">Human UI</text></g>
<g class="fd-box fd-box-agent"><rect x="140" y="208" width="100" height="42"/><text class="fd-t" x="190" y="234" text-anchor="middle">MCP</text></g>
<g class="fd-box fd-you"><rect x="290" y="20" width="140" height="32"/><text class="fd-t" x="360" y="41" text-anchor="middle">You, in a browser</text></g>
<g class="fd-box"><rect x="290" y="80" width="140" height="32"/><text class="fd-t" x="360" y="101" text-anchor="middle">Browser agent</text></g>
<g class="fd-box fd-box-agent"><rect x="290" y="190" width="140" height="32"/><text class="fd-t" x="360" y="211" text-anchor="middle">Your AI agent</text></g>
<g class="fd-box fd-box-agent"><rect x="290" y="250" width="140" height="32"/><text class="fd-t" x="360" y="271" text-anchor="middle">The app's agent</text></g>
<text class="fd-label" x="360" y="150" text-anchor="middle">WHO VISITS</text>
<text class="fd-label" x="190" y="150" text-anchor="middle">WHAT THEY USE</text>
<g class="fd-token">
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.8s" repeatCount="indefinite"><mpath href="#fd8-p1"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.8s" begin="-0.7s" repeatCount="indefinite"><mpath href="#fd8-p2"/></animateMotion></rect>
</g>
<g class="fd-token fd-token-ui">
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.8s" begin="-1.4s" repeatCount="indefinite"><mpath href="#fd8-p3"/></animateMotion></rect>
<rect x="-5" y="-5" width="10" height="10"><animateMotion dur="2.8s" begin="-2.1s" repeatCount="indefinite"><mpath href="#fd8-p4"/></animateMotion></rect>
</g>
</svg>
</div>
<figcaption id="fd8-cap">Two surfaces, four kinds of visitors. Redrawn from Liad's "Agent ready, on all fronts" slide.</figcaption>
</figure>

## Agents have no brand loyalty

My favourite story from the talk. When his team picked an analytics tool, they wanted Mixpanel, which they'd used for ten years. Claude Code kept pushing PostHog because its MCP server and API were easier to work with. They went with PostHog.

<figure class="fd-fig" aria-labelledby="fd5-cap">
<div class="fd-pick">
<div class="fd-pick-card"><p class="fd-pick-who">What the team wanted</p><p class="fd-pick-name">Mixpanel</p><p class="fd-pick-row">10 years of using it</p><p class="fd-pick-row">ranks higher on Google</p></div>
<div class="fd-pick-arrow" aria-hidden="true"><span>Claude Code</span><b>→</b></div>
<div class="fd-pick-card fd-pick-win"><p class="fd-pick-who">What the agent picked</p><p class="fd-pick-name">PostHog</p><p class="fd-pick-row">better MCP server</p><p class="fd-pick-row">easier API to work with</p><span class="fd-pick-stamp">Shipped</span></div>
</div>
<figcaption id="fd5-cap">The analytics pick Liad's team ended up with, as he told it.</figcaption>
</figure>

A decade of UX and developer experience, lost because an agent had a smoother time elsewhere. And Mixpanel ranks higher on Google.

That's the part I can't unsee. I work on e-commerce integrations for a living, and that next wave is aimed right at my world: if people ask an assistant to buy something instead of browsing a store, the store's offering to agents is its storefront.

## The stat that hit my own site

Liad's company, [Ora](https://ora.ai), measures how ready websites are for agents. They score it as a loop of five checks, in the order an agent runs into you, and auth weighs the most: 30 points out of 100.

<figure class="fd-fig" aria-labelledby="fd9-cap">
<div class="fd-canvas">
<svg viewBox="0 0 440 428" role="img" aria-labelledby="fd9-title fd9-desc">
<title id="fd9-title">Ora's agent-readiness loop</title>
<desc id="fd9-desc">A user's intent starts a loop of five checks: discovery, 15 points, can agents find you; identity, 20 points, do agents understand you; auth and access, 30 points, can agents authenticate; integration, 20 points, can agents do the work; user experience, 15 points, can humans use you when needed. Then it returns to the next intent. A bar shows the weights out of 100, with auth the largest.</desc>
<defs>
<marker id="fd9-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd9-loop" d="M120,26 V328 H18 V26 H120"/>
</defs>
<g class="fd-token"><rect x="-5" y="-5" width="10" height="10"><animateMotion dur="9s" repeatCount="indefinite"><mpath href="#fd9-loop"/></animateMotion></rect></g>
<path class="fd-line fd-line-dim" d="M40,328 H18 V26 H78" marker-end="url(#fd9-head)"/>
<g class="fd-box fd-you"><rect x="80" y="12" width="80" height="28"/><text class="fd-t" x="120" y="31" text-anchor="middle">Intent</text></g>
<path class="fd-line" d="M120,40 V58" marker-end="url(#fd9-head)"/>
<g class="fd-box"><rect x="40" y="60" width="160" height="40"/><text class="fd-t" x="120" y="85" text-anchor="middle">Discovery</text></g>
<g class="fd-tag"><rect x="176" y="51" width="46" height="18"/><text x="199" y="64" text-anchor="middle">15 pts</text></g>
<text class="fd-q" x="236" y="85">Can agents find you?</text>
<path class="fd-line" d="M120,100 V120" marker-end="url(#fd9-head)"/>
<g class="fd-box"><rect x="40" y="122" width="160" height="40"/><text class="fd-t" x="120" y="147" text-anchor="middle">Identity</text></g>
<g class="fd-tag"><rect x="176" y="113" width="46" height="18"/><text x="199" y="126" text-anchor="middle">20 pts</text></g>
<text class="fd-q" x="236" y="147">Do agents understand you?</text>
<path class="fd-line" d="M120,162 V182" marker-end="url(#fd9-head)"/>
<g class="fd-box fd-box-solid"><rect x="40" y="184" width="160" height="40"/><text class="fd-t" x="120" y="209" text-anchor="middle">Auth &amp; Access</text></g>
<g class="fd-tag"><rect x="176" y="175" width="46" height="18"/><text x="199" y="188" text-anchor="middle">30 pts</text></g>
<text class="fd-q" x="236" y="209">Can agents authenticate?</text>
<path class="fd-line" d="M120,224 V244" marker-end="url(#fd9-head)"/>
<g class="fd-box"><rect x="40" y="246" width="160" height="40"/><text class="fd-t" x="120" y="271" text-anchor="middle">Integration</text></g>
<g class="fd-tag"><rect x="176" y="237" width="46" height="18"/><text x="199" y="250" text-anchor="middle">20 pts</text></g>
<text class="fd-q" x="236" y="271">Can agents do the work?</text>
<path class="fd-line" d="M120,286 V306" marker-end="url(#fd9-head)"/>
<g class="fd-box"><rect x="40" y="308" width="160" height="40"/><text class="fd-t" x="120" y="333" text-anchor="middle">User Experience</text></g>
<g class="fd-tag"><rect x="176" y="299" width="46" height="18"/><text x="199" y="312" text-anchor="middle">15 pts</text></g>
<text class="fd-q" x="236" y="326">Can humans use you</text><text class="fd-q" x="236" y="341">when needed?</text>
<text class="fd-label" x="10" y="368">WEIGHT, OUT OF 100</text>
<g class="fd-bar">
<rect x="10" y="376" width="63" height="24"/><text class="fd-bar-n" x="41.5" y="393" text-anchor="middle">15</text><text class="fd-bar-l" x="41.5" y="416" text-anchor="middle">Discovery</text>
<rect x="73" y="376" width="84" height="24"/><text class="fd-bar-n" x="115" y="393" text-anchor="middle">20</text><text class="fd-bar-l" x="115" y="416" text-anchor="middle">Identity</text>
<rect class="on" x="157" y="376" width="126" height="24"/><text class="fd-bar-n on" x="220" y="393" text-anchor="middle">30</text><text class="fd-bar-l" x="220" y="416" text-anchor="middle">Auth</text>
<rect x="283" y="376" width="84" height="24"/><text class="fd-bar-n" x="325" y="393" text-anchor="middle">20</text><text class="fd-bar-l" x="325" y="416" text-anchor="middle">Integration</text>
<rect x="367" y="376" width="63" height="24"/><text class="fd-bar-n" x="398.5" y="393" text-anchor="middle">15</text><text class="fd-bar-l" x="398.5" y="416" text-anchor="middle">UX</text>
</g>
</svg>
</div>
<figcaption id="fd9-cap">The five checks an agent runs into, in order, and how much each one weighs. Redrawn from Liad's slide on how Ora scores agent readiness.</figcaption>
</figure>

The `llms.txt` finding lives in that first box. They scanned tens of thousands of sites, and about **50%** publish an `llms.txt`.

Then they ran thousands of real agent sessions against those sites. The agents didn't look for `llms.txt`. They went straight to the docs and the homepage, and only read `llms.txt` when the docs told them to.

<figure class="fd-fig" aria-labelledby="fd3-cap">
<div class="fd-canvas">
<svg viewBox="0 0 440 250" role="img" aria-labelledby="fd3-title fd3-desc">
<title id="fd3-title">Half the web publishes llms.txt, agents mostly skip it</title>
<desc id="fd3-desc">Ten squares, five filled: about half of the sites Ora scanned publish an llms.txt. Below, the path agents actually took: agent to homepage to docs. The llms.txt file hangs off the docs with a dashed line, read only when the docs point to it.</desc>
<defs>
<marker id="fd3-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd3-p" d="M55,128 L200,128 L365,128"/>
</defs>
<text class="fd-label" x="10" y="20">SITES ORA SCANNED THAT PUBLISH LLMS.TXT</text>
<g class="fd-waffle">
<rect class="on" x="10" y="33" width="26" height="26"/><rect class="on" x="41" y="33" width="26" height="26"/><rect class="on" x="72" y="33" width="26" height="26"/><rect class="on" x="103" y="33" width="26" height="26"/><rect class="on" x="134" y="33" width="26" height="26"/>
<rect x="165" y="33" width="26" height="26"/><rect x="196" y="33" width="26" height="26"/><rect x="227" y="33" width="26" height="26"/><rect x="258" y="33" width="26" height="26"/><rect x="289" y="33" width="26" height="26"/>
</g>
<text class="fd-big" x="432" y="56" text-anchor="end">~50%</text>
<path class="fd-rule" d="M10,86 H430"/>
<text class="fd-label" x="10" y="108">WHERE THE AGENTS ACTUALLY WENT</text>
<g class="fd-box fd-box-agent"><rect x="10" y="128" width="90" height="40"/><text class="fd-t" x="55" y="153" text-anchor="middle">Agent</text></g>
<g class="fd-box"><rect x="135" y="128" width="130" height="40"/><text class="fd-t" x="200" y="153" text-anchor="middle">Homepage</text></g>
<g class="fd-box"><rect x="300" y="128" width="130" height="40"/><text class="fd-t" x="365" y="153" text-anchor="middle">Docs</text></g>
<path class="fd-line" d="M100,148 H133" marker-end="url(#fd3-head)"/>
<path class="fd-line" d="M265,148 H298" marker-end="url(#fd3-head)"/>
<path class="fd-line fd-line-dim" d="M365,168 V198"/>
<g class="fd-box fd-box-dim"><rect x="300" y="200" width="130" height="36"/><text class="fd-t" x="365" y="223" text-anchor="middle">llms.txt</text></g>
<text class="fd-note" x="288" y="214" text-anchor="end">read only when the</text>
<text class="fd-note" x="288" y="229" text-anchor="end">docs point to it</text>
<g class="fd-token"><rect x="-5" y="-5" width="10" height="10"><animateMotion dur="6s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0.47;0.47;1;1" keyTimes="0;0.2;0.45;0.65;1"><mpath href="#fd3-p"/></animateMotion></rect></g>
</svg>
</div>
<figcaption id="fd3-cap">Ora's numbers as Liad gave them in the talk: tens of thousands of sites scanned, thousands of agent runs.</figcaption>
</figure>

So I checked mine. heybrahim.com has an `llms.txt`, an `llms-full.txt`, a `profile.json` and [an MCP server](/notes/portfolio-mcp-server.html) at `api.heybrahim.com/mcp`. Here's the route an agent has to take to find that server:

<figure class="fd-fig" aria-labelledby="fd4-cap">
<div class="fd-canvas">
<svg viewBox="0 0 440 336" role="img" aria-labelledby="fd4-title fd4-desc">
<title id="fd4-title">How an agent finds my MCP server</title>
<desc id="fd4-desc">An agent arriving at heybrahim.com. Its request for the ai-catalog.json file returns 404. The homepage doesn't show the MCP server's URL, only small footer links. The URL is on the AI page, the notes and llms.txt, each one click past the homepage.</desc>
<defs>
<marker id="fd4-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<marker id="fd4-head-c" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head-c" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd4-bounce" d="M198,46 L110,90"/>
<path id="fd4-home" d="M242,46 L330,90"/>
</defs>
<path class="fd-line fd-line-alert" d="M198,46 L110,88"/>
<path class="fd-line" d="M242,46 L330,88" marker-end="url(#fd4-head)"/>
<path class="fd-line" d="M335,136 L75,184" marker-end="url(#fd4-head)"/>
<path class="fd-line" d="M335,136 L220,184" marker-end="url(#fd4-head)"/>
<path class="fd-line" d="M335,136 L365,184" marker-end="url(#fd4-head)"/>
<path class="fd-line fd-line-agent fd-march" d="M75,222 L150,274" marker-end="url(#fd4-head-c)"/>
<path class="fd-line fd-line-agent fd-march" d="M220,222 V274" marker-end="url(#fd4-head-c)"/>
<path class="fd-line fd-line-agent fd-march" d="M365,222 L290,274" marker-end="url(#fd4-head-c)"/>
<g class="fd-box fd-box-agent"><rect x="170" y="10" width="100" height="36"/><text class="fd-t" x="220" y="33" text-anchor="middle">Agent</text></g>
<g class="fd-box fd-box-alert"><rect x="10" y="90" width="200" height="46"/><text class="fd-t" x="110" y="110" text-anchor="middle">ai-catalog.json</text><text class="fd-s fd-s-alert" x="110" y="127" text-anchor="middle">404, doesn't exist</text></g>
<g class="fd-box fd-you"><rect x="240" y="90" width="190" height="46"/><text class="fd-t" x="335" y="110" text-anchor="middle">Homepage</text><text class="fd-s" x="335" y="127" text-anchor="middle">no URL, just footer links</text></g>
<g class="fd-box"><rect x="10" y="186" width="130" height="36"/><text class="fd-t" x="75" y="209" text-anchor="middle">AI page</text></g>
<g class="fd-box"><rect x="155" y="186" width="130" height="36"/><text class="fd-t" x="220" y="209" text-anchor="middle">Notes</text></g>
<g class="fd-box"><rect x="300" y="186" width="130" height="36"/><text class="fd-t" x="365" y="209" text-anchor="middle">llms.txt</text></g>
<g class="fd-box fd-box-solid"><rect x="90" y="276" width="260" height="48"/><text class="fd-t" x="220" y="297" text-anchor="middle">MCP server</text><text class="fd-s" x="220" y="314" text-anchor="middle">api.heybrahim.com/mcp</text></g>
<text class="fd-note" x="436" y="254" text-anchor="end">2 hops deep</text>
<g class="fd-token fd-token-alert"><rect x="-5" y="-5" width="10" height="10"><animateMotion dur="5s" repeatCount="indefinite" calcMode="linear" keyPoints="0;1;1;0;0" keyTimes="0;0.25;0.35;0.6;1"><mpath href="#fd4-bounce"/></animateMotion></rect></g>
<g class="fd-token"><rect x="-5" y="-5" width="10" height="10"><animateMotion dur="5s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0;1;1" keyTimes="0;0.6;0.8;1"><mpath href="#fd4-home"/></animateMotion></rect></g>
</svg>
</div>
<figcaption id="fd4-cap">My own site, checked on 27 September 2026. The URL is on three pages, and the homepage isn't one of them.</figcaption>
</figure>

The homepage, where agents actually land, only has small footer links: `llms.txt`, `profile.json` and one labelled "MCP" that goes to another page. None of them shows the URL, and `profile.json` doesn't have it either. The file that spells it out best is the one his data says they skip.

```
$ curl -sI https://heybrahim.com/.well-known/ai-catalog.json | head -1
HTTP/2 404
```

That 404 is the fix he points to. He showed two emerging standards that stack on each other.

The first is `/.well-known/ai-catalog.json`: one file on your domain that lists every agent entry point you have, MCP servers, OpenAPI, GraphQL, A2A, whatever. An agent that lands on your domain doesn't need to read your docs to find the MCP URL.

The catalog still needs the agent to reach your domain first, and today that means web search. Agentic Resource Discovery (ARD) fills that gap. It's a standard for directories: the agent asks a registry for "an email service", the registry ranks what it knows and points at a domain, and that domain's catalog does the rest. His example was Stripe's directory. Ora runs one too, built from the catalogs of 70,000 domains they scanned.

<figure class="fd-fig" aria-labelledby="fd10-cap">
<div class="fd-canvas">
<svg viewBox="0 0 440 364" role="img" aria-labelledby="fd10-title fd10-desc">
<title id="fd10-title">Two standards, stacked</title>
<desc id="fd10-desc">Your agent asks a directory for an email service. The directory, built on the Agentic Resource Discovery standard, ranks services and points to a domain. That domain's /.well-known/ai-catalog.json file lists its agent entry points: MCP, OpenAPI, GraphQL and A2A.</desc>
<defs>
<marker id="fd10-head" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head" d="M0,0 L8,4 L0,8 Z"/></marker>
<marker id="fd10-head-c" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path class="fd-head-c" d="M0,0 L8,4 L0,8 Z"/></marker>
<path id="fd10-p" d="M220,44 V286 L58,322"/>
</defs>
<g class="fd-token"><rect x="-5" y="-5" width="10" height="10"><animateMotion dur="6s" repeatCount="indefinite" calcMode="linear" keyPoints="0;0.2;0.2;0.52;0.52;1;1" keyTimes="0;0.12;0.3;0.45;0.6;0.85;1"><mpath href="#fd10-p"/></animateMotion></rect></g>
<path class="fd-line" d="M220,44 V88" marker-end="url(#fd10-head)"/>
<path class="fd-line" d="M220,136 V168" marker-end="url(#fd10-head)"/>
<path class="fd-line" d="M220,204 V238" marker-end="url(#fd10-head)"/>
<path class="fd-line fd-line-agent" d="M220,286 L58,320" marker-end="url(#fd10-head-c)"/>
<path class="fd-line fd-line-agent" d="M220,286 L166,320" marker-end="url(#fd10-head-c)"/>
<path class="fd-line fd-line-agent" d="M220,286 L274,320" marker-end="url(#fd10-head-c)"/>
<path class="fd-line fd-line-agent" d="M220,286 L382,320" marker-end="url(#fd10-head-c)"/>
<g class="fd-box fd-you"><rect x="160" y="10" width="120" height="34"/><text class="fd-t" x="220" y="32" text-anchor="middle">Your agent</text></g>
<text class="fd-note" x="232" y="72">"I need an email service"</text>
<text class="fd-label" x="10" y="108">ARD</text>
<text class="fd-note" x="10" y="124">directory</text>
<g class="fd-box"><rect x="90" y="90" width="260" height="46"/><text class="fd-t" x="220" y="110" text-anchor="middle">A directory</text><text class="fd-s" x="220" y="127" text-anchor="middle">ranks services for the task</text></g>
<text class="fd-note" x="232" y="158">points to a domain</text>
<g class="fd-box"><rect x="130" y="170" width="180" height="34"/><text class="fd-t" x="220" y="192" text-anchor="middle">service.example</text></g>
<text class="fd-label" x="10" y="258">CATALOG</text>
<text class="fd-note" x="10" y="274">one per domain</text>
<g class="fd-box fd-box-solid"><rect x="120" y="240" width="300" height="46"/><text class="fd-t" x="270" y="260" text-anchor="middle">/.well-known/ai-catalog.json</text><text class="fd-s" x="270" y="277" text-anchor="middle">lists every agent entry point</text></g>
<g class="fd-box fd-box-agent"><rect x="10" y="322" width="96" height="30"/><text class="fd-t" x="58" y="342" text-anchor="middle">MCP</text></g>
<g class="fd-box fd-box-agent"><rect x="118" y="322" width="96" height="30"/><text class="fd-t" x="166" y="342" text-anchor="middle">OpenAPI</text></g>
<g class="fd-box fd-box-agent"><rect x="226" y="322" width="96" height="30"/><text class="fd-t" x="274" y="342" text-anchor="middle">GraphQL</text></g>
<g class="fd-box fd-box-agent"><rect x="334" y="322" width="96" height="30"/><text class="fd-t" x="382" y="342" text-anchor="middle">A2A</text></g>
</svg>
</div>
<div class="fd-backers">
<p><b>ai-catalog.json</b><span>Anthropic</span><span>OpenAI</span><span>Google</span><span>MCP</span></p>
<p><b>ARD</b><span>Google</span><span>Microsoft</span><span>NVIDIA</span><span>GoDaddy</span><span>Salesforce</span></p>
</div>
<figcaption id="fd10-cap">The directory finds the domain, the catalog finds the entry points. Redrawn from Liad's "Emerging standards" slide, with the names it showed under each standard.</figcaption>
</figure>

Google announced the [ARD specification](https://developers.googleblog.com/announcing-the-agentic-resource-discovery-specification/) with industry partners, and AWS has [written about supporting it](https://aws.amazon.com/blogs/machine-learning/agentic-resource-discovery-ard-an-open-specification-for-agent-discovery/).

**Update, same day:** I fixed my own 404. heybrahim.com now serves [`/.well-known/ard.json`](/.well-known/ard.json), the path the ARD spec has used since v0.91, and keeps [`ai-catalog.json`](/.well-known/ai-catalog.json) as the older name from the talk. Every page links to it with `rel="ard"`, `robots.txt` has an `Agentmap` line, and the footer finally shows the MCP URL.

## Where I land

I don't think my site goes away. People still read a portfolio. But I built the agent side by guessing what agents want, and Liad's whole argument is to stop guessing and watch them.

Two of my next steps are already done: the catalog is published and the MCP URL is on every page. The one left is the one Liad would start with: run real agent journeys against the site and see which path they take.

Watch [the part where he makes the call](https://www.youtube.com/watch?v=-w6RDNBAI0E&t=17860s). And if you point your agent at heybrahim.com, tell me which door it used.
