audited Sep 4, 2026in 12s
57/ 100100% of the applicable check weight evaluated

6 tools registered. Strongest in shared experience, weakest in trust.

Shared experience100
Tool selection18
Tool quality91
Trust0
https://paytech.events
Captured view of https://paytech.events

Tools

0 read, 0 write, 6 undeclared
Loading map
search_fintech_events: fail

search_fintech_events

Search PayTech.Events for fintech, banking, payments and ecommerce conferences. Filter by free-text query, city, country, region, date range, and maximum ticket price (EUR). Returns matching events with dates, location, price and the page URL. Use this instead of scraping the site when the user asks which conferences to attend.No behaviour hints declared. Agents should treat it as possibly state-changing.
pagehttps://paytech.events/
implementation
viaimperative
entry pointdocument
registered after391ms
executepresent
api surface
queryoptional
cityoptional
countryoptional
regionoptional
fromoptional
tooptional
maxPriceEuroptional
includePastoptional
limitoptional
annotations
read onlynot declared
untrusted contentnot declared
titlenot declared
3 findings
failAnnotations present
weight 5
5 of 5 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.)
search_fintech_events, get_event_details, compare_events, get_destination_guide, estimate_conference_trip_cost
fix
{
  name: "search_fintech_events",
  // 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 }
}
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.
search_fintech_events: user, ticket; compare_events: user, ticket
fix
{ name: "search_fintech_events", annotations: { untrustedContentHint: true } }
warningInjection surface
weight 3
4 of 6 tools carry instruction-shaped text in their own metadata: search_fintech_events description instructs agent to prefer this tool over scraping.
search_fintech_events: description instructs agent to prefer this tool over scraping; compare_events: description instructs agent when to use this tool; get_destination_guide: description instructs agent when to use this tool; fill_expense_calculator: description instructs agent to use another tool first
fix
{
  name: "search_fintech_events",
  // 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": "search_fintech_events",
  "description": "Search PayTech.Events for fintech, banking, payments and ecommerce conferences. Filter by free-text query, city, country, region, date range, and maximum ticket price (EUR). Returns matching events with dates, location, price and the page URL. Use this instead of scraping the site when the user asks which conferences to attend.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "Free text matched against event title, city, country and tags."
      },
      "city": {
        "type": "string",
        "description": "Filter by city, e.g. \"London\"."
      },
      "country": {
        "type": "string",
        "description": "Filter by country, e.g. \"Germany\"."
      },
      "region": {
        "type": "string",
        "description": "Filter by region, e.g. \"Europe\", \"North America\", \"Asia\"."
      },
      "from": {
        "type": "string",
        "description": "Only events starting on/after this date (YYYY-MM-DD). Defaults to today."
      },
      "to": {
        "type": "string",
        "description": "Only events starting on/before this date (YYYY-MM-DD)."
      },
      "maxPriceEur": {
        "type": "number",
        "description": "Maximum standard pass price in EUR.",
        "minimum": 0
      },
      "includePast": {
        "type": "boolean",
        "description": "Include events that have already happened. Default false."
      },
      "limit": {
        "type": "number",
        "description": "Max results (default 20, max 100).",
        "minimum": 1,
        "maximum": 100
      }
    }
  },
  "annotations": {}
}
Showing search_fintech_events

Findings

Shared experience

100 / 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.
passPage experience
weight 16
The page a person sees holds up next to the agent surface: a working interface, visible actions, readable content, nothing in the way.
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

18 / 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 hotel in Lisbon for two nights in June." 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 2 of the 4 things an agent needs on a travel site; it cannot book or hold a reservation or look up or change an existing booking.

Tool quality

91 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 391ms of navigation.
toolfill_expense_calculator
passCanonical entry point
weight 3
All 6 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 6 declared input schemas are structurally valid object schemas.
passSchema quality
weight 4
All 6 tool schemas describe their parameters, and every description stays within Chrome's size guidance.
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 1 name does not start with a verb (fill_expense_calculator).
toolfill_expense_calculator
fix
{ name: "fill_expense_calculator" /* short, unique, verb-based */ }
passStub detection
weight 4
All 6 tools declare an execute handler.
failRegistration errors
weight 2
6 tool registrations threw during the capture, so the registry an agent reads is incomplete.
duplicate tool name registered: search_fintech_events
fix
document.modelContext.registerTool({ /* ... */ }).catch(function (err) {
  console.error("WebMCP registration failed", err);
});
passDescription quality
weight 5
All 6 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

0 / 100 · weight 20
failAnnotations present
weight 5
5 of 5 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_fintech_events
search_fintech_events, get_event_details, compare_events, get_destination_guide, estimate_conference_trip_cost
fix
{
  name: "search_fintech_events",
  // 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 }
}
not applicableAnnotation mismatch
weight 5
No tool declares a readOnlyHint, so there is no safety claim to contradict.
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.
toolsearch_fintech_events
search_fintech_events: user, ticket; compare_events: user, ticket
fix
{ name: "search_fintech_events", 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
4 of 6 tools carry instruction-shaped text in their own metadata: search_fintech_events description instructs agent to prefer this tool over scraping.
toolsearch_fintech_events
search_fintech_events: description instructs agent to prefer this tool over scraping; compare_events: description instructs agent when to use this tool; get_destination_guide: description instructs agent when to use this tool; fill_expense_calculator: description instructs agent to use another tool first
fix
{
  name: "search_fintech_events",
  // 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 hotel in Lisbon for two nights in June.missed
choseno toolexpected availability searchkind not applicable
No tool was picked for this intent.
arguments
{}
Show me the details of the cheapest one.missed
choseno toolexpected listing detailkind not applicable
No tool was picked for this intent.
arguments
{}
Look up the status of my existing booking.missed
choseno toolexpected booking lookupkind 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
6
invoked
not invoked; a live audit calls them
run time
12s
finished
Sep 4, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.