I Built a Bridge for Google's New WebMCP Draft Spec — Here's What Broke A developer known as tanahiro2010, a member of GDG Greater Kwansai, built a bridge for Google's new WebMCP draft spec and shared insights from a hands-on session at Google I/O Extended Osaka 2026. The bridge, named webmcp-bridge-mcp, is an MCP server that connects AI agents to WebMCP tools, which allow web pages to declare their own features as tools. The developer found the spec quirky but praised its design, noting that declarative forms are normalized into the same registerTool() call as imperative JavaScript registration. Hi, everyone. I usually go by tanahiro2010 in Japan. I'm a member of GDG Greater Kwansai. I gave the first-half talk at the Google I/O Extended Osaka 2026 hands-on session, "Let's Build WebMCP and Call It from an AI Agent " This is a write-up of that hands-on session for Qiita translated here for Dev.to . Here's the codelab we used: https://learn.gdgs.jp/webmcp-agent/ https://learn.gdgs.jp/webmcp-agent/ This is for people who already know MCP but have never heard of WebMCP, and for people who want to know "so what's this new spec Google put out, actually like?" Let me just ask straight up: have you heard of WebMCP? I hadn't even heard it existed until I started putting together the hands-on materials. Just from the name, I assumed it was "the Web version of MCP." But once I actually read the spec and implemented it, it turned out to be a much quirkier spec than I expected. In this article I'll walk through what's actually in it, and what I learned by getting my hands dirty with it. Before getting into WebMCP, let's recap MCP Model Context Protocol . MCP is a common interface for connecting external tools to an AI Agent. The flow looks like this: sequenceDiagram participant Agent as AI Agent participant Server as MCP Server Agent- Server: Launch stdio / HTTP Server-- Agent: tools/list list of available tools Agent- Server: tools/call tool name + args Server- Server: Execute the tool Server-- Agent: Return the result The key point is that the tools stay registered for as long as the Agent is running . Whether it's a local file operation or a tool that hits an internal API, you can keep calling it as long as you don't kill the Agent. The webmcp-bridge-mcp I built for this is also just an ordinary MCP Server listening on stdio. From the perspective of a client like the Antigravity CLI, it's nothing more than "one more run-of-the-mill MCP Server." What's unusual is the WebMCP side, which I'll get to next. WebMCP is a draft spec published by the W3C Web Machine Learning Community Group. https://webmachinelearning.github.io/webmcp/ https://webmachinelearning.github.io/webmcp/ As of writing, it's the February 2026 draft — still at the proposal stage. In one sentence: A mechanism by which a web page itself declares its own features as tools for an Agent. There are two ways to register a tool. You register a tool directly from JavaScript. await document.modelContext.registerTool { name: "reserve hotel", description: "Reserve a hotel", inputSchema: { type: "object", properties: { city: { type: "string" } }, required: "city" , }, execute: async { city } = { ok: true, city } , } ; The shape — name / description / inputSchema / execute — is almost identical to an MCP tool definition. Anyone who's touched MCP will look at this and immediately think, "oh, this is the same shape as that." You turn an existing