audited Oct 7, 2026in 8s
62/ 100100% of the applicable check weight evaluated

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

Shared experience100
Tool selection12
Tool quality96
Trust26
https://radustoian.com
Captured view of https://radustoian.com

Tools

8 read, 0 write, 4 undeclared
Loading map
navigateToSection: pass

navigateToSection

Scrolls the page to a section of Radu Stoian's profile and returns that section's heading and text. Sections: top (intro), about, expertise, insights (articles), projects (case studies), testimonials, speaking (talks & podcasts), skills (certifications), connect (contact).Answers a question. Declared read only.
pagehttps://radustoian.com/
implementation
viaimperative
entry pointdocument
registered after305ms
executepresent
api surface
sectionrequired
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
0 findingsNo check named this tool.
tool json
{
  "name": "navigateToSection",
  "description": "Scrolls the page to a section of Radu Stoian's profile and returns that section's heading and text. Sections: top (intro), about, expertise, insights (articles), projects (case studies), testimonials, speaking (talks & podcasts), skills (certifications), connect (contact).",
  "inputSchema": {
    "type": "object",
    "properties": {
      "section": {
        "type": "string",
        "enum": [
          "top",
          "about",
          "expertise",
          "insights",
          "projects",
          "testimonials",
          "speaking",
          "skills",
          "connect"
        ],
        "description": "ID of the section to bring into view."
      }
    },
    "required": [
      "section"
    ]
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing navigateToSection

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

12 / 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 "Open the document I was working on most recently." no tool on the page served it. Nothing was executed, so this verifies selection, not outcomes.
failCoverage vs. site type
weight 7
The tool set covers 1 of the 3 things an agent needs on a editor site; it cannot edit or write content or save, publish, or share the result.

Tool quality

96 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 480ms of navigation.
toolget-investigation-links
passCanonical entry point
weight 3
All 12 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 12 declared input schemas are structurally valid object schemas.
passSchema quality
weight 4
All 6 of 12 tool schemas that declare parameters describe them (the other 6 declare no parameters), and every description stays within Chrome's size guidance.
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: names mix camel and kebab conventions; 1 name does not start with a verb (server-info).
toolserver-info
fix
{ name: "server-info" /* short, unique, verb-based */ }
passStub detection
weight 4
All 12 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 12 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

26 / 100 · weight 20
warningAnnotations present
weight 5
3 of 10 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.)
toolask-question
ask-question, get-section, get-investigation-links
fix
{
  name: "ask-question",
  // 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 }
}
failAnnotation mismatch
weight 5
1 tool's own description says it writes while the tool declares readOnlyHint: true (showCarouselSlide: "Moves the "caseStudies" or "testimonials" carousel (next, previous, or go to ..."), so an agent will make the change without asking.
toolshowCarouselSlide
showCarouselSlide: readOnlyHint=true
fix
// readOnlyHint must match what the tool actually does - drop it (or set false) on a tool that writes.
{ name: "showCarouselSlide", annotations: { readOnlyHint: false } }
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.
warningInjection surface
weight 3
2 of 12 tools carry instruction-shaped text in their own metadata: getContactLinks description instructs agent to prefer a channel.
toolgetContactLinks
getContactLinks: description instructs agent to prefer a channel; ask-question: description instructs agent to provide a default answer
fix
{
  name: "getContactLinks",
  // 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
Open the document I was working on most recently.missed
choseno toolexpected document openkind not applicable
No tool was picked for this intent.
arguments
{}
Add a short summary paragraph at the top.missed
choseno toolexpected content editkind not applicable
No tool was picked for this intent.
arguments
{}
Save it and give me a link I can share.missed
choseno toolexpected save or sharekind 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
12
invoked
not invoked; a live audit calls them
run time
8s
finished
Oct 7, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.