WebMCP — tools a web page offers to a browser's AI agent
TL;DR
WebMCP lets a web page hand an AI agent in the browser a list of tools: a name, a description and a JSON input schema for each action the page can do (search, book, add to cart). A page registers a tool in JavaScript with document.modelContext.registerTool(), or marks a form with toolname and tooldescription. It is a W3C Web Machine Learning Community Group draft (Draft Community Group Report, 20 October 2026), not a W3C Standard; Chrome 149 and Edge 150 run it as an origin trial.
Explain Simply
Today a browser agent uses your site like a tourist with a phrase book: it reads the screen, guesses which box is the search field and clicks. WebMCP is a menu handed over the counter — "here is book_table, it needs a date, a time and a party size". The agent orders from the menu instead of guessing at the layout.
Two ways to register a tool (the agent finds them by loading the page — there is no discovery file):
Imperative (in the spec):
document.modelContext.registerTool({
name: "search_products",
description: "Search the catalogue by keyword",
inputSchema: { type: "object", properties: { q: { type: "string" } } },
execute: async ({ q }) => runSearch(q),
}, { signal });
The name is 1–128 letters, digits, _ - or .; abort the signal to unregister. Annotations readOnlyHint, untrustedContentHint and consequentialHint tell the agent what a call does.
Declarative (explainer, implemented in Chrome, not yet in the spec):
<form toolname="book_table" tooldescription="Book a table at the restaurant">
<input name="date" type="date" toolparamdescription="Day of the booking">
<button>Book</button>
</form>
The browser builds the input schema from the named fields. Without toolautosubmit the agent fills the form and the person presses the button.
Not WebMCP: /.well-known/web-mcp.json and <meta name="web-mcp">. No WebMCP document defines either. A remote MCP server is a different thing — it is found through an MCP Server Card.
⚡Why It Matters
An agent that has to read pixels and guess at buttons is slow and breaks when the layout changes. A tool with a name and a schema is a contract: the agent calls book_table(date, time, people) and the page runs its own code, in the person's session, with the person watching. Sites that offer tools are the ones a browser agent can finish a task on.
🔍How CiteStat Checks
CiteStat reads the scanned page's HTML for forms with toolname and tooldescription, and its inline scripts plus the first 5 same-origin scripts for modelContext.registerTool(. A valid tool → pass. A toolname without a description or with a bad name → medium (a browser will not register it). Only the February 2026 preview API (navigator.modelContext, provideContext) → low. Forms a person fills in, but no tool → low. No form and no tool → Not applicable. A tool registered by a script we did not read is not seen — the finding says how many scripts were read.
CiteStat Score Impact
A core check on the Agent Readiness card when the page has a form or a tool; a page with neither is left out of the score (score = core checks passed / core checks that apply × 10). It does not change the headline SEO score.
Fix Difficulty
Editor: Not relevant | Developer: Easy (declarative) to Medium (imperative) | AI Agent: Easy