Browser support
WebMCP is progressive enhancement. Unsupported browsers no-op silently with zero runtime impact.
Spec status
WebMCP is a Draft Community Group Report from the W3C Web Machine Learning Community Group (latest draft 26 August 2026). It is not a W3C Standard and is not on the W3C Standards Track. The API surface has already been renamed once and may change again — always feature-detect.
Feature detection
import {
isWebMcpSupported,
isWebMcpEnabled,
getModelContext,
} from "@timbenniks/contentstack-webmcp";
isWebMcpEnabled(); // env kill switch
isWebMcpSupported(); // enabled + document.modelContext.registerTool exists
getModelContext(); // ModelContext instance or nullChrome timeline
| Chrome | Status | Notes |
|---|---|---|
| 146 | Shipped navigator.modelContext | Stable 10 March 2026; early preview behind #enable-webmcp-testing |
| 149+ | Origin trial | Register tools on production traffic |
| 150 | navigator.modelContext deprecated | Superseded by document.modelContext |
This package targets document.modelContext, the surface in the current draft. It does not fall back to the deprecated navigator.modelContext, so Chrome 146–149 without the origin trial will no-op.
On-by-default Chrome is projected for late 2026. Firefox and Safari have no shipping implementation.
Unsupported (graceful no-op)
| Browser | Behavior |
|---|---|
| Safari | No registration, no errors |
| Firefox | No registration, no errors |
Chrome without document.modelContext | No registration, no errors |
Defensive behavior
try/catchon everyregisterToolcall — one rejected tool does not stop the restAbortSignalcleanup on teardown- Warnings only when the build positively reports development (
NODE_ENV=developmentorimport.meta.env.DEV) - Silent in production, on every browser
Testing locally
Join the origin trial (Chrome 149+) and serve the token, or use the preview flag on older builds:
- Navigate to
chrome://flags/#enable-webmcp-testing - Enable and restart Chrome
- Open your site
- DevTools → Application → WebMCP
- Verify registered tools and run manual executions
Permissions-Policy
Required for browser agents to invoke tools:
Permissions-Policy: tools=(self)To expose tools to specific cross-origin embedders in the same document tree, pass exposedTo to register():
await webmcp.register({
signal: controller.signal,
exposedTo: ["https://agent.example.com"],
});See Security for platform-specific setup.
Kill switch
Disable everywhere:
CONTENTSTACK_WEBMCP_ENABLED=false