audited Sep 5, 2026in 15s
63/ 100100% of the applicable check weight evaluated

31 tools registered. Strongest in tool selection, weakest in trust.

Shared experience50
Tool selection100
Tool quality94
Trust0
https://computer.webmcp.com
Captured view of https://computer.webmcp.com

Tools

12 read, 19 write
Loading map
app_open: warning

app_open

Open a built-in WebMCP Computer app in a visible window. Optionally set x, y, width, height, and focus (default true); focus=false preserves current focus and places a new window below the focused window. Geometry uses the same work-area clamping as window_move and window_resize. Settings, Notes, and Preview are singletons: reopening one applies supplied placement to its existing window and returns reused: true. Files, Terminal, and Editor create new windows. For editor, path may select a ~-rooted text file. Agent-made App windows open through ui_open. Returns PID, app ID, optional path, applied rect, and reused.Takes an action on the site.
pagehttps://computer.webmcp.com/
implementation
viaimperative
entry pointdocument
registered after310ms
executepresent
api surface
appIdrequired
pathoptional
xoptional
yoptional
widthoptional
heightoptional
focusoptional
annotations
read onlyfalse
untrusted contentnot declared
titlenot declared
2 findings
warningSchema quality
weight 4
2 of 31 tool schemas are harder for an agent to use than they need to be: app_open description is 620 characters, over Chrome's 500-character guidance.
app_open: description is 620 characters, over Chrome's 500-character guidance; ui_open: description is 611 characters, over Chrome's 500-character guidance
fix
{
  name: "app_open",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 31 names do not start with a verb (app_open).
fix
{ name: "app_open" /* short, unique, verb-based */ }
tool json
{
  "name": "app_open",
  "description": "Open a built-in WebMCP Computer app in a visible window. Optionally set x, y, width, height, and focus (default true); focus=false preserves current focus and places a new window below the focused window. Geometry uses the same work-area clamping as window_move and window_resize. Settings, Notes, and Preview are singletons: reopening one applies supplied placement to its existing window and returns reused: true. Files, Terminal, and Editor create new windows. For editor, path may select a ~-rooted text file. Agent-made App windows open through ui_open. Returns PID, app ID, optional path, applied rect, and reused.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "appId": {
        "type": "string",
        "enum": [
          "files",
          "editor",
          "terminal",
          "notes",
          "preview",
          "settings"
        ],
        "description": "WebMCP Computer app identifier to open."
      },
      "path": {
        "type": "string",
        "description": "Optional ~-rooted file path. Valid only when appId is editor."
      },
      "x": {
        "type": "number",
        "description": "Optional work-area horizontal position in CSS pixels."
      },
      "y": {
        "type": "number",
        "description": "Optional work-area vertical position in CSS pixels."
      },
      "width": {
        "type": "number",
        "description": "Optional window width in CSS pixels."
      },
      "height": {
        "type": "number",
        "description": "Optional window height in CSS pixels."
      },
      "focus": {
        "type": "boolean",
        "description": "Whether to focus the opened or reused window; false places a new window below current focus."
      }
    },
    "required": [
      "appId"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false
  }
}
Showing app_open

Findings

Shared experience

50 / 100 · weight 30
not applicableVisible effect
weight 6
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
warningPage experience
weight 16
2 of 4 page-experience marks came back short: usable The page is a screensaver, not a functional interface for browsing..
usable: poor; clarity: poor
warningHuman parity
weight 8
The page the person sees came back short of the agent surface (2 of 4 page-experience marks came back short: usable The page is a screensaver, not a functional interface for browsi...), so the two are not sharing an equal experience.
fix
// Make the tool's effect visible on the page the person is looking at:
// update the same UI your existing human flow uses when your_tool_name runs,
// so the person co-browsing sees what the agent just did.
execute: async (args, { signal }) => {
  const result = await performAction(args, signal);
  renderResultInPage(result); // the human-visible half of the same action
  return result;
}

Tool selection

100 / 100 · weight 25
not applicableInvoke success rate
weight 6
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
passTool selection
weight 12
An agent chose an existing, callable tool and built a schema-valid call for all 3 canonical intents, each matching the kind of tool its intent needs. Nothing was executed, so this verifies selection, not outcomes.
passCoverage vs. site type
weight 7
The tool set covers the whole core editor flow: open or read a document, edit or write content, save, publish, or share the result.

Tool quality

94 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 311ms of navigation.
toolps
passCanonical entry point
weight 3
All 31 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 31 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
2 of 31 tool schemas are harder for an agent to use than they need to be: app_open description is 620 characters, over Chrome's 500-character guidance.
toolapp_open
app_open: description is 620 characters, over Chrome's 500-character guidance; ui_open: description is 611 characters, over Chrome's 500-character guidance
fix
{
  name: "app_open",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 31 names do not start with a verb (app_open).
toolapp_open
fix
{ name: "app_open" /* short, unique, verb-based */ }
passStub detection
weight 4
All 31 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 31 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

0 / 100 · weight 20
not applicableAnnotations present
weight 5
No tool name reads like a read, and an absent readOnlyHint already defaults to "this may write" - the one hint worth declaring here is readOnlyHint: true on read tools, and this set has none to declare it on.
failAnnotation mismatch
weight 5
1 tool's own description says it writes while the tool declares readOnlyHint: true (os_manual: "Start here when operating WebMCP Computer. Read its agent manual verbatim fro..."), so an agent will make the change without asking.
toolos_manual
os_manual: readOnlyHint=true
fix
// readOnlyHint must match what the tool actually does - drop it (or set false) on a tool that writes.
{ name: "os_manual", annotations: { readOnlyHint: false } }
not applicableUntrusted content hint
weight 3
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
not applicableHint vs. observed
weight 4
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
warningInjection surface
weight 3
1 of 31 tools carry instruction-shaped text in their own metadata: os_manual The description instructs the agent to 'Start here' and 'Read its agent manual'..
toolos_manual
os_manual: The description instructs the agent to 'Start here' and 'Read its agent manual'.
fix
{
  name: "os_manual",
  // Metadata DESCRIBES the tool - it never addresses the agent reading it.
  // Rewrite any name, description, title, or schema field description that
  // instructs the agent (which tool to prefer, what to output, rules to
  // ignore) so it states what the tool does and what it returns instead.
  description: "Searches the catalog and returns matching items with prices."
}

Tool selection

100% across 3 intents
Open the document I was working on most recently.ok
choseapp_openexpected document openkind matched
arguments
{
  "appId": "editor"
}
Add a short summary paragraph at the top.ok
chosefs_editexpected content editkind matched
arguments
{
  "path": "~/recent_document.txt",
  "old_string": "",
  "new_string": "This is a short summary paragraph.\n"
}
Save it and give me a link I can share.ok
choseos_publishexpected save or sharekind matched
arguments
{
  "path": "~/"
}
model: gemini-2.5-flash

Add the tools this site is missing

Our scanner reads your website and suggests the right WebMCP tools for it.
Reads the site's public pages; takes a few seconds.
The open source webmcp plugin teaches your coding agent to audit a site, implement tools on document.modelContext, and verify them in a real browser. npx @ora-ai/webmcp-verify runs the verification on its own. No signup, no hosted service.
how this was captured
observed via
capture shim (Chromium 151.0.7922.34)
chrome
151.0.7922.34
capture shim
v3
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
31
invoked
not invoked; a live audit calls them
run time
15s
finished
Sep 5, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.