Contenttosocial

SEO - GEO Expert

Also sell your SEO/GEO content on social media.

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.

One tool call, start to finish
PageBrowserAgent
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?”

Maximiliano FirtmanWeb developer and authorAI Native Dev, episode 99

Without WebMCP

  1. Screenshot the page or read its code
  2. Guess the next click
  3. Click, wait for the page
  4. Screenshot again
  5. Repeat for every step

Every step goes back through the model.

With WebMCP

  1. Read the page’s tools
  2. Call one with typed arguments
  3. 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.

  1. 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.

  2. The browser

    Holds each tab’s tools, hands them to the agent, routes calls into the page and keeps the human in view.

  3. 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

  1. Register

    The page calls document.modelContext.registerTool() with a name, a description, a JSON Schema, an execute function and an AbortSignal.

  2. Discover

    The agent lists the tab’s tools; a toolchange event fires whenever that list changes.

  3. Call

    The agent sends arguments. The browser fires toolactivated and routes the call into the page.

  4. Run

    execute(input, { signal }) runs in the page with the user’s session, updates the interface and returns any JSON-serialisable value.

  5. 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.”

Khushal SagarChrome engineer, specification editorWeb AI Summit 2025

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) and debugging. WebMCP has no destructiveHint, whatever MCP tutorials say, and nothing forces a confirmation prompt.
  • Frames need three opt-ins: allow="tools" on the iframe, exposedTo on the tool, and fromOrigins when the caller lists tools. A tools permissions policy switches WebMCP off for a document and its frames.
JavaScriptsearch.js
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.

HTMLbooking.html
<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:

WhenWhat changedWhat to do
Mar 5provideContext() and clearContext() removedRegister tools one by one. Part of the reason: a third-party script could silently replace the page’s tools.
Mar 27unregisterTool() removedPass an AbortSignal at registration and abort it.
May 27navigator.modelContext became document.modelContextTools belong to a page, not to the browser. Feature-detect both while older builds linger.
Jun 11execute(input, client) became execute(input, { signal }); requestUserInteraction() removed, “for now”Confirmation is left to agents and browsers; build it into your flow.
Sep 3consequentialHint addedMark payments, sends and deletions.
Sep 4Headless agents brought into scopeEarly documentation said a human would always be watching. No longer a safe assumption.
Sep 30Origin isolation no longer requiredChrome’s documentation still says otherwise; it takes a few versions to reach stable.
Chrome 153executeTool() arguments passed as a JSON stringObjects 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.”

Four ways for an agent to use a website
WebMCPMCP serverScreen-reading agentllms.txt
Where the code runsIn the open pageOn your serverNowhere: the agent clicksNowhere: a text file
LoginThe user’s sessionOAuth or API keysThe user’s sessionNone
Needs the page openYesNoYesNo
Who shows the resultThe site’s interfaceThe agent’s interfaceThe site’s interfaceThe agent
Can actYes, through the site’s codeYesYes, by clickingNo, read only
Best forLive, logged-in, visual work with a person watchingBackground automation and back-office tasksSites that offer nothing elseHelping 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.

  • “Use navigator.modelContext and unregisterTool().”

    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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. Mar–Jun 2026

    The API is rebuilt

    provideContext and unregisterTool go, modelContext moves to document, the consent hook is removed for now. On June 11, Apple’s WebKit team formally opposes the proposal.

  8. 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.

  9. 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.

  10. Sep 2026

    Headless in scope, ship date open

    consequentialHint lands 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 toolautosubmit a 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.”

WebKitStandards position, June 2026WebKit standards positions #670

Four objections, and the best answers

ObjectionBest answerWhat 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.

  1. 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 untrustedContentHint and say it in words too, as OpenAI’s documentation site does.

  2. 02

    The first script to register wins

    Tool names are unique per page, so a compromised analytics or ad script that registers checkout first 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.”

Alex NahasCreator of MCP-BCoffee with Developers, February 2026

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

  • Answer questions on the product and its prices, show a section, open signup prefilled. The agent never creates the account.

    • get_product_overview
    • get_pricing
    • show_landing_section
    • open_signup
  • Create 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_templates
    • load_template
    • get_template
    • get_template_schema
    • create_template
    • update_template
    • set_template_values
    • render_template
    • export_template
    • export_render
    • create_share_link
  • Find and compare SEO agencies by city, specialty, industry and size, from the published data only.

    • find_seo_agencies
    • get_seo_agency
    • compare_seo_agencies
    • get_city_seo_prices
    • list_seo_agency_awards
  • Browse the catalogue by network and read the fields of any template.

    • list_templates
    • get_template
    • show_templates
  • Fill one template while the visitor watches the live preview and fixes fields by hand.

    • get_template
    • set_template_values
    • render_template
    • export_render
    • create_share_link
  • Let an agent read this guide chapter by chapter, from the page itself.

    • list_guide_chapters
    • read_guide_chapter
    • show_guide_chapter
    • list_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.

