audited Aug 28, 2026in 7s
65/ 100

3 tools registered. Strongest in usefulness, weakest in human experience.

WebMCP use71
Usefulness100
Human experience0
about:blank

No agent run recorded yet.

No steps recorded

Tools

/en/
search_villas: fail

search_villas

Busca villas de alquiler vacacional de Abahana Villas en la Costa Blanca (Calpe, Moraira, Jávea, Altea, Benissa). Devuelve un resumen de cada villa con su external reference code, capacidad y, si se indican fechas, el precio para esas fechas.Takes an action on the site.
pagehttps://www.abahanavillas.com/en/
implementation
viaimperative
entry pointnavigator
registered after821ms
executepresent
api surface
locationoptional
checkInoptional
checkOutoptional
minDaysoptional
adultsoptional
childrenoptional
petsoptional
descriptorsoptional
pageoptional
pageSizeoptional
annotations
read onlynot declared
destructivenot declared
idempotentnot declared
open worldnot declared
untrusted contentnot declared
titlenot declared
4 findings
failCanonical entry point
0 / 4
Every tool registers through the deprecated navigator.modelContext alias; move them to document.modelContext before the alias is removed.
fix
// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });
warningSchema quality
2.7 / 4
1 of 3 tool schemas are harder for an agent to use than they need to be: search_villas declares no required list, so an agent cannot tell which parameters are mandatory.
search_villas: declares no required list, so an agent cannot tell which parameters are mandatory
fix
{
  name: "search_villas",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
failAnnotations present
0 / 4
3 of 3 tools declare no readOnlyHint, so an agent cannot tell a read from a write without guessing from the name.
search_villas, get_villa_details, check_villa_availability
fix
{
  name: "search_villas",
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }
}
warningHuman parity
0 / 8
3 of 3 tools run through the JavaScript API with no visible counterpart, so the person co-browsing cannot see what the agent is offered. Declarative forms (or at least a title annotation) close the gap.
search_villas, get_villa_details, check_villa_availability
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="search_villas" tooldescription="...">
  <!-- the same action, as UI -->
</form>
tool json
{
  "name": "search_villas",
  "description": "Busca villas de alquiler vacacional de Abahana Villas en la Costa Blanca (Calpe, Moraira, Jávea, Altea, Benissa). Devuelve un resumen de cada villa con su external reference code, capacidad y, si se indican fechas, el precio para esas fechas.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "Destino: Calpe, Moraira, Javea, Altea o Benissa"
      },
      "checkIn": {
        "type": "string",
        "description": "Fecha de entrada en formato YYYY-MM-DD"
      },
      "checkOut": {
        "type": "string",
        "description": "Fecha de salida en formato YYYY-MM-DD"
      },
      "minDays": {
        "type": "number",
        "description": "Estancia mínima en noches"
      },
      "adults": {
        "type": "number",
        "description": "Número de adultos"
      },
      "children": {
        "type": "number",
        "description": "Número de niños"
      },
      "pets": {
        "type": "number",
        "description": "Mascotas: 0 o 1"
      },
      "descriptors": {
        "type": "string",
        "description": "Filtros adicionales (piscina, vistas al mar, etc.)"
      },
      "page": {
        "type": "number",
        "description": "Página, empezando en 1"
      },
      "pageSize": {
        "type": "number",
        "minimum": 1,
        "maximum": 20,
        "description": "Resultados por página (entre 1 y 20)"
      }
    }
  },
  "annotations": {}
}
Showing search_villas

Findings

WebMCP use

71 / 100 · weight 50
passTools registered
4 / 4
3 tools registered across 1 page.
passReal-browser eligible
8 / 8
A real browser exposes modelContext natively on this page, so the tools registered here are visible to an agent today.
passRegistration timing
4 / 4
Every measured tool registered within 821.1000001430511ms of navigation.
toolget_villa_details
failCanonical entry point
0 / 4
Every tool registers through the deprecated navigator.modelContext alias; move them to document.modelContext before the alias is removed.
toolsearch_villas
fix
// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });
passSchema validity
5 / 5
All 3 tools declare a structurally valid object input schema.
warningSchema quality
2.7 / 4
1 of 3 tool schemas are harder for an agent to use than they need to be: search_villas declares no required list, so an agent cannot tell which parameters are mandatory.
toolsearch_villas
search_villas: declares no required list, so an agent cannot tell which parameters are mandatory
fix
{
  name: "search_villas",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
passStub detection
5 / 5
All 3 tools declare an execute handler.
failAnnotations present
0 / 4
3 of 3 tools declare no readOnlyHint, so an agent cannot tell a read from a write without guessing from the name.
toolsearch_villas
search_villas, get_villa_details, check_villa_availability
fix
{
  name: "search_villas",
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }
}
not applicableAnnotation mismatch
0 / 3
No tool declares a readOnlyHint, so there is no safety claim to contradict.
not applicableUntrusted content hint
0 / 2
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
failRegistration errors
0 / 2
3 tool registrations threw during the capture, so the registry an agent reads is incomplete.
duplicate tool name registered: search_villas
fix
try {
  document.modelContext.provideContext({ tools: [/* ... */] });
} catch (err) {
  console.error("WebMCP registration failed", err);
}
warningToolchange coherence
1 / 2
3 tools were registered but the page never dispatched a toolchange event, so an agent subscribed to registry updates never learns they exist.
fix
document.modelContext.dispatchEvent(new Event("toolchange"));
not applicableInjection surface
0 / 3
The injection-surface model hop returned no usable result, so tool contracts were not reviewed for injection surface.

Usefulness

100 / 100 · weight 30
passNaming quality
2 / 2
All 3 tool names are consistent, verb-led, and within Chrome's size guidance.
not applicableDescription quality
0 / 6
The description-quality model hop returned no usable result, so descriptions were not rated.
not applicableTool selection
0 / 14
The tool-selection model hop returned no usable result.
not applicableCoverage vs. site type
0 / 8
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.

Human experience

0 / 100 · weight 20
warningHuman parity
0 / 8
3 of 3 tools run through the JavaScript API with no visible counterpart, so the person co-browsing cannot see what the agent is offered. Declarative forms (or at least a title annotation) close the gap.
toolsearch_villas
search_villas, get_villa_details, check_villa_availability
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="search_villas" tooldescription="...">
  <!-- the same action, as UI -->
</form>
not applicablePage experience
0 / 12
The page-experience model hop returned no usable result, so the page was not graded.

Tool selection

The tool-selection model hop returned no usable result.
how this was captured
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08
mode
fast
pages
1
tools
3
run time
7s
finished
Aug 28, 2026