Skip to content

Compatibility ​

What was measured, on which browser build, with which flags.

Verified environment ​

Test date: 2026-09-13. Host: macOS. Runner: Playwright 1.63.0. Browser: bundled headless Chromium 153.0.8010.12. The page ran at http://127.0.0.1:4173. The browser reported a secure context for this loopback origin.

Browser configurationResult
Default Playwright ChromiumRequired API absent. The probe showed an unsupported message.
Chromium with --enable-experimental-web-platform-featuresNative registration, discovery, execution, events, and removal passed.

The two reports from this run are kept in the repository at playground/compatibility/reports/2026-09-13-chromium.json and playground/compatibility/reports/2026-09-13-chromium-webmcp.json. They are fixed evidence. New runs write fresh reports under test-results/.

Observed native API ​

  • document.modelContext has registerTool, getTools, and executeTool methods.
  • The probe registered its echo tool before discovery. It did not patch registration or use a replacement registry.
  • Discovery returned the tool with its name, description, origin, current window, annotations, and a JSON-string input schema.
  • Execution required JSON-string arguments in this browser build. Object arguments failed before the handler ran. The probe selects the input format from the discovered schema format. It does not retry execution.
  • The original handler ran once. Execution returned {"text":"WebMCP probe"} as a JSON string.
  • toolchange fired after registration and removal. Aborting the registration signal removed the tool.
  • The returned annotations included readOnlyHint: true and untrustedContentHint: false. They did not include consequentialHint.

The current WebMCP draft describes object input schemas and object arguments. Chrome documentation notes an argument-format change from Chrome 155. The verified Chromium 153 target uses the older format. No claim is made that it implements the full current draft.

Chrome setup guidance lists a local testing flag, origin isolation, and a tools permissions policy. This probe used the command-line flag listed above. It did not test an origin-trial token, cross-origin frames, insecure remote HTTP, or other browser engines.

Unsupported browsers ​

These configurations are not a supported WebMCP host for this release. The product does not ship a replacement document.modelContext or another workaround.

Browser configurationResult
Playwright Chromium without --enable-experimental-web-platform-featuresRequired API absent. The widget shows an unsupported message.
FirefoxNot verified. The required API is not part of this release matrix.
Safari / WebKitNot verified. The required API is not part of this release matrix.
Insecure remote HTTPOut of scope. Discovery requires a secure context.

Fixture Playwright suites under tests/e2e/failures.spec.ts and packages/actionwire/e2e use a test ToolSource. They are not native compatibility evidence. Native evidence is pnpm test:native, playground/compatibility/probe.spec.ts, and tests/e2e/native-webmcp.spec.ts. That native suite fails when the API is absent. It does not skip.

Widget viewport matrix ​

Verified in Playwright Chromium with tests/e2e/frameworks.spec.ts.

ViewportResult
1280×800Panel width stays in 360–400px and inside the viewport.
640×568Bottom sheet. Composer stays visible.
320×568Bottom sheet. Composer stays visible. Horizontal overflow stays at most 1px.
prefers-reduced-motion: reduceTransitions are disabled.
KeyboardEnter opens the panel. Enter sends. Escape closes and returns focus to the launcher.

PRD acceptance evidence ​

#CriterionEvidence
1A web application can expose WebMCP toolsplayground/src/tools.ts, native probe reports
2The library discovers them automaticallytests/e2e/native-webmcp.spec.ts, playground/compatibility/probe.spec.ts
3The tools become available to the text agentplayground/e2e/journey.spec.ts, tests/e2e/native-webmcp.spec.ts
4The user can request an action using natural languageplayground/e2e/journey.spec.ts
5The agent selects and calls the correct WebMCP toolplayground/e2e/journey.spec.ts
6The existing application handler performs the actionplayground journey plus Vanilla/React/Vue/Svelte example tests
7The result is returned to the agentplayground/e2e/journey.spec.ts
8The assistant responds naturally after executionScripted wording in playground/e2e/journey.spec.ts. Manual real-model steps are in that file.
9Tool activity is visible in the widgetJourney plus packages/actionwire/e2e/accessibility.spec.ts
10Destructive actions require confirmationJourney plus widget confirmation tests
11Tool availability can refresh while the app is runningJourney billing tools, tests/e2e/failures.spec.ts navigation case
12The same browser/core implementation works with Vanilla JS, Vue, React, and Sveltetests/e2e/frameworks.spec.ts and examples/*/e2e
13No tool definition is duplicated between WebMCP and the agenttests/e2e/frameworks.spec.ts checks playground/src/assistant.ts
14No voice-related dependencies are introduced in Phase 1tests/e2e/frameworks.spec.ts package dependency scan

Run the checks ​

sh
pnpm install --frozen-lockfile
pnpm exec playwright install chromium
pnpm test:e2e
pnpm test:native

test:e2e runs both browser configurations. It also removes the API in a separate test to check the unsupported message. That test is not native compatibility evidence. test:native requires a real successful native run. It fails if the required API is absent. No native test is silently skipped.

For a manual check, run pnpm probe. Open the loopback address in the target browser. Select Run probe. Record the exact browser build and launch flags with the report.

Invariants for the native adapter ​

These rules hold in packages/actionwire/src/webmcp today. Keep them.

  • Native format conversion stays inside packages/actionwire/src/webmcp.
  • Parse a discovered JSON-string schema once and forward it. Do not write a second definition.
  • Send JSON-string arguments only for the format the tool declares.
  • Preserve the native tool handle and the current-window check.
  • Never infer safety from a missing annotation. A tool with no explicit read-only classification requires confirmation.
  • Invalidate the execution revision when native registrations change, even when the public name and schema stay the same.

Released under the MIT License.