# WebMCP

In-page tools a browsing agent can call directly.

**[Capabilities](/docs/capabilities)** · checked on every URL · 7 checks that can fail it

It lets a page hand an agent named tools instead of making it drive the UI, which is the difference between a reliable action and a screen-scrape. Tools register in JavaScript, so this is captured from the live page rather than parsed out of the HTML.

## Adoption

**Early pilots** (L1) — browsers are trialling it, but almost no publisher has shipped it

Named early adopters exist, behind flags or trials. Nothing has been independently measured yet. Direction of travel: ▲ rising, as of 2026-07-28.

Chrome origin trial in 149 to 156 and an Edge flag, but Spronta's Jul 2026 survey put publisher deployment at close to zero outside demonstrations.

| Adopter | Depth | Evidence |
|---|---|---|
| Google Chrome (origin trial 149-156) | preview | [developer.chrome.com](https://developer.chrome.com/blog/ai-webmcp-origin-trial) |
| Microsoft Edge (flag, 147+) | preview | [spronta.com](https://www.spronta.com/blog/state-of-webmcp-july-2026/) |
| Angular (declareWebMcpTool) | preview | [angular.dev](https://angular.dev/ai/webmcp) |
| Expedia, Booking.com, Shopify | announced | [spronta.com](https://www.spronta.com/blog/state-of-webmcp-july-2026/) |

## What we check

Absence is never a finding: every check below runs only once `webMcpPresent` is true, so a site that has not
adopted this is not assessed on it and appears in no report.

| Check | Kind | Raises | On whose authority |
|---|---|---|---|
| `webMcpToolMissingName` | high severity | usability | Lumar readiness profile |
| `webMcpInvalidToolName` | high severity | usability | Lumar readiness profile |
| `webMcpToolMissingDescription` | high severity | usability | Chrome profile |
| `webMcpImperativeMissingDescription` | high severity | conformance, usability | specification (W3C WebMCP draft, 2026-07-28) |
| `webMcpImperativeMissingExecute` | high severity | conformance, usability | specification (W3C WebMCP draft, 2026-07-28) |
| `webMcpDuplicateToolName` | high severity | usability | Lumar readiness profile |
| `webMcpParamMissingDescription` | medium severity | usability | Chrome profile |
| `webMcpImperativeMissingInputSchema` | informational | nothing | specification (W3C WebMCP draft, 2026-07-28) |

## Examples

These are the fixtures the test suite runs through the real collector, not snippets written for a document.

- Correct: `test/e2e/test-pages/capabilities/correct.html`
- Present but wrong: `test/e2e/test-pages/capabilities/issues.html`

## Specifications

| Document | Revision | Kind |
|---|---|---|
| [W3C WebMCP draft (Web Machine Learning CG)](https://webmachinelearning.github.io/webmcp/) | 2026-07-28 | specification |
| [Chrome docs — WebMCP](https://developer.chrome.com/docs/ai/webmcp) | living document | vendor profile |
| [Chrome docs — declarative API (form annotations)](https://developer.chrome.com/docs/ai/webmcp/declarative-api) | living document | vendor profile |
| [Chrome docs — imperative API (registerTool)](https://developer.chrome.com/docs/ai/webmcp/imperative-api) | living document | vendor profile |

Last re-read against the published documents: 2026-08-12.

**On pinning it.** Pin this draft by commit, not by the date printed at the top of it. That stamp is a Bikeshed build date and moves with any commit to the repository, so a bumped date is not evidence of a normative change: it read 12 Aug 2026 after a docs-only commit.
