Product Launch · Analysis

Cloudflare launches WebMCP: Flip one dashboard toggle and AI can operate your site

No source code changes required—Cloudflare injects a single script into your HTML at the edge. But today's stable Chrome doesn't recognize the interface yet. We tested it on our own machine to see what actually happens.
Quick Take
  • A new toggle in the Cloudflare dashboard—once enabled, AI agents can interact with your website by calling functions instead of guessing from screenshots.
  • Your origin doesn't change a line of code or redeploy; the script is injected into the HTML as it's delivered.
  • But flip that switch today, and almost nothing will change for most visitors. We tested it on the latest Chrome—see Section 8.
⚑ This is Cloudflare's own product preview; feature descriptions and example data come from the vendor. The "Our Test" sections reflect my own verification on a local Chrome build and are independent of the vendor.
The launch

Flip a switch, and your site becomes operable by AI

Cloudflare released the developer preview of WebMCP yesterday. Click a toggle in your dashboard, and your website gains a set of "controls for AI": agents can load your page and complete tasks directly—no screenshots, no guesswork, no step-by-step clicking—like calling a function.

For site owners, the real value is the near-zero cost: zero source code modifications and no redeploys. If a visitor's browser doesn't support the feature, the script silently skips itself, and the page behaves exactly as before.

What's new: the WebMCP standard itself has existed for a few months, but it always required websites to write their own support—designing which tools to expose, integrating them into their UI, and keeping up with spec changes. Cloudflare has now automated that entire step.

Context

Today's AI web browsing: scraping content, or guessing buttons from screenshots

Web pages were designed from day one for "a person looking at a screen"—someone who reads text, clicks buttons, and fills out forms.

Now, more and more visitors are AI agents. How do they use these human-oriented pages? Right now, there are only two paths, and neither is great.

Path one is scraping. The agent copies the entire page back to its server for parsing. This is the worst outcome for site owners: your content is taken, traffic disappears, and attribution is lost.

The common practice is a crawler that copies content back to a server, often without sending a single visit to the original site or giving proper attribution. There's a better way, and it doesn't require scraping.

Cloudflare Blog · Give any website a WebMCP interface

Path two is screenshot-analyze-click. The agent mimics a human: takes a screenshot, uses a model to parse the layout and find the search box, clicks, screenshots again, analyzes again. It's slow, brittle, and burns most of its tokens on "navigation" rather than getting things done. A single redesign breaks the entire flow.

WebMCP proposes a third path: the website proactively tells the agent, "Here are the tools you can call," e.g., "search flights," "book tickets," with clear parameter specs. No guessing—just direct calls.

Path 1 · Scrape content Your site Page copied AI's server Cost: zero traffic, no credit Path 2 · Screenshot & Guess Screenshot Model parses Click Repeat: screenshot, analyze, click Cost: slow, breaks on redesigns tokens spent on navigation Path 3 · Call tools directly (WebMCP) Your site lists tools search_items add_to_cart track_order checkout Calls accordingly AI Agent One call does it all, tokens spent on results.
Cost comparison of the three paths. The first two are today's reality; the third is what WebMCP aims to replace. Diagram is our own rendering of the described mechanism.
We've covered a different answer to the same problem
Cloudflare's Auto-Billing Gateway: AI Scrapers Get Charged Automatically
That piece explored "if you can't beat them, charge them." This one explores "they don't need to scrape at all." Two directions, same problem.
The standard

WebMCP lets sites list capabilities as tools for AI to call

First, its identity: WebMCP is a browser standard proposal, currently incubating in a W3C community group. It's not a final standard yet. Chrome's status page still lists it as "Proposed."

On a page, it manifests as an interface called document.modelContext. Websites attach tools to this interface, which agents in the browser can then discover and invoke.

There are two ways to attach tools, and they differ significantly in effort:

One is to write JavaScript, calling registerTool() with the tool's name, description, parameter schema, and execution logic. Complex interactions require this approach.

The other is far simpler—just add a few attributes to the HTML forms you already have. Add toolname (what the tool is called) and tooldescription (what it does) to a booking form, plus toolparamdescription (what each field is for) on each input. The browser automatically turns it into a callable tool for agents, complete with a generated parameter spec.

