---
title: "WebMCP · Sitebulb Labs"
description: "WebMCP exposes in-page tools to agents via document.modelContext on the live page."
url: https://labs.sitebulb.com/docs/checks/protocol-discovery/webmcp/
---

# WebMCP

WebMCP exposes in-page tools to agents via document.modelContext on the live page.

- Category

  [Protocol discovery](https://labs.sitebulb.com/docs/checks/protocol-discovery)

- Standard

  - Emerging checkEmerging
  - Off by default, turn on in settings

## What it checks

WebMCP lets a page register tools that an agent in the browser can call. The tools only exist in the live page, so this check reads the page open in your active tab rather than fetching anything. It looks for:

- tools registered through `document.modelContext`, the entry point the spec settles on;
- tools registered through `navigator.modelContext`, the earlier alias, which Chrome 150 and later deprecate; and
- declarative tools: elements such as forms marked up with a `toolname` attribute, and whether each has a `tooldescription`.

Where it can, it reports how many tools are registered.

## Results

| Status         | When                                                                            |
| -------------- | ------------------------------------------------------------------------------- |
| **Pass**       | Tools are registered through `document.modelContext`                            |
| **Pass**       | Tools are registered through `navigator.modelContext`, with a note to migrate   |
| **Pass**       | The page declares `toolname` tools, with a note if any lack a `tooldescription` |
| **N/A**        | No WebMCP tools of either kind were found on the page                           |
| **Unmeasured** | The extension could not read the page, so it could not look                     |

Unmeasured usually means the site you scanned is not the one open in the active tab. Open it there and scan again.

## How to fix

To offer tools, register them through `document.modelContext` in the page’s script. If you already use `navigator.modelContext`, switch to `document.modelContext`.

For a form, you can declare it as a tool in the markup instead, and describe what it does so an agent knows when to use it:

```html
<form toolname="search-products" tooldescription="Search the product catalogue by keyword.">
  <label for="q">Search</label>
  <input id="q" name="q" type="search" />
  <button type="submit">Search</button>
</form>
```

Related: [Form control labelling](https://labs.sitebulb.com/docs/checks/agent-experience/ax-form-labeling) and [MCP Server Card](https://labs.sitebulb.com/docs/checks/protocol-discovery/mcp-server-card).
