WEBMCP AUDIT REPORT

https://example.by/

scanned 2026-09-18T09:25:50.011Z rulepack rulepack-2026.09.1 scanner webmcp-scanner/0.2.0 tools 9 reproduce node scanner/bin/webmcp-scan.js https://example.by/
Live

Visible to real users: tools are registered through the native, flag-free WebMCP API. Any capable agent visiting this page today can see and call them.

D
crit 0 high 0 med 4 low 0 info 5

security grade from deterministic rules only

Origin trial tokens

kindfeatureoriginexpirysubdomainorigin matchesstatus
meta WebMCP https://example.by:443 2026-11-17T00:00:00.000Z no no valid

Tools

nametitledescriptionoriginsourceannotationsschema props
list-tools List the tools and apps published on the Services Hub, with category, description, URL and capability metadata. Optional filters narrow the list. https://example.by native 5
list-categories List the categories the Services Hub tools are grouped into, with how many tools sit in each. https://example.by native 0
get-tool Return the full record for one Services Hub tool: description, every domain it answers on, where the processing happens, accepted and produced formats, interfac… https://example.by native 1
search-tools Find Services Hub tools by keyword. Searches names, descriptions, categories, domains, file formats and the task phrasings each tool is indexed under. https://example.by native 1
recommend-tool Describe a task in plain language and get the Services Hub tools that fit it, best first, with the reason each one matched. Use this when you know what the user… https://example.by native 2
find-tool-for-file Given a filename, extension or MIME type, return the Services Hub tools that accept it, and the tools that produce it. https://example.by native 1
list-formats List every file format the Services Hub handles, mapping each input format to the tools that read it and each output format to the tools that write it. https://example.by native 0
open-tool Open one of the Services Hub tools in a new browser tab, by its name. This navigates the user, so only call it once they have chosen a tool. https://example.by native 1
set-theme Switch the Services Hub between the light and dark colour themes. https://example.by native 1

Findings

SECURITY

medium missing-annotations LLM08 deterministic
Mutating tool ships without readOnlyHint

Tool "list-formats" looks state-changing but declares no readOnlyHint. Agents use that flag to gate risky calls; without it they cannot tell this tool apart from a safe read.

at tool list-formats · field annotations
{}
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check missing-annotations
medium missing-annotations LLM08 deterministic
Mutating tool ships without readOnlyHint

Tool "set-theme" looks state-changing but declares no readOnlyHint. Agents use that flag to gate risky calls; without it they cannot tell this tool apart from a safe read.

at tool set-theme · field annotations
{}
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check missing-annotations
medium schema-freeform-sink LLM05 deterministic
Unvalidated free-form input on a sink-like parameter

Parameter "query" of tool "search-tools" accepts a free-form string with no enum/pattern/format. If it reaches a shell, filesystem, or outbound request, it is an injection/SSRF surface.

at tool search-tools · field inputSchema.properties.query
{"type":"string","description":"Keyword to search for, e.g. \"pdf\", \"watermark
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check schema-freeform-sink
medium schema-freeform-sink LLM05 deterministic
Unvalidated free-form input on a sink-like parameter

Parameter "file" of tool "find-tool-for-file" accepts a free-form string with no enum/pattern/format. If it reaches a shell, filesystem, or outbound request, it is an injection/SSRF surface.

at tool find-tool-for-file · field inputSchema.properties.file
{"type":"string","description":"A filename, extension or MIME type, e.g. \"repor
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check schema-freeform-sink

AGENT-UX

info agentux.freeform-string-args deterministic
Free-form string parameter on a tool that implies a bounded choice

Tool "list-tools" reads as choice/filter-like but parameter "category" has no enum/pattern/format/maxLength. A prior measurement round found enum-vs-free-text tool-call accuracy significantly different (p=0.0079); constrain the value set if the domain is bounded.

at tool list-tools · field inputSchema.properties.category
{"type":"string","description":"Category filter, e.g. \"Converters\" or \"Games\
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check agentux.freeform-string-args
info agentux.freeform-string-args deterministic
Free-form string parameter on a tool that implies a bounded choice

Tool "list-tools" reads as choice/filter-like but parameter "platform" has no enum/pattern/format/maxLength. A prior measurement round found enum-vs-free-text tool-call accuracy significantly different (p=0.0079); constrain the value set if the domain is bounded.

at tool list-tools · field inputSchema.properties.platform
{"type":"string","description":"Platform filter, e.g. \"web\" or \"macOS\"."}
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check agentux.freeform-string-args
info agentux.freeform-string-args deterministic
Free-form string parameter on a tool that implies a bounded choice

Tool "list-tools" reads as choice/filter-like but parameter "language" has no enum/pattern/format/maxLength. A prior measurement round found enum-vs-free-text tool-call accuracy significantly different (p=0.0079); constrain the value set if the domain is bounded.

at tool list-tools · field inputSchema.properties.language
{"type":"string","description":"Interface language filter, e.g. \"en\" or \"ru\"
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check agentux.freeform-string-args
info agentux.freeform-string-args deterministic
Free-form string parameter on a tool that implies a bounded choice

Tool "find-tool-for-file" reads as choice/filter-like but parameter "file" has no enum/pattern/format/maxLength. A prior measurement round found enum-vs-free-text tool-call accuracy significantly different (p=0.0079); constrain the value set if the domain is bounded.

at tool find-tool-for-file · field inputSchema.properties.file
{"type":"string","description":"A filename, extension or MIME type, e.g. \"repor
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check agentux.freeform-string-args

RECOMMENDED

info schema.no-required deterministic
Schema has properties but no required list

Tool "list-tools"'s inputSchema declares properties but no `required` array. Opinion: most tools have at least one mandatory argument; an empty required list often just means the author never filled it in.

at tool list-tools · field inputSchema.required
(absent)
reproduce: mcpaudit-webmcp-scan --url 'https://example.by/' --check schema.no-required

Registering your own tools?

Start from a config the checks above already pass.

Build your own WebMCP config

This is an automated, point-in-time report from a static read of this page's WebMCP tool registrations (document.modelContext / navigator.modelContext). No tool was executed. The grade, when shown, reflects deterministic checks only. Job 1bd12bfb059ed795. Rulepack rulepack-2026.09.1.