Bearly developer tools

A live page for testing WebMCP.

Discover tools, call them, cancel them, watch them change, and exercise the declarative form draft. Nothing here touches an account or sends data to a server.

Download the fixture

Imperative API

Six tools. Different failure modes.

Each tool isolates one part of the draft so a client can tell what worked instead of treating WebMCP as one opaque capability.

01 read only

Status

Optional schema, title, annotations, structured result

bearly.webmcp.status
02 read only

Structured echo

Nested objects, enums, arrays, constraints, defaults

bearly.webmcp.echo
03 changes state

Counter

Visible state mutation with bounded integer input

bearly.webmcp.counter_increment
04 read only

Abortable task

Async execution and invocation AbortSignal handling

bearly.webmcp.delay
05 untrusted output

Untrusted feed

readOnlyHint and untrustedContentHint annotations

bearly.webmcp.untrusted_feed
06 error path

Controlled error

Rejected execution and client error reporting

bearly.webmcp.always_fails

Mutable page state

0

Ask an agent to call counter_increment, or reset it here.

Runtime lifecycle

A tool that comes and goes.

bearly.webmcp.dynamic_time

Registration receives an AbortSignal. Aborting it removes the tool and should emit toolchange.

Declarative API

Forms become tools.

These cover synthesized schemas, parameter descriptions, agent-aware submission, autosubmit, and the user-review path. The declarative section of the standard is still being specified.

Read the declarative explainer

Autosubmit form

toolautosubmit

Review-required form

human review

Frame boundaries

Allowed beside denied.

Both frames are same-origin. One delegates tools; the other returns Permissions-Policy: tools=() and should reject registration.

Agent activity

The page tells you what happened.

0 events

Waiting for document.modelContext…

Self-check report

Test the client, not the demo.

The in-page agent path uses the standard’s own getTools() and executeTool(). It also records when an experimental Chromium build needs compatibility handling.

No run yet

Run the self-check to exercise discovery and invocation.

Portable fixture

One file. No framework.

The page UI is React, but every WebMCP registration and compatibility path lives in one dependency-free script. Copy it into another project or load the hosted version while prototyping.

index.html
<script src="./webmcp-test-kit.js"></script>
<script>
  (async () => {
    await WebMcpTestKit.install({ mode: "main" });

    // Optional in-page verification:
    const results = await WebMcpTestKit.runSelfTest();
    console.table(results);
  })().catch(console.error);
</script>

01 · Secure context

Use HTTPS or localhost. The draft exposes document.modelContext only in secure contexts.

02 · Experimental browser

During Chromium’s trial, use an enrolled origin or enable WebMCP for testing at chrome://flags/#enable-webmcp-testing, then restart.

03 · Inspect both sides

Compare this event stream with your client’s tool inventory, invocation results, cancellation, and permission prompts.

Pinned to WebMCP revision 41d12f0 from August 26, 2026.

Last live-tested with Chrome 152.0.7977.64. Cross-origin exposure still needs a second enrolled secure origin and is not simulated here.

Read the standard