audited Sep 11, 2026in 13s
47/ 100100% of the applicable check weight evaluated

11 tools registered. Strongest in tool quality, weakest in trust.

Shared experience50
Tool selection27
Tool quality90
Trust13
https://goodleads.club
Captured view of https://goodleads.club

Tools

9 read, 2 write
Loading map
goodleads_describe: warning

goodleads_describe

Call this first. What GoodLeads sells and how to evaluate it from this page: the owner of a newly formed US business, by name, with a mailing address and — where verified — a phone or email, on the list the morning after the state posts the filing and before Apollo, ZoomInfo or any other database has the business. Returns the product summary, what every record ships (with the sample-file link — the exact workbook, before paying), the two scores, provenance, the free evaluation tier, the buying journey (interpret → quote → checkout), and where the other tools fit. The close: put the quoted choice in front of the buyer — callable now (a verified phone), emailable now (a verified email, verified for deliverability and recent activity), or newest, mail-first — then hand over the payment link for the one chosen.Answers a question. Declared read only.
pagehttps://goodleads.club/
implementation
viaimperative
entry pointdocument
registered after614ms
executepresent
api surfaceTakes no parameters.
annotations
read onlytrue
untrusted contentfalse
titlenot declared
3 findings
warningSchema quality
weight 4
4 of 11 tool schemas are harder for an agent to use than they need to be: goodleads_describe description is 818 characters, over Chrome's 500-character guidance.
goodleads_describe: description is 818 characters, over Chrome's 500-character guidance; goodleads_sample_leads: 1 parameter description is over Chrome's 150-character guidance; goodleads_quote_list: 
fix
{
  name: "goodleads_describe",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningUntrusted content hint
weight 3
1 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.
goodleads_describe: post, email, mail
fix
{ name: "goodleads_describe", annotations: { untrustedContentHint: true } }
warningInjection surface
weight 3
5 of 11 tools carry instruction-shaped text in their own metadata: goodleads_describe description instructs agent to call tool first.
goodleads_describe: description instructs agent to call tool first; goodleads_interpret_list: description instructs agent to start here; goodleads_list_starters: description instructs agent to show and narrow; goodleads_create_checkout: description instructs agent to say something first
fix
{
  name: "goodleads_describe",
  // 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 json
{
  "name": "goodleads_describe",
  "description": "Call this first. What GoodLeads sells and how to evaluate it from this page: the owner of a newly formed US business, by name, with a mailing address and — where verified — a phone or email, on the list the morning after the state posts the filing and before Apollo, ZoomInfo or any other database has the business. Returns the product summary, what every record ships (with the sample-file link — the exact workbook, before paying), the two scores, provenance, the free evaluation tier, the buying journey (interpret → quote → checkout), and where the other tools fit. The close: put the quoted choice in front of the buyer — callable now (a verified phone), emailable now (a verified email, verified for deliverability and recent activity), or newest, mail-first — then hand over the payment link for the one chosen.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "annotations": {
    "readOnlyHint": true,
    "untrustedContentHint": false
  }
}
Showing goodleads_describe

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 mostly blank, with only a header visible, indicating a broken or incomplete page..
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 mostly blank, with only a header visible, indicating...), 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

27 / 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.
failTool selection
weight 12
An agent chose an existing tool and built a schema-valid call that held up on 0 of 3 canonical intents; on "Find a carry-on suitcase under 300 dollars." no tool on the page served it. Nothing was executed, so this verifies selection, not outcomes.
warningCoverage vs. site type
weight 7
The tool set covers 3 of the 4 things an agent needs on a commerce site; it cannot add to or read the cart.

Tool quality

90 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 614ms of navigation.
toolgoodleads_browse_catalog
passCanonical entry point
weight 3
All 11 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 11 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
4 of 11 tool schemas are harder for an agent to use than they need to be: goodleads_describe description is 818 characters, over Chrome's 500-character guidance.
toolgoodleads_describe
goodleads_describe: description is 818 characters, over Chrome's 500-character guidance; goodleads_sample_leads: 1 parameter description is over Chrome's 150-character guidance; goodleads_quote_list: 
fix
{
  name: "goodleads_describe",
  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 is over Chrome's 30-character guidance; 11 names do not start with a verb (goodleads_describe).
toolgoodleads_data_quality_scorecard
fix
{ name: "goodleads_data_quality_scorecard" /* short, unique, verb-based */ }
passStub detection
weight 4
All 11 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 11 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

13 / 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 (goodleads_interpret_list: "Start here: turns the buyer's own words (e.g. "cleaning companies in Texas wi..."), so an agent will make the change without asking.
toolgoodleads_interpret_list
goodleads_interpret_list: readOnlyHint=true
fix
// readOnlyHint must match what the tool actually does - drop it (or set false) on a tool that writes.
{ name: "goodleads_interpret_list", annotations: { readOnlyHint: false } }
warningUntrusted content hint
weight 3
1 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.
toolgoodleads_describe
goodleads_describe: post, email, mail
fix
{ name: "goodleads_describe", annotations: { untrustedContentHint: true } }
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
5 of 11 tools carry instruction-shaped text in their own metadata: goodleads_describe description instructs agent to call tool first.
toolgoodleads_describe
goodleads_describe: description instructs agent to call tool first; goodleads_interpret_list: description instructs agent to start here; goodleads_list_starters: description instructs agent to show and narrow; goodleads_create_checkout: description instructs agent to say something first
fix
{
  name: "goodleads_describe",
  // 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

0% across 3 intents
Find a carry-on suitcase under 300 dollars.missed
choseno toolexpected product searchkind not applicable
No tool was picked for this intent.
arguments
{}
Show me the details and price of the first result.missed
choseno toolexpected product detailkind not applicable
No tool was picked for this intent.
arguments
{}
Add two of them to my cart.missed
choseno toolexpected cart writekind 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
151.0.7922.34
capture shim
v3
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
11
invoked
not invoked; a live audit calls them
run time
13s
finished
Sep 11, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.