# Pages with broken WebMCP tools

A per-URL report: one row per page that matches, over the pages a crawl reached.

## What this report returns

WebMCP lets a page register tools that in-browser agents can call.

A row appears here when any of these is wrong, worst first:

-   **Tool Missing Name**A tool (declarative form or imperative `registerTool`) has no name, so agents have nothing to call. A `registerTool` call without one is rejected outright under the W3C draft; the declarative form's rules aren't written yet, so this is reported as a readiness fault rather than a specification violation.**Fix** Give every tool a name (the declarative toolname attribute, or `registerTool`'s name field).
-   **Invalid Tool Name**A tool name is outside what the W3C draft allows for `registerTool` (1-128 characters, only A-Z a-z 0-9 \_ - .), so it is rejected there; the declarative form has no published naming rules, so this is a readiness fault rather than a specification violation.**Fix** Rename it within those characters, e.g. `search_flights`.
-   **Tool Missing Description**A declarative form tool has no tooldescription, which Chrome's declarative API expects (the W3C draft no longer specifies the declarative form), so an agent can't know what the tool does.**Fix** Add a tooldescription attribute saying what the tool does and when to use it.
-   **Imperative Missing Description**A `registerTool` call has no (or an empty) description, which is required, so agents can't tell what the tool does.**Fix** Pass a description saying what it does and when to call it.
-   **Imperative Missing Execute**A `registerTool` call omits its execute handler, so the tool is described but can never actually run.**Fix** Pass an execute function implementing the tool.
-   **Input Schema Not An Object**A `registerTool` call passes `inputSchema` as a JSON string. The WebMCP dictionary member is an object (it was a string until 14 Aug 2026), so a current browser rejects the registration and the tool never exists for agents.**Fix** Pass the schema object itself, not `JSON.stringify` of it: `inputSchema`: `{ type: "object", properties: { … } }`.
-   **Duplicate Tool Name**Two tools share the same (case-sensitive) name, so calls are ambiguous and one tool shadows the other. Names are compared across declarative forms and `registerTool` calls together: a duplicate `registerTool` call is rejected under the W3C draft, while a collision between the two surfaces is a readiness fault rather than a specification violation.**Fix** Give every tool a unique name.
-   **Param Missing Description**A tool parameter has no usable description (no toolparamdescription, associated label, or aria-description), so agents can't supply it correctly.**Fix** Describe every parameter, e.g. `toolparamdescription="Departure date, YYYY-MM-DD"`.

The Conformance Issue Detected column is true only when an imperative `registerTool` call omits description or execute, which the W3C WebMCP draft requires; the name, duplicate-name and declarative-description rules are Lumar's readiness bar and Chrome's guidance, and they are deliberately not spec claims because the same flag can fire on a declarative form whose rules the draft has not yet written.

An `inputSchema` passed as a JSON string is a defect of its own: the WebMCP dictionary member is an object (it was a string until 14 Aug 2026), so a current browser refuses the registration and the tool never exists.

## The columns it shows

Every defect this technology can carry is a column in the grid, worst first, so nothing is hidden behind a filter you have to know to apply.

-   WebMCP Valid`webMcpValid`
-   WebMCP Conformance Issue Detected`webMcpConformanceIssueDetected`
-   WebMCP Findings`webMcpFindings`
-   WebMCP Tool Names`webMcpToolNames`
-   WebMCP Undescribed Tool Names`webMcpUndescribedToolNames`
-   WebMCP Undescribed Parameters`webMcpUndescribedParamNames`
-   WebMCP Tool Missing Name`webMcpToolMissingName`
-   WebMCP Invalid Tool Name`webMcpInvalidToolName`
-   WebMCP Tool Missing Description`webMcpToolMissingDescription`
-   WebMCP Imperative Missing Description`webMcpImperativeMissingDescription`
-   WebMCP Imperative Missing Execute`webMcpImperativeMissingExecute`
-   WebMCP Input Schema Not An Object`webMcpInputSchemaNotObject`
-   WebMCP Duplicate Tool Name`webMcpDuplicateToolName`
-   WebMCP Param Missing Description`webMcpParamMissingDescription`
-   WebMCP Imperative Missing Input Schema`webMcpImperativeMissingInputSchema`

## About WebMCP

In-page tools a browsing agent can call directly.

[Read how WebMCP is checked](https://agentic-readiness.lumar.io/docs/capabilities/web-mcp), including the specification it is validated against and a worked correct and broken example.

## Running it

This report comes with Agentic Readiness in Lumar and appears on every crawl of any project that has it turned on. [See the whole set](https://agentic-readiness.lumar.io/scan-at-scale), or check a single URL with the [scanner on this site](https://agentic-readiness.lumar.io/), which runs the same code with no account.

[Get Lumar pricing →](https://www.lumar.io/pricing/)
