# Native WebMCP on a live MCP registry

> Source: <https://dev.to/anhmtk/native-webmcp-on-a-live-mcp-registry-4a8>
> Published: 2026-10-30 06:09:26+00:00

`https://agentshare.dev/registry` registers one native WebMCP tool, `search_listings`, when Chrome exposes `document.modelContext`. The same directory stays available to agents that never open a browser, through remote MCP at `https://agentshare.dev/mcp`.

WebMCP is the browser API. A page calls `document.modelContext.registerTool`. An agent in that Chrome tab calls the tool and gets JSON back. The tool lives only while the tab is open. Closing the tab drops it.

|  | Remote MCP | Native WebMCP | 
|---|---|---|
| Where | `https://agentshare.dev/mcp` | `https://agentshare.dev/registry` , tab open | 
| Call style | Streamable HTTP. API key or x402 | `document.modelContext` in Chrome | 
| Lifetime | The server stays up | Ends when the tab closes | 
| Payload | The MCP tool list, including paid Objective Trust | `search_listings` only. Public fields. At most 5 matches | 

Remote MCP is the path for an agent that is not sitting on the page. WebMCP is the path for an agent that already has the registry tab open in Chrome and can call `getTools` / `executeTool`.

The script is `https://agentshare.dev/static/js/webmcp-registry.js`. It returns immediately when `document.modelContext.registerTool` is missing. It does not install a polyfill.

The tool is read-only. `readOnlyHint` is true. `untrustedContentHint` is true because listing descriptions are written by the people who submitted them. The hint tells the agent to treat that text as data.

`execute` calls `GET /api/v1/registry/entries` on the same origin. `limit` is clamped to 1–5. `sort` is `new` or `popular`. Featured rows still sort first. Featured does not change `health_status` and is not a trust rank.

The page aborts the registration on `pagehide`.

Every successful call returns `schema` set to `agentshare.catalog.v1`.

```
{
  "schema": "agentshare.catalog.v1",
  "catalog_as_of": "2026-10-30T03:15:00Z",
  "listed": 147,
  "sort": "featured_then_newest",
  "sort_note": "Featured listings sort first. Featured does not change health_status and is not a trust rank.",
  "returned": 1,
  "matches": [
    {
      "id": 0,
      "name": "Example listing",
      "description_excerpt": "Short public description, clipped to 160 characters.",
      "health_status": "responding",
      "reviewed": true,
      "category": "agent_tools",
      "opens": 0,
      "featured": false,
      "mcp_url": "https://example.com/mcp"
    }
  ],
  "next": "For a rank that ignores featured and sponsored, call Objective Trust at https://agentshare.dev/mcp/objective-trust"
}
```

`catalog_as_of` and `listed` in that sample are the shape, not a frozen snapshot. On a live call, `catalog_as_of` is `generated_at` from that entries response: the server clock when the catalog was built for the tool call. It is not `Date.now()` in the browser. `listed` is `total_listed` on the same response, the count of publicly listed MCPs at that moment.

`reviewed: true` means the row status is `verified`. `health_status` is the stored probe label, such as `responding`, `needs_sign_in`, `unreachable`, `not_remote`, or `unknown`. `description_excerpt` is clipped. The Objective Trust score is not in this object. The `next` field points at the paid ranker, which ignores featured and sponsored.

A model that quotes this payload can cite three stable facts: the schema name `agentshare.catalog.v1`, the page `https://agentshare.dev/registry`, and a server timestamp for that response.

[AgentShare Agent Readiness](https://chromewebstore.google.com/detail/agentshare-agent-readiness/nimndnhajfkicbnipbfdkmgencjejjed) 0.6.0 reads native `document.modelContext` on the active tab when you open the popup. It lists each tool name and whether the tool is read-only, consequential, or marked untrusted content.

The score gains 4 points when the tab has at least one native tool. No native API means no point change. A missing `untrustedContentHint` is a warning, not a penalty. A polyfill that only sets `document.modelContext` inside the page is invisible to the extension. The reference score for agentshare.dev stays 92.

The scan stays in the browser. Tool names are not uploaded.
