The complete guide · From a site that ships it
What is WebMCP? The guide from a site that runs it
WebMCP is a proposed web standard that lets a page hand the AI agent in your browser a short list of tools: named functions with a description and a typed input. The agent calls them inside your logged-in session instead of reading screenshots and guessing where to click.
It is being written at the W3C by engineers from Google and Microsoft, runs in Chrome and Edge trials, and Safari opposes it. This site exposes 25 WebMCP tools. Here is everything we learned, and what the people building the standard have said about it.
25 min read
Open this page in a browser with WebMCP to let your agent read it.
1registerTool(find_seo_agencies)The page declares what it can do.2getTools()The agent reads names, descriptions, schemas.3executeTool({ city: "Lyon" })It asks for one action, with typed arguments.4execute()The page runs its own code, in the user’s session.5"[{ name: … }]"Data comes back. No screenshot, no guessing.A real tool from our SEO agency ranking.
- First proposals
- 2025
- Chrome page loads that register a tool
- 0.8%
- Browser engines on board
- 1 of 3
- Agent shipping it: ChatGPT
- 1
- Tools on this site
- 25
The problem
Agents read the web through a keyhole.
AI agents already use websites. ChatGPT, Claude, Gemini and Copilot can open a page, read it and act on it. But they do it the way a person would, minus the eyes: they take a screenshot or read the page’s code, decide where to click, click, wait, and look again. Every step sends the whole picture back through the model.
That loop is slow, expensive and fragile. To a model, a modern page is a pile of nested div elements whose meaning lives in pixels and stylesheets. Web developer Maximiliano Firtman summed up the fragility in one question on the AI Native Dev podcast: what if the JavaScript moves the button while the model is still thinking?
The site has no say either. It can’t tell the agent which path is the right one, which step is risky, or what a field really means. At dotAI 2026, Microsoft Edge’s Patrick Brosset put it simply: today’s agents work despite websites, not with them.
WebMCP turns that around. Instead of the agent reverse-engineering the interface, the site states what can be done (search flights, add to cart, fill this template) as functions with typed parameters. The agent calls them, and the page runs them with its own code.
“What happens if in those five to ten seconds the JavaScript moves that button?”
Without WebMCP
- Screenshot the page or read its code
- Guess the next click
- Click, wait for the page
- Screenshot again
- Repeat for every step
Every step goes back through the model.
With WebMCP
- Read the page’s tools
- Call one with typed arguments
- Get data back
The page does the work, in the user’s session.
How it works
Three actors, one tool call.
WebMCP involves three parties. The page declares tools. The browser keeps the list and carries calls back and forth. The agent, built into the browser, running as an extension or inside a desktop app’s browser, reads the list and decides what to call. There is no server in the middle: as an engineer put it at BlinkOn 21, the browser plays the part an MCP server would play, but no actual server is involved.
The page
Registers tools from its own JavaScript and runs them when called: the same functions as its buttons, the same cookies, the same permissions.
The browser
Holds each tab’s tools, hands them to the agent, routes calls into the page and keeps the human in view.
The agent
Reads names, descriptions and schemas, picks a tool, sends arguments, and reads the string that comes back.
It runs as the user
Tools execute inside the open tab, with the session the person already has. No API key, no OAuth flow, no new credential: when the tab closes, the access ends with it.
It lives and dies with the page
Tools exist only while the page that registered them is open. Navigate away and they’re gone; the next page registers its own. Chrome’s Kasper Kulikowski calls it tab-bound and ephemeral.
It keeps the human in the loop
The design target is co-browsing: the person watches the page change as the agent works and keeps the consequential steps. A form tool fills the fields; by default, the human presses submit.
It shows only what the user may do
Tools are registered by the page’s code, for the person in front of it. A logged-out visitor’s agent never sees “checkout”, because the page never registers it.
It degrades gracefully
No tool for the job? The agent falls back to the interface, as before. WebMCP is a faster, safer path for agents, not a gate.
The life of a tool
- Register
The page calls
document.modelContext.registerTool()with a name, a description, a JSON Schema, anexecutefunction and anAbortSignal. - Discover
The agent lists the tab’s tools; a
toolchangeevent fires whenever that list changes. - Call
The agent sends arguments. The browser fires
toolactivatedand routes the call into the page. - Run
execute(input, { signal })runs in the page with the user’s session, updates the interface and returns any JSON-serialisable value. - Release
Aborting the signal, or leaving the page, removes the tool.
“The agent will always prefer to use the agent specific tools when available, but it can fall back to using web UI like a user.”
The API
Two ways to write a tool.
There are two flavours. The imperative API is JavaScript and can do anything. The declarative API is a handful of HTML attributes on a form you already have. To the agent there is no difference: in the words of specification editor Dominic Farolino at BlinkOn, there are really just tools.
Imperative: a JavaScript function
Register the tool on document.modelContext. Its execute function should call the same code your buttons call, update what the person sees, and return data (any JSON-serialisable value). The browser doesn’t validate input for you yet, so execute checks its own.
- Annotations are hints, not enforcement. There are four:
readOnlyHint(the tool changes nothing),untrustedContentHint(its result carries content the site didn’t write, such as reviews),consequentialHint(the action deserves confirmation) anddebugging. WebMCP has nodestructiveHint, whatever MCP tutorials say, and nothing forces a confirmation prompt. - Frames need three opt-ins:
allow="tools"on the iframe,exposedToon the tool, andfromOriginswhen the caller lists tools. Atoolspermissions policy switches WebMCP off for a document and its frames.
if ("modelContext" in document) {
const registration = new AbortController();
await document.modelContext.registerTool(
{
name: "search_flights",
description:
"Search flights between two airports on one date. " +
"Returns up to 10 offers with price, duration and stops.",
inputSchema: {
type: "object",
properties: {
from: { type: "string", description: "Departure airport, IATA code" },
to: { type: "string", description: "Arrival airport, IATA code" },
date: { type: "string", format: "date" },
},
required: ["from", "to", "date"],
},
annotations: { readOnlyHint: true },
async execute({ from, to, date }, { signal }) {
// The same function the search button calls.
const offers = await searchFlights({ from, to, date, signal });
// The person sees what the agent asked for.
showResults(offers);
return offers.slice(0, 10);
},
},
{ signal: registration.signal },
);
}
// Later: registration.abort() removes the tool.Declarative: attributes on a form
Add toolname and tooldescription to a <form> and the browser builds the schema from its fields, select options included. Without toolautosubmit, the agent fills and focuses the form and the person submits it. The page can tell an agent is at work through SubmitEvent.agentInvoked, answer with respondWith(), and style the moment with :tool-form-active. The specification’s section on forms is still marked “TODO”: Chrome’s behaviour is the de facto definition.
<form
toolname="book_table"
tooldescription="Book a table for a date, a time and a party size."
action="/reservations"
method="post"
>
<input name="date" type="date" required>
<select name="time" required>
<option>19:00</option>
<option>20:30</option>
</select>
<input name="guests" type="number" min="1" max="12" required
toolparamdescription="Number of people, 1 to 12">
<button>Book</button>
</form>The API moved in 2026. Most tutorials didn’t.
Code written before June 2026 often fails today. What changed, according to the specification’s history and Chrome’s documentation:
| When | What changed | What to do |
|---|---|---|
| Mar 5 | provideContext() and clearContext() removed | Register tools one by one. Part of the reason: a third-party script could silently replace the page’s tools. |
| Mar 27 | unregisterTool() removed | Pass an AbortSignal at registration and abort it. |
| May 27 | navigator.modelContext became document.modelContext | Tools belong to a page, not to the browser. Feature-detect both while older builds linger. |
| Jun 11 | execute(input, client) became execute(input, { signal }); requestUserInteraction() removed, “for now” | Confirmation is left to agents and browsers; build it into your flow. |
| Sep 3 | consequentialHint added | Mark payments, sends and deletions. |
| Sep 4 | Headless agents brought into scope | Early documentation said a human would always be watching. No longer a safe assumption. |
| Sep 30 | Origin isolation no longer required | Chrome’s documentation still says otherwise; it takes a few versions to reach stable. |
| Chrome 153 | executeTool() arguments passed as a JSON string | Objects are planned for Chrome 155; accept both in test harnesses. |
Compared
WebMCP is not MCP.
The name suggests a browser port of Anthropic’s Model Context Protocol. It isn’t one. MCP is a client–server protocol: JSON-RPC messages between an AI app and a server you host, now governed by the Agentic AI Foundation at the Linux Foundation. WebMCP has no protocol and no server. It is a JavaScript API inside the page, written at the W3C.
What they share is the shape of a tool (a name, a description, a JSON Schema), so the same definitions can serve both. Alex Nahas, whose project started the movement, wanted MCP’s JSON-RPC inside the browser and lost that argument. Even Microsoft’s editor, Brandon Walderman, said early on that his hang-up was the “P”: this is a DOM API, not a wire protocol. Mozilla’s standards position is blunter: “There is no MCP here.”
| WebMCP | MCP server | Screen-reading agent | llms.txt | |
|---|---|---|---|---|
| Where the code runs | In the open page | On your server | Nowhere: the agent clicks | Nowhere: a text file |
| Login | The user’s session | OAuth or API keys | The user’s session | None |
| Needs the page open | Yes | No | Yes | No |
| Who shows the result | The site’s interface | The agent’s interface | The site’s interface | The agent |
| Can act | Yes, through the site’s code | Yes | Yes, by clicking | No, read only |
| Best for | Live, logged-in, visual work with a person watching | Background automation and back-office tasks | Sites that offer nothing else | Helping agents read and cite |
Many teams will run both. Shopify ships Checkout MCP for agents on servers and Checkout WebMCP for agents in the buyer’s browser, over the same checkout object, and tells developers to use the server version whenever the agent can run on a server. MCP Apps go the other way round from WebMCP: they bring a site’s interface into the agent’s chat, while WebMCP brings the agent into the site.
What most articles get wrong
“It’s a W3C standard.”It is a Community Group draft. No Working Group has adopted it, and the architecture review is still open.
“It shipped in Chrome 146.”146 brought a flag for developers. Chrome 149 to 156 run an origin trial, an extension to 162 has been requested, and no intent to ship has been filed.
“Every agent can use it.”Supporting the API and calling tools are two things. One mainstream agent ships it: ChatGPT’s desktop browser. Gemini in Chrome is announced; Claude in Chrome and Copilot in Edge show no public support.
“Usenavigator.modelContextandunregisterTool().”Both are gone: it is
document.modelContext, and you unregister by aborting a signal.“Forms submit themselves.”Only with
toolautosubmit. Otherwise the agent fills the form and the person submits.“It will make you rank in AI search.”Tools can’t be crawled: they exist only while the page is open in a browser.
History
From an Amazon workaround to a W3C draft.
WebMCP didn’t start on a browser vendor’s roadmap. It started with a login problem.
Mar 2025
The name appears
Developer Jason McGhee publishes a project called WebMCP, the first use of the name, to let websites offer tools to local AI clients.
Jun–Jul 2025
An MCP server inside a web page
At Amazon, Alex Nahas wanted colleagues to use agents on internal tools. Remote MCP relied on OAuth, Amazon ran on SAML single sign-on, and the internal MCP server had grown to thousands of tools. His answer: run the server in the JavaScript of a page the user is already logged into. He calls it MCP-B (the B stands for browser, because “Browser MCP” was taken), and his Show HN lands on July 9.
Jul 2025
Two browser teams, the same idea
On July 9, Chrome files an intent to prototype a “Script Tools API”. On July 16, Microsoft Edge publishes its “Web Model Context” explainer, written by Andrew Nolan and Brandon Walderman.
Aug 2025
One proposal
The two proposals merge in the W3C Web Machine Learning Community Group between August 7 and 18, with Nahas’s work credited as implementation experience. On August 29, Patrick Brosset shows an Edge prototype driven from VS Code.
Sep 25, 2025
Formally on the W3C table
The group’s revised charter takes effect with WebMCP as a deliverable. Editors: Khushal Sagar and Dominic Farolino (Google), Brandon Walderman (Microsoft). In November, the group meets at TPAC in Kobe and Sagar presents WebMCP at Google’s Web AI Summit.
Feb 10, 2026
Chrome’s developer trial
Chrome 146 ships WebMCP behind a flag, with an inspector extension to call tools by hand. Chrome’s developer relations team admits it hasn’t yet tested with real agents.
Mar–Jun 2026
The API is rebuilt
provideContextandunregisterToolgo,modelContextmoves todocument, the consent hook is removed for now. On June 11, Apple’s WebKit team formally opposes the proposal.May–Jun 2026
From I/O to the origin trial
At Google I/O on May 19, Chrome announces an origin trial, a WebMCP panel in DevTools and an agentic browsing category in Lighthouse. The trial opens on June 9, from Chrome 149 to 156.
Aug 2026
Sites and agents arrive
Shopify storefronts register tools from August 5, the day Mozilla sets its position to neutral. On August 25, ChatGPT’s desktop browser starts calling them. Google’s WebMCP Challenge draws about 5,000 entries.
Sep 2026
Headless in scope, ship date open
consequentialHintlands and headless agents come into scope. Shopify’s checkout follows on September 28. On September 29, Chrome asks to extend its trial to version 162 and hopes to ship within that window. On October 1, the charter of a new Agentic Web Working Group enters review.
The debate
Who’s for it, who’s against it, and why.
WebMCP is a Community Group draft, not a W3C standard. A standard needs more than one engine, and today only Chromium implements it. Inside the W3C, the accessibility and privacy groups are critical too.
Implementing
Google Chrome
Two of the three editors. Developer trial from Chrome 146, origin trial from 149 to 156, extension to 162 requested, no intent to ship yet.
Implementing
Microsoft Edge
One editor and the first prototype. Edge runs the origin trial too.
Calling tools
OpenAI
ChatGPT’s desktop browser calls WebMCP tools since August 25, 2026: JavaScript tools on the top-level page only.
Neutral
Mozilla Firefox
A prototype behind a setting that is off by default. Interest in the JavaScript API, objections to a name that promises MCP.
Opposed
Apple Safari
Wants the gaps fixed in HTML and ARIA, and has said it would formally object if WebMCP moved to a Working Group as is.
Not as it stands
W3C accessibility group
Says it does not support the spec in its current form, and calls
toolautosubmita vector for deceptive patterns similar to clickjacking.
Safari’s case deserves a fair hearing
WebKit argues that the missing meaning belongs in HTML and ARIA, where people, assistive technologies and agents all benefit at once. A typed schema, it says, constrains the shape of an argument, not what it means, and letting sites tell agents apart invites the old mistake of treating some users differently.
The best answer so far: accessibility semantics say what a control is, not what it does. Two identical forms can buy a plant or file a tax return. Shopify’s Yoav Weiss, who deploys tools on a large number of storefronts, told the W3C’s architecture review he sees no feasible declarative alternative to imperative tools.
“A typed schema constrains an argument’s shape, not the meaning the agent must infer, so the brittleness just moves from the DOM into the tool descriptions.”
Four objections, and the best answers
| Objection | Best answer | What remains true |
|---|---|---|
| “Just publish an API.” | WebMCP acts in the session the person is looking at, with no token to create, and suits apps whose logic lives in the browser. | For background automation, an API or an MCP server is still the better tool. |
| “Sites won’t adopt it.” | Adoption appears where incentives line up: checkout, documentation, software tools. | Ad-funded sites have little reason to let an agent skip their pages. |
| “Tools will drift from the interface.” | Make tools thin wrappers around the functions the interface already calls. | Descriptions can still drift, and fail silently. |
| “It’s a Google land grab.” | Microsoft co-edits the specification and OpenAI ships support. | Without Safari, it is a Chromium feature for now. |
The hard problems
What can go wrong.
WebMCP makes an agent’s work explicit, which narrows what it needs to touch. It doesn’t make agents safe. The specification says so itself: there is no guarantee that a tool’s declared intent matches its actual behaviour.
- 01
Words become attack surface
Names, descriptions and results all land in the model’s context. A malicious page can hide instructions there, and an honest page can relay them by returning reviews or forum posts. Mark such results with
untrustedContentHintand say it in words too, as OpenAI’s documentation site does. - 02
The first script to register wins
Tool names are unique per page, so a compromised analytics or ad script that registers
checkoutfirst owns it. In a 2026 lab study (arXiv 2606.06387), that race hijacked GPT-5.4, Claude Opus 4.6 and Gemini 2.5 Flash in every trial. - 03
Capabilities laundered into English
Earlence Fernandes (UC San Diego) planted a dormant instruction in one site’s tool description; later, on another site, a trigger word made the agent call that site’s tool. Origin isolation is only as strong as the agent’s defence against prompt injection.
- 04
Your Approve button is not a safeguard
Tools act with the user’s cookies, and an agent that can call tools can usually click too. On September 2, 2026, a developer reported ChatGPT’s browser calling a proposal-only tool, then pressing the page’s own Approve button; the page logged “approved by you” (issue #288). Shopify’s rule: the agent shows the order and total, asks the buyer, and asks again if the total changes.
- 05
Tools vanish mid-flight
Results die with the document. If a call makes the page navigate, the answer may never arrive (Shopify notes that
executeTool()then returns null), and agents sometimes fail to find re-registered tools after the trip. - 06
Nobody can see agent traffic yet
Sites can count calls, not whether those calls served what the user wanted. Shopify’s Yoav Weiss opened an issue for real-user measurement; an early commerce deployment reports it cannot yet observe real agent traffic.
Where the defences actually live
In the agent and the browser, mostly. Chrome’s Sarah Drasner describes layers: prompt-injection classifiers and a second model that critiques the agent’s actions, limits on which sites a task may touch, and an agent identity with its own spending cap. Google’s Johann Hofmann wrote that agents have a responsibility to secure themselves, and that the API cannot carry them all the way.
Even the builders disagree on the basics. Alex Nahas argues an agent needs no identity of its own, only a subset of the user’s. Drasner wants a separate one that can, say, spend only $20 a week.
“We are absolutely due for a catastrophic prompt injection attack.”
Case study
25 tools in production, on this site.
Contenttosocial turns content into branded social posts for Instagram, LinkedIn, Facebook, Pinterest and X. Paying users drive it from Claude or ChatGPT through our MCP server. In September 2026 we added WebMCP to the free, public side of the site, with no account and no API key, so any visitor’s agent can use it while the visitor watches.
Six kinds of pages, one pattern
Landing page
Sep 14Answer questions on the product and its prices, show a section, open signup prefilled. The agent never creates the account.
get_product_overviewget_pricingshow_landing_sectionopen_signup
Template editor
Sep 22Create or fill a design, render it, download PNG, JPEG, SVG, PDF or ZIP, or share a link. All of it in the visitor’s browser.
list_templatesload_templateget_templateget_template_schemacreate_templateupdate_templateset_template_valuesrender_templateexport_templateexport_rendercreate_share_link
SEO agency ranking
Sep 25Find and compare SEO agencies by city, specialty, industry and size, from the published data only.
find_seo_agenciesget_seo_agencycompare_seo_agenciesget_city_seo_priceslist_seo_agency_awards
Template pages
Sep 29Browse the catalogue by network and read the fields of any template.
list_templatesget_templateshow_templates
A template’s own page
Sep 30Fill one template while the visitor watches the live preview and fixes fields by hand.
get_templateset_template_valuesrender_templateexport_rendercreate_share_link
This guide
Oct 1Let an agent read this guide chapter by chapter, from the page itself.
list_guide_chaptersread_guide_chaptershow_guide_chapterlist_guide_sources
A product agents can operate without signing up
A visitor asks their agent for an Instagram post. The agent finds a template, fills it, renders it and hands over the file. The free side of the product becomes something agents can use, not just read about.
No rendering bill
Edits, rendering and exports run in the visitor’s browser. Only static files and fonts reach our servers; there is no paid rendering service to meter.
One code path
Every tool calls the same functions as the buttons. There is no second product to maintain for agents.
The hard part: a person and an agent on one design
The specification says nothing about two writers. In our template editor, the visitor and their agent edit the same file at the same time. We borrowed optimistic concurrency from databases: the session keeps a version number that every edit increments, and every agent write must quote the version it read (expected_version).
A stale write fails with VERSION_CONFLICT and the agent reads again; overlapping agent calls get BUSY. Any edit invalidates the last render, so a download never shows a design the person has since changed.
→ set_template_values
{ "expected_version": 7, "values": { "title": "Spring sale" } }
← {
"ok": false,
"error": {
"code": "VERSION_CONFLICT",
"message": "The design changed. Call get_template, then retry with its version."
}
}Ten things we learned
- 01
One schema, two jobs
The same zod schemas validate every call and generate the static manifests of the template editor and the ranking (/templates/webmcp.json, /agencies/webmcp.json). Those manifests can’t drift from the code, and agents that can’t run WebMCP still learn what’s possible: the discovery step the specification leaves out.
- 02
Stop one step before the decision
open_signupfills in the form and opens it, then answers “The account has not been created.” Theshow_*tools move the visitor’s view rather than acting for them. - 03
Errors are part of the interface
Every failure returns
{ ok: false, error: { code, message, issues } }with a stable code (INVALID_INPUT,VERSION_CONFLICT,BUSY,CANCELLED,IMAGE_UNREADABLE) and the exact fields at fault, so the model can correct itself. - 04
Zero bytes for everyone else
Tool code loads only when
document.modelContextexists. Other browsers download nothing, so the pages stay as fast as they were. - 05
Every tool has an off switch
Each registration takes an
AbortSignal. Leaving the page aborts it, and requests still in flight are cancelled with it. - 06
Expect the browser to move
Early Chrome builds called tools without an execution context, so we fall back to the page’s own signal. Chrome 153 passes
executeToolarguments as JSON text, with objects planned for 155. We code to the specification and test against the browser. - 07
Test the real API, no model needed
Our end-to-end tests launch Chrome with
--enable-blink-features=WebMCPand call the real tools: discovery, invalid input, cancellation, and the actual bytes and dimensions of every PNG, PDF and ZIP they export. - 08
Content is data
Template text, agency data and this guide’s chapters come back as data, never as instructions. Images pass the same bounded decoder as uploads, and remote images are refused cleanly when their site forbids reading them.
- 09
Keep a way in without WebMCP
An agent that only reads the web can still build a link to a filled template (
#v=1&template=…&values=…). The design travels in the URL fragment, which never reaches our server, up to 64 KiB. - 10
Respect the budgets
Chrome recommends at most 500 characters per description and 30 per name. Our longest description is 389 characters: what the tool does first, its limits second.
The whole integration pattern
Every page uses the same dozen lines: detect, load the tools only if needed, tie them to the page’s life.
What we don’t know yet
How many agents call our tools, and whether it turns into sign-ups. Like every early adopter, we can’t tell agent traffic apart yet. The one mainstream agent that ships WebMCP today is ChatGPT’s desktop browser; regular ChatGPT and Claude chats don’t run it, and paying users reach the same features there through our MCP server.
useEffect(() => {
const context = document.modelContext;
if (!window.isSecureContext || !context?.registerTool) return;
const controller = new AbortController();
// Tool code is downloaded only by browsers that can use it.
void import("@/lib/agencies/webmcp").then(({ registerAgencyTools }) =>
registerAgencyTools(context, locale, controller.signal),
);
// Leaving the page unregisters every tool.
return () => controller.abort();
}, [locale]);Try it with your agent
Build yours
Twelve rules that hold up.
Drawn from Chrome’s guidance, the teams shipping WebMCP and our own mistakes.
Think in tasks, not elements
One tool per job a user comes to do, not one per button. Name what it does:
create_eventexecutes,start_event_creationopens the form.Keep the list short
Dozens of tools degrade agents and can make browsers drop some. Register on each page only what that page can do.
Respect the budgets
Chrome’s limits: 30 characters per name, 500 per description, 150 per parameter description, about 1,500 per result. Put the critical caveat first: overflows are cut silently.
Accept raw input
Take “11 to 15” the way the user said it; don’t ask the model for minutes since midnight. Use readable enum values: “express”, not 1.
Validate in code, loosely in schema
Schema constraints aren’t guaranteed to be enforced. Check inside
executeand return errors that say how to fix the call.Show what happened
Update the visible interface on every call: the person shares the tab with the agent.
Label what you don’t control
untrustedContentHinton results with user-generated content, and the same warning in the description.Leave the decision to the human
consequentialHintfor payments, sends and deletions, a confirmation step in the flow, and prices and stock checked again at execution.Survive navigation
Do the work in the page and return data, make navigation its own tool, and register the same names on every page.
Detect, load late, clean up
Check
document.modelContext(older Chrome:navigator.modelContext), load tool code only then, and pass anAbortSignal.Mind your third-party scripts
Register critical tools early, and audit the tags that share your page.
Test like an agent
Chrome’s Model Context Tool Inspector, the DevTools WebMCP panel, Lighthouse’s agentic browsing audit, and a browser test that calls the real tools.
FAQ
Frequently asked questions
What is WebMCP, in one sentence?
A browser API that lets a web page register tools (named functions with a description and an input schema) that AI agents in the browser can call instead of clicking through the interface.
Is WebMCP the same as MCP?
No. It borrows MCP’s idea of a tool, but there is no JSON-RPC, no transport and no server: tools run in the page’s JavaScript, in the user’s session. MCP is governed by the Linux Foundation’s Agentic AI Foundation; WebMCP is being written at the W3C.
Which browsers support WebMCP?
Only Chromium-based ones so far. Chrome has had a developer trial since version 146 and an origin trial since 149; Edge has an origin trial from 150. Mozilla is neutral and Apple’s WebKit team opposes the proposal, so don’t expect it in Firefox or Safari soon.
How do I enable WebMCP in Chrome?
To test, open chrome://flags, enable “WebMCP for testing” (Chrome 146 or later) and restart; Chrome’s Model Context Tool Inspector extension then lists and calls a page’s tools. For your visitors, register your site for Chrome’s origin trial (Chrome 149 to 156) and send its token in an Origin-Trial header.
Who developed WebMCP?
Engineers from Google and Microsoft, in the W3C Web Machine Learning Community Group. The editors are Khushal Sagar and Dominic Farolino (Google) and Brandon Walderman (Microsoft). It merges Microsoft Edge’s “Web Model Context” and Chrome’s “Script Tools”, with Alex Nahas’s MCP-B and Jason McGhee’s project as prior art.
Which AI agents can call WebMCP tools today?
One mainstream agent ships it: ChatGPT’s desktop browser (in ChatGPT Work and Codex), since August 25, 2026, for JavaScript tools on the top-level page. Gemini in Chrome was announced at I/O but hasn’t launched; Claude in Chrome and Copilot in Edge show no public support. Extensions can call tools through content scripts, and developers can call them by hand with Chrome’s inspector. Regular chat apps don’t run WebMCP.
Do I need a server, an API key or OAuth?
No. Tools run in the page with the session the person already has. That is the point, and also why WebMCP doesn’t suit agents that run without a browser: give those an API or an MCP server.
Is WebMCP secure?
It narrows what an agent has to touch, but prompt injection, deceptive tools and hijacking by third-party scripts are real risks, largely left to agents and browsers. Treat results as data, keep consequential steps for the person, and audit the scripts on your pages.
Does WebMCP help SEO?
No ranking effect has been announced. Agents discover tools only once they have loaded the page, so being found is still a search problem, where links still count (see our guide to nofollow and dofollow links). What WebMCP changes is what happens after the click: whether an agent can finish the job on your site.
Should I use the imperative or the declarative API?
Start with the imperative API: it is what agents use (about 172 million registrations against 20,000 for forms in Chrome’s trial) and the only one ChatGPT supports. Declarative attributes are a quick win for simple forms where the person should press submit.
Can I try WebMCP on this page?
Yes. In a browser with WebMCP, this guide registers four tools: list, read and show a chapter, and list the sources. The line under the title tells you whether your browser exposes them.
Sources
Where this comes from
Quotes are verbatim from the recordings and documents below, trimmed for length. Figures name who measured them; vendor figures are labelled as such.
- WebMCP, Community Group draftW3C Web Machine Learning CG · Sep 30, 2026
- Specification repository, issues and historyGitHub · 2025–2026
- WebMCP documentationChrome for Developers · 2026
- Secure WebMCP toolsChrome for Developers · Sep 1, 2026
- Standards position on WebMCP (oppose)WebKit · Jun 2026
- Standards position on WebMCP (neutral)Mozilla · 2026
- Design review of WebMCPW3C TAG · 2026
- Accessibility review (APA WG)W3C, issue #65 · Aug 27, 2026
- Privacy reviewW3C Privacy WG, issue #313 · Sep 21, 2026
- An agent can complete the page’s own approval stepWebMCP issue #288 · Sep 3, 2026
- Web Model Context explainerMicrosoft Edge · Jul 16, 2025
- Site tools (WebMCP) in ChatGPTOpenAI · Aug 2026
- Checkout WebMCPShopify · Sep 2026
- document.modelContext usagewebstatus.dev · Oct 1, 2026
- Syntax #1037: WebMCP is here (and you should care)Syntax, with Sarah Drasner and Dominic Farolino · Sep 9, 2026
- Syntax #979: WebMCP, a new standard to expose your apps to AISyntax · Feb 16, 2026
- Why every developer needs to know about WebMCP nowAI Native Dev #99, with Maximiliano Firtman · Mar 31, 2026
- From Hacker News to W3Calphalist.CTO #138, with Alex Nahas · May 21, 2026
- WebMCP: agents on the web and in the browserArcade MCP MVP, with Alex Nahas · Feb 11, 2026
- The why and how of WebMCPCoffee with Developers, with Alex Nahas · Feb 27, 2026
- ShopTalk Show #729 (WebKit’s position, read on air)ShopTalk Show · Aug 24, 2026
- Don’t let AI agents push your buttons: use WebMCP insteadKhushal Sagar, Web AI Summit · Nov 2025
- WebMCP and the agentic webBlinkOn 21, with Dominic Farolino · Apr 2026
- WebMCP explainedAndrew Nolan, W3C Advisory Committee · 2026
- Build your website for the agentic eraKasper Kulikowski, Google I/O 2026 · May 2026
- WebMCP: stop scraping the web, start calling itPatrick Brosset, dotAI 2026 · Sep 2026
- Build agent-ready sites with WebMCPOpenAI · Aug 2026
- WindTunnel benchmarknekuda (vendor) · Sep 18, 2026
- Beyond Browsing: API-based web agentsCarnegie Mellon, ACL Findings 2025 · 2025
- MCPWorld: tools against screen agentsarXiv 2506.07672 · Jun 2025
- Tool injection attacks on WebMCP agentsarXiv 2606.06387 · Jun 2026
- WebMCP and the same-origin policyEarlence Fernandes, UC San Diego · Apr 30, 2026
- webMCP: Web Machine Context & Procedure (a different proposal)arXiv 2508.09171 · Aug 2025
More guides
Keep reading
- SEO
Nofollow vs dofollow links: every type of link, explained
Nofollow, dofollow, sponsored, UGC: what each link type and rel attribute really does in 2026, what Google says, what experiments show, the penalties, and how one site applies it.
- Year nofollow was born
- 2005
- Pages with a nofollow link
- 32.3%
- Pages using sponsored or ugc
- 0.5%
Updated October 1, 2026 · 22 min read
SEO agency rankings
Where does your agency rank?
Google positions, citations in Google’s AI answers, the website’s technical setup: every criterion is public and verifiable.
See the ranking- SEO agencies listed
- 139
- published rankings
- 4
- criteria measured for each
- 19