[FEATURE] WebMCP tool discovery in Claude in Chrome — revisiting #30645 with production implementation data

Status Open
Maintainer reply None cached
Activity 3 comments · opened Jul 12, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

#30645 requested WebMCP discovery/invocation for Claude in Chrome. It was auto-closed as stale in April and locked, so per the stale-bot's instruction I'm filing fresh and referencing it here.

The gap is unchanged — reproduced this week against my own production site: the extension surfaces nothing from navigator.modelContext. The tools are reachable only if the model is explicitly instructed to evaluate the API via page scripting. Invocation works; discovery doesn't exist. The extension falls back to screenshot/DOM interaction even when the page publishes a structured tool surface.

What changed since March: navigator.modelContext is no longer a Canary flag — it's in a public origin trial in Chrome 149 (through 156, ending Nov 2026). The original thread's "production rollout timeline is unclear" objection is resolving, and production sites exist now: I maintain one (tradesite.dev, registered in the origin trial) with an anonymous discovery surface live today — no login needed to test discovery. See Additional Context.

Proposed Solution

Same shape as #30645: discovery (query navigator.modelContext on connect, expose registered tools as first-class MCP tools) and invocation (structured calls, structured JSON responses). Four findings from running a production WebMCP surface that bear on the design:

  1. Dynamic tool lists are the norm, not an edge case. My workspace gateway registers/unregisters tools as the user moves between pages of an SPA — no navigation event fires. "Re-scan on navigation" is necessary but not sufficient; honor tools-changed callbacks rather than snapshotting at page load.
  1. Expect gateway-multiplexed tools. Real sites converge on a few action-multiplexed tools with built-in help/list_actions (mine: 43 global + 40 workspace actions across two gateways) rather than dozens of micro-tools. Discovery UX shouldn't assume one-tool-per-capability.
  1. Passive context tools are load-bearing. Cheap read-only tools (app_context, current_state) exist specifically as orientation/precondition reads before mutating calls. Surfacing tools without distinguishing read-only from mutating loses this pattern — worth honoring in the permission UI.
  1. Don't use a11y-tree side channels for discovery. An earlier iteration of my site exposed an sr-only tool catalog for tree-walking agents; it leaked to screen readers and was pulled after an audit. Native discovery makes such hacks unnecessary — which is the point of this request.

Alternative Solutions

What I ship today because discovery is missing: a fallback bridge behind ?expose-agent=1 — a window global plus an inert JSON catalog in a <script type="application/json"> tag — solely so non-WebMCP agents can be pointed at the tools when instructed.

Site-side polyfills/SDKs (suggested repeatedly in the old thread) cannot close this gap on their own: they register tools, but the extension still doesn't discover them. Native discovery support would let sites delete these bridges entirely.

Priority

Medium - Would be very helpful

Feature Category

MCP server integration

Use Case Example

  1. User opens tradesite.dev (logged in) with Claude in Chrome and asks: "Build a 3-bar momentum strategy and backtest it over the last 30 days."
  2. Today: screenshot → find element → click → type loops over a node-graph strategy editor. Slow, fragile, token-expensive.
  3. With discovery: Claude reads tradesite_current_state (read-only precondition), then calls gateway actions to compose the blocks and run the backtest — a handful of structured calls with verifiable JSON at each step.

The live surface: 5 tools + 1 registered prompt via @mcp-b/global 1.6.4, loaded on idle so agent tooling never affects first paint.

Additional Context

  • Predecessor: #30645 (auto-closed stale, locked) — this issue supersedes it with production implementation data, per the stale-bot's instruction.
  • WebMCP W3C spec: https://github.com/webmachinelearning/webmcp
  • Chrome origin trial: WebMCP, Chrome 149–156 (ends Nov 16, 2026). tradesite.dev is registered and serving a token.
  • Test access, live now: a clean anonymous profile hitting https://tradesite.dev gets a working discovery surface — tradesite_app_context (returns signed-out context) and the tradesite_app gateway (help/list_actions fully functional; account-gated actions return a structured account_required refusal with zero data, schema validation first). ?expose-agent=1 additionally enables the non-WebMCP fallback bridge described under Alternatives.

