3 tools registered. Strongest in usefulness, weakest in human experience.
{ name: "scan_domain" /* short, unique, verb-based */ }scan_domain{
name: "scan_domain",
// readOnlyHint: true only when the tool truly has no side effects.
annotations: { readOnlyHint: true, untrustedContentHint: false }
}scan_domain, get_score, get_leaderboard<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="scan_domain" tooldescription="...">
<!-- the same action, as UI -->
</form>{
"name": "scan_domain",
"description": "Run an Ora agent-readiness scan for a domain or MCP server URL. Returns the 0-100 score, grade, and per-layer breakdown; a recent stored result is served from cache instead of rescanning.",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Domain or URL to scan, e.g. stripe.com"
}
},
"required": [
"url"
],
"additionalProperties": false
},
"annotations": {}
}https://headless.vision/ -> https://vision.ora.ai/document.modelContext.registerTool({
name: "your_tool_name",
description: "...",
inputSchema: { type: "object", properties: {} },
execute: async (args) => { /* ... */ }
});get_leaderboard: declares no required list, so an agent cannot tell which parameters are mandatory{
name: "get_leaderboard",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}scan_domain{
name: "scan_domain",
// readOnlyHint: true only when the tool truly has no side effects.
annotations: { readOnlyHint: true, untrustedContentHint: false }
}// The browser fires toolchange itself on register/unregister - never dispatch it by hand.
// Retire stale tools via the registration AbortSignal so agents see a coherent registry.
var controller = new AbortController();
document.modelContext.registerTool(tool, { signal: controller.signal });
// later, when the tool no longer applies:
controller.abort();{ name: "scan_domain" /* short, unique, verb-based */ }scan_domain, get_score, get_leaderboard<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="scan_domain" tooldescription="...">
<!-- the same action, as UI -->
</form>{}{
"domain": "stripe.com"
}{
"url": "stripe.com"
}