Your existing booking form Book a Table Date Party size Phone Add three attributes toolname="book_table" tooldescription="Book a table" toolparamdescription="…" Browser auto-converts Agent's view of the tool book_table Book a table Param spec (auto-generated) date : string · required party : number · required phone : string Dropdowns become option lists, checkboxes become booleans.
Declarative approach: the form stays the same, just add three attributes. The conversion rules on the right come from Google's official repo: dropdowns become enums, number inputs become numbers, checkboxes become booleans, and required fields are marked. Diagram is our own.
In Practice

Tools Change with the Page; Payment Pauses for Human Confirmation

Reading the spec is one thing. Seeing it work is another. Cloudflare's own remote browser docs include a walkthrough using Google's official hotel booking demo, and two details surprised me.

First, the tool list is not static. When the page first loads, only three tools exist: view hotel details, search by location, and lookup amenities. After you call "search by location" for Paris and the page jumps to search results, a new tool—"filter search results"—appears. Tools follow the page's state.

Second, sensitive operations halt the agent. Calling the "complete booking" tool doesn't finalize anything. It stops, waiting for you to click the "Confirm Reservation" button in the browser. This is a built-in human confirmation mechanism.

Page state: Hotel homepage

Agent opens the page, first asks, "What tools do you have?"

It gets three back. Want to filter? No such tool, because there's nothing to filter yet.

view_hotel · View details search_location · Search by area lookup_amenity · Check amenities
Page state: Search results

Agent calls search_location with "Paris"

The page jumps to results. Asking for the tool list again reveals a new tool that didn't exist a moment ago.

view_hotel · View details search_location · Search by area lookup_amenity · Check amenities + filter_search_results · Filter results
Page state: Filtered results

Agent calls filter_search_results with "include breakfast"

It gets a filtered list. Picks a hotel, then calls start_booking to begin.

filter_search_results · Filter results + start_booking · Start reservation
Page state: Booking confirmation

Agent calls complete_booking with name and email, then stalls

This step doesn't finish on its own. The tool waits until a human clicks "Confirm Reservation" in the browser. Only then is the booking finalized.

complete_booking · awaiting confirmation
Click through the four steps to see how the tool list changes. Flow and tool names are from Cloudflare's BrowserRun official docs.
The Mechanics

Cloudflare's Approach: Inject a Script While Your Page is in Transit

Now that we've covered the standard, let's look at what Cloudflare actually did. Its implementation has two parts, both operating in front of your origin. Your code doesn't change. Static sites and SPAs work the same way.

Part 1: Inject a script at the edge

Flip the toggle in your dashboard, and before each HTML page is delivered from Cloudflare's servers, it gets this line appended:

The line Cloudflare injects
<script type="module"
        src="/.webmcp/bridge.js"
        data-packs="c2pa,mcp-server-client"
        data-mcp-url="/mcp"></script>
data-packs selects which feature packs to enable, and data-mcp-url points to your own MCP server (defaulting to /mcp on the same domain). Since this script is also served by Cloudflare from your domain, nothing else on the page changes.

The tool that does this is HTMLRewriter, Cloudflare's HTML rewriting engine that runs while pages are in transit. Your origin server is completely unaware and needs no cooperation.

Part 2: The bridge.js shim

It runs inside the page. Its first job is to check if the browser has the WebMCP interface. If not, it returns immediately and does nothing—the page is indistinguishable from before. If yes, it merges the packs listed in data-packs into a single tool manifest and registers them one by one.

Your origin Code unchanged Cloudflare HTMLRewriter acts here, injects the script tag. Visitor's browser bridge.js runs Does the browser have WebMCP? No Return immediately, do nothing Page stays exactly the same ← This is the path for most visitors today Yes Merge packs into tool manifest Register them for the agent
The entire chain. The left half is Cloudflare's work; the right half is what bridge does in the visitor's browser. The "return silently if no interface" design is exactly why this toggle is safe to switch on. Diagram is our own.
Packs

Two Built-In Packs: Check Image Provenance, Proxy Your MCP Server

