# Websites publish tools now. Your agent can call them.

WebMCP is a browser-native contract: a site declares typed tools on `navigator.modelContext` so an agent can call a named capability with a JSON input instead of scraping the page. The [WebMCP Registry](https://wmcp.ai/) crawls the web for sites that publish those tools, and Ghostget's built-in `webmcp` adapter turns the registry into three bounded commands — search the sites, read one site's current tool schema, and call a declared read-only tool.

![A dark field of faint site tiles each bearing a socket mark, crossed by one ivory channel whose gold thread lights a subset of sockets](https://ghostget.com/images/editorial/webmcp.webp)

Many sites publish their own tools; one bounded path reaches the ones declared read-only. Editorial illustration generated with Slopcamera.

**1,802**

registered sites

**15,282**

published tools

**1,509**

callable read-only

This page describes the `webmcp` adapter in v0.18.35 and the public WebMCP Registry snapshot synchronized 2026-09-23T07:17:21.268Z: 1,802 listed sites publishing 15,282 tools, 1,509 of them callable read-only today. Registry listings and tool declarations drift between checks; `ghostget webmcp sites.get` reads the live-checked state.

## What WebMCP is

A WebMCP site runs `navigator.modelContext.registerTool(...)` in its own page: each tool has a name, a JSON input schema, optional annotations, and a function that executes against the site's own context. The site — not the agent — defines what is callable. A docs site might publish `search_docs`; a store might publish `list_products`. The browser tab becomes the API surface, and the page author writes the contract.

That inverts the usual agent loop. Instead of parsing DOM or driving clicks, the agent asks the page what it offers and calls it with structured input. The tools travel with the site and update with it, so there is no separate API version to drift out of sync — the page itself is the registry of its own capabilities.

## What the WebMCP Registry adds

[wmcp.ai](https://wmcp.ai/) crawls the public web, detects sites that register WebMCP tools, and records each tool's name, description, input schema, and annotations against a daily-rechecked listing. Its public REST API returns the site directory and per-domain tool detail, and its MCP endpoint can execute a listed tool in a fresh headless page on the target domain.

The registry applies one deliberate gate: a tool can only be invoked when its own annotations declare `readOnlyHint`. Sites that publish purchase, publish, or otherwise mutating tools stay listed and inspectable, but their state-changing tools cannot be called through the registry. That gate is the same shape Ghostget applies to every adapter: a named, typed operation with a stated side effect — never a generic remote procedure.

## What Ghostget adds on top

Ghostget's `webmcp` adapter is bundled and needs no sign-in, API key, or account. It exposes three public operations over the registry:

- `ghostget webmcp sites.search` — list sites by query, tag, or popularity; returns names, domains, tool counts, and tags.
- `ghostget webmcp sites.get` — fetch one domain's current tools with their input schemas and read-only annotations.
- `ghostget webmcp tools.call` — invoke one tool that declares `readOnlyHint`; the registry runs it headlessly and returns the site's result.

```
ghostget webmcp sites.search --input '{"query":"docs"}' --json
ghostget webmcp sites.get --input '{"domain":"developers.cloudflare.com"}' --json
ghostget webmcp tools.call --input '{"domain":"developers.cloudflare.com","tool":"search","input":"{\"query\":\"workers\"}"}' --json
```

Each call runs through Ghostget's normal boundary: pinned HTTPS, per-operation deadlines, byte caps, strict response validation, and a durable receipt. No cookies or credentials touch the registry or the target site, and a returned body is treated as untrusted content — the site's words, not a Ghostget claim about them.

## The provider directory is one call deep

The snapshot behind this site lists 1,802 WebMCP-registered domains with 15,282 published tools, of which 1,509 declare `readOnlyHint` and are callable through `tools.call` today. The [provider directory](https://ghostget.com/providers/) gives each listed domain its own page — its tools, its read-only status, and the exact commands to search, inspect, and call it.

Because the registry re-checks sites continuously, Ghostget deliberately does not ship per-site contracts: `sites.get` always returns the schema the registry saw most recently, so an agent adapts when a site changes its tools instead of failing against a stale hard-coded surface.

## The limits stay explicit

**Listed is not callable.** Most registered tools today do not declare `readOnlyHint`; the registry refuses to execute them, and Ghostget does not try. A domain page names which tools are callable and which are only listed.

**Read-only is a hint, not proof.** The registry runs each call in a fresh headless page and gates on the site's own annotation. Ghostget returns the result verbatim inside the receipt; it cannot warrant that the site's tool is truly side-effect-free.

**The registry is a discovery layer, not the only path.** Ghostget's bundled adapters cover named services directly with account binding, previews, and write confirmation. WebMCP covers the long tail: sites your agent has never seen, with no adapter to install.

## Try it against the live registry

Install [Ghostget v0.18.35](https://ghostget.com/docs/tutorials/getting-started/), then run `ghostget webmcp sites.search --input '{"query":"search"}' --json`. Browse the [provider directory](https://ghostget.com/providers/) for every registered domain, follow the [how-to guide](https://ghostget.com/docs/how-to/use-webmcp-sites/) for the full call sequence, and inspect the upstream [WebMCP Registry](https://wmcp.ai/) directly.
