solop.ir WebMCP audit

audited Aug 31, 2026in 16s
85/ 100100% of the applicable check weight evaluated

3 tools registered. Strongest in task completion, weakest in trust.

Shared experience75
Task completion100
Tool quality90
Trust75
https://solop.ir
Captured view of https://solop.ir

Tools

1 read, 2 write
Loading map
navigate_to_page: warning

navigate_to_page

کاربر را به یکی از بخش‌های ثابت و مجاز سایت می‌برد. برای مقصدهای وابسته به یک دستیار از navigate_to_assistant_section استفاده کنید.Takes an action on the site.
pagehttps://solop.ir/
implementation
viaimperative
entry pointdocument
registered after1251ms
executepresent
api surface
destinationrequired
annotations
read onlyfalse
untrusted contentfalse
titlenot declared
2 findings
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 2 names do not start with a verb (navigate_to_page).
fix
{ name: "navigate_to_page" /* short, unique, verb-based */ }
warningInjection surface
weight 4
2 of 3 tools carry instruction-shaped text in their own metadata: navigate_to_page Description instructs agent to prefer another tool.
navigate_to_page: Description instructs agent to prefer another tool; search_my_assistants: Description instructs agent when to use the tool
fix
{
  name: "navigate_to_page",
  // 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 json
{
  "name": "navigate_to_page",
  "description": "کاربر را به یکی از بخش‌های ثابت و مجاز سایت می‌برد. برای مقصدهای وابسته به یک دستیار از navigate_to_assistant_section استفاده کنید.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "destination": {
        "type": "string",
        "enum": [
          "home",
          "products",
          "cart",
          "about",
          "contact",
          "faq",
          "sign_in",
          "game",
          "dashboard",
          "dashboard_assistants",
          "dashboard_account",
          "dashboard_settings",
          "dashboard_notifications_settings",
          "dashboard_billing",
          "dashboard_purchases",
          "dashboard_pending_purchases",
          "dashboard_applications",
          "dashboard_divar",
          "dashboard_telegram",
          "dashboard_bale",
          "dashboard_basalam",
          "dashboard_digikala",
          "dashboard_club",
          "dashboard_notifications"
        ],
        "description": "کلید مقصد مجاز در سایت."
      }
    },
    "required": [
      "destination"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "untrustedContentHint": false
  }
}
Showing navigate_to_page

Findings

Shared experience

75 / 100 · weight 30
warningPage experience
weight 20
2 of 4 page-experience marks came back short: usable The main content area is a blank gray box, indicating a loading or missing image..
usable: weak; clarity: weak
warningHuman parity
weight 10
The page the person sees came back short of the agent surface (2 of 4 page-experience marks came back short: usable The main content area is a blank gray box, indicating a loading ...), so the two are not sharing an equal experience.
fix
// Make the tool's effect visible on the page the person is looking at:
// update the same UI your existing human flow uses when your_tool_name runs,
// so the person co-browsing sees what the agent just did.
execute: async (args, { signal }) => {
  const result = await performAction(args, signal);
  renderResultInPage(result); // the human-visible half of the same action
  return result;
}

Task completion

100 / 100 · weight 25
passTool selection
weight 15
An agent chose an existing, callable tool and built a schema-valid call for all 2 canonical intents, each matching the kind of tool its intent needs. Nothing was executed, so this verifies selection, not outcomes.
not applicableCoverage vs. site type
weight 10
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.

Tool quality

90 / 100 · weight 25
warningRegistration timing
weight 1
The slowest tool took 1252ms to register, past the 1000ms an agent reading the registry at first paint would wait for.
toolsearch_my_assistants
search_my_assistants: registered at 1252ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.registerTool({ /* ... */ });
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.
warningSchema quality
weight 4
1 of 3 tool schemas are harder for an agent to use than they need to be: search_my_assistants declares no required list, so an agent cannot tell which parameters are mandatory.
toolsearch_my_assistants
search_my_assistants: declares no required list, so an agent cannot tell which parameters are mandatory
fix
{
  name: "search_my_assistants",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 2 names do not start with a verb (navigate_to_page).
toolnavigate_to_page
fix
{ name: "navigate_to_page" /* 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

75 / 100 · weight 20
passAnnotations present
weight 6
All 1 read-shaped tool declares readOnlyHint: true - the one declared claim that lets an agent treat a call as safe to make without asking.
passAnnotation mismatch
weight 6
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 4
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
warningInjection surface
weight 4
2 of 3 tools carry instruction-shaped text in their own metadata: navigate_to_page Description instructs agent to prefer another tool.
toolnavigate_to_page
navigate_to_page: Description instructs agent to prefer another tool; search_my_assistants: Description instructs agent when to use the tool
fix
{
  name: "navigate_to_page",
  // 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

100% across 2 intents
I want to navigate to page on this site.ok
chosenavigate_to_pageexpected navigate to pagekind matched
arguments
{
  "destination": "home"
}
I want to search my assistants on this site.ok
chosesearch_my_assistantsexpected search my assistantskind matched
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 148.0.7778.96)
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
3
run time
16s
finished
Aug 31, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.