WebMCPset_template_values · stale write
→ 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

  1. 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.

  2. 02

    Stop one step before the decision

    open_signup fills in the form and opens it, then answers “The account has not been created.” The show_* tools move the visitor’s view rather than acting for them.

  3. 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.

  4. 04

    Zero bytes for everyone else

    Tool code loads only when document.modelContext exists. Other browsers download nothing, so the pages stay as fast as they were.

  5. 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.

  6. 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 executeTool arguments as JSON text, with objects planned for 155. We code to the specification and test against the browser.

  7. 07

    Test the real API, no model needed

    Our end-to-end tests launch Chrome with --enable-blink-features=WebMCP and call the real tools: discovery, invalid input, cancellation, and the actual bytes and dimensions of every PNG, PDF and ZIP they export.

  8. 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.

  9. 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. 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.

Reactagencies-webmcp.tsx (simplified)
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]);

Build yours

Twelve rules that hold up.

Drawn from Chrome’s guidance, the teams shipping WebMCP and our own mistakes.

  1. Think in tasks, not elements

    One tool per job a user comes to do, not one per button. Name what it does: create_event executes, start_event_creation opens the form.

  2. 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.

  3. 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.

  4. 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.

  5. Validate in code, loosely in schema

    Schema constraints aren’t guaranteed to be enforced. Check inside execute and return errors that say how to fix the call.

  6. Show what happened

    Update the visible interface on every call: the person shares the tab with the agent.

  7. Label what you don’t control

    untrustedContentHint on results with user-generated content, and the same warning in the description.

  8. Leave the decision to the human

    consequentialHint for payments, sends and deletions, a confirmation step in the flow, and prices and stock checked again at execution.

  9. Survive navigation

    Do the work in the page and return data, make navigation its own tool, and register the same names on every page.

  10. Detect, load late, clean up

    Check document.modelContext (older Chrome: navigator.modelContext), load tool code only then, and pass an AbortSignal.

  11. Mind your third-party scripts

    Register critical tools early, and audit the tags that share your page.

  12. 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.

  1. WebMCP, Community Group draftW3C Web Machine Learning CG · Sep 30, 2026
  2. Specification repository, issues and historyGitHub · 2025–2026
  3. WebMCP documentationChrome for Developers · 2026
  4. Secure WebMCP toolsChrome for Developers · Sep 1, 2026
  5. Standards position on WebMCP (oppose)WebKit · Jun 2026
  6. Standards position on WebMCP (neutral)Mozilla · 2026
  7. Design review of WebMCPW3C TAG · 2026
  8. Accessibility review (APA WG)W3C, issue #65 · Aug 27, 2026
  9. Privacy reviewW3C Privacy WG, issue #313 · Sep 21, 2026
  10. An agent can complete the page’s own approval stepWebMCP issue #288 · Sep 3, 2026
  11. Web Model Context explainerMicrosoft Edge · Jul 16, 2025
  12. Site tools (WebMCP) in ChatGPTOpenAI · Aug 2026
  13. Checkout WebMCPShopify · Sep 2026
  14. document.modelContext usagewebstatus.dev · Oct 1, 2026
  15. Syntax #1037: WebMCP is here (and you should care)Syntax, with Sarah Drasner and Dominic Farolino · Sep 9, 2026
  16. Syntax #979: WebMCP, a new standard to expose your apps to AISyntax · Feb 16, 2026
  17. Why every developer needs to know about WebMCP nowAI Native Dev #99, with Maximiliano Firtman · Mar 31, 2026
  18. From Hacker News to W3Calphalist.CTO #138, with Alex Nahas · May 21, 2026
  19. WebMCP: agents on the web and in the browserArcade MCP MVP, with Alex Nahas · Feb 11, 2026
  20. The why and how of WebMCPCoffee with Developers, with Alex Nahas · Feb 27, 2026
  21. ShopTalk Show #729 (WebKit’s position, read on air)ShopTalk Show · Aug 24, 2026
  22. Don’t let AI agents push your buttons: use WebMCP insteadKhushal Sagar, Web AI Summit · Nov 2025
  23. WebMCP and the agentic webBlinkOn 21, with Dominic Farolino · Apr 2026
  24. WebMCP explainedAndrew Nolan, W3C Advisory Committee · 2026
  25. Build your website for the agentic eraKasper Kulikowski, Google I/O 2026 · May 2026
  26. WebMCP: stop scraping the web, start calling itPatrick Brosset, dotAI 2026 · Sep 2026
  27. Build agent-ready sites with WebMCPOpenAI · Aug 2026
  28. WindTunnel benchmarknekuda (vendor) · Sep 18, 2026
  29. Beyond Browsing: API-based web agentsCarnegie Mellon, ACL Findings 2025 · 2025
  30. MCPWorld: tools against screen agentsarXiv 2506.07672 · Jun 2025
  31. Tool injection attacks on WebMCP agentsarXiv 2606.06387 · Jun 2026
  32. WebMCP and the same-origin policyEarlence Fernandes, UC San Diego · Apr 30, 2026
  33. webMCP: Web Machine Context & Procedure (a different proposal)arXiv 2508.09171 · Aug 2025

More guides

  1. 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

Finish your content. Schedule the rest.