I think i've got it: WebMCP is the new web intents Paul Kinlan released WebMCP Relay, an MCP server that discovers and calls tools exposed by web pages via WebMCP, enabling AI agents to interact with web page capabilities. The tool uses Chrome DevTools MCP to browse pages and registers discovered tools in a local SQLite database for future recall, effectively creating a federated system for web intent matching. I think i've got it: WebMCP is the new web intents Just over a month ago I wrote that WebMCP is the new web intents … maybe /webmcp-is-the-new-web-intents , but now I really do think that WebMCP is the new web intents in a good way, not the “ the entire project crashed and burned https://paul.kinlan.me/what-happened-to-web-intents/ ” way . While the spec says that this is not the intended goal, I think we have a federated way for the web to declare its capabilities and for someone ideally you to keep an index of them, and then to have your tools recall and re-use those tools when they can match the user’s or their intent with the capability of the page. webmcp-relay https://github.com/PaulKinlan/WebMCP-relay is a small MCP server that discovers the tools that a page exposes via “WebMCP” and can call them. You install it in your agent Codex, Claude Code, whatever , and under the hood it uses Chrome DevTools MCP https://github.com/ChromeDevTools/chrome-devtools-mcp to actually run the browser. Install like this: { "mcpServers": { "webmcp-relay": { "command": "npx", "args": "-y", "webmcp-relay", "--headless", "--channel", "canary" } } } And when the agent opens a page via the relay, the relay asks DevTools to list the page’s WebMCP tools, hands them straight back to the agent as callable MCP tools, and writes every one it sees into a local SQLite registry for future recall. The tool surface is quite small so it shouldn’t take up too much context: open page - try to make it super clear to use this tool to open web pages webmcp refresh tools webmcp list tools webmcp call tool webmcp search registry webmcp execute registry tool I followed the idea I saw in Modern Web Guidance https://developer.chrome.com/docs/modern-web-guidance/ which has a tool to look up skills to include in the context, and in this case, your agent can query the local database of tools. You can see in this unglamorous log of an eval run for https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ what it’s doing behind the scenes: {"time":"2026-06-06T20:34:18.377Z","level":"info","component":"devtools","event":"webmcp tools.list.start"} {"time":"2026-06-06T20:34:18.379Z","level":"info","component":"devtools","event":"webmcp tools.list.done","toolCount":7,"toolNames": "set pizza size","set pizza style","toggle layer","add topping","remove topping","manage pizza","share pizza" ,"latencyMs":2.1177500000012515} {"time":"2026-06-06T20:34:18.381Z","level":"debug","component":"relay","event":"registry.persist.done","url":"https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/","count":7,"ids": "webmcp 3e98acb9d6148878","webmcp 4e60e97f52b66c15","webmcp b0994585796e27d6","webmcp baaf13d8de6acaa8","webmcp a4b14c9df1412dcc","webmcp 16dc11bbcf96c478","webmcp 7ee5f6a78f435bb5" } {"time":"2026-06-06T20:34:18.381Z","level":"info","component":"relay","event":"tools.list changed","currentUrl":"https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/","toolCount":7,"toolNames": "set pizza size","set pizza style","toggle layer","add topping","remove topping","manage pizza","share pizza" } {"time":"2026-06-06T20:34:18.381Z","level":"info","component":"relay","event":"refresh tools.done","url":"https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/","latencyMs":3.988958999998431,"isError":false,"toolCount":7,"toolNames": "set pizza size","set pizza style","toggle layer","add topping","remove topping","manage pizza","share pizza" } {"time":"2026-06-06T20:34:21.598Z","level":"debug","component":"relay","event":"mcp.call tool.received","toolName":"webmcp search registry","args":{"keys": "query","limit" }} {"time":"2026-06-06T20:34:21.598Z","level":"debug","component":"relay","event":"mcp.call tool.dispatch","toolName":"webmcp search registry","args":{"keys": "query","limit" }} {"time":"2026-06-06T20:34:21.599Z","level":"info","component":"relay","event":"search registry.start","query":"set pizza size large bbq style"} {"time":"2026-06-06T20:34:21.600Z","level":"info","component":"relay","event":"search registry.done","query":"set pizza size large bbq style","latencyMs":1.344375000000582,"isError":false,"resultCount":7,"topRegistryId":"webmcp 4e60e97f52b66c15","topToolName":"set pizza style"} {"time":"2026-06-06T20:34:27.819Z","level":"debug","component":"relay","event":"mcp.call tool.received","toolName":"webmcp call tool","args":{"keys": "name","input" ,"inputKeys": "size" }} {"time":"2026-06-06T20:34:27.820Z","level":"debug","component":"relay","event":"mcp.call tool.dispatch","toolName":"webmcp call tool","args":{"keys": "name","input" ,"inputKeys": "size" }} {"time":"2026-06-06T20:34:27.820Z","level":"info","component":"relay","event":"call site tool.start","url":"https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/","toolName":"set pizza size"} {"time":"2026-06-06T20:34:27.820Z","level":"info","component":"devtools","event":"webmcp tool.execute.start","toolName":"set pizza size","inputKeys": "size" } {"time":"2026-06-06T20:34:27.823Z","level":"info","component":"devtools","event":"webmcp tool.execute.done","toolName":"set pizza size","isError":true,"latencyMs":2.6875830000026326} The neat thing is that with these tools, every page the agent visits on the user’s behalf leaves a record of what that page could do: its tools, their schemas, the site they came from. Over time you don’t have a single page’s tools, you now have a personal index of capabilities across every site you’ve ever touched. Ask for something you’ve done before and the agent can search the registry, reopen the right site, and run the tool, without you ever saying the words “WebMCP”. You just say “book the thing” and it knows where the thing gets booked. Running npx webmcp-relay registry list would show a list of all the discovered tools, and as you can see, the description could then be used in the agent’s look-up. id tool origin uses description url ----------------------- --------------- ---------------------------------- ---- ----------------------------------------------------------------------- ------------------------------------------------------------------ webmcp 4e60e97f52b66c15 set pizza style https://googlechromelabs.github.io 2 Set the style of the pizza colors/theme https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp 3e98acb9d6148878 set pizza size https://googlechromelabs.github.io 2 Set the pizza size directly or infer it based on the number of people. https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp 7ee5f6a78f435bb5 share pizza https://googlechromelabs.github.io 1 Get a shareable URL for the current pizza creation https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp b0994585796e27d6 toggle layer https://googlechromelabs.github.io 0 Control pizza layers sauce, cheese . Use "add", "remove", or "toggle". https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp baaf13d8de6acaa8 add topping https://googlechromelabs.github.io 0 Add one or more toppings to the pizza https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp a4b14c9df1412dcc remove topping https://googlechromelabs.github.io 0 Remove a specific topping from the pizza https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ webmcp 16dc11bbcf96c478 manage pizza https://googlechromelabs.github.io 0 Manage pizza state https://googlechromelabs.github.io/webmcp-tools/demos/pizza-maker/ I find this genuinely exciting. But the relay shouldn’t have to exist. This should be built into every agent harness that has its own tools to interact with a browser built-in, or the user’s default external browser . I really like the fact that the registry of tools builds itself as a side effect of normal use. While you can maintain the list of tools, you don’t have to, it’s just the residue of the agent doing its job, and best of all it lives on your machine but could also call out to a centralised search like webmcp.cool https://webmcp.cool/ . Allowing agent tools to interact across pages certainly changes how we think about the same-origin model in the browser. Data gathered from the output of one action on a page can be used as the input to the next or far future action. This is not what we expect in the browser today, but I think the expectation when I’m using Claude, ChatGPT or Gemini is starting to change as we reason about long-running tasks that have memory. That being said, even without WebMCP and using activation i.e., simulated inputs and clicking , all of this is entirely possible today. Check out the code https://github.com/PaulKinlan/WebMCP-relay , give me feedback It’s rough. It works best with the included Skill . It’s held together with sticky tape, Chrome Canary flags and a couple of SQLite files that are managed by Node.js I don’t know if it works with Bun or Deno yet . But you can see it working…