Skip to content

Build1 publisher2 min readPublished

WebMCP, still experimental, suits session-scoped tools that keep the user's confirmation step

Shopify added WebMCP checkout tools on September 28 that update payment and place an order once the buyer confirms. The spec is still a draft with no Firefox or Safari implementation, so tools belong on the open session behind a review step.

The Engineer · Build desk

What happened

  • According to the WebMCP specification, each tool runs inside the page with the user's authenticated session and current application state.
  • The project's implementation-status page lists origin trials in Chrome 149 and Edge 150, experimental Leo support in Brave, and ChatGPT Desktop support.
  • The same day as Shopify's release, Cloudflare's Browser Run extended WebMCP support to Kitesurf and moved Chrome Lab sessions from an earlier testing API to document.modelContext.
  • The declarative toolautosubmit attribute lets an agent submit a form directly, and Chrome's security guidance says to leave it off for payments, deletions, publishing and permission changes.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • cost Teams pay for two paths: the existing interface or API has to keep working beside every WebMCP tool for as long as Firefox and Safari are missing from the status page.
  • exposure A registered tool acts with the signed-in user's authority, so an auto-submitted payment or deletion form would let an agent commit a change the user never reviewed.
  • precedent Shopify's checkout split gives other sites a working template for irreversible actions: the agent fills the fields and the buyer commits the order.
  • constraint The entry point has already moved once during testing, so tool-registration code is safer behind one module that can absorb the next rename.

An agent call runs in five steps, according to the dev.to guide [9]:

1. The user opens the web application and signs in. 2. The page declares or registers tools that fit its current state. 3. A browser agent discovers the available tools. 4. The agent picks a tool and passes arguments that match its schema. 5. The page executes the action.

Step five needs design attention. A tool that submits a form and redirects can leave the agent with nothing to check. An imperative callback's serializable return value goes back to the caller, but an invocation that navigates the page can resolve to null [10].

The boundary is drawn well. The site keeps its state and business logic, and the browser exposes only the tools the page registers [17]. Each tool declares its action, its accepted inputs, its execution path and what it returns. Imperative tools can also attach optional risk or debugging hints [8]. An agent can reach only what the page registers, and it acts with the authority of whoever is signed in [1][17].

The guide's declarative example is a safe first tool. It is a GET form with action /catalog/search, registered as search_catalog, with a required query field, a maximum-price field with a minimum of 0, and auto-submit enabled [12]. Auto-submit is fine there because a search changes nothing [11].

Shopify reached checkout last. Its storefront and cart tools were already available before the September 28 release [3]. The guide recommends the same order: one read-only or reversible workflow first, with payment, deletion, publishing and permission changes kept out of the first test [16]. The checkout tools can change buyer details, fulfillment, discount codes and payment, and they hold the order itself until the buyer confirms [2].

Chrome's WebMCP guide calls the structured path more reliable and more token-efficient than element-by-element navigation [13]. The dev.to piece cites no figure for either claim. For the claim to hold on a given site, the agent's tasks have to fall inside the registered schemas. A task outside them puts the agent back to inferring actions from the DOM, the accessibility tree, screenshots, labels and layout [14].

My context is a single web app with a working UI and no separate agent API. There I'd register tools only for the object open in the current tab and keep the existing interface as the fallback [16]. Unattended jobs, cross-service orchestration and anything that must run after the tab closes go on an MCP server [15].

What to watch

  • A Firefox or Safari implementation appearing on the WebMCP implementation-status page.
  • The specification advancing past Draft Community Group Report, or another rename of the document.modelContext entry point.
  • Whether Shopify keeps buyer confirmation as the gate on order placement as agent clients mature.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories