audited Nov 3, 2026in 25s
81/ 100100% of the applicable check weight evaluated

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

Shared experience87
Tool selection100
Tool quality90
Trust36
https://webmcpworld.com
Captured view of https://webmcpworld.com

Tools

0 read, 7 write
Loading map
contact_us: warning

contact_us

Use this tool to submit the Contact Us. This form collects: Name, Email, Comment or Message.Takes an action on the site.
pagehttps://webmcpworld.com/
implementation
viaimperative
entry pointdocument
registered after4519ms
executepresent
api surface
namerequired
emailrequired
commentormessagerequired
annotations
read onlyfalse
untrusted contentfalse
titlenot declared
consequentialtrue
2 findings
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 1 name does not start with a verb (contact_us).
fix
{ name: "contact_us" /* short, unique, verb-based */ }
warningUntrusted content hint
weight 3
2 of 2 tools look like they return text written by other people but declare no untrustedContentHint, so an agent will treat the response as the site speaking.
contact_us: comment, message, email; get_posts: post, user
fix
{ name: "contact_us", annotations: { untrustedContentHint: true } }
tool json
{
  "name": "contact_us",
  "description": "Use this tool to submit the Contact Us. This form collects: Name, Email, Comment or Message.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string",
        "title": "Name",
        "description": "First Name and Last Name Field"
      },
      "email": {
        "type": "string",
        "title": "Email",
        "description": "email",
        "format": "email"
      },
      "commentormessage": {
        "type": "string",
        "title": "Comment or Message",
        "description": "Add query or your message"
      }
    },
    "required": [
      "name",
      "email",
      "commentormessage"
    ]
  },
  "annotations": {
    "readOnlyHint": false,
    "untrustedContentHint": false,
    "consequentialHint": true
  }
}
Showing contact_us

Findings

Shared experience

87 / 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 and not consequentialHint: true.
passPage experience
weight 16
1 of 4 page-experience marks came back short: readability Some text is very light against a dark background, making it hard to read..
readability: weak
passHuman parity
weight 8
The person co-browsing can see and use this page - the same page the agent's tools act on.

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 and not consequentialHint: 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.
not applicableCoverage vs. site type
weight 7
This tool set does not place the site in a category with a known expected tool shape, so there is no coverage baseline to score it against.

Tool quality

90 / 100 · weight 25
failRegistration timing
weight 1
The slowest tool took 4628ms to register, past the 3000ms window an agent snapshots the registry in, so it may never be offered.
toolget_categories
get_categories: registered at 4628ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.registerTool({ /* ... */ });
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
2 of 7 tool schemas are harder for an agent to use than they need to be: search_posts 3 parameters have no description (post_type, per_page, page).
toolsearch_posts
search_posts: 3 parameters have no description (post_type, per_page, page); get_categories: 3 parameters have no description (hide_empty, per_page, page)
fix
{
  name: "search_posts",
  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: 1 name does not start with a verb (contact_us).
toolcontact_us
fix
{ name: "contact_us" /* 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

36 / 100 · weight 20
failAnnotations present
weight 4
6 of 6 read-shaped tools do not declare readOnlyHint: true, so an agent has to treat them as possible writes and ask before calling. (Declaring readOnlyHint: false earns nothing - it is the default.)
toolsearch_posts
search_posts, get_posts, get_post, get_site_info, get_categories
fix
{
  name: "search_posts",
  // Declare readOnlyHint: true on tools that truly have no side effects -
  // that is the claim that lets an agent relax confirmation on reads.
  // (false is the default, so declaring it adds no information.)
  annotations: { readOnlyHint: true }
}
passAnnotation mismatch
weight 4
No tool claims to be read-only while its own name or description says it writes (7 declared hints checked).
warningUntrusted content hint
weight 3
2 of 2 tools look like they return text written by other people but declare no untrustedContentHint, so an agent will treat the response as the site speaking.
toolcontact_us
contact_us: comment, message, email; get_posts: post, user
fix
{ name: "contact_us", annotations: { untrustedContentHint: true } }
not applicableConsequential hint
weight 3
No tool name reads like a consequential action (a purchase, a booking, a payment, a transfer, a deletion), so there is no consequentialHint to expect.
not applicableHint vs. observed
weight 3
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 and not consequentialHint: true.
not applicableInjection surface
weight 3
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

100% across 3 intents
I want to contact us on this site.ok
chosecontact_usexpected contact uskind matched
arguments
{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "commentormessage": "I would like to contact you."
}
I want to search posts on this site.ok
chosesearch_postsexpected search postskind matched
arguments
{
  "query": ""
}
I want to get posts on this site.ok
choseget_postsexpected get postskind matched
arguments
{
  "post_type": "post"
}
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-10-16
mode
fast
pages
1 - entry page only
tools
7
invoked
not invoked; a live audit calls them
run time
25s
finished
Nov 3, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.