View original on GitHub ↗

3 Comments

JW53222 · 3 months ago

Follow-up since filing — two additions.

Live repro for finding #1 (dynamic tool lists), no account needed. The anonymous surface at https://tradesite.dev now includes a navigation tool. Since the extension can't discover these natively yet (this issue), drive it from the DevTools console:

const mc = navigator.modelContext;
(await mc.listTools()).map(t => t.name);
// → 3 tools, including "tradesite_goto"

await mc.callTool({ name: 'tradesite_goto', arguments: { page: 'dynamic-tool-test' } });
(await mc.listTools()).map(t => t.name);
// → "tradesite_dynamic_probe" appeared — client-side SPA route change, no browser navigation event

await mc.callTool({ name: 'tradesite_goto', arguments: { page: 'login' } });
(await mc.listTools()).map(t => t.name);
// → probe gone; calling it now throws "Tool not found"

Repeatable (verified 3× bounce cycles on the armed origin-trial surface, production build). An extension that snapshots tools at page load holds a stale surface within two tool calls of connecting.

A field lesson from shipping that demo: treat the page's tool list as advisory. Our first deploy exhibited exactly the stale-surface failure finding #1 warns about — the probe registered but never unregistered — caused by a site-side shim we carry around early origin-trial rough edges (Duplicate tool name on re-register). Two takeaways:

  • Real production sites carry origin-trial workarounds; expect surfaces where tools linger, vanish, or claim stale state. Re-query on tools-changed and fail soft on tool-not-found rather than trusting a snapshot.
  • The bug was invisible in development: origin-trial tokens are origin-bound, so localhost never arms the native path, and everything works against the polyfill. Anyone testing WebMCP integration — extension or site — needs an armed origin in the loop; green localhost tests prove nothing about native behavior.
jo32 · 1 month ago

A client-side implementation reference for the discovery part: I maintain DeepDeck, an unofficial Harness desktop client whose Electron browser discovers registered WebMCP tools through Chromium's WebMCP domain and observes additions/removals. API presence alone is not treated as site support. The agent gets a tool directory and a separate invocation path, with calls bound to the tab/frame/document rather than only a tool name.

The overview includes a screenshot of native search_openai discovery and the tool-use flow. It also distinguishes page-owned tools from agent-generated adapters. This is a separate browser implementation; I have not tested the tradesite.dev reproduction in Claude in Chrome.

Idan-Levin · 27 days ago

Adding some data here - at nekuda.ai, we’re building solutions to help websites become more agent ready. Alongside that, we run the WebMCP directory at webmcp.com and built an open benchmark comparing WebMCP with other ways browser agents can operate websites.

I wanted to highlight some results that show the benefit of adding WebMCP support for Claude in Chrome:

The benchmark works by agents attempting 49 tasks of varying difficulty across eight websites, using WebMCP, computer use, DOM + vision, accessibility trees, and code execution.

In our benchmark results, Sonnet 5 with WebMCP was 4.7× faster and 7.8× cheaper than Sonnet 5 with computer use, and 7.4× faster and 15.4× cheaper than Opus 5 with computer use, based on median time and cost per task. Sonnet 5 with WebMCP also solved 49/49 tasks, compared to 39/49 for Sonnet and 45/49 for Opus with computer use.

So adding native WebMCP discovery could give Claude in Chrome a meaningful improvement in speed, cost, and reliability on sites that expose tools.

The benchmark is fully reproducible, with public methodology and code: https://webmcp.com/benchmark

Another angle is the benefit for website owners. As more agents support WebMCP, website owners have more reason to add tools to their sites. We track ecosystem adoption here: https://webmcp.com/ecosystem-tracker

When agents scrape or operate through the DOM, their activity can be hard to distinguish from human activity. With WebMCP, site owners can instrument tool calls to understand which actions agents are taking, where they fail, and what capabilities are missing. Supporting WebMCP also encourages websites to build better tools for agents, which makes the experience better for everyone using them.