WebMCP is a proposed browser API that lets a web page give an AI agent a list of tools it can call, so the agent runs search_my_listings instead of squinting at buttons and screenshots. It is an open spec from the W3C Web Machine Learning community group, with Google and Microsoft authors, and Chrome already has it behind two flags. It is not the MCP protocol you use in Claude Desktop or Cursor, even if the name sounds like it.
The news is that Google runs an origin trial from Chrome 149 to 156 and says it wants to ship in 157, while WebKit formally opposes the idea and Mozilla is neutral. In this post I go over what the API looks like, who is for it and who is against, the one benchmark I found, the security gap that worries me, and the half-day experiment I would run at Trellis. My verdict in one line: try it on one read-only thing this month, and keep your hands off everything that writes.
Here is why I care. A Trellis user lives in a React app full of tables, filters and buttons. Today a browser assistant that wants “my listings with fewer than five images” has to click around that UI like a tourist. With WebMCP our page could just offer a tool called search_my_listings. Reads, I can picture. Writes to listings, pricing or ad spend stay out of my plans until the spec has a real consent model, and it does not have one yet.
I also ran it. In Chromium 153.0.8010.12 with two feature flags on, I registered one tool, asked the page for its tool list and got the name back. Then I called the tool with a plain object, the way the README shows it, and the browser answered “UnknownError: Failed to parse input arguments”. Same call with JSON.stringify around the object worked. So the spec and the build disagree on the first example.
What is WebMCP, and what is it not?
A page calls document.modelContext.registerTool() with a name, a description, a JSON schema for the inputs and an execute function. The browser’s built-in agent can then list those tools and call them, instead of scraping the DOM or reading screenshots. It is document.modelContext, not navigator.modelContext, though blog posts use both. The explainer in the community group repo is the source for all of this.
There is a second form with no JavaScript: toolname and tooldescription on a