audited Aug 28, 2026in 7s
41/ 100

5 tools registered. Strongest in usefulness, weakest in WebMCP use.

WebMCP use36
Usefulness50
Human experience40
about:blank

No agent run recorded yet.

No steps recorded

Tools

/
ic_overview: fail

ic_overview

What Immersive Commons is, plus the URL map an agent needs to discover and connect to its agent surface (manifest, MCP, A2A, OAuth metadata, skills, registration guide). Read this first.Registered without an execute function, so calling it does nothing.
pagehttps://www.immersivecommons.com/
implementation
viaimperative
entry pointprovideContext
registered after1107ms
executemissing
api surfaceTakes no parameters.
annotations
read onlynot declared
destructivenot declared
idempotentnot declared
open worldnot declared
untrusted contentnot declared
titlenot declared
5 findings
failSchema validity
0 / 5
3 of 3 tools declare an input schema an agent cannot read: ic_overview declares no input schema.
ic_overview: declares no input schema; ic_how_to_connect: declares no input schema; ic_get_latest_signal: declares no input schema
fix
{
  name: "ic_overview",
  inputSchema: { type: "object", properties: { /* ... */ }, required: [] }
}
warningNaming quality
1 / 2
Tool naming makes selection harder than it needs to be: 5 names do not start with a verb (ic_overview).
fix
{ name: "ic_overview" /* short, unique, verb-based */ }
failStub detection
0 / 5
Every registered tool is a facade: none declares an execute handler, so an agent that calls one gets nothing back.
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
{
  name: "ic_overview",
  execute: async (args) => {
    // Perform the real action here - return live data, not a static placeholder.
    return result;
  }
}
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.
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
{
  name: "ic_overview",
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }
}
warningHuman parity
3.2 / 8
3 of 5 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.
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="ic_overview" tooldescription="...">
  <!-- the same action, as UI -->
</form>
tool json
{
  "name": "ic_overview",
  "description": "What Immersive Commons is, plus the URL map an agent needs to discover and connect to its agent surface (manifest, MCP, A2A, OAuth metadata, skills, registration guide). Read this first.",
  "inputSchema": null,
  "annotations": {}
}
Showing ic_overview

Findings

WebMCP use

36 / 100 · weight 50
warningTools registered
2 / 4
3 imperative tools and 2 declarative forms registered across 1 page, but not one of the 3 JavaScript tools declares an execute handler, so an agent finds them and can run none of them.
fix
document.modelContext.provideContext({
  tools: [{ name: "your_tool_name", description: "...", inputSchema: { type: "object", properties: {} }, execute: async (args) => { /* ... */ } }],
});
failReal-browser eligible
0 / 8
The page's code registers these tools, but a real visitor's browser does not get them yet: WebMCP needs a native modelContext or a current origin trial token, and this page has neither. The 2 declarative form tools on the page stay usable regardless.
warningRegistration timing
2 / 4
The slowest tool took 1107.2999999523163ms to register, past the 1000ms an agent reading the registry at first paint would wait for. 2 further tools carried no measurable registration time.
toolic_how_to_connect
ic_how_to_connect: registered at 1107.2999999523163ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.provideContext({ tools: [/* ... */] });
passCanonical entry point
4 / 4
All 3 tools register on the canonical document.modelContext entry point.
failSchema validity
0 / 5
3 of 3 tools declare an input schema an agent cannot read: ic_overview declares no input schema.
toolic_overview
ic_overview: declares no input schema; ic_how_to_connect: declares no input schema; ic_get_latest_signal: declares no input schema
fix
{
  name: "ic_overview",
  inputSchema: { type: "object", properties: { /* ... */ }, required: [] }
}
passSchema quality
4 / 4
All 5 tool schemas describe their parameters and stay within Chrome's size guidance.
failStub detection
0 / 5
Every registered tool is a facade: none declares an execute handler, so an agent that calls one gets nothing back.
toolic_overview
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
{
  name: "ic_overview",
  execute: async (args) => {
    // Perform the real action here - return live data, not a static placeholder.
    return result;
  }
}
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.
toolic_overview
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
{
  name: "ic_overview",
  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.
passRegistration errors
2 / 2
No tool registration threw during the capture.
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

50 / 100 · weight 30
warningNaming quality
1 / 2
Tool naming makes selection harder than it needs to be: 5 names do not start with a verb (ic_overview).
toolic_overview
fix
{ name: "ic_overview" /* short, unique, verb-based */ }
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

40 / 100 · weight 20
warningHuman parity
3.2 / 8
3 of 5 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.
toolic_overview
ic_overview, ic_how_to_connect, ic_get_latest_signal
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="ic_overview" 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
5
run time
7s
finished
Aug 28, 2026