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

3 tools registered. Strongest in shared experience, weakest in tool selection.

Shared experience100
Tool selection30
Tool quality96
Trust100
https://universal-agent-gateway.djrookie99.chatgpt.site
Captured view of https://universal-agent-gateway.djrookie99.chatgpt.site

Tools

3 read, 0 write
Loading map
gateway_task: fail

gateway_task

Runs a read-only task against supported public website sources and returns matching records, provenance, coverage, and structured answer state. The task is for public-site search or extraction; it does not mutate contacts or records, execute transactions, or retrieve an existing result_ref.Answers a question. Declared read only.
pagehttps://universal-agent-gateway.djrookie99.chatgpt.site/
implementation
viaimperative
entry pointdocument
registered after414ms
executepresent
api surface
goalrequired
siteoptional
response_formatoptional
operationoptional
entity_typeoptional
queryoptional
detail_urloptional
candidate_urlsoptional
sitesoptional
constraintsoptional
sortoptional
limitoptional
localeoptional
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
2 findings
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 3 names do not start with a verb (gateway_task).
fix
{ name: "gateway_task" /* short, unique, verb-based */ }
failTool selection
weight 12
An agent chose an existing tool and built a schema-valid call that held up on 1 of 3 canonical intents; on "Find the record for a company called Northwind." the tool it chose does not look like the kind of tool the intent needs. Nothing was executed, so this verifies selection, not outcomes.
tool json
{
  "name": "gateway_task",
  "description": "Runs a read-only task against supported public website sources and returns matching records, provenance, coverage, and structured answer state. The task is for public-site search or extraction; it does not mutate contacts or records, execute transactions, or retrieve an existing result_ref.",
  "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "goal": {
        "type": "string",
        "minLength": 1,
        "maxLength": 1000,
        "description": "The normal-language read-only request."
      },
      "site": {
        "type": "string",
        "minLength": 3,
        "maxLength": 300,
        "description": "Optional public site URL or domain."
      },
      "response_format": {
        "type": "string",
        "enum": [
          "concise",
          "detailed"
        ],
        "description": "Optional response size."
      },
      "operation": {
        "type": "string",
        "enum": [
          "search",
          "detail"
        ],
        "description": "Optional universal operation."
      },
      "entity_type": {
        "type": "string",
        "enum": [
          "product",
          "job",
          "article",
          "rental",
          "lodging",
          "discussion",
          "video",
          "unknown"
        ],
        "description": "Optional record type for the universal task."
      },
      "query": {
        "type": "string",
        "minLength": 1,
        "maxLength": 240,
        "description": "Optional bounded search phrase."
      },
      "detail_url": {
        "type": "string",
        "minLength": 3,
        "maxLength": 1000,
        "description": "Optional public detail URL for structured extraction."
      },
      "candidate_urls": {
        "type": "array",
        "maxItems": 5,
        "items": {
          "type": "string",
          "minLength": 3,
          "maxLength": 1000
        },
        "description": "Optional public URLs to evaluate when site search is unavailable."
      },
      "sites": {
        "type": "array",
        "minItems": 1,
        "maxItems": 3,
        "items": {
          "type": "string",
          "minLength": 3,
          "maxLength": 300
        },
        "description": "Optional list of up to three public targets."
      },
      "constraints": {
        "type": "array",
        "maxItems": 12,
        "items": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "field": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Constraint field."
            },
            "operator": {
              "type": "string",
              "enum": [
                "eq",
                "neq",
                "lt",
                "lte",
                "gt",
                "gte",
                "contains",
                "in"
              ],
              "description": "Constraint operator."
            },
            "value": {},
            "unit": {
              "type": "string",
              "minLength": 1,
              "maxLength": 24,
              "description": "Optional unit."
            },
            "currency": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            },
            "required": {
              "type": "boolean"
            }
          }
        },
        "description": "Optional explicit record constraints."
      },
      "sort": {
        "type": "object",
        "additionalProperties": false,
        "description": "Optional result ordering by field and direction.",
        "properties": {
          "field": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "Sort field."
          },
          "direction": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "description": "Sort direction."
          }
        }
      },
      "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 10,
        "description": "Maximum universal results to return."
      },
      "locale": {
        "type": "object",
        "additionalProperties": false,
        "description": "Optional language, market, currency, and timezone context for interpreting source data.",
        "properties": {
          "language": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16,
            "description": "Language tag."
          },
          "market": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16,
            "description": "Market code."
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "IANA timezone."
          }
        }
      }
    },
    "required": [
      "goal"
    ]
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing gateway_task

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

30 / 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 1 of 3 canonical intents; on "Find the record for a company called Northwind." the tool it chose does not look like the kind of tool the intent needs. Nothing was executed, so this verifies selection, not outcomes.
toolgateway_task
failCoverage vs. site type
weight 7
The tool set covers 1 of the 4 things an agent needs on a saas site; it cannot search or browse the catalog or create a record or start a job or update or move an existing record.

Tool quality

96 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 415ms of navigation.
toolgateway_get_result
passCanonical entry point
weight 3
All 3 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 3 declared input schemas are structurally valid object schemas.
passSchema quality
weight 4
All 3 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: 3 names do not start with a verb (gateway_task).
toolgateway_task
fix
{ name: "gateway_task" /* short, unique, verb-based */ }
passStub detection
weight 4
All 3 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 3 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

100 / 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.
passAnnotation mismatch
weight 5
No tool claims to be read-only while its own name or description says it writes (3 declared hints checked).
not applicableUntrusted content hint
weight 3
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
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.
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

33% across 3 intents
Find the record for a company called Northwind.missed
chosegateway_taskexpected record searchkind mismatch
The tool the model chose does not look like the kind of tool this intent needs.
arguments
{
  "goal": "Find the record for a company called Northwind.",
  "query": "Northwind"
}
Show me everything on that record.ok
chosegateway_get_resultexpected record detailkind matched
arguments
{
  "result_ref": ""
}
Create a new contact called Dana Reeve.missed
choseno toolexpected record createkind 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
capture shim (Chromium 151.0.7922.34)
chrome
151.0.7922.34
capture shim
v3
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
3
invoked
not invoked; a live audit calls them
run time
12s
finished
Sep 7, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.