essentials.sh WebMCP audit

audited Sep 1, 2026in 39s
69/ 100100% of the applicable check weight evaluated

7 tools registered. Strongest in tool quality, weakest in task completion.

Shared experience88
Task completion0
Tool quality95
Trust93
https://essentials.sh
Captured view of https://essentials.sh

Tools

7 read, 0 write
Loading map
generate_qr_code: warning

generate_qr_code

Generate a QR code for a URL. Returns the QR code as an SVG document that can be rendered directly or saved as a .svg file. Runs locally in the browser; https:// is assumed when the URL has no scheme.Answers a question. Declared read only.
pagehttps://essentials.sh/
implementation
viaimperative
entry pointdocument
registered after775ms
executepresent
api surface
urlrequired
errorCorrectionoptional
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
1 finding
warningAnnotation mismatch
weight 6
1 tool declares readOnlyHint: true although the name says the call writes (generate_qr_code).
generate_qr_code: readOnlyHint=true
fix
// readOnlyHint must match what the tool actually does - drop it (or set false) on a tool that writes.
{ name: "generate_qr_code", annotations: { readOnlyHint: false } }
tool json
{
  "name": "generate_qr_code",
  "description": "Generate a QR code for a URL. Returns the QR code as an SVG document that can be rendered directly or saved as a .svg file. Runs locally in the browser; https:// is assumed when the URL has no scheme.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "url": {
        "type": "string",
        "description": "The URL to encode"
      },
      "errorCorrection": {
        "type": "string",
        "enum": [
          "L",
          "M",
          "Q",
          "H"
        ],
        "description": "Error correction level: L ~7%, M ~15% (default), Q ~25%, H ~30% recoverable. Use H when overlaying a logo."
      }
    },
    "required": [
      "url"
    ]
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing generate_qr_code

Findings

Shared experience

88 / 100 · weight 30
passPage experience
weight 20
1 of 4 page-experience marks came back short: obstruction A cookie banner partially obscures content at the bottom of the page..
obstruction: weak
passHuman parity
weight 10
The person co-browsing can see and use this page - the same page the agent's tools act on.

Task completion

0 / 100 · weight 25
failTool selection
weight 15
An agent chose an existing tool and built a schema-valid call that held up on 0 of 3 canonical intents; on "Open the document I was working on most recently." no tool on the page served it. Nothing was executed, so this verifies selection, not outcomes.
failCoverage vs. site type
weight 10
The tool set covers 0 of the 3 things an agent needs on a editor site; it cannot open or read a document or edit or write content or save, publish, or share the result.

Tool quality

95 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 776ms of navigation.
toolcheck_email_security
passCanonical entry point
weight 3
All 7 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 7 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
1 of 7 tool schemas are harder for an agent to use than they need to be: build_robots_txt declares no required list, so an agent cannot tell which parameters are mandatory.
toolbuild_robots_txt
build_robots_txt: declares no required list, so an agent cannot tell which parameters are mandatory
fix
{
  name: "build_robots_txt",
  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: 5 names do not start with a verb (build_meta_tags).
toolbuild_meta_tags
fix
{ name: "build_meta_tags" /* short, unique, verb-based */ }
passStub detection
weight 4
All 7 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 7 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

93 / 100 · weight 20
passAnnotations present
weight 6
All 1 read-shaped tool declares readOnlyHint: true - the one declared claim that lets an agent treat a call as safe to make without asking.
warningAnnotation mismatch
weight 6
1 tool declares readOnlyHint: true although the name says the call writes (generate_qr_code).
toolgenerate_qr_code
generate_qr_code: readOnlyHint=true
fix
// readOnlyHint must match what the tool actually does - drop it (or set false) on a tool that writes.
{ name: "generate_qr_code", annotations: { readOnlyHint: false } }
not applicableUntrusted content hint
weight 4
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
not applicableInjection surface
weight 4
No tool's metadata carries instruction-shaped text aimed at the agent reading it. This check only ever flags; it never credits a site.

Tool selection

0% across 3 intents
Open the document I was working on most recently.missed
choseno toolexpected document openkind not applicable
No tool was picked for this intent.
arguments
{}
Add a short summary paragraph at the top.missed
choseno toolexpected content editkind not applicable
No tool was picked for this intent.
arguments
{}
Save it and give me a link I can share.missed
choseno toolexpected save or sharekind not applicable
No tool was picked for this intent.
arguments
{}
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
native modelContext
chrome
148.0.7778.96
capture shim
v2
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
7
run time
39s
finished
Sep 1, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.