Tools are grouped into "packs"—related sets that toggle together. The preview ships with two packs, both running entirely in the visitor's browser without routing through Cloudflare's servers. When new packs arrive, sites just check a box in the dashboard—no redeploy needed.

Pack 1: Find out who made the images on a page

This pack reads C2PA data embedded in images—an industry standard for "birth certificates" for pictures: who generated it, whether it's AI-made, and who's edited it since, all stored in the image file's metadata header.

Think of it like this

The little printed code on your film roll that records which camera took the shot. Except now it might say "Generated by Adobe Firefly, signed by Adobe Inc."

The pack includes two tools. scan_images_c2pa scans all images on the page and returns a summary. Cloudflare's example output: 12 images scanned, 8 with C2PA data; each lists its source, e.g., hero.jpg was generated by Adobe Firefly, signed by Adobe Inc. The other tool, inspect_image_c2pa, digs deep into a single image to extract the full record: edit history, claimed author, and signing certificate.

Technically, it's a pure TypeScript reader that touches only the first few KB of metadata—no full image downloads.

A nice, honest detail

It reads signatures but doesn't verify them. Every result includes a signatureVerified: false field, making it clear to the agent: "This is what the image claims, not what I've cryptographically confirmed." This prevents agents from treating "I say I'm from Adobe Firefly" as "Verified: made with Adobe Firefly."

Pack 2: Bring your MCP server into the page

If your site already has an MCP server—and many companies have built one over the past couple of years—this pack starts by asking /mcp, "What tools do you have?" After getting the list, it proxies each existing tool as-is onto the page: name, description, and input schema all pass through unchanged.

This marks the key difference between the two packs. The image tool's definitions are pre-declared; the MCP pack's tools are discovered dynamically.

How bridge turns your tool into something agents can call
document.modelContext.registerTool({
  name: tool.name,                 // e.g. "search_products"
  description: tool.description,
  inputSchema: tool.inputSchema,   // your schema, passed through
  execute: async (args) => {
    const res = await fetch(mcpUrl, {   // same-origin /mcp
      method: "POST",
      credentials: "same-origin",       // ← carries the visitor's current session
      headers: { "content-type": "application/json" },
      body: JSON.stringify({
        jsonrpc: "2.0", id: 1, method: "tools/call",
        params: { name: tool.name, arguments: args },
      }),
    });
    const { result } = await res.json();
    return result;   // return the result untouched
  },
});
Note the credentials: "same-origin" line: when an agent calls this tool, it uses the visitor's current login session. If the user is already logged in, the agent can check their orders without another login. The flip side: the agent in the page has all the permissions of that specific user.
Agent in the page calls "search_products" with login session /mcp on same origin still your server Your MCP server works results sent straight back The request goes directly from the visitor's browser to your server, never through Cloudflare.
Proxy chain. Cloudflare only sets up the bridge; your MCP server does the actual work. Diagram is our own.

From the agent's perspective, these are all standard MCP tools. Cloudflare uses MCP's native data types, so any agent that already speaks MCP can operate the page without any additional setup.

There's also a hint about the roadmap: bridge's code is served by a Cloudflare Worker. This leaves room for future packs where the Worker handles things the page can't do alone, like summarizing an entire sitemap with Workers AI or querying the AI Search index.

Getting Started

Where to Find the Toggle and How to Verify It Works

Dashboard path: Cloudflare Dashboard → Agent Readiness → Labs (still carrying a Beta tag). That Labs page describes itself as "experimental features you can opt into, for making your site work better with AI agents."

The WebMCP toggle and two pack checkboxes under Agent Readiness > Labs in the Cloudflare dashboard
The dashboard looks like this: a master toggle on top, two pack checkboxes below it, both checked by default. Unchecking all of them equals the default set. Image from the Cloudflare blog.

To confirm it's live, one command: request any page from your site and check for the injected line:

Verification
curl -s https://your-site.example | grep webmcp

To see tools actually being called, you don't need to build an agent yourself. Point Browser Run—Cloudflare's cloud-hosted remote browser—at your URL. It will discover and invoke the tools just like a visitor's agent would. One caveat: WebMCP is only in Chrome Beta for now, so you'll need to spin up a dedicated experimental session.

