<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roland Farkas</title>
    <description>The latest articles on DEV Community by Roland Farkas (@rolandfarkas).</description>
    <link>https://dev.to/rolandfarkas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F789498%2F0a80ad18-d0b6-4234-8caa-47a4fa7241b6.png</url>
      <title>DEV Community: Roland Farkas</title>
      <link>https://dev.to/rolandfarkas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rolandfarkas"/>
    <language>en</language>
    <item>
      <title>Describe your website once, make it usable by any AI</title>
      <dc:creator>Roland Farkas</dc:creator>
      <pubDate>Sun, 12 Jul 2026 15:12:15 +0000</pubDate>
      <link>https://dev.to/rolandfarkas/describe-your-website-once-make-it-usable-by-any-ai-2n37</link>
      <guid>https://dev.to/rolandfarkas/describe-your-website-once-make-it-usable-by-any-ai-2n37</guid>
      <description>&lt;p&gt;If you have tried to make a website work with AI assistants recently, you have run into the fragmentation. Depending on the platform, you are looking at MCP, WebMCP, ACP, product feeds, OAuth flows, framework-specific tooling, and whatever ships next. Each solves a real slice of the problem. But a site ends up implementing and maintaining several of them separately, per assistant, and re-doing it every time a new protocol appears.&lt;/p&gt;

&lt;p&gt;The web was built for humans. Agents should not have to scrape HTML and guess at your forms. So I built AI2Web to test a different approach: describe your site's capabilities once, and expose them through whichever protocol an AI platform speaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of it
&lt;/h2&gt;

&lt;p&gt;A site publishes a small, machine-readable manifest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET  /.well-known/ai2w   discovery anchor
GET  /ai2w               the capability manifest
POST /ai2w/negotiate     agree a capability set + transport
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From that one description, you generate MCP, GraphQL, ACP, OpenAPI and feeds. You do not rebuild for each assistant. When a new protocol wins, you add an adapter, not a rewrite.&lt;/p&gt;

&lt;p&gt;It is explicitly not a replacement for MCP or ACP. It sits above them as an interoperability layer. The bet is that the capability model is the durable part, and the transports are adapters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it in a minute
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# score any live site's AI readiness&lt;/span&gt;
npx &lt;span class="nt"&gt;-p&lt;/span&gt; @ai2web/validator ai2web validate https://ai2web.dev

&lt;span class="c"&gt;# or build a manifest in code&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @ai2web/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ai2web&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validateManifest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@ai2web/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;manifest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ai2web&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Acme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://acme.example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ecommerce&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;commerce&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;validateManifest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// AI Readiness Score /100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What exists today (it is early, v0.1)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An open spec, RFCs and a conformance suite&lt;/li&gt;
&lt;li&gt;SDKs you can install now: &lt;code&gt;@ai2web/core&lt;/code&gt; (and PHP, Python, Go and .NET)&lt;/li&gt;
&lt;li&gt;A framework-agnostic server (Node and Cloudflare Workers) and a WordPress/WooCommerce plugin&lt;/li&gt;
&lt;li&gt;Reference adapters that generate MCP, GraphQL, ACP and OpenAPI from one manifest, all routing through one guarded executor&lt;/li&gt;
&lt;li&gt;A live validator (CLI, web, and an MCP tool) and a live discovery service&lt;/li&gt;
&lt;li&gt;Safe by default: discovery is read-only, and anything that moves money or data is risk-tiered and returns a preview for user approval before it runs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I want to know
&lt;/h2&gt;

&lt;p&gt;I am not trying to win a standards race. I am trying to make the AI-ready web simple enough that developers actually want to build it. Whether that abstraction holds, or leaks so badly you would rather just implement MCP directly, is exactly the question I cannot answer alone.&lt;/p&gt;

&lt;p&gt;If you build websites, AI agents, or the tools in between, I would value your criticism:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you already ship MCP, does a capability layer above it earn its keep, or is it just another abstraction to maintain?&lt;/li&gt;
&lt;li&gt;What would actually stop you from adopting it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is open source (code MIT, spec CC-BY).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overview and a validator you can point at any site: &lt;a href="https://ai2web.dev" rel="noopener noreferrer"&gt;https://ai2web.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code and spec: &lt;a href="https://github.com/ai2web-foundation" rel="noopener noreferrer"&gt;https://github.com/ai2web-foundation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Describe once. Works everywhere. That is the whole idea.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