We've covered Browser Run before
Cloudflare Unveils Kitesurf Browser for AI Agents: 3-7x Savings on CPU and Memory
Browser Run is Cloudflare's remote browser service for agents. Kitesurf is the new browser now in public beta within it.
Our Test

Tested: Today's Stable Chrome Does Not Support WebMCP

So, you can turn it on—but does the visitor's side currently recognize it? Let's clear up the messaging.

The Cloudflare blog says WebMCP is "experimentally available in Chrome 146." That's already outdated: Chrome's official docs state the WebMCP origin trial starts with Chrome 149. Sites can register with Google to enable the feature for real users, rather than just toggling a local flag. And as of today, Chrome stable is already at version 151.

So can it be used? I tested it locally. My test page included Chrome's required isolation response header, satisfying the interface's prerequisite:

Default Chrome 151
Interface does not exist
document.modelContext and navigator.modelContext both read as undefined
After enabling "Experimental Web Platform Features" in chrome://flags
Interface appears
Both objects exist; tools can be registered normally
What this means

Turn the toggle on today, and Cloudflare will indeed inject the script into your pages. But the vast majority of visitors' browsers lack this interface entirely. The bridge can't find it, returns by design, and nothing happens—pages work as usual. The only ones who can benefit are browsers with experimental flags enabled, and cloud-based remote browsers running Chrome Beta.

That doesn't make this useless—"developer preview" is exactly what this is. The value today is that you can prepare your site at zero cost, not that agents will flock to it tomorrow. Chrome lists a target milestone of 157 for this feature, and its status is still "Proposed."

151
Current Chrome stable; interface absent by default
149
Chrome docs' stated start of the origin trial
157
Chrome's registered target milestone, not yet final

For what it's worth, I also checked Cloudflare itself: their blog, main site, and Radar have not enabled this feature. Radar's own WebMCP tools haven't launched yet, with a release timeframe of "soon."

Limits

Chrome's Official List of Three Limits: An Open Page is Required for Tool Calls

The standard also has hard constraints, listed in the "Limitations" section of Chrome's official docs. These come from the people building the standard, so they carry more weight than any third-party critique:

An open page is required

Tool invocation executes within page JavaScript, so an open tab must provide the interface. A pure background agent with no visible window cannot silently call WebMCP tools.

Complex UIs have migration costs

The more complex your site, the more likely you'll need to refactor or add substantial JavaScript to handle page state. This limitation doesn't fully apply to Cloudflare's one-click toggle, which offers generic packs; but exposing your own business capabilities still means setting up that MCP server.

Tools are hard to discover

An agent must first visit your site to know if you have callable tools. There's no global directory that lets it know in advance which sites are ready.

There are also two security constraints: WebMCP only works on pages with origin isolation (disable it, and the interface goes away). Tool registration is also governed by a permissions policy that, by default, only allows top-level and same-origin pages to register. Cross-origin iframes are blocked by default; they'd need explicit permission to register tools.

Back to the original question: is the toggle worth flipping now? The cost is zero—click, no origin changes, silent fallback if unsupported. So the real question becomes another one: besides the two generic packs, do you have your own MCP server to connect? That's the pack that lets an agent actually get things done for users on your site. The image credential scanner is a nice bonus.

🧰 Quick Start · Cloudflare WebMCP (Developer Preview)
RequirementDomain on Cloudflare; toggle in dashboard. To have agents call your own business functions, you'll also need an MCP server at same-origin /mcp.
Source
Give any website a WebMCP interfaceCloudflare·blog.cloudflare.com·2026-08-06
Our Note
Dashboard screenshot from Cloudflare blog; other diagrams are our own renderings based on the described mechanics and code. The Chrome tests in Section 8 were conducted by us on 2026-08-07 on macOS + Chrome 151.0.7922.108, with the test page serving the Origin-Agent-Cluster: ?1 header. The hotel booking flow and tool names are from Browser Run's official docs; declarative form conversion rules, Chrome version details, and the three limitations are from Chrome's official docs and Google's repo—none of these come from Cloudflare's blog post.