Skip to main content
Glama

ScanMalware.com URL Scanner

Server Details

MCP server for ScanMalware.com URL scanning, malware detection, and analysis.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.8% over 78 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
scanmalware/mcp-server
GitHub Stars
1
Server Listing
scanmalware-mcp
ChatGPT
ScanMalware
Claude
–

TDQS

B3.1/5.0

Scored across 128 tools

Disambiguation2/5

The set contains many near-duplicate pairs with unclear boundaries: get_yara_by_scan vs get_yara_matches (same purpose), search_by_favicon vs search_favicon_mmh3, and two parallel families search_js_fingerprint_by_* vs search_jsfingerprints_by_* (SHA-256, library, md5, fuzzy hash, etc.) that differ only subtly. get_jsfingerprint_similar vs find_js_fingerprint_similar_by_hash, and search_similar_scans vs search_similar_screenshots, are also easy to confuse. Descriptions help somewhat, but with 128 tools an agent will frequently misselect.

Naming Consistency3/5

All names are lowercase snake_case with verb-prefixed patterns, which is readable, but tokenization is inconsistent: 'jsfingerprint' is sometimes one token (get_jsfingerprint) and sometimes two (get_js_fingerprints, search_js_fingerprint_by_sha256). Parallel capabilities also get different prefixes and suffixes (find_js_fingerprint_similar_by_hash vs get_jsfingerprint_similar; search_by_ip vs search_scans). The inconsistent noun forms make the pattern unpredictable even though the verb style is stable.

Tool Count1/5

128 tools for a URL-scanning service is an extreme surface well beyond the 3-15 range, and many of the tools are redundant duplicates of the same lookup. The count reflects an over-exposed internal analytics API rather than a well-scoped toolset, which will overwhelm an agent's tool-selection reasoning.

Completeness4/5

The lifecycle is broadly covered: submit_scan, get_scan_progress, wait_for_scan, get_scan_summary/result, scan reports and votes, plus extensive aggregate stats, search, and per-module analysis (AI, YARA, JS, TLS, CT, OCR, clipboard). Missing pieces are minor for the stated purpose (no scan deletion/cancel, no account or API-key management, no batch submission), so an agent can work around them.

Available Tools

128 tools
find_js_fingerprint_similar_by_hashFind JS Fingerprint Similar By HashA
Read-onlyIdempotent
Inspect

Find JavaScript files similar to the file with this content SHA-256, above threshold (default 0.7), up to limit results; exclude_exact_matches drops identical copies. Useful for finding modified versions of a known script.

NameRequiredDescriptionDefault
limitNo
thresholdNo
content_sha256Yes
exclude_exact_matchesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the threshold default (0.7) and clarifies that exclude_exact_matches 'drops identical copies' — useful semantics, but no mention of result ranking, scoring semantics, or result volume behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence covering purpose and all three optional params, plus a short use-case sentence. Front-loaded and free of filler, though the parameter clauses are packed into a single run-on sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values need not be described, and annotations cover the safety profile. The description supplies purpose, the key parameter behaviors and a use case, leaving only minor gaps (threshold scale, limit default) for a read-only similarity search.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load and largely does: it explains content_sha256 as the file's content hash, threshold as a similarity floor with default 0.7, limit as a cap on results, and exclude_exact_matches as dropping identical copies. It omits the limit default (10) and the direction/scale of the threshold, so it is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find JavaScript files similar to the file with this content SHA-256'), which distinguishes it from hash-exact siblings like search_js_fingerprint_by_sha256. However, it never names or contrasts with the near-identical siblings get_jsfingerprint_similar or search_js_fingerprint_by_fuzzy_hash, leaving the agent to infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence 'Useful for finding modified versions of a known script' gives an implied use case, which is more than nothing. But there is no when-not guidance, no mention of the fuzzy-hash or normalized-hash alternatives, and no prerequisite stating the file must already be indexed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ai_analysisGet AI AnalysisA
Read-onlyIdempotent
Inspect

Get the AI analysis of one scan: classification (LEGITIMATE to CONFIRMED_SCAM), scam type, risk score, confidence, impersonated brand and the key evidence behind it. The analysis is produced a few minutes after the scan completes and returns not found until then. It can disagree with the scanner's own security verdict. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe, idempotent, read-only operation, so the safety profile is covered. The description adds genuinely useful context beyond the annotations: the eventual-consistency/latency window ('a few minutes... returns not found until then') and the semantic caveat that it can disagree with the scanner verdict. That is meaningful added value, though still not a full behavioral picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the payload description first, then timing, then the parameter definition. The field enumeration carries real meaning (including the LEGITIMATE to CONFIRMED_SCAM range) rather than padding, and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape need not be re-explained, yet the description still usefully names the fields. With annotations covering safety and the description covering timing, disagreement semantics, and the lone parameter, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema alone does not explain the single parameter. The description compensates by defining scan_id as the UUID of a ScanMalware scan, establishing both format and referenced entity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (the AI analysis of one scan) and enumerates exactly what it returns: classification, scam type, risk score, confidence, impersonated brand, evidence. That detail clearly sets it apart from get_scan_result/get_scan_summary in practice, but it never names an alternative, so sibling differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context about when the result is meaningful: the analysis is produced a few minutes after the scan completes and returns not-found until then. It also warns that it can disagree with the scanner's own verdict, but offers no explicit when-not or named alternative for getting the scanner verdict instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_analyzer_resultsGet Analyzer ResultsA
Read-onlyIdempotent
Inspect

List which analysis modules ran for one scan (for example JavaScript fingerprinting and AI analysis), with each module's status, success flag and timing. Useful for checking why a result is missing. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds only that results include status, success flag and timing, which is return-shape detail rather than a behavioral trait like auth needs or rate limits. With annotations carrying most of the burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then the fields returned, then the motivating use case, then the parameter clarification. No filler and no repetition of title or structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description still covers purpose, use case and parameter format. Its only gap is not routing the agent away from look-alike siblings such as get_analyzer_stats or search_analyzer_high_risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the single scan_id parameter is undocumented in the schema, and the description compensates by stating it is the UUID of a ScanMalware scan. That supplies format and referent meaning beyond the bare string type, which is exactly what the low coverage requires.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (analysis modules for one scan), with examples of what a module is and what each row contains. It contrasts implicitly with aggregate siblings like get_analyzer_stats by scoping to 'one scan', but never names an alternative explicitly, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete use case: 'Useful for checking why a result is missing.' That is clear context for when to reach for this tool rather than a scan-summary or stats endpoint. However, it names no alternatives and gives no exclusions, so it stops short of the 5 bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_analyzer_statsGet Analyzer StatsA
Read-onlyIdempotent
Inspect

Get platform-wide statistics for the scan analysis modules: the modules and their run counts. Describes the service, not a particular scan.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds the aggregation scope (platform-wide rather than per-scan), which is genuine behavioral context, but says nothing about auth, rate limits, or freshness of the counts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the resource and its output content are front-loaded, and the scoping caveat follows immediately. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and no parameters are required, so the description need not explain return values; annotations carry the safety profile. It is essentially complete, with only the mild redundancy between 'platform-wide' and 'not a particular scan' keeping it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Get platform-wide statistics for the scan analysis modules') and even spells out what the statistics contain ('the modules and their run counts'). The final clause distinguishes it from scan-scoped siblings like get_analyzer_results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Describes the service, not a particular scan' gives a clear selection condition that separates this aggregate tool from the many per-scan siblings. It stops short of naming a specific alternative (e.g., get_analyzer_results) or an explicit when-not-to-use case, so it is context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_rootGet API RootA
Read-onlyIdempotent
Inspect

Get the ScanMalware API's name, version, status, main endpoints and feature list.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a read-only, idempotent, non-destructive, open-world operation, so the safety profile is covered. The description adds the returned content categories, but says nothing about authentication needs, caching, rate limits, or any other operational behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the resource and lists the return categories with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter metadata endpoint with rich annotations and a dedicated output schema, the description is sufficient. It tells the agent what categories of information will be returned without needing to explain output structure or safety behavior, which are covered elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is no parameter documentation burden. The baseline for a zero-parameter tool is 4, and the description appropriately avoids repeating schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('ScanMalware API' root), then enumerates the exact fields returned: name, version, status, endpoints, and features. This makes the tool's scope clear, though it does not explicitly distinguish itself from related metadata endpoints like get_health or get_platform_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool returns but gives no indication of when to use it versus alternatives. There is no mention of prerequisites, discovery workflows, or the sibling tools it might overlap with, leaving the agent to infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bot_protectionGet Bot ProtectionA
Read-onlyIdempotent
Inspect

Get the bot-protection and CAPTCHA services detected on a scanned page (for example Cloudflare Turnstile), with a detected flag. Phishing kits often use these to hide from scanners. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the 'detected flag' return cue and the phishing-kit interpretation context, but nothing about rate limits, permissions, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned and followed by the domain rationale and the parameter note. Little waste, though the phishing-kit sentence is more flavor than operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, and annotations cover the read-only/idempotent profile. For a single-parameter getter the description is sufficiently complete; only explicit routing versus sibling scan getters is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the only parameter is titled just 'Scan Id', so the description carries the burden – and it does, stating scan_id is the UUID of a ScanMalware scan. That meaningfully clarifies expected input format beyond the bare schema title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieve bot-protection and CAPTCHA services detected on a scanned page, with a concrete example (Cloudflare Turnstile) and a detected flag. The scope is distinct from sibling getters like get_technologies_by_scan or get_favicon, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phishing-kit rationale (these services hide kits from scanners), which hints at when an analyst would care. There is no explicit when-to-use/when-not guidance and no named alternative among the many sibling scan getters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_capabilities_by_dateGet Capabilities By DateA
Read-onlyIdempotent
Inspect

Get the size of ScanMalware's detection content (indicators, detection rules, ClamAV signatures) on a given date (scan_date, YYYY-MM-DD).

NameRequiredDescriptionDefault
scan_dateYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds only the domain meaning of 'capabilities' (detection content size); it says nothing extra about rate limits, auth, or day-boundary behavior that annotations don't already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the resource, the returned metric, and the parameter format with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich annotation set, an output schema covering the return value, and a single documented parameter, the description is nearly sufficient for correct invocation. The only real gap is routing guidance between this tool and get_latest_capabilities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does so reasonably: it names scan_date and supplies the required YYYY-MM-DD format, which the schema does not. It stops short of clarifying timezone or whether the date must correspond to an existing scan.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Get) and resource (ScanMalware's detection content size) and even enumerates the content types covered — indicators, detection rules, ClamAV signatures. The phrase 'on a given date' implicitly separates it from get_latest_capabilities, but that sibling is never named, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to call this versus the obvious alternative get_latest_capabilities, nor any prerequisite or exclusion. Usage must be inferred entirely from the phrase 'on a given date'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_clipboard_eventsGet Clipboard EventsA
Read-onlyIdempotent
Inspect

Get the clipboard writes the page attempted while it was scanned, with the event count and whether collection ran. Empty with an explanatory note when the page wrote nothing. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld. The description adds genuine behavioral context beyond that: it discloses the return content shape (event count, whether collection ran) and the empty-case behavior ('explanatory note when the page wrote nothing'), which an agent cannot get from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the primary return content, followed by edge-case behavior and the parameter clarification. No wasted text, though the final scan_id sentence reads as a tacked-on footnote rather than integrated guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required in the description, and the empty-case plus collection-status notes cover the main ambiguity. For a single-param read tool this is essentially complete, with only sibling routing left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single scan_id parameter, so the description carries the burden: it defines scan_id as the UUID of a ScanMalware scan, which is meaningfully more than the schema's bare 'Scan Id' title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns clipboard writes a page attempted during a scan, with event count and collection status. This is clearly distinguishable in intent from get_clipboard_stats (aggregate) and search_suspicious_clipboard (search), though the description does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'while it was scanned' implies this is a per-scan lookup requiring a scan_id from a completed scan, and the empty-result case is addressed. However, there is no explicit statement of when to use this versus get_clipboard_stats or search_suspicious_clipboard, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_clipboard_statsGet Clipboard StatsA
Read-onlyIdempotent
Inspect

Get clipboard and pastejacking statistics across the archive: event totals, detections and daily activity.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds scope ('across the archive') and the metric categories returned, which is useful but modest; with an output schema present, return-format details are not needed. No auth or rate-limit context, hence a mid score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb, resource, scope, and enumerated outputs; no filler and nothing that needs to be moved earlier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, an output schema for the return shape, and annotations covering the safety profile, the description supplies what an agent needs to call it. Only the lack of sibling routing guidance keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to clarify beyond confirming the scope is the whole archive rather than a filtered subset.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get clipboard and pastejacking statistics') and enumerates what the stats cover (event totals, detections, daily activity). This implicitly distinguishes it from the raw-event sibling get_clipboard_events, but it never names an alternative, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the aggregate/summary counterpart to get_clipboard_events or search_suspicious_clipboard. There is no explicit when-to-use, when-not-to-use, or named alternative, leaving routing between the clipboard tools to guesswork.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cpe_by_scanGet CPE By ScanA
Read-onlyIdempotent
Inspect

List the CPE identifiers (product and version names in the NVD format) derived from the technologies detected on a scanned page, with their source. Useful for matching against vulnerability data. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds that results carry a 'source' field and clarifies the scan_id provenance, which is useful but modest; no rate limits, pagination, or failure behavior are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the resource definition followed by benefit and parameter note. Every sentence contributes; nothing is padded, though the benefit sentence is the weakest of the three.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with an output schema present, the description covers purpose, output nature ('with their source'), and the required parameter. Return-format detail is rightly left to the output schema, so no critical gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameter, and it does: 'scan_id is the UUID of a ScanMalware scan' tells the agent the expected format (UUID) and where the value originates. That is meaningful added value beyond the bare schema for the single required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a precise resource ('CPE identifiers in the NVD format derived from technologies detected on a scanned page, with their source'), and the mention of 'derived from technologies' scopes it well. It does not, however, explicitly differentiate itself from close siblings like search_cpe or get_technologies_by_scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for matching against vulnerability data' implies a downstream use case but gives no explicit when-to-use, when-not-to-use, or named alternative. The agent can infer this is the per-scan CPE lookup versus the search-style search_cpe, but nothing states that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cpe_statsGet CPE StatsA
Read-onlyIdempotent
Inspect

Get CPE statistics across the archive: scans with CPEs, unique CPEs, total detections, top vendors and products.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is fully covered without the description. The description's added behavior is essentially a restatement of the metric list, which the output schema also covers, so it contributes only modest extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, zero filler, metrics front-loaded after the scope phrase. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument aggregate with full annotation coverage and an output schema, the description is sufficient to call the tool correctly. The only missing piece is sibling routing, which is a usage gap rather than a completeness defect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Get CPE statistics across the archive') with the four metric families enumerated, so the agent knows exactly what comes back. It does not, however, distinguish itself from siblings like get_cpe_by_scan or search_cpe, which are the natural alternatives for CPE data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: as a zero-parameter aggregate it is obvious this is the summary view, but the description never says when to prefer it over get_cpe_by_scan (per-scan detail) or search_cpe (lookup). No exclusions or routing guidance are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ct_certificatesGet CT CertificatesB
Read-onlyIdempotent
Inspect

Get the certificates issued for a domain according to Certificate Transparency logs, with a found flag.

NameRequiredDescriptionDefault
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is fully covered. The description corroborates the open-world nature by naming external CT logs, and mentions a 'found flag', but adds no rate limits, coverage caveats, or per-log behavior beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no padding; the purpose appears in the first few words. The trailing 'with a found flag' clause is slightly awkward but not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema covering return values, little else is strictly required. Still, the description omits domain formatting guidance and any hint of CT log coverage or result volume, leaving a small but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter ('domain') with 0% schema description coverage, so the description carries the full burden. It says the domain is the lookup target, but never specifies format (bare domain vs subdomain vs URL), which matters for a CT query. The parameter name is largely self-evident, so this lands at baseline adequacy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the certificates issued for a domain') plus the data source (Certificate Transparency logs), which clearly separates it from CT siblings like get_ct_dns_records, get_ct_domains_by_ip and get_ct_timeline. It stops short of explicitly naming those alternatives, but the resource noun does the differentiating work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to reach for this tool versus the other CT tools, no prerequisites, and no exclusions. The agent must infer usage purely from the resource noun.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ct_dns_recordsGet CT DNS RecordsA
Read-onlyIdempotent
Inspect

List subdomains of a domain found through Certificate Transparency, with their DNS records (type, IP addresses, TTL) and when they were seen. Useful for finding the other hosts of a domain.

NameRequiredDescriptionDefault
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds the shape of the returned data, but says nothing about pagination, result caps, rate limits, or whether lookup requires a live scan – with annotations carrying the safety burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with what is listed and followed by the payoff of using it; no filler. Slightly over-brief given the unaddressed operational details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the tool is a read-only single-parameter listing operation. The description covers the essentials; only operational details like result limits and pagination are absent, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required 'domain' parameter with 0% schema description coverage. The description implicitly clarifies it by saying 'subdomains of a domain', but adds no syntax, format, or scope guidance (e.g., apex vs subdomain, wildcard handling) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('List') and resource ('subdomains of a domain found through Certificate Transparency'), plus the payload contents (DNS record type, IPs, TTL, seen dates). It is clear what the tool does, but it never names or distinguishes itself from close siblings like get_ct_certificates, get_ct_domains_by_ip, or get_ct_similar_domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence 'Useful for finding the other hosts of a domain' implies the use case, but there is no explicit when-to-use, when-not-to-use, or pointer to an alternative CT tool. The agent must infer the boundary against sibling tools on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ct_domains_by_ipGet CT Domains By IPB
Read-onlyIdempotent
Inspect

List domains that Certificate Transparency and DNS data associate with an IP address, with record counts and the total.

NameRequiredDescriptionDefault
ip_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and idempotency profile is fully covered. The description's only additional behavior disclosure is that results include 'record counts and the total', which is useful but thin; there is nothing about rate limits, result caps, or how much data an open-world lookup may return.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the output, sources, input, and result shape, with no filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. What remains missing — routing guidance against sibling lookups and IP format expectations — is minor for a one-parameter read-only lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must carry the parameter burden, but it only restates that the input is an IP address — information already conveyed by the parameter name 'ip_address'. It adds no format detail (IPv4 vs IPv6), normalization rules, or examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('List'), resource ('domains'), the data sources used ('Certificate Transparency and DNS data'), and the key input ('an IP address'). This separates it reasonably well from get_ct_certificates and get_ct_dns_records, though it never names a sibling or explicitly contrasts its output with get_ct_similar_domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives such as search_by_ip, get_ct_similar_domains, or get_ct_dns_records. Usage can only be inferred from the one-line scope statement, leaving the agent to guess which CT/DNS lookup to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ct_similar_domainsGet CT Similar DomainsA
Read-onlyIdempotent
Inspect

Find domains with names similar to a domain in Certificate Transparency data (for example lookalikes and typosquats), each with a certificate count and the kind of similarity.

NameRequiredDescriptionDefault
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description's remaining contribution is the output shape (certificate count, similarity kind), which is largely duplicated by the existing output schema, and it says nothing about result caps, pagination, or refresh behavior of the CT data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core purpose front-loaded and no filler. The trailing clause about certificate count and similarity kind is mild redundancy against the output schema, but it does not bloat the wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with an output schema and full annotations, the description covers the essentials. However, CT similarity queries can return very large sets, and with no limit parameter and no stated cap or pagination behavior, an agent cannot predict result volume or truncation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema coverage is 0% (title 'Domain' only). The description says 'similar to a domain', which confirms the input is the seed domain, but adds no format guidance (apex vs. subdomain, punycode, whether wildcards are accepted).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (domains similar by name) plus the data source (Certificate Transparency), which cleanly separates it from sibling CT tools such as get_ct_certificates, get_ct_dns_records, and get_ct_domains_by_ip. The parenthetical examples (lookalikes, typosquats) remove any ambiguity about the kind of 'similar' meant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mention of lookalikes and typosquats implies the investigative use case (brand/typosquat hunting), but there is no explicit when-to-use or when-not-to-use statement and no named alternative among the many search_* siblings. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ct_timelineGet CT TimelineA
Read-onlyIdempotent
Inspect

Get the certificate history of a domain from Certificate Transparency: when certificates were issued and when the certificate changed.

NameRequiredDescriptionDefault
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety and idempotency profile is fully covered. The description adds the temporal-history scope but no extra behavioral context such as CT log latency, coverage of subdomains, or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the key resource first and the temporal detail after the colon. Slightly redundant, since 'certificate history' and 'when certificates were issued' restate the same idea, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one obvious parameter), an output schema exists so return values need not be explained, and annotations cover the safety profile. The description gives enough for correct invocation, though it omits any hint of the difference from get_ct_certificates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter ('domain') with 0% schema description coverage, so the description must carry the meaning. It does implicitly convey that the input is a domain ('certificate history of a domain'), which matches the parameter name, but adds no format or scope detail (e.g., whether subdomains or URLs are accepted).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get the certificate history of a domain from Certificate Transparency') and adds a scope qualifier about issuance and change times. It is clear what the tool returns, though it never names the closest sibling get_ct_certificates to disambiguate the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the emphasis on 'history', 'when issued' and 'when changed' suggests temporal/change-analysis use cases, but there is no explicit when-to-use statement, no exclusions, and no pointer to get_ct_certificates or get_ct_dns_records as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_domain_historyGet Domain HistoryB
Read-onlyIdempotent
Inspect

Get the scan history of a domain with the total count and the scans, paginated with page and limit.

NameRequiredDescriptionDefault
pageNo
limitNo
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only that results are paginated, which is a modest addition; it says nothing about ordering, retention, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words, front-loading the resource and then the payload and pagination details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required, and the description covers the basic contract. However, with 0% schema coverage and several ambiguous sibling tools, it leaves an agent without the routing or parameter detail needed to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should carry parameter meaning. It merely names page and limit ('paginated with page and limit') and says nothing about the domain identifier format, valid ranges, maximum limit, or how page numbering works, leaving the undocumented parameters largely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the scan history of a domain') and names the payload contents (total count and scans). It is clear in isolation but never distinguishes itself from close siblings like get_domain_scans or get_domain_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of the near-identical siblings get_domain_scans/get_domain_stats. An agent must guess which history endpoint applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_domain_scansGet Domain ScansA
Read-onlyIdempotent
Inspect

List the recent scans of a domain and its subdomains, newest first, up to limit; status filters by scan status. Each row has matched_on: 'url' when the scan was submitted for a host under this domain, and only 'final_url' when another site redirected there. A verdict on a final_url-only row belongs to the submitted host, not to this domain.

NameRequiredDescriptionDefault
limitNo
domainYes
statusNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world and non-destructive traits, so the description is free to add ordering ('newest first'), the limit cap, and the status filter. Most valuable is the caveat that a verdict on a final_url-only row belongs to the submitted host, not this domain – genuine interpretive context that annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler; scope, ordering and filtering are front-loaded before the matched_on caveat. The second and third sentences are clause-heavy and slightly hard to parse on first read, which keeps it out of 5 territory.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, yet the description still explains the critical row-level 'matched_on' semantics. Combined with scope, ordering and filtering, an agent has enough to call it correctly; only the status value domain and sibling routing are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It adds meaning for 'limit' ('up to limit') and 'status' ('filters by scan status') and implies 'domain' matches subdomains, but it never enumerates valid status values or explains the default limit, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'List the recent scans of a domain and its subdomains, newest first, up to limit.' The domain-scoped framing implicitly separates it from global siblings like get_recent_scans, but no sibling is named explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope statement (use this to list recent scans for a given domain), but the description never says when to prefer this over get_domain_history, get_domain_stats, or search_scans, nor what prerequisites exist. The matched_on note is interpretation guidance rather than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_domain_statsGet Domain StatsB
Read-onlyIdempotent
Inspect

Get scan counts for a domain: total, unique, completed and failed scans, first and latest scan, and scans in the last 24 hours, 7 days and 30 days.

NameRequiredDescriptionDefault
domainYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the aggregation windows (24h/7d/30d) and the count categories, which is useful scope context, but says nothing about cost, caching, or behavior for unknown domains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the enumeration is long but each item is a distinct returned metric that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return format need not be explained, and the read-only annotations cover the safety story. The remaining gap is the unclear input format for 'domain', which is minor for a simple aggregation endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'domain' parameter, so the burden falls on the description, which only repeats the word 'domain'. It does not specify the expected format (bare hostname vs. URL vs. subdomain handling) or whether wildcards are accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get scan counts for a domain') and enumerates the exact metrics returned, which separates it from list-oriented siblings like get_domain_scans and get_domain_history. It stops short of explicitly naming those alternatives, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as get_domain_scans for the underlying scan list. The agent must infer from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_faviconGet FaviconA
Read-onlyIdempotent
Inspect

Get the favicon recorded for a scan_id: its size, MD5 and SHA-256 hashes, and the image base64-encoded. found is false when no favicon is stored for the scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the exact payload shape and the 'found is false when no favicon is stored' missing-data signal, which tells the agent how to interpret an empty result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and resource, then the return contents, then the empty-result caveat. Every clause earns its place with no padding, though a semicolon-heavy single sentence is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't document return values in full, yet it still enumerates them, and it covers the empty-result case explicitly. An agent has enough to invoke correctly; only alternative-tool routing is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter is scan_id and the schema has 0% description coverage, so the schema itself says nothing. The description names the parameter and ties it to the scan scope, but adds no format, source, or validity details (e.g., where scan_id comes from, whether it must be an existing scan). Adequate but thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the favicon recorded for a scan_id') and enumerates the returned fields (size, MD5, SHA-256, base64 image), so the agent knows exactly what comes back. It does not explicitly distinguish itself from near-siblings like get_favicon_stats or search_by_favicon/search_favicon_mmh3, though 'recorded for a scan_id' implies per-scan retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given. The description never says to use this rather than get_favicon_stats (aggregates) or search_by_favicon / search_favicon_mmh3 (reverse lookup by hash), which are the obvious alternatives in this large sibling set. The scan-scoped nature is only implied by the parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_favicon_statsGet Favicon StatsA
Read-onlyIdempotent
Inspect

Get favicon statistics across the archive: total favicons, those seen in the last 24 hours and the most common hashes with sample URLs. This aggregate query can take up to 90 seconds by default.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral information beyond them: the query is an aggregate that 'can take up to 90 seconds by default', warning the agent about latency and hinting the timeout is configurable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The scope and contents come first and the performance caveat is appended rather than buried, so the front-loaded information is what an agent needs to decide.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still summarizes them; the latency caveat covers the main operational risk for a no-arg aggregate tool. Nothing essential is missing, though it does not say whether results are cached or how a caller can extend the timeout.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; there is no parameter syntax to explain. The description spends its words on return content and timing instead, which is the right allocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get favicon statistics across the archive') and enumerates exactly what the aggregate contains: totals, 24-hour counts, and most common hashes with sample URLs. This clearly separates it from per-item siblings like get_favicon and search_by_favicon / search_favicon_mmh3.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage is legible ('stats' endpoint for archive-wide favicon aggregates), and the 90-second latency note is a real usage consideration. However, no alternative is named and no when/when-not condition is given, so an agent must infer the boundary against get_favicon and search_favicon_mmh3 on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_healthGet HealthA
Read-onlyIdempotent
Inspect

Check whether the ScanMalware API is up. Returns the service status.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered structurally. The description adds only that the payload is a service status; it offers no extra behavioral context such as latency, failure modes, or degraded states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the action ('Check whether ... is up') is front-loaded ahead of the return detail. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter health endpoint with a full output schema, the description supplies everything an agent needs to decide to call it. Only a note on typical failure behavior is missing, a minor gap given the schema documents the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema carries no semantic burden and the baseline is 4. There are no argument formats or defaults the description could usefully clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check whether the ScanMalware API is up') plus the return content ('service status'). It is unambiguous and clearly distinct from siblings like get_js_runtime_health, which concerns JS runtime health rather than API availability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies the natural use case (verify the API is reachable before or during scans), but the description never states when to call it, when not to, or which alternative to prefer. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ids_alertsGet IDS AlertsA
Read-onlyIdempotent
Inspect

Get intrusion detection (IDS) alerts raised on the network traffic recorded during one scan, with a severity breakdown and total count. Empty when no rule fired. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, openWorld and non-destructive, so the safety profile is done. The description adds genuine behavioral context beyond them: the result includes a severity breakdown and total count, and the tool legitimately returns empty when no rule fired, which pre-empts a false 'no data / error' interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, front-loaded with what is returned and followed by the edge case and parameter clarification. Nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required, and the description still covers scope, empty-result semantics and the identifier meaning. The only real gap is not pointing the agent at how to source a scan_id for this per-scan family.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter is only typed as a string with the title 'Scan Id'. The description compensates partially by identifying it as the UUID of a ScanMalware scan, but it does not say where a scan_id comes from (e.g., search_scans/submit_scan) or what happens on an unknown id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get intrusion detection (IDS) alerts') and narrows scope to one scan, distinguishing it from sibling per-scan getters like get_yara_by_scan and get_malware_by_scan. It also states the payload ('severity breakdown and total count'), so an agent knows exactly what it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context (alerts are scoped to a single ScanMalware scan) and notes the empty case, but it never says when to prefer this over neighbors such as get_yara_matches or get_scan_ioc, nor how to obtain a scan_id from other tools. Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ip_statsGet IP StatsB
Read-onlyIdempotent
Inspect

Get statistics for an IP address across the archive: total scans, unique URLs, first and last seen, geolocation, ASN and organisation, BGP and DNS data; paginated.

NameRequiredDescriptionDefault
pageNo
limitNo
ip_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only that results are 'paginated' and scoped to 'the archive'; it says nothing about rate limits, aggregation window, or behavior on unknown IPs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the verb-resource and returned data front-loaded; every clause earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return shapes, and it does cover data scope and pagination. The remaining gap is input semantics for ip_address and the paging parameters, which no structured field fills.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters (ip_address, page, limit), so the description must compensate and largely does not. The single word 'paginated' hints at page/limit but gives no defaults or semantics, and the accepted IP format (IPv4/IPv6/CIDR) is never stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get statistics for an IP address across the archive') and enumerates the exact aggregates returned (scans, unique URLs, first/last seen, geolocation, ASN/org, BGP, DNS), which functionally separates it from siblings like search_by_ip or get_rdap. It never names an alternative, so the differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer 'use this to summarize an IP', but there is no statement of when to prefer it over search_by_ip, get_ct_domains_by_ip, or get_rdap, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jarm_signaturesGet JARM SignaturesA
Read-onlyIdempotent
Inspect

Get the JARM TLS server fingerprints measured for the hosts in one scan, with whether each matches a known signature. A shared JARM often points to the same server software or hosting platform, so it is a weak pivot on its own. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the bar is lower. The description adds that each result carries a known-signature match flag and that shared JARM is weak evidence, but it says nothing about result volume, pagination, or error behavior on an invalid scan_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned before the interpretive caveat and the parameter note. No sentence is wasted, though the caveat could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the return shape needn't be described, and the one parameter is defined. Safety is covered by annotations. The definition is nearly sufficient for correct invocation, with only the sibling boundary (search_by_jarm) left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter has 0% schema description coverage, so the description must carry the load. 'scan_id is the UUID of a ScanMalware scan' supplies both the format (UUID) and the referent (ScanMalware scan), adequately compensating for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get the JARM TLS server fingerprints') and scopes it to 'the hosts in one scan', which meaningfully distinguishes this per-scan retrieval from the sibling search_by_jarm pivot. It stops short of naming that sibling explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers an analytic caveat ('a weak pivot on its own'), which implies how much weight to give the result, but never states when to call this tool versus search_by_jarm, get_jarm_stats, or get_tls_details. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jarm_statsGet JARM StatsA
Read-onlyIdempotent
Inspect

Get JARM statistics across the archive, including the most common signatures. Common signatures usually belong to large hosting platforms.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered by structured data. The description adds a useful interpretive note (common signatures usually belong to large hosting platforms) but no context about aggregation window, freshness, or scope limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by one sentence of genuinely additive interpretation. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and a parameterless aggregate tool is described adequately. The only residual gap is the boundary against the many sibling stats tools (notably get_jarm_signatures), which is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter tool is 4. The schema fully covers the empty argument object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (JARM statistics) plus scope ('across the archive'), and the mention of 'most common signatures' hints at an aggregate view distinct from the sibling get_jarm_signatures. It stops short of explicitly contrasting with that sibling, so an agent still has to infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word 'statistics' – aggregated counts rather than per-signature records. Neither get_jarm_signatures nor search_by_jarm is named as an alternative, and no condition for choosing this tool over them is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprintGet JS FingerprintA
Read-onlyIdempotent
Inspect

Get one JavaScript fingerprint record by its numeric fingerprint_id: the script URL, scan, hashes, metrics and ML vector information; include_functions and include_http_headers add more detail.

NameRequiredDescriptionDefault
fingerprint_idYes
include_functionsNo
include_http_headersNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the safety burden is lifted. The description adds genuine context beyond that: it enumerates the returned content (script URL, scan, hashes, metrics, ML vector) and discloses that functions and HTTP headers are opt-in rather than default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the lookup key front-loaded, then the return payload, then the opt-in flags. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no further explanation, and the description still summarizes them helpfully. Annotations cover the safety profile. The only omission is behavior on a nonexistent id, which is minor for a read-by-id tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it largely does: it identifies fingerprint_id as numeric and explains that include_functions and include_http_headers 'add more detail'. It stops short of stating the null/false default behavior explicitly, so it is not fully compensating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get), a specific resource (one JavaScript fingerprint record), and the lookup key (numeric fingerprint_id). This distinguishes it from get_js_fingerprints (list) and the many search_js_fingerprint_* siblings without requiring schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'by its numeric fingerprint_id' — the agent knows it needs an id in hand. However, it names no alternatives or exclusions (e.g., get_jsfingerprint_source, get_jsfingerprint_similar, get_jsfingerprint_bundle_stats) that an agent might otherwise confuse for detail retrieval on the same fingerprint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_bundle_statsGet JS Fingerprint Bundle StatsA
Read-onlyIdempotent
Inspect

Get statistics on bundled JavaScript across the archive for a date range: share of bundled files and the breakdown by bundler (webpack, vite, rollup and so on) and module format.

NameRequiredDescriptionDefault
to_dateNo
from_dateNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds useful content about what the statistics include, but says nothing about behavior when dates are omitted (both default to null), the time basis of the archive, or result ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the verb and resource and then lists the returned dimensions. No filler, no redundancy with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The remaining gap is parameter behavior: the two date filters are undocumented in both schema and description, which is a meaningful omission for a date-scoped stats tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It refers to 'a date range', implying from_date/to_date, but gives no expected format, no note that both default to null, and no clarification of what an unbounded range means. The agent is left to guess the date syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get statistics') on a specific resource ('bundled JavaScript across the archive') and enumerates the measurements returned (share of bundled files, breakdown by bundler and module format). This is clearly distinguishable from siblings like get_jsfingerprint_library_stats or search_js_fingerprint_by_bundler, which cover different slices of the same corpus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the aggregation use case ('across the archive for a date range'), so an agent can infer this is for aggregate reporting rather than per-record lookup. However, it names no alternatives such as search_jsfingerprint_by_bundler when the agent actually wants individual fingerprints, and gives no explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_hash_prevalenceGet JS Fingerprint Hash PrevalenceA
Read-onlyIdempotent
Inspect

For each script in one scan, report how common its hash is across the archive, which separates widely used library files from rare, page-specific code. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful analytic framing about what the prevalence numbers mean, but says nothing about volume, cost, or output shape beyond what annotations and the output schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no waste: the analytical value is front-loaded and the parameter note is compact. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with an output schema, the description covers what the tool produces and the meaning of the input. Return values need not be explained since an output schema exists; only explicit routing to alternatives is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does clarify that scan_id is the UUID of a ScanMalware scan. That is meaningful type/format information absent from the schema, though it stops short of format examples or failure behavior for invalid IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: for each script in one scan, report hash prevalence across the archive, plus the interpretive purpose (distinguishing common libraries from rare page-specific code). This is clear and distinguishable from stats-style siblings like get_jsfingerprint_library_stats, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Scope is implied by 'in one scan' and the scan_id requirement, so an agent knows the input context. However, there is no explicit when-to-use versus alternatives (e.g., get_jsfingerprint_library_stats or get_jsfingerprint_bundle_stats) and no exclusions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_library_statsGet JS Fingerprint Library StatsB
Read-onlyIdempotent
Inspect

Get statistics on JavaScript library detection across the archive for a date range: total fingerprints, detection rate and the most common libraries.

NameRequiredDescriptionDefault
to_dateNo
from_dateNo
min_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only that results are aggregated over the archive, with no note on caching, rate limits, or how empty date ranges behave.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that wastes no words and puts the scope ('across the archive for a date range') before the enumerated outputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description is adequate for a read-only aggregate. However, with three undocumented parameters and zero usage routing, an agent gets little help on how to call it correctly versus its many siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are three parameters. The phrase 'date range' loosely maps to from_date/to_date, but neither the accepted date format nor the semantics/default behavior of min_count is explained anywhere, so the description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get), resource (JavaScript library detection statistics) and even enumerates the headline outputs: total fingerprints, detection rate, most common libraries. It is distinguishable from siblings like get_js_library_inventory or get_jsfingerprint_hash_prevalence, though it never names an alternative to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only contextual cue is 'for a date range'; there is no statement of when this aggregate stats tool should be chosen over the many other JS-fingerprint siblings (bundle stats, hash prevalence, library inventory) and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_fingerprintsGet JS FingerprintsA
Read-onlyIdempotent
Inspect

List the JavaScript files a scanned page loaded, each with its fingerprint: hashes (SHA-256, SHA-1, MD5, normalized and fuzzy), size metrics, detected library and bundler. The include_* options add function lists, HTTP headers or ML vector details. Useful for collecting script hashes to search for elsewhere. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes
include_functionsNo
include_http_headersNo
include_vectors_infoNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and an output schema documents the return shape, so the description's enumeration of hashes and size metrics is partly redundant. The one genuinely additive piece is explaining that the include_* flags extend the result with function lists, headers, or ML vectors. No auth, rate-limit, or pagination behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences: purpose and return contents first, flag behavior second, usage hint third. No filler, though the detailed hash enumeration in sentence one is longer than strictly needed given the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter read-only tool with a full output schema and strong annotations, the description supplies enough to call it correctly: what comes back, what each flag adds, and what scan_id is. The remaining gap is pagination/result-size behavior and explicit routing away from the many search_js_fingerprint_* siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does map all three include_* options to concrete content (function lists, HTTP headers, ML vector details) while identifying scan_id as a ScanMalware scan UUID. It does not state that the flags default to null/off, so it compensates well but not completely for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (JavaScript files loaded by a scanned page) and enumerates the fingerprint components returned. It implicitly separates itself from the search_js_fingerprint_by_* siblings by being keyed on a scan, but never names a sibling to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for collecting script hashes to search for elsewhere" gestures at the follow-up workflow (the search_by_hash/search_jsfingerprint_* family) but stops short of naming an alternative or stating when to prefer this over get_jsfingerprint or search_js_fingerprint_by_sha256. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_similarGet JS Fingerprint SimilarA
Read-onlyIdempotent
Inspect

Find JavaScript files whose fingerprint is similar to the one with this fingerprint_id, above threshold (0 to 1), paginated with limit and offset. exclude_same_scan drops matches from the same scan. Useful for finding variants of one script.

NameRequiredDescriptionDefault
limitNo
offsetNo
thresholdNo
fingerprint_idYes
exclude_same_scanNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds value beyond that by specifying the threshold's valid range (0 to 1) and explaining the non-obvious semantics of exclude_same_scan (drops matches from the same scan), which an agent could not infer from the parameter name alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the action and resource before the parameter notes, with no filler. Sentence two restates what the parameter name already implies, a minor redundancy, but overall the density is high.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers every input parameter plus the primary use case. What remains missing is disambiguation from the hash-based sibling and any statement about what 'similar' is measured on, which matters in a family of near-identical tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does explain all five parameters: fingerprint_id as the anchor, threshold with its 0-1 range, limit/offset as pagination, and exclude_same_scan's effect. It omits the limit/offset defaults and any hint about score semantics, so it is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Find JavaScript files whose fingerprint is similar to the one with this fingerprint_id') plus the core scoping mechanism (threshold, pagination, same-scan exclusion), so the operation is unambiguous. It does not, however, distinguish itself from the very similarly named sibling find_js_fingerprint_similar_by_hash, leaving the agent to infer which entry point applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for finding variants of one script' gives a concrete intent, which is more than nothing. But there is no when-not guidance and no pointer to the nearest alternative (find_js_fingerprint_similar_by_hash, search_js_runtime_similar), so the choice among near-duplicate siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_similarity_countsGet JS Fingerprint Similarity CountsA
Read-onlyIdempotent
Inspect

Count how many archived JavaScript files are similar to the one with this fingerprint_id, per similarity model (composite, CodeBERT, GraphCodeBERT, AST and handcrafted features), capped at max_count. This query can take up to 90 seconds by default.

NameRequiredDescriptionDefault
max_countNo
thresholdNo
fingerprint_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the query can take up to 90 seconds by default, which is exactly the kind of latency caveat an agent needs for timeout planning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and result shape; the enumeration of similarity models is informative rather than filler. The trailing latency sentence could arguably be merged but it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value structure need not be restated. For a read-only counting query the description covers purpose, model breakdown and latency; only the threshold parameter's meaning is missing, which is a small but real gap given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for three parameters. It explains max_count as a cap and identifies fingerprint_id as the reference file, but the threshold parameter is never mentioned in either the schema or the description, leaving one of three parameters semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: counting archived JS files similar to the file identified by fingerprint_id, broken out per similarity model. The counting (vs. listing) framing implicitly separates it from get_jsfingerprint_similar, but it never names that sibling, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use / when-not-to-use guidance and no alternative named. An agent must infer that this cheap count should precede pulling the full similar-file list, and nothing states prerequisites (e.g. that fingerprint_id must come from get_jsfingerprint first).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jsfingerprint_sourceGet JS Fingerprint SourceB
Read-onlyIdempotent
Inspect

Get the stored source code of one JavaScript file by its numeric fingerprint_id, with its SHA-256, URL and length. Source can be long.

NameRequiredDescriptionDefault
fingerprint_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety and repeatability are covered. The description adds one genuinely useful behavioral signal beyond that: 'Source can be long', warning the agent about potentially large payloads. It adds nothing further about auth, rate limits, or truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and key parameter, followed by a short, useful caveat about output size. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not enumerate return values, and the safety profile is fully covered by annotations. For a single-parameter read tool it is nearly complete; the only gap is guidance on obtaining a valid fingerprint_id and how to handle the 'long source' case (e.g., truncation or paging).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for the single parameter. It clarifies that fingerprint_id is the numeric identifier of the JavaScript file and that retrieval is by that id, which is slightly more than the bare 'Fingerprint Id' title in the schema, but it does not explain valid ranges, how ids are sourced, or error behavior for unknown ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieve the stored source code of one JavaScript file, keyed by fingerprint_id, and previews the returned fields (SHA-256, URL, length). It is clearly distinguishable from list/search tools in the get_jsfingerprint_* family. It does not explicitly contrast itself with the sibling get_jsfingerprint, which likely returns metadata rather than source, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the caller must already hold a fingerprint_id but never says when to prefer this tool over get_jsfingerprint, get_jsfingerprint_similar, or the many search_js_fingerprint_* tools, nor how to obtain a valid id. No when-to-use or when-not conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_library_inventoryGet JS Library InventoryB
Read-onlyIdempotent
Inspect

List the JavaScript libraries and versions detected across the archive, with how many scans used each; library filters to one library and min_count drops rare versions. Identifiers are lowercase names such as 'react', 'jquery' or 'nextjs'.

NameRequiredDescriptionDefault
libraryNo
min_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered. The description's added value is modest: the return shape ('libraries and versions ... how many scans used each') is largely duplicated by the output schema, and 'min_count drops rare versions' is really parameter semantics. No pagination, caching, or auth details are added.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, which is good, but crams three distinct ideas (inventory contents, two filter behaviors, identifier format) into a semicolon chain followed by a second sentence. Each idea is useful, yet the sentence would read better split into purpose, filters, and format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter aggregate query with an output schema and full safety annotations, the description covers what is returned, how the filters work, and how to format the free-text identifier. The only meaningful gap is disambiguation from the similar library-stats and library-search siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden well: it explains that 'library' filters down to one library and that 'min_count' drops rare versions. Crucially it also pins the identifier format ('lowercase names such as react, jquery or nextjs'), which is the most likely source of misuse for the free-text parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the JavaScript libraries and versions detected across the archive') plus the aggregate it returns ('how many scans used each'). It does not, however, distinguish itself from near-twin siblings such as get_jsfingerprint_library_stats or search_js_fingerprint_by_library, so an agent cannot disambiguate on this text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative is given. The sentence about 'library' and 'min_count' behavior describes parameter effects rather than guidance, and nothing tells the agent why to pick this over the many JS-fingerprint sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_runtime_behaviourGet Runtime JS BehaviourA
Read-onlyIdempotent
Inspect

Get the runtime JavaScript behaviour recorded for one scan: overall risk, risk scores, number of scripts, eval and Function-constructor calls and high-risk events, with a behavioural signature and composite hash. include_detailed_events adds the individual events. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes
include_detailed_eventsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds value by disclosing that include_detailed_events toggles inclusion of individual events. It says nothing about permissions, rate limits, or behavior on a missing/unknown scan_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the fetch purpose, then parameter semantics; three tight sentences with no filler. The return-field enumeration is somewhat dense but is the tool's key differentiator.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not strictly required, yet the description summarizes it anyway. Combined with annotations and the parameter notes, an agent has what it needs to invoke the tool, and only the sibling differentiation is underdeveloped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden, and it does: scan_id is documented as the UUID of a ScanMalware scan, and include_detailed_events is explained as adding the individual events. It omits any type/default detail for include_detailed_events, but both parameters are meaningfully covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource and enumerates the returned fields (overall risk, risk scores, script count, eval/Function calls, high-risk events, behavioural signature, composite hash). Very clear about what it fetches. It does not, however, distinguish itself from close siblings like get_js_runtime_coverage, get_js_runtime_health, or get_js_runtime_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Adds useful context that scan_id is the UUID of a ScanMalware scan, which implies usage after a scan. But there is no explicit when-to-use vs. alternatives or exclusion criteria, so the agent must infer from the name which of the several get_js_runtime_* tools to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_runtime_coverageGet Runtime JS Analysis CoverageA
Read-onlyIdempotent
Inspect

Get how many scans have runtime JavaScript fingerprints: coverage percentage and the number of unique composite hashes and signatures. Describes the service, not a scan.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the result is service-wide rather than scan-scoped; it says nothing about aggregation window, caching, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the returned metrics front-loaded and the scope qualifier last. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and a zero-param aggregate tool needs little else. The only residual gap is that the description does not disambiguate this tool from the several similarly named runtime/stats siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description invents no spurious inputs and correctly presents the tool as parameterless.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get ... runtime JavaScript fingerprints') and names the concrete outputs (coverage percentage, unique composite hashes, signatures). The closing clause distinguishes it from per-scan tools, but it does not separate itself from close siblings like get_js_runtime_stats or get_js_runtime_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Describes the service, not a scan' implies the aggregate scope, which is useful routing context against per-scan siblings. However, there is no explicit guidance on when to choose this over get_js_runtime_stats or get_js_runtime_behaviour, which have overlapping names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_runtime_healthCheck Runtime JS Analysis HealthA
Read-onlyIdempotent
Inspect

Check whether the runtime JavaScript analysis service is up, with its version.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds only that a version is returned, which is largely restated by the existing output schema, leaving little extra behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the purpose front-loaded and no filler. Every word carries information and no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless health check with an output schema and full annotation coverage, the description is sufficient to invoke it correctly. It could note failure/timeout semantics for an unreachable service, but that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to document; the baseline for a 0-param tool is 4. Nothing in the description conflicts with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: verify the runtime JavaScript analysis service is up and report its version. This clearly distinguishes it from data-oriented siblings such as get_js_runtime_stats or get_js_runtime_behaviour, though it does not explicitly contrast itself with the broader get_health tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, prerequisites, or alternatives. With a sibling like get_health in the list, an agent is left to infer whether this health check is scoped to the JS runtime subsystem or overlaps with the general endpoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_runtime_statsGet Runtime JS Behaviour StatsA
Read-onlyIdempotent
Inspect

Get platform-wide statistics for runtime JavaScript analysis: risk distribution, averages and totals of eval calls and high-risk events. Describes the service, not a scan.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered structurally. The description adds useful scope context ('platform-wide') and names the aggregated metrics, but says nothing about data freshness, time window defaults, or aggregation lag, which matter for a stats endpoint. An output schema exists, so the omission of return shape is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The core action and scope statement come first, and the disambiguating clause is placed exactly where it is needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless aggregate-stats tool with a rich annotation set and an output schema, the description carries enough to select and call it correctly. The only modest gap is the absence of any note on aggregation window or freshness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline applies and there is no parameter meaning for the description to supply. Nothing in the description misrepresents the (empty) input surface.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get platform-wide statistics for runtime JavaScript analysis') and then enumerates the concrete metric families returned (risk distribution, eval call averages/totals, high-risk events). The closing clause 'Describes the service, not a scan' cleanly separates it from scan-scoped siblings like get_js_runtime_behaviour and get_js_runtime_coverage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Describes the service, not a scan' gives explicit scoping guidance and rules out the per-scan interpretation, which is the main ambiguity for this family of tools. It does not name a specific alternative tool to use instead for scan-level data, so it stops short of a full when/when-not/alternative treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_segments_by_scanGet JS Segments By ScanA
Read-onlyIdempotent
Inspect

List the code segments (functions and blocks) extracted from one scan's JavaScript, each with location, length, snippet and hashes; script_url narrows to one file, paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
limitNo
offsetNo
scan_idYes
script_urlNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds pagination behavior (limit/offset) and the filtering behavior of script_url, but says nothing about auth needs, rate limits, or typical result sizes beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core verb and resource, then the filtering and parameter notes. Dense but nearly every clause carries information; loses a point only because the second sentence reads as a compressed parameter dump.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and the description covers scope, filtering, pagination and the scan_id meaning. The main gap is sibling disambiguation, which for a compact read-only list tool is a minor omission rather than a blocker.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it addresses all four parameters: scan_id ('UUID of a ScanMalware scan'), script_url ('narrows to one file'), and limit/offset (pagination). It lacks concrete format/default detail for limit and offset, but meaningfully compensates for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific verb and resource ('List the code segments ... extracted from one scan's JavaScript') and scopes the result to a single scan, which implicitly contrasts with hash-based siblings like search_js_segments_by_hash. It does not explicitly name any sibling to route the agent though, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the scope ('one scan's JavaScript') and by the note that script_url narrows to one file. There is no explicit when-to-use vs when-not, and no named alternative such as get_js_segments_suspicious or search_js_segments_by_hash, leaving the agent to infer the choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_segments_suspiciousGet JS Segments SuspiciousA
Read-onlyIdempotent
Inspect

List the JavaScript code segments from one scan scored as suspicious, above min_risk_score, with location, snippet and risk details; paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
limitNo
offsetNo
scan_idYes
min_risk_scoreNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld behavior, so the safety profile is fully covered. The description adds pagination and the return field set (location, snippet, risk details), but those repeat what the schema and output schema already provide, and it does not disclose ordering, default limit, or what 'suspicious' means beyond the threshold.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the resource and scope, then tacks on the pagination and the scan_id clarification. No filler, though the semicolon-joined clauses pack several ideas together.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations and an output schema, the description only needs to cover selection scope and filtering, which it does reasonably well. The main residual gap is the interplay between 'suspicious' scoring and min_risk_score, plus result ordering, but nothing essential for calling the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and does address all four parameters at least nominally: scan_id is defined as a ScanMalware scan UUID, min_risk_score as a floor, and limit/offset as pagination. However it gives no scale or range for min_risk_score, no default/limit semantics, and no format beyond 'UUID' for scan_id, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (List) and resource (JavaScript code segments from one scan) and narrows scope with the 'scored as suspicious' filter, which implicitly separates it from siblings like get_js_segments_by_scan and get_js_segments_unknown. It stops short of naming those alternatives, so an agent must infer the routing from content alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'scored as suspicious, above min_risk_score' signals this is the filtered/threat-focused variant, but there is no explicit when-to-use, when-not-to-use, or 'use X instead' guidance. The alternative segment tools are never mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_js_segments_unknownGet JS Segments UnknownA
Read-onlyIdempotent
Inspect

List the JavaScript code segments from one scan that match no known library, at least min_code_length long; these are usually the page's own or a kit's code. Paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
limitNo
offsetNo
scan_idYes
min_code_lengthNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds pagination behavior and the meaning of the returned segments, but discloses no additional operational traits such as result limits, ordering, or cost. Modest added value over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler; the core filter and scope are front-loaded, followed by pagination and the scan_id format. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description covers scope, filtering, and all parameters. It is nearly complete, only lacking explicit routing versus the sibling segment tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does explain all four parameters: scan_id is a ScanMalware UUID, min_code_length is a lower bound, and limit/offset drive pagination. It compensates well, though it omits default behavior (e.g., what happens when limit is null).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (JavaScript code segments) scoped to one scan, with the defining filter 'match no known library'. This clearly distinguishes it from siblings like get_js_segments_by_scan and get_js_segments_suspicious without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful interpretation of the results ('usually the page's own or a kit's code'), which implies when this tool is interesting, but it never states when to prefer it over the sibling segment tools or any prerequisites. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_latest_capabilitiesGet Latest CapabilitiesA
Read-onlyIdempotent
Inspect

Get the current size of ScanMalware's detection content: indicator count, malware detection rules and ClamAV signatures.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered and the bar is lower. The description adds useful content scope (what the counts represent) but nothing about freshness, caching, or whether the numbers are live versus periodically refreshed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and the three enumerated payload fields; no filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and annotations carry the safety profile; the enumerated fields are enough to know what this returns. The only shortfall is the missing pointer to get_capabilities_by_date for non-current data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to clarify. It correctly avoids inventing parameter details that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get the current size of detection content) and enumerates what the count covers: indicators, malware rules, ClamAV signatures. The word 'current' implicitly contrasts with the dated sibling, but the description never names get_capabilities_by_date, so sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use statement, no exclusions, and no mention of the obvious alternative get_capabilities_by_date for historical snapshots. The only signal is the adjective 'current', which is too thin to count as real routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_malware_by_scanGet Malware By ScanA
Read-onlyIdempotent
Inspect

Get the malware detections for files the scanned page delivered, with threat names, detection counts and the detection source. Empty when nothing was detected. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only the empty-result behavior, which is useful but modest additional context; no auth, rate-limit or pagination disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then the empty case, then the parameter. Nothing is wasted and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no further explanation, and the annotation set covers the operational profile. The only shortfall is the absence of routing guidance among the many related read/stat siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does clarify that scan_id is a UUID belonging to a ScanMalware scan. That disambiguates it from the many other scan-identifier params in this family, though no format example or lookup source is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Get the malware detections for files the scanned page delivered', with an explicit enumeration of returned fields (threat names, detection counts, source). This is clearly distinguishable from data-shape siblings like get_malware_stats, though no alternative is named by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'scan_id is the UUID of a ScanMalware scan' implicitly tells the agent this is a post-scan lookup keyed to a specific scan, and the empty-result note sets expectations. But there is no explicit when-to-use guidance versus get_yara_by_scan, get_recent_threats, or get_malware_stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_malware_statsGet Malware StatsA
Read-onlyIdempotent
Inspect

Get malware detection statistics across the archive: overall and last-24-hour counts, top threats and hourly trend.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description's added value is limited to enumerating the reported statistics, which overlaps with the existing output schema and discloses no behavioral traits (refresh cadence, data window semantics, aggregation scope) beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler; the resource and its returned statistics are stated immediately. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only stats tool with a full output schema and safety annotations already in place, the description covers everything an agent needs to select and invoke it. Return values need not be explained further since the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to convey; the schema is complete by definition. Baseline 4 applies for a no-arg tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ("Get malware detection statistics") and enumerates the exact contents (overall and last-24-hour counts, top threats, hourly trend), which lets an agent distinguish this aggregate view from per-scan siblings like get_malware_by_scan. It never explicitly names an alternative, but the phrase "across the archive" establishes global scope versus scoped tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: "across the archive" signals this is the global/aggregate view, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g. get_malware_by_scan, get_recent_threats). An agent can infer the intent but receives no routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_netlogGet Network Log InfoA
Read-onlyIdempotent
Inspect

Describe the network log (Chrome NetLog) for a scan_id: whether one exists, its size, and its encoding. The log itself is not returned - these are routinely tens of megabytes gzipped.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description still adds real value by disclosing that the log content is deliberately excluded and why (tens of megabytes gzipped), which prevents the agent from expecting payload data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and concluding with the key constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return fields need not be spelled out. The description still covers the essential semantics for this simple 1-param read tool, and the only mild gap is the absence of any note on error/empty cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with one required parameter, but the description only references 'scan_id' in passing without adding format or sourcing detail. The single param is trivially understood from its name, so this is adequate but not compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (describe) and resource (Chrome NetLog network log) scoped to a scan_id, and enumerates exactly what is reported: existence, size, and encoding. No sibling tool covers network logs, so the agent can distinguish it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (fetch metadata rather than the log itself) but never states when to choose this over alternatives or any prerequisites. Usage is inferable from 'the log itself is not returned' but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ocr_by_scanGet OCR By ScanA
Read-onlyIdempotent
Inspect

Get the text read by OCR from the scan's screenshot, with language, confidence, word and character counts and any regions flagged as suspicious. Useful when page text is drawn as images. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety and side-effect profile is covered by structured data. The description adds value by disclosing the shape of the result (confidence, counts, suspicious flags) but says nothing about cost, pagination, or behavior for scans with no OCR results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler: the first front-loads what is returned, the second gives the use case and parameter definition. Every sentence carries information an agent needs to select or call the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so enumerating return fields is technically redundant, yet it helps selection against the many sibling get_* tools. Between the annotations, the output schema and the parameter definition, the description covers enough for correct invocation; only edge-case behavior is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter, so the schema offers nothing; the description compensates by defining scan_id as the UUID of a ScanMalware scan, which tells the agent both the format and how to obtain a valid value. It stops short of stating what happens for an unknown or non-OCR scan.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (get) plus resource (OCR text for a given scan) and it enumerates the returned substance: language, confidence, word and character counts, suspicious regions. This clearly separates it from aggregate siblings like get_ocr_stats and search-oriented siblings like search_ocr or search_ocr_pattern.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Useful when page text is drawn as images' implies the triggering condition, but no explicit when-not guidance is given and no sibling alternative (e.g. get_ocr_stats for aggregates, search_ocr for cross-scan queries) is named. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ocr_statsGet OCR StatsB
Read-onlyIdempotent
Inspect

Get OCR statistics across the archive: scans with OCR text, average confidence and length, language distribution and daily counts.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds what is aggregated and which metrics are computed, which is modestly useful, but says nothing about scoping, caching, or coverage limits of the statistics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the resource and metric list front-loaded and no filler. The metric enumeration is dense but each item earns its place by telling the agent what to expect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, full annotation coverage, and an output schema in place, the description only needs to frame the aggregation scope, which it does. Nothing essential for calling the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There are no parameter semantics to clarify and the description correctly avoids inventing any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get OCR statistics across the archive') and enumerates the exact metrics returned: scans with OCR text, average confidence and length, language distribution and daily counts. It is clearly distinguishable from the per-scan sibling get_ocr_by_scan, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, prerequisites, or routing against neighbors like get_ocr_by_scan or search_ocr. The aggregate nature of the tool is only implied by the word 'statistics', leaving the agent to infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_open_graphGet Open GraphA
Read-onlyIdempotent
Inspect

Get the Open Graph and Twitter card metadata the scanned page declared (title, description, image, site name). Phishing pages often copy a brand's metadata. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the scan-scoping constraint and the phishing rationale, but says nothing about behavior when a page declares no Open Graph tags or how results are keyed to a scan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is returned, followed by why it matters and the parameter's meaning. No sentence is redundant and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover the safety profile. The only residual gap is edge-case behavior (pages with no OG/Twitter metadata), which is minor for a read-only single-parameter lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for the single parameter and does so: 'scan_id is the UUID of a ScanMalware scan' supplies both format (UUID) and provenance (a prior scan). It stops short of saying whether the scan must be completed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (retrieve Open Graph and Twitter card metadata) and even enumerates the returned fields (title, description, image, site name). It is clearly distinguishable from siblings like get_ocr_by_scan or get_favicon, though it never explicitly names a sibling to contrast against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Phishing pages often copy a brand's metadata' implies the investigative context in which this tool is valuable, which is useful framing. However, there is no explicit when-to-use vs. when-not guidance and no reference to alternative tools for page-content analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pastejackingGet PastejackingA
Read-onlyIdempotent
Inspect

Get pastejacking findings for one scan: attempts by the page to replace what a visitor copies, a common trick for making victims paste malicious commands. Includes a detected flag and a note. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds some content context (the result carries a detected flag and a note) but says nothing about volume, pagination, or auth beyond the annotations; the return-shape detail is also partly redundant with the existing output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose before the parameter note. The middle clause explaining pastejacking costs a few words but earns them by making an obscure term self-explanatory.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers purpose, the technique's meaning, and the key input's origin. It is only slightly thin on sibling differentiation and on what an empty/negative result looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter, so the description must carry it — and it does partially, specifying scan_id is a UUID and that it belongs to a ScanMalware scan, which disambiguates it from other scan identifiers in this large toolset. Format/lookup-failure behavior is still unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (pastejacking findings) scoped to one scan, and defines the phenomenon so the agent knows what data this returns. It is clearly distinguishable from clipboard-adjacent siblings like get_clipboard_events and search_suspicious_clipboard without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage is a per-scan lookup ("for one scan") and names the required scan_id, but never says when to prefer this over get_clipboard_events, get_malware_by_scan, or search_suspicious_clipboard, nor any when-not condition. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pcap_metadataGet PCAP MetadataA
Read-onlyIdempotent
Inspect

Describe the packet capture (PCAP) recorded during one scan: whether it exists, its size, compression and content type. The capture itself is not returned. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the capture payload is deliberately withheld, and the response is limited to existence/size/compression/content-type metadata, which prevents an agent from expecting binary data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the most decision-relevant fact (what is described, and that the capture is not returned) is front-loaded before the parameter note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only metadata tool with annotations covering the safety profile and an output schema covering the return shape, nothing an agent needs to call it correctly is missing. The parameter is resolved and the non-return of the capture is disclosed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden, and it does: it identifies scan_id as a UUID tied to a ScanMalware scan, which the schema (a bare string titled 'Scan Id') does not convey. It stops short of ID syntax details or failure behavior for unknown scans.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Describe') and resource (the PCAP recorded during one scan), then enumerates exactly what is returned: existence, size, compression, content type. 'The capture itself is not returned' cleanly separates this metadata reader from any tool that would fetch the artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Scope is clear from context ('recorded during one scan', 'scan_id is the UUID of a ScanMalware scan'), which implies when it is applicable. However, it never states when to reach for this versus related scan-scoped readers such as get_netlog or get_scan_result, and offers no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_platform_statsGet Platform StatsA
Read-onlyIdempotent
Inspect

Get the current scan queue length, running scans and scans completed in the last 24 hours by visibility.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the 24-hour window and the three metrics returned, which is useful scoping context, but says nothing about refresh cadence, staleness, or whether the window is fixed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the resource and lists the three returned metrics with no filler. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return shapes, and with zero parameters there is no input documentation burden. The only gap is the undefined 'by visibility' grouping and the absence of any routing guidance among the many stats siblings, which keeps it short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and schema coverage is 100%, so there is nothing for the description to document. Baseline 4 applies; no parameter-level gaps exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (platform stats) and enumerates exactly what is returned: scan queue length, running scans, and scans completed in the last 24 hours. It is distinguishable from the many sibling *_stats tools by the 'platform' scope, though the qualifier 'by visibility' is left undefined, so an agent cannot tell what grouping dimension it will receive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the dozens of sibling stats endpoints (get_analyzer_stats, get_domain_stats, get_js_runtime_stats, etc.), nor any prerequisite or exclusion. The agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rdapGet RDAPA
Read-onlyIdempotent
Inspect

Get registration data (RDAP) for the scanned domain and its IP addresses: registrar, registration and expiry dates, domain age, nameservers and status. A very young domain is a common phishing signal. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds what data is returned but does not disclose limitations such as rate limits, caching, auth needs, or behavior when RDAP data is unavailable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences with no wasted words: purpose and returned fields first, then the security rationale, then the parameter clarification. It is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with an output schema and full annotations, the description covers the purpose, returned content, and the meaning of scan_id. It omits explicit guidance on when to prefer this tool over related domain-history or DNS tools, but otherwise provides enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single scan_id parameter, so the description must compensate. It does so by explaining that scan_id is the UUID of a ScanMalware scan, which clarifies the value's source and format beyond the bare schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and resource ('registration data (RDAP)') and enumerates the returned fields (registrar, registration/expiry dates, domain age, nameservers, status). It scopes the lookup to 'the scanned domain and its IP addresses,' which helps distinguish it from generic domain tools, but it does not explicitly name a sibling alternative to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'A very young domain is a common phishing signal' implies the tool is useful for phishing assessment, giving some usage context. However, it does not state when to choose this over alternatives such as get_domain_history or get_domain_stats, nor does it provide any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_scansGet Recent ScansA
Read-onlyIdempotent
Inspect

List the most recent public scans, newest first (paginated with page and limit). Each row has the scan ID, URL, status, visibility and submission time. Unlisted and private scans are never included.

NameRequiredDescriptionDefault
pageNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive safety profile, so the description's real contribution is the filtering rule ('Unlisted and private scans are never included') and the deterministic ordering. That is genuine behavioral context beyond the annotations, though pagination limits or result-set size caps are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core scope (public, newest first) and pagination front-loaded before the detail about row contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be documented, and the description nonetheless summarizes the row fields and the exclusion rule. Only the pagination parameter details (defaults, caps) are missing, which is a minor gap for a two-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and neither parameter has a description, so the description is the only source of meaning — it identifies 'page' and 'limit' as the pagination controls, which is useful. However it omits the defaults (1 and 20) and any maximum for limit, leaving the schema as the sole source for those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the most recent public scans') with scope ('newest first', 'public') and the row shape. It implicitly separates itself from the many search_* siblings by being an unfiltered recency listing, but never names an alternative, so sibling differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'recent' and 'newest first' imply the use case (browse latest activity), but there is no explicit when-to-use guidance, no statement of when to prefer search_scans or the domain-specific getters, and no prerequisites mentioned. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_threatsGet Recent ThreatsB
Read-onlyIdempotent
Inspect

List malware threats detected in scans during the last hours (default window set by the API), with totals and grouping by threat.

NameRequiredDescriptionDefault
hoursNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered. The description adds useful behavioral context that the window defaults to an API-defined value and that results include totals and grouping, but it omits pagination, rate limits, and how 'limit' interacts with the totals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the temporal scope and output shape front-loaded; nothing is padded. It is compact, though the parenthetical about the default window is a bit clunky.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. Still, for a 2-param tool with 0% schema description coverage, the definition should clarify the undocumented parameters and how it relates to sibling threat tools; it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% - neither 'hours' nor 'limit' has a description. The description partly compensates by implying a time window and noting the API-set default, but it never explains the meaning, bounds, or default of 'limit' (default 20). The description leaves half the parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('malware threats detected in scans during the last hours') plus the aggregation shape ('totals and grouping by threat'). However, it does not distinguish itself from the closely related sibling get_recent_yara_threats or get_malware_stats, so an agent cannot route between them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives, no exclusions, and no prerequisites. Given siblings like get_recent_yara_threats and get_malware_by_scan, an agent gets no help choosing this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_yara_threatsGet Recent YARA ThreatsB
Read-onlyIdempotent
Inspect

List YARA rule matches from scans in the last hours, each with the scan, URL, rule, category, severity and confidence.

NameRequiredDescriptionDefault
hoursNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only the recency scoping and the result field list, which the output schema already carries; it discloses no pagination, ordering, or rate-limit behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope qualifier comes before the field list. It is appropriately sized for a simple list tool, though the trailing field enumeration is largely redundant with the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with an output schema (so return values need no explanation) and full annotation coverage, the description is minimally adequate. It falls short on parameter behavior and on distinguishing itself from the several overlapping YARA/threat siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never names or explains the two parameters. 'Last hours' loosely hints at the hours parameter but gives no units, default, or behavior when omitted, and the limit parameter (default 20) is entirely unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (list YARA rule matches) plus a scope qualifier (scans in the last hours) and enumerates the returned fields. It is clear on its own, but it never differentiates itself from near-identical siblings such as get_yara_by_scan, get_yara_matches, get_recent_threats, or get_yara_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'scans in the last hours' window implies a recency/monitoring use case, which is weak implicit guidance for when to pick this over the per-scope alternatives. No explicit when-to-use, when-not-to-use, or named alternative appears.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_safe_browsingGet Safe BrowsingA
Read-onlyIdempotent
Inspect

Get Google Safe Browsing threats found for the URLs in one scan, with a has_threats flag. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds the has_threats flag and clarifies the identifier's origin ('UUID of a ScanMalware scan'), which is useful context, but since an output schema exists the return-value detail is largely redundant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core purpose front-loaded and the identifier clarification second. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema and rich annotations, the description only needs to add what structured data cannot. It names the result payload's key flag and the identifier's origin, which is close to sufficient for a single-parameter read tool; only usage routing is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does: it explains that scan_id is the UUID of a ScanMalware scan, adding format and provenance beyond the bare 'Scan Id' title. It does not cover error behavior for an unknown scan_id, but the core semantic is supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (Google Safe Browsing threats for the URLs in one scan), and the scoping phrase 'in one scan' implicitly separates it from the aggregate get_safe_browsing_stats sibling. It does not name that sibling explicitly, so the differentiation relies on the agent noticing the singular vs. aggregate distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus get_safe_browsing_stats, get_malware_by_scan, or get_recent_threats. The phrase 'in one scan' hints that a scan_id from a prior scan is required, but no prerequisite or exclusion is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_safe_browsing_statsGet Safe Browsing StatsA
Read-onlyIdempotent
Inspect

Get Google Safe Browsing statistics across the archive: total threats, threats in the last 7 days, scans with threats and threat types.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds the metric set (total threats, 7-day threats, scans with threats, threat types), which is useful behavioral context but overlaps with what the output schema already conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and scope lead, and the metric list follows. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and a zero-parameter read-only stats tool has little else an agent needs. Only the routing distinction from get_safe_browsing is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly does not invent parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get Google Safe Browsing statistics') and enumerates the returned metrics, so the agent knows it is an aggregate-stats tool. It does not explicitly contrast itself with the sibling get_safe_browsing (per-scan data), leaving that differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across the archive' implies this is the aggregate/rollup view rather than a per-scan lookup, which gives implicit usage context. However, there is no explicit when-to-use statement, no exclusions, and no named alternative such as get_safe_browsing or get_recent_threats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scan_iocGet Scan IOCA
Read-onlyIdempotent
Inspect

Check one scan against threat-intelligence indicator feeds: matching IP addresses and domains the page contacted, the threat types, and a summary of total and unique matches. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the returned dimensions (contacted IPs/domains, threat types, match counts) but nothing about rate limits, auth, or freshness of the feeds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero waste. The capability is front-loaded and the parameter note trails after the purpose, which is the correct ordering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations carry the safety profile, so the description needn't explain returns; it still summarizes them helpfully. For a one-parameter read tool this is nearly complete, with only the sibling routing left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only labels the field 'Scan Id'. The description compensates by specifying that scan_id is the UUID of a ScanMalware scan, giving both format and source, which the schema alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and resource (one scan against threat-intelligence indicator feeds), then enumerates the returned content: matching IPs and domains contacted, threat types, and a total/unique match summary. An agent can distinguish this from get_malware_by_scan or get_scan_result by the IOC-matching scope alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose ('check one scan against threat-intelligence indicator feeds'), which tells the agent this is the per-scan IOC lookup. However, no alternative sibling is named and no when-not condition is given despite many overlapping get_*_by_scan tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scan_progressGet Scan ProgressA
Read-onlyIdempotent
Inspect

Get the progress of a running scan: current step, total steps, step name, percentage and status. Useful for checking whether a scan has finished before reading its results. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds that the operation targets a 'running scan' and lists the returned progress fields, which is useful, but since an output schema exists that field list is largely redundant and no rate-limit/polling-cadence guidance is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the purpose and return fields, then usage, then parameter format. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter, an output schema present, and rich annotations, the description covers purpose, use context, and parameter format adequately. It leaves a small gap around polling behavior versus the wait_for_scan sibling, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden here and does compensate: it states 'scan_id is the UUID of a ScanMalware scan', giving both format (UUID) and provenance. That is meaningful beyond the bare 'Scan Id' property title, though it doesn't say where the UUID comes from (e.g. submit_scan output).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource and enumerates exactly what it returns (current step, total steps, step name, percentage, status), so the agent knows precisely what data comes back. However, it does not distinguish itself from the obvious sibling 'wait_for_scan' or 'get_scan_result', which an agent scanning the tool list would likely confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for checking whether a scan has finished before reading its results' gives a clear use context and implies a polling pattern prior to fetching results. It stops short of naming the alternative (wait_for_scan) or stating when NOT to use polling, so no explicit exclusion is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scan_reportsGet Scan ReportsA
Read-onlyIdempotent
Inspect

List the user reports and votes filed about one scan (for example marked safe or malicious), with the total count; report_type filters by kind. Empty when nobody has reported the scan. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes
report_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavior beyond that: the result is empty when nobody has reported the scan. Beyond that it does not describe rate limits, auth needs, or aggregation behavior, keeping it at a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the purpose front-loaded and no filler. The trailing scan_id clarification is slightly out of order (it belongs with the parameter discussion) but the overall size is appropriate for a two-parameter read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the annotations cover the safety profile, so the description only needs to cover params and edge cases. It handles the empty-result edge case and scan_id format but leaves report_type values ambiguous, a minor but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It clarifies scan_id as the UUID of a ScanMalware scan and says report_type 'filters by kind', but with no enum and no concrete values for report_type, the agent still cannot know what kinds are valid, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb ('List') and resource ('user reports and votes filed about one scan'), with helpful elaboration of what a report is (marked safe or malicious) and the returned total count. It does not, however, differentiate itself from the natural sibling submit_scan_report or the other per-scan getters, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer it should call this to see reports on a given scan, and the 'Empty when nobody has reported the scan' note hints at expected results. No alternative tools are named and no when-not guidance is given, so this is minimum-viable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scan_resultGet Scan ResultA
Read-onlyIdempotent
Inspect

Get the full result document of one scan: URLs and redirects, page title, load times, links, network requests, IP addresses, JavaScript files, TLS, fuzzy hashes, screenshot hashes, favicon and the security verdict. The response is large; the compact summary is enough for a verdict. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds one genuinely useful trait beyond that – 'The response is large' – but says nothing about pagination, truncation, auth requirements, or behavior when the scan_id is unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the what, followed by the size/alternative guidance. The field enumeration is long but doubles as the selection signal versus the summary tool; no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the return-value listing is arguably redundant, but the safety annotations plus the 'large response' caveat and the summary alternative give an agent everything needed to choose and call the tool. Only scan_id provenance is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single scan_id parameter has 0% schema description coverage, so the description must carry the load; it partially does by identifying scan_id as 'the UUID of a ScanMalware scan'. It does not say where that UUID comes from (submit_scan, wait_for_scan, search_scans), leaving the sourcing gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the full result document of one scan') and enumerates the contents, so an agent instantly knows this is the heavyweight per-scan detail endpoint. It also implicitly distinguishes itself from the summary-style siblings by noting the compact summary suffices for a verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames when this tool is overkill: 'the compact summary is enough for a verdict', steering agents away from the large response. It stops short of naming the alternative tool (get_scan_summary) or stating prerequisites like a completed scan, so it is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scan_summaryGet Scan SummaryA
Read-onlyIdempotent
Inspect

Get a compact summary of one scan: submitted URL, final URL after redirects, status, completion time and the security verdict (verdict text, risk level, confidence and risk factors). Useful as the first look at a scan; the verdict is empty for a few seconds after a scan completes. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds a genuinely useful trait beyond them: the verdict is empty for a few seconds after a scan completes, warning the agent about an eventual-consistency window that would otherwise cause confusion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the returned content, then usage, then parameter. The middle clause is a dense list but every element is informative; nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return values, yet annotations cover safety and the description covers the timing caveat and the ID format. What remains missing is any note on failure behavior for an unknown or expired scan_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with a single parameter, so the description must compensate, and it does: 'scan_id is the UUID of a ScanMalware scan' supplies both the expected format and the system of origin. It adds no edge-case or error semantics for malformed/nonexistent IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a compact summary of one scan') and enumerates the exact fields returned, so an agent knows precisely what it gets back. The word 'compact' plus 'first look at a scan' distinguishes it from heavier siblings like get_scan_result, get_scan_reports and get_scan_ioc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful as the first look at a scan' gives clear positioning: a cheap entry point before drilling into detailed result tools. It does not name a specific alternative or state when-not-to-use it, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screenshot_statsGet Screenshot StatsA
Read-onlyIdempotent
Inspect

Get screenshot statistics across the archive: total screenshots, hash coverage and the distribution of perceptual hash types.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered without the description's help. The description adds the useful scope detail that results span the whole archive, but says nothing about cost, caching, or freshness beyond that. This is acceptable added context given the annotation coverage, not more.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, then the concrete metrics. No filler, no restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and annotations carry the safety profile. The enumerated metric categories plus the archive-wide scope make it sufficient for a zero-parameter stats tool; only freshness/timing context is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly avoids inventing parameters and instead documents the shape of the aggregate result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('screenshot statistics') with the returned metrics enumerated (total screenshots, hash coverage, perceptual hash type distribution). It is clearly distinct from the screenshot search tools (search_by_screenshot_hash, search_similar_screenshots), but it never explicitly contrasts itself with any sibling the way a 5 would.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across the archive' implies this is a global aggregate query rather than a per-scan or filtered lookup, which is the only usage signal present. There is no explicit statement of when to prefer this over per-scan or search endpoints, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_technologies_by_scanGet Technologies By ScanA
Read-onlyIdempotent
Inspect

List the web technologies detected on a scanned page (frameworks, CMS, CDN, analytics and so on), with versions where known. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds result-oriented context (versions included where known) but says nothing about pagination, result size, or behavior on a scan with no detections.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core deliverable front-loaded and the parameter documentation following. No filler, nothing restating the tool name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be spelled out, and the description still previews the returned fields. For a single-parameter read tool this is essentially sufficient; only cross-tool routing guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for the single parameter, and it does: scan_id is identified as the UUID of a ScanMalware scan, which conveys format and provenance that the bare 'Scan Id' string title does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (web technologies detected on a scanned page), and enumerates concrete categories (frameworks, CMS, CDN, analytics) which sharpens what comes back. It scopes to a single scan, which separates it from name-based siblings like search_technologies, but it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the reader infers you must already hold a ScanMalware scan_id. There is no explicit when-to-use, when-not-to-use, or pointer to search_technologies / get_popular_technologies / get_technology_combinations for other access patterns.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_technology_combinationsGet Technology CombinationsA
Read-onlyIdempotent
Inspect

List the technologies most often detected together with a given technology, with counts; min_occurrences drops rare pairs; paginated.

NameRequiredDescriptionDefault
pageNo
limitNo
tech_nameYes
min_occurrencesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds that results are paginated and include counts, which is useful, but says nothing about ordering, result caps, or cost despite the openWorldHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence, front-loaded with the core action; the semicolon-clause structure packs three facts without padding. Dense but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and this is a simple read-only lookup. For a 4-parameter query tool with only one required argument, the description covers the essentials.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema adds nothing beyond names and defaults. The description explains min_occurrences as the rare-pair filter and gestures at pagination, but page and limit semantics and the string format for tech_name are left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing technologies co-detected with a given technology, with counts. That co-occurrence framing cleanly distinguishes it from siblings like search_technologies, get_technology_stats, and get_popular_technologies, though it never names an alternative outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'min_occurrences drops rare pairs' implies when to raise the threshold, but there is no explicit when-to-use statement, no guidance on choosing this over get_technology_stats or get_technologies_by_scan, and no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_technology_statsGet Technology StatsA
Read-onlyIdempotent
Inspect

Get technology detection statistics across the archive: unique technologies, total detections and counts per category. This aggregate query can take up to 90 seconds by default.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the bar is lower. The description adds a genuine behavioral trait not in the annotations: 'this aggregate query can take up to 90 seconds by default,' which warns the agent about latency. It stops short of noting caching or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first front-loads what is returned, the second adds the latency caveat. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. Given zero parameters, the description is nearly complete, missing only minor context such as whether the 90s figure is tunable or whether results are cached.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline this scores 4. There are no arguments whose meaning could be expanded, and schema coverage is 100% regardless.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource (technology detection statistics) and enumerates the returned aggregates: unique technologies, total detections, counts per category. It is clearly about technologies rather than other entities, though it doesn't distinguish itself from closely related siblings like get_technology_combinations or get_popular_technologies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across the archive' implies a whole-corpus aggregate contrasted with per-scan tools such as get_technologies_by_scan, but no explicit when-to-use, when-not, or named alternative is given. Usage is only inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tls_asn1Get TLS ASN1A
Read-onlyIdempotent
Inspect

Get the raw ASN.1 structure of the TLS certificate from one scan, for detailed certificate inspection. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds that the payload is a raw ASN.1 structure, which hints at the output's low-level nature, but says nothing about size, parsing needs, or failure modes when no TLS cert exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the action and scope come first, the parameter note second. No filler, no redundancy with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover the safety profile. The description adequately conveys what is fetched and which identifier is needed; only the routing against get_tls_details remains implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does clarify that scan_id is the UUID of a ScanMalware scan, which is more than the schema's bare 'Scan Id' title provides. It stops short of detailing format constraints or invalid-ID behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetching the raw ASN.1 structure of a TLS certificate from a single scan. It is distinct from get_tls_details because it emphasizes the 'raw ASN.1' payload for 'detailed certificate inspection', though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For detailed certificate inspection' implies the use case, but there is no explicit when-not or named alternative (e.g., get_tls_details for summarized cert info). The agent must infer that this is the deep-dive option versus the summary tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tls_detailsGet TLS DetailsA
Read-onlyIdempotent
Inspect

Get the TLS certificate the scanned site presented: subject, issuer, validity dates, whether it was valid or expired, and related details. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful context about what the payload contains (valid vs expired status, issuer, validity window), but nothing about failure modes, missing-cert behavior, or external lookups implied by openWorldHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core behavior is front-loaded ahead of the parameter clarification. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description is not obliged to enumerate return fields, yet it does so anyway for scanning value. With one required parameter, annotations covering safety, and the scan_id source explained, an agent has everything needed to invoke it; only usage routing against sibling cert tools is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema only offers 'Scan Id' as a string title; the description compensates by defining it as the UUID of a ScanMalware scan, which is meaningfully more than the schema provides. With only one parameter, this is close to fully specified, though it does not describe format expectations or error behavior for a bad UUID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Get the TLS certificate the scanned site presented') and enumerates the returned fields (subject, issuer, validity dates, validity status), which makes it distinguishable from get_tls_asn1 and get_ct_certificates. It stops short of explicitly contrasting itself with those siblings, so it falls one notch below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no sibling is named as an alternative for adjacent cert-related needs (e.g. get_tls_asn1, get_ct_certificates). The only context given is that scan_id comes from a ScanMalware scan, which is input semantics rather than usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_tracking_keysGet Top Tracking KeysB
Read-onlyIdempotent
Inspect

List the tracking and site keys seen on the most sites (analytics IDs, CAPTCHA keys and so on), with the tracker name, category and site count; tracker_type filters by kind.

NameRequiredDescriptionDefault
limitNo
tracker_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining the result is ordered by prevalence of sites and what each row contains, but it says nothing about pagination, the default limit, or how large the ranking can be.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly-packed sentence that front-loads the core purpose before the qualifier clause. The vague trailing 'and so on' costs it a point but nothing else is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return-field explanation is not strictly required, and the description does describe the returned fields anyway. However, with zero schema coverage and no usage routing against 'search_tracking_key', the definition leaves an agent with real gaps for a two-parameter analytic query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It partially explains tracker_type ('filters by kind') but gives no accepted values despite there being no enum, and 'limit' is never mentioned at all, leaving its default (20) and bounds undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List the tracking and site keys') plus the ranking criterion ('seen on the most sites'), which is more than a restatement of the name. It does not, however, distinguish itself from the sibling 'search_tracking_key', which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the very similar 'search_tracking_key' sibling, nor any prerequisite or scope guidance. Usage must be inferred entirely from the ranking phrase.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yara_by_scanGet YARA By ScanA
Read-onlyIdempotent
Inspect

Get YARA rule matches for one scan, with a summary by severity (critical, high, medium, low) and category. Empty when no rule matched. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds real behavioral value beyond that: results are bucketed by severity (critical/high/medium/low) and category, and the empty-result case is called out, which is exactly what an agent needs to interpret responses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, return shape, empty case. No repetition, no filler, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be enumerated, and the description still previews the severity/category summary and empty case. For a one-parameter read tool this is nearly complete; only the sibling-routing guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single scan_id parameter, so the description must carry the burden. It specifies the format (UUID) and the originating entity (a ScanMalware scan), which meaningfully constrains how the value should be sourced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get YARA rule matches for one scan') and pins the scope to a single scan, which implicitly separates it from aggregate siblings like get_yara_matches or get_yara_stats. It does not, however, name any sibling explicitly, so the agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The single-scan scope implies when this tool applies, and the note that scan_id belongs to a 'ScanMalware scan' gives context for invocation. There is no explicit when-not guidance or reference to the alternatives (get_yara_matches, get_recent_yara_threats, get_yara_stats), so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yara_matchesGet YARA MatchesA
Read-onlyIdempotent
Inspect

Get the YARA rule matches recorded for one scan, with the matching rules and a summary by severity and category. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds the shape of the result (matching rules plus a summary by severity and category), which is useful but overlaps with the existing output schema rather than disclosing new behavior like permissions, rate limits, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, the retrieval scope and result shape are front-loaded, and the parameter clarification comes last. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only lookup with full annotation coverage and an output schema that documents the return, the description supplies what the agent needs to invoke it correctly. The only gap is the absence of sibling differentiation, which matters given the dense family of YARA and per-scan tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it delivers: it tells the agent that scan_id is the UUID of a ScanMalware scan, not an arbitrary integer or hash. It stops short of a formal format example, but it meaningfully clarifies the single required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the YARA rule matches') and scopes it to a single scan, so the agent knows exactly what it retrieves. It does not, however, differentiate itself from near-neighbors like get_yara_by_scan, get_yara_stats, or get_recent_yara_threats, which the agent must disambiguate on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'for one scan' plus 'scan_id is the UUID of a ScanMalware scan' tells the agent this is a per-scan lookup and what kind of ID to supply. There is no explicit when-to-use versus get_yara_by_scan/get_yara_stats and no statement of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yara_statsGet YARA StatsA
Read-onlyIdempotent
Inspect

Get YARA statistics across the archive: overall and last-24-hour matches, severity and category distribution and top threats.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered structurally. The description's only added behavioral context is the time window (overall vs last 24 hours); it says nothing about rate limits, cache freshness, or when the counters are computed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that enumerates the returned aggregates without padding. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description need not explain return values. It is largely complete for a parameterless stats tool, though it omits any cross-reference to the sibling YARA tools that cover the same data at a different granularity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no per-parameter semantics to document; the baseline for a parameterless tool is 4. The description correctly adds no parameter noise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Get YARA statistics') with added scope detail: overall vs last-24-hour matches, severity/category distribution, and top threats. This clearly describes an aggregate stats tool, but it never distinguishes itself from siblings such as get_yara_by_scan, get_yara_matches, or get_recent_yara_threats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance and no mention of alternatives. The 'across the archive' phrasing implies a dashboard/overview use case, but the agent must infer this and cannot tell from the description why it should pick this over get_yara_matches or get_recent_yara_threats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_js_differential_analysisRun JS Differential AnalysisA
Read-onlyIdempotent
Inspect

Compare the JavaScript of one scan against known libraries and report which code segments match a library, which are unknown and which look suspicious, with a per-library breakdown. Matches below min_confidence (default 0.8) are not counted; known library code is excluded unless include_known_libraries is true. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes
min_confidenceNo
include_known_librariesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: matches below min_confidence are dropped, and known library code is excluded unless include_known_libraries is set. It does not mention performance cost or auth needs, but for a read-only analysis tool this is solid added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler: purpose and output categories first, then the two behavioral modifiers, then the one-line scan_id clarification. Each sentence carries distinct information and the ordering is front-loaded correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no exposition, and the annotations cover the safety profile. Given a 3-parameter, read-only analysis tool, the description supplies everything an agent needs to call it correctly: the scan id type, the confidence threshold, and the known-library toggle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameters, and it does address all three: scan_id as a ScanMalware scan UUID, min_confidence with its 0.8 default and threshold effect, and include_known_libraries as the switch that re-includes known library code. It stops short of stating min_confidence's 0-1 range or what 'confidence' precisely measures, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Compare) and resource (JavaScript of one scan against known libraries) and enumerates exactly what it produces: matching segments, unknown segments, suspicious segments, and a per-library breakdown. An agent can distinguish this analysis-producing tool from retrieval-only siblings like get_js_segments_unknown or get_js_segments_suspicious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'the JavaScript of one scan' and the required scan_id, so the agent infers it runs after a scan exists. However, it never states when this tool is preferable to the segment-listing siblings, nor any when-not conditions. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ai_classificationSearch AI ClassificationB
Read-onlyIdempotent
Inspect

List scans whose AI analysis gave a specific classification: LEGITIMATE, LOW_RISK, MODERATE_RISK, HIGH_RISK or CONFIRMED_SCAM. Each result has the URL, title, submission time and the analysis.

NameRequiredDescriptionDefault
limitNo
classificationYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the return field list, which the output schema already provides; it says nothing about result caps, pagination, or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the filter semantics and no filler. The second sentence describing result fields is mildly redundant given the output schema, but it is inexpensive and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no further explanation and annotations cover the safety profile. The remaining gap is operational: nothing about the limit default/behavior, and no routing guidance against the closely related search_ai_high_risk and search_ai_scam_type siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It restates the classification enum values with useful framing ('AI analysis gave a specific classification'), but the limit parameter is documented nowhere, including whether it caps or truncates results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List scans') scoped by the AI classification value, and enumerates the five valid classes so an agent knows exactly what population is returned. It does not, however, distinguish itself from the sibling search_ai_high_risk, which appears to be a fixed subset of this same filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the enumerated classifications (call it when you want scans binned by AI risk verdict), but there is no explicit when-to-use statement, no exclusions, and no pointer to alternatives such as search_ai_high_risk or search_ai_scam_type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ai_high_riskSearch AI High RiskA
Read-onlyIdempotent
Inspect

List scans that the AI analysis rated high risk, optionally above min_risk_score and min_confidence, each with URL, title and the analysis. min_risk_score is on the AI's 0-10 risk scale (default 7) and min_confidence is a 0-100 percentage (default 70).

NameRequiredDescriptionDefault
limitNo
min_confidenceNo
min_risk_scoreNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the scale semantics (0-10 risk, 0-100 confidence), but it contradicts the schema by claiming defaults of 7 and 70 while the schema declares default null for both, leaving the agent unsure whether a threshold is applied when the argument is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the resource and scope front-loaded before the parameter detail. The clause enumerating return fields ('URL, title and the analysis') is slightly redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and the filtering semantics are covered. Gaps remain around limit/ordering/pagination behavior and the default-value conflict, but nothing essential to invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it explains two of three parameters well, giving scale and default for min_risk_score and min_confidence. The third parameter, limit, is never mentioned, and the stated defaults conflict with the schema's null defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List scans that the AI analysis rated high risk'), which is materially different from sibling search_ai_classification and search_ai_scam_type. It never names those siblings, however, so an agent comparing the three AI-search tools gets no explicit routing signal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The two optional threshold filters and their defaults imply the intended usage context (surfacing the top of the AI risk distribution), but there is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as search_ai_classification or search_analyzer_high_risk.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ai_scam_typeSearch AI Scam TypeA
Read-onlyIdempotent
Inspect

List scans whose AI analysis named a given scam type, such as 'Phishing', each with URL, title, submission time and the analysis (verdict, classification, risk score). The match is on the scam type text the analysis produced.

NameRequiredDescriptionDefault
limitNo
scam_typeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety behavior is covered. The description adds the matching rule (match is on the analysis-produced scam type text) and enumerates returned fields, but leaves open whether matching is exact or substring, and says nothing about result ordering or cap behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, with the core scope stated first and the qualifier about match semantics last. The enumeration of returned fields in the parenthetical is somewhat redundant given a published output schema, which is the only real slack.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, and the description correctly focuses on the filter semantics that the schema cannot express. Remaining gaps (exact vs partial match, sibling disambiguation, limit behavior) are modest for a simple two-parameter search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It does explain scam_type well (value must correspond to the label the AI analysis produced, with a worked example), but the 'limit' parameter is never mentioned and no format or matching-mode hints are given for the string input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List scans whose AI analysis named a given scam type') and makes the filter axis explicit ('the scam type text the analysis produced'). It is clearly distinguishable from generic scan search, though it never names its closest siblings (search_ai_classification, search_ai_high_risk) to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent can infer this tool is for filtering scans by AI-assigned scam-type label, and the example 'Phishing' hints at expected inputs. But there is no explicit when-to-use/when-not, no mention of alternatives such as search_ai_classification, and no guidance on how this differs from a free-text semantic search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_analyzer_high_riskSearch Analyzer High RiskB
Read-onlyIdempotent
Inspect

List scans that the security analyzer scored as high risk, highest first (paginated), each with URL, risk score, verdict, confidence and analysis time. min_risk_score raises the threshold.

NameRequiredDescriptionDefault
pageNo
limitNo
min_risk_scoreNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so the safety burden is carried elsewhere. The description still adds real behavioral detail beyond annotations: results are ordered highest-risk-first and the response is paginated, plus what a threshold change does to the result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose in the first clause, then response shape, then the one parameter note — no filler. The enumerated return fields overlap with the existing output schema, which is mild redundancy rather than bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values did not need enumerating, and the safety profile is covered by annotations. The real gap is parameter guidance: for a search tool with three undocumented parameters, an agent gets no sense of sensible limit values, page behaviour, or the risk-score scale.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and only min_risk_score gets any prose treatment ('raises the threshold'), with no indication of its range or scale. 'Paginated' hints at page/limit, but their defaults and bounds are left entirely to bare integer titles in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

'List scans that the security analyzer scored as high risk, highest first' gives a specific verb, resource, filter and sort order. The 'security analyzer' framing implicitly separates it from siblings like search_ai_high_risk and get_analyzer_results, but no sibling is named outright, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (pull the top high-risk analyzer findings, optionally tighten the cutoff), and 'min_risk_score raises the threshold' gives one concrete usage lever. It never says when to prefer this over search_ai_high_risk, search_scans, or get_analyzer_results, so usage remains inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_asnSearch By ASNA
Read-onlyIdempotent
Inspect

Get what the archive knows about an autonomous system (ASN number, without 'AS'): organisation, total scans, unique URLs, first and last seen and BGP prefixes; paginated.

NameRequiredDescriptionDefault
pageNo
limitNo
asn_numberYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds value beyond that: the 'AS'-prefix stripping requirement for the input and the fact that results are paginated. It does not describe result ordering or page-size behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a colon-delimited field list and a trailing 'paginated' qualifier. Dense and largely waste-free, though the field enumeration partially duplicates what the output schema already provides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still hints at them. For a 3-parameter read tool with one required input, the description plus annotations plus output schema cover everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It does add the meaningful format constraint for asn_number ('without AS'), but page and limit are only gestured at by the word 'paginated' — no defaults or limits are restated, though the schema does supply defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get what the archive knows about') and resource (an autonomous system identified by ASN number), and enumerates the returned fields (organisation, total scans, unique URLs, first/last seen, BGP prefixes). This clearly separates it from the many other search_by_* siblings keyed on IP, favicon, JARM, nameserver, or registrar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the crucial input-format rule ('ASN number, without AS'), which is actionable, but never states when to prefer this over alternatives such as search_by_ip or when a lookup would be empty. Usage is implied rather than contrasted, so it lands at the minimum-viable level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_faviconSearch By FaviconB
Read-onlyIdempotent
Inspect

Search scans by favicon hash (paginated): a mmh3 hash by default, or the favicon's MD5 with hash_type='md5'.

NameRequiredDescriptionDefault
pageNo
limitNo
hash_typeNommh3
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and idempotency are covered structurally. The description adds the pagination behavior, which is genuine extra context, but says nothing about result ordering, match thresholds, or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and resource and packs the default/override hash-type rule into a trailing clause. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and annotations cover the safety profile. What remains thin is parameter coverage: page/limit are undocumented and hash_value's expected encoding is unstated, which matters for a search tool where a malformed hash silently yields no results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does cover two of four parameters: hash_value (the favicon hash to match) and hash_type (mmh3 default vs. MD5). It does not explain page/limit semantics beyond the word 'paginated', nor the expected format of hash_value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search scans by favicon hash') plus the two supported hash algorithms, so the agent knows exactly what is being queried. However, it never distinguishes itself from the near-duplicate sibling 'search_favicon_mmh3' or from 'get_favicon', which is a real ambiguity given the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the mechanism but gives no when-to-use guidance, no exclusions, and no routing to alternatives such as search_favicon_mmh3 (which appears to cover the same mmh3 case). The agent must infer the selection context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_fuzzy_hashSearch By Fuzzy HashA
Read-onlyIdempotent
Inspect

List scans whose page content has a similar fuzzy hash (hash_type tlsh, ssdeep or sdhash; the value comes from a scan result), each with URL, title and time; paginated. Useful for finding near-identical copies of a page.

NameRequiredDescriptionDefault
pageNo
limitNo
hash_typeYes
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation as read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context beyond that: results are paginated and each result includes URL, title, and time. It does not discuss authentication, rate limits, or similarity thresholds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that packs in purpose, inputs, output fields, and pagination without filler. The semicolon-heavy structure is dense but still readable and every clause contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to fully explain return values. It covers the essential purpose, input provenance, pagination, and result shape well enough for an agent to call it correctly. Minor gaps remain around similarity semantics and explicit sibling selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries a larger burden. It meaningfully explains hash_type options and that hash_value comes from a scan result, but it leaves the page and limit parameters unaddressed beyond their schema defaults. The hash_type values are also already visible in the enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List scans whose page content has a similar fuzzy hash.' It also says what each result includes and that results are paginated. The 'page content' scope implicitly separates it from the many JS-fingerprint fuzzy-hash siblings, but it does not explicitly name an alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: finding near-identical copies of a page. It also notes that the hash value should come from a scan result, which is a useful prerequisite. However, it does not say when not to use this tool or name sibling tools to prefer in other situations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_ipSearch By IPA
Read-onlyIdempotent
Inspect

List scans of pages served from an IP address (paginated), each with scan ID, URL and time. On shared hosting and CDNs an IP serves many unrelated sites, so a match is not evidence of a connection.

NameRequiredDescriptionDefault
pageNo
limitNo
ip_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, and the description adds genuine extra context: pagination and the important false-positive caveat that an IP match on shared hosting/CDNs is not evidence of a connection. It stops short of disclosing matching semantics (exact vs. historical IP) or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, and the core purpose is front-loaded before the caveat. Every sentence earns its place by either defining the operation or preventing a misreading of results.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return fields (though it briefly does), and it covers pagination and the shared-hosting caveat. The main remaining gap is IP address format/matching semantics and any rate limits, which is minor given the annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across all three parameters, so the description carries the full burden. It hints at pagination, which loosely maps to page/limit, but gives no IP format guidance (IPv4 vs IPv6) and does not explain page/limit semantics, leaving the required ip_address meaningfully undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('List scans of pages served from an IP address') plus the scope and chosen projection ('scan ID, URL and time'). It does not explicitly distinguish itself from the many search_by_asn / search_by_favicon / search_by_jarm siblings, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource (searching scans by IP) and the description adds a useful interpretive caveat about shared hosting/CDNs, but it never names an alternative (e.g. search_by_asn, get_ct_domains_by_ip) or states when-not-to-use this tool. It is adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_jarmSearch By JARMA
Read-onlyIdempotent
Inspect

List scans whose server presented this JARM TLS fingerprint (paginated). Large hosting platforms share JARMs across many unrelated sites, so check what the matches have in common.

NameRequiredDescriptionDefault
pageNo
limitNo
jarm_signatureYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds the key non-obvious behavioral trait: results are paginated and JARM matches are collision-prone, which warns against over-interpreting hits. This is genuine added context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core action is front-loaded and the caveat follows immediately, so every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and annotations cover the safety profile. The description covers pagination and the collision caveat, but leaves the jarm_signature input format unaddressed for a tool whose only required parameter is that fingerprint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters. The description only implies that page/limit exist via '(paginated)' and gives no format or expected shape for jarm_signature (e.g., hash-length or structure), so the agent must guess at the required input format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: list scans matching a given JARM TLS fingerprint. The parenthetical '(paginated)' adds scope detail. It is clearly distinguishable from siblings like get_jarm_signatures (enumerates signatures) and get_jarm_stats (aggregates), even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides real interpretive guidance: JARMs are shared across unrelated sites on large hosting platforms, so the agent should inspect commonalities among matches rather than treat a hit as attribution. It stops short of naming alternative tools (e.g., get_jarm_signatures) or stating explicit when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_nameserverSearch By NameserverA
Read-onlyIdempotent
Inspect

List the scanned domains that use a given nameserver, with totals and counts per top-level domain. Useful for finding domains registered together.

NameRequiredDescriptionDefault
nameserverYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description's added value is the result shape (totals, per-TLD counts) and the co-registration intent, but it says nothing about matching semantics (exact vs. substring on the nameserver) or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero redundancy: the first states the output, the second states the intent. Front-loaded with what the agent gets back, which is the most decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and annotations cover the safety profile. For a single-parameter read tool the description is nearly sufficient; the only real gap is match semantics for the nameserver argument.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter at 0% schema description coverage, so the description must carry the load. The field name "nameserver" plus the phrase "that use a given nameserver" confirms the semantic meaning, but no format is given (hostname, trailing dot, case sensitivity, wildcard support), so an agent could still supply a malformed value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (list) + resource (scanned domains) + filter (using a given nameserver) + stated return shape (totals and counts per TLD). An agent can tell what it does immediately. It does not, however, differentiate itself from the near-identical sibling search_by_registrar, which is the closest sibling in the search_by_* family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for finding domains registered together" gives a genuine use case and implies when an agent would reach for this tool. But it names no alternative and gives no when-not guidance (e.g., prefer search_by_registrar for registrant-org pivots), so the sibling selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_registrarSearch By RegistrarA
Read-onlyIdempotent
Inspect

List scans of domains registered through a given registrar (paginated), with the total. Common registrars match very many domains.

NameRequiredDescriptionDefault
pageNo
limitNo
registrar_nameYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: results are paginated, a total is returned, and common registrars produce very large result sets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and followed by the one caveat that matters. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations cover safety. Scope, pagination and the volume caveat are all present, leaving only minor gaps around how page/limit interact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It implies registrar_name filtering and pagination (page/limit), but adds no detail on defaults, limits, or value format beyond what the schema shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: listing scans of domains registered through a given registrar. An agent can distinguish it from search_by_asn/search_by_ip/search_by_nameserver by the registrar filter, though the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note that 'common registrars match very many domains' implies caution on broad queries, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many sibling search_by_* tools. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_screenshot_hashSearch By Screenshot HashB
Read-onlyIdempotent
Inspect

List scans whose screenshot has this perceptual hash (hash_type ahash, phash, dhash, whash, color_hash or crop_resistant), optionally within similarity_threshold, each with URL, title and time; paginated. Useful for finding pages that look the same.

NameRequiredDescriptionDefault
pageNo
limitNo
hash_typeYes
hash_valueYes
similarity_thresholdNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered structurally. The description adds that results are paginated and mentions the optional similarity_threshold, but omits fuzzy-match behavior details (how threshold affects inclusive vs. near matches) that would matter for an image-hash query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact: one dense sentence covering inputs and outputs plus a short benefit statement. Front-loaded with the core purpose, though the parenthetical enum list is somewhat redundant with the schema and makes the sentence heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the URL/title/time recap is unnecessary padding, and the description could instead spend those words on the hash_value format and hash-type semantics. Pagination and the optional threshold are covered, but sibling routing and fuzzy-match semantics are missing for a 5-parameter search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It enumerates the hash_type values and marks similarity_threshold as optional, but those enum values already appear in the schema, and it never explains what each hash algorithm means, the expected format of hash_value, or the units of page/limit beyond the word 'paginated'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List scans') and resource (screenshot perceptual hash), making it clearly a hash-lookup search rather than a generic scan search. It does not, however, differentiate itself from close siblings like search_similar_screenshots or search_by_favicon, leaving some ambiguity in the 'image similarity' family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing line 'Useful for finding pages that look the same' implies the use case, but there is no explicit when-to-use rule or guidance on when to prefer search_similar_screenshots or other similarity searches. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cpeSearch CPEA
Read-onlyIdempotent
Inspect

Find scans with a CPE identifier matching a pattern such as 'cpe:2.3:a:facebook:react' (paginated). Useful for finding sites running a given product.

NameRequiredDescriptionDefault
pageNo
limitNo
cpe_patternYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is fully covered. The description adds one useful behavioral fact, '(paginated)', but does not say whether matching is exact, prefix, or substring, which materially affects results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core purpose and the pattern example front-loaded and the use case deferred to the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the tool is a simple paginated search. The remaining gap is the matching semantics of cpe_pattern, which an agent needs in order to phrase queries correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does so only for the required cpe_pattern by showing its literal format. Page and limit are left to their titles/defaults, and paging behavior (max limit, whether page starts at 1) is not addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Find) and resource (scans) scoped by CPE identifier matching, and gives a concrete pattern example ('cpe:2.3:a:facebook:react'). This implicitly separates it from get_cpe_by_scan (CPE for one scan) and get_cpe_stats, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for finding sites running a given product' supplies a use case, which is more than nothing. However there is no when-not guidance and no explicit routing to the alternatives (search_technologies, get_cpe_by_scan) when the agent has a scan ID instead of a pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_favicon_mmh3Search Favicon MMH3A
Read-onlyIdempotent
Inspect

List scans whose favicon has this mmh3 hash (the same convention as Shodan's http.favicon.hash), each with the page URL, title and favicon details; paginated. Phishing kits often reuse one favicon across many hosts.

NameRequiredDescriptionDefault
pageNo
limitNo
mmh3_hashYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely non-structured context: the hash convention matches Shodan's http.favicon.hash, and results are paginated. It does not disclose result volume or ordering, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and ending on the motivating rationale. The clause enumerating returned fields ('page URL, title and favicon details') is largely redundant since an output schema exists, which is minor waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be detailed, and annotations cover safety. The description supplies the hash convention, the pagination behavior, and a use-case rationale, which is sufficient for correct invocation. Missing sibling disambiguation is the only notable shortfall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It does clarify the required mmh3_hash parameter's format and external convention, which the bare 'integer' schema does not. However, page and limit are given no meaning beyond the generic 'paginated' hint, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'List scans whose favicon has this mmh3 hash.' The parenthetical tying the hash to Shodan's http.favicon.hash convention sharpens what resource is being queried. It does not, however, distinguish itself from the sibling search_by_favicon, so an agent cannot tell the two apart from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing line 'Phishing kits often reuse one favicon across many hosts' implies the investigative use case, which is useful motivation. But there is no explicit when-to-use versus search_by_favicon or get_favicon, and no stated preconditions for obtaining an mmh3 hash in the first place.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_bundlerSearch JS Fingerprint By BundlerB
Read-onlyIdempotent
Inspect

Find JavaScript bundles built with a given bundler (webpack, vite, rollup, esbuild and so on), optionally by bundle format and detection confidence, with totals, format breakdown and average size; paginated with page and per_page.

NameRequiredDescriptionDefault
pageNo
per_pageNo
bundler_typeYes
bundle_formatNo
min_confidenceNo
include_librariesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that results come with totals, a format breakdown and average size, plus pagination — useful aggregation context, though some of this overlaps the existing output schema. Nothing about rate limits or scope restrictions is added.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence leads with the action and resource, then layers optional filters and the return shape. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search with an output schema present, the description covers the operation, five of six parameters, and the response shape. The significant remaining gap is disambiguation from the near-duplicate sibling search_jsfingerprints_by_bundler, which the description never addresses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does most of the work: it names the bundler concept with concrete examples (webpack, vite, rollup, esbuild), and covers bundle_format, min_confidence ('detection confidence'), page and per_page. Only include_libraries goes unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find JavaScript bundles built with a given bundler') and enumerates bundler values, so the core operation is unambiguous. However, it does not distinguish itself from the near-identically named sibling search_jsfingerprints_by_bundler, which an agent will struggle to choose between from the name/description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that bundle format and confidence are optional filters, but never states when to reach for this tool versus search_jsfingerprints_by_bundler, search_js_fingerprint_by_library, or any of the other fingerprint searches. No prerequisites, exclusions, or alternative routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_cdnSearch JS Fingerprint By CDNA
Read-onlyIdempotent
Inspect

Find JavaScript served from a given CDN (for example 'cloudflare' or 'jsdelivr'), with totals, the top serving domains and cache status; unpinned_only keeps scripts loaded without a fixed version.

NameRequiredDescriptionDefault
limitNo
cdn_typeYes
unpinned_onlyNo
cdn_cache_statusNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds output content (totals, top serving domains, cache status) but no behavioral traits beyond annotations such as auth, rate limits, or mutation side effects. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is dense but efficient; minor room for clearer separation of purpose vs parameter semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with an output schema and strong annotations, the description covers purpose and two parameters. However, it omits semantics for limit and cdn_cache_status and lacks usage guidance, leaving gaps for an agent selecting among many sibling search tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains cdn_type (with examples) and unpinned_only ('keeps scripts loaded without a fixed version'), but says nothing about limit or cdn_cache_status, leaving half the parameters without semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'Find' and resource 'JavaScript served from a given CDN', with examples ('cloudflare', 'jsdelivr'). The 'by_cdn' scope clearly differentiates it from sibling search_js_fingerprint_by_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage when searching JavaScript by CDN, but offers no explicit when-to-use vs alternatives (e.g., by_library, by_bundler) or when-not conditions. Examples of cdn_type values are given, but not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_fuzzy_hashSearch JS Fingerprint By Fuzzy HashB
Read-onlyIdempotent
Inspect

Find JavaScript files whose fuzzy hash is close to this one, above min_similarity, up to limit results. Fuzzy hashes match files that differ in small parts, such as a kit with a changed configuration.

NameRequiredDescriptionDefault
limitNo
fuzzy_hashYes
min_similarityNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful conceptual context about how fuzzy matching behaves (tolerates small differences), but says nothing about result ordering, rate limits, or the hash algorithm family used.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the action and the similarity threshold before the explanatory analogy. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the tool is a safe read with full annotation coverage. What remains missing for correct invocation is the fuzzy_hash format and, critically, the numeric meaning of min_similarity given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden, yet it only names min_similarity and limit in prose. It never explains the scale or valid range of min_similarity (an integer with no documented units), the expected format/algorithm of fuzzy_hash, or that limit defaults to 20 — the most critical invocation detail is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find JavaScript files whose fuzzy hash is close to this one') and explains the matching semantics, which distinguishes it from exact-hash siblings like search_js_fingerprint_by_md5. However, it does not differentiate itself from the near-identically named siblings search_jsfingerprints_by_fuzzy_hash and find_js_fingerprint_similar_by_hash, so an agent cannot disambiguate those without opening the schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an implicit use case ('files that differ in small parts, such as a kit with a changed configuration'), which tells the agent when fuzzy matching is appropriate. It never states when NOT to use it (e.g., for exact-match lookups use the md5/sha256 siblings) or names any alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_librarySearch JS Fingerprint By LibraryA
Read-onlyIdempotent
Inspect

Find scanned JavaScript detected as a given library (for example 'react', 'jquery' or 'nextjs'; 'Next.js' is accepted for 'nextjs'), optionally one version or a version pattern, with a version breakdown and CDN distribution; paginated with page and per_page.

NameRequiredDescriptionDefault
pageNo
versionNo
per_pageNo
library_nameYes
min_confidenceNo
version_patternNo
include_cdn_onlyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavior: results include a version breakdown and CDN distribution, and output is paginated via page/per_page. That is genuine value beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, but the core purpose is front-loaded and each clause adds information (examples, version options, output content, pagination). Slightly overloaded with semicolons but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, and the description covers pagination and result content. Still, for a 7-parameter tool it omits any meaning for min_confidence and include_cdn_only, leaving notable gaps an agent cannot fill from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description must compensate. It documents library_name (with examples and alias handling), version, version_pattern, and the page/per_page pagination intent, but says nothing about min_confidence or include_cdn_only, leaving two parameters undocumented everywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find') and resource ('scanned JavaScript detected as a given library') and supplies concrete examples ('react', 'jquery', 'nextjs') including an alias mapping. However, it does not distinguish itself from the very similar siblings search_jsfingerprints_by_library and search_js_fingerprint_by_library_version, which an agent must disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'optionally one version or a version pattern' implies when to add the version parameters, which is useful implied guidance. But there is no explicit when-to-use/when-not or routing to the near-duplicate sibling tools, leaving the agent to infer selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_library_versionSearch JS Fingerprint By Library VersionA
Read-onlyIdempotent
Inspect

Find scanned JavaScript detected as one exact library version, with the total and the matching scripts; include_deprecated and group_by_url adjust the results. Useful for finding sites running a vulnerable version.

NameRequiredDescriptionDefault
limitNo
libraryYes
versionYes
group_by_urlNo
include_deprecatedNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is fully covered. The description adds that results include a total and matching scripts and that include_deprecated/group_by_url 'adjust' results, but does not say how they adjust them, and an output schema already documents the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight, front-loaded sentences with no filler; the scope constraint leads and the use case trails. Minor cost is listing parameter names that are not actually explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Rich annotations and an output schema remove the need to describe safety or return format, and the core purpose is clear. Still missing how include_deprecated and group_by_url change results and any sense of limit/pagination, which an agent needs given the 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the parameter burden. It implicitly defines library and version as one exact version pair and name-checks include_deprecated and group_by_url, but explains neither their effect nor limit at all, leaving three of five parameters semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (scanned JavaScript detected as one exact library version), and the qualifier 'exact version' sharply distinguishes it from the by-library sibling that has no version constraint. An agent can pick this over search_js_fingerprint_by_library without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers a motivating scenario ('finding sites running a vulnerable version') but never names the alternative or the condition that selects it over search_js_fingerprint_by_library or the hash-based siblings. Usage is implied by the use case, not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_md5Search JS Fingerprint By MD5B
Read-onlyIdempotent
Inspect

Look up a JavaScript file by MD5 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period.

NameRequiredDescriptionDefault
limitNo
to_dateNo
from_dateNo
hash_valueYes
include_scansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds the shape of the report (prevalence counts, first/last seen, label, matching scripts), which goes somewhat beyond the annotations, but it says nothing about result size, pagination, or ordering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the lookup action before the optional-parameter notes. Slightly overloaded with output-field enumeration, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so enumerating return fields is partly redundant, while real gaps remain: the 'limit' parameter and date string formats are unexplained for a five-parameter, 0%-coverage schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It explains include_scans, from_date and to_date, but never mentions the 'limit' parameter or the expected date format, leaving two of five parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Look up a JavaScript file by MD5 across the archive.' This clearly separates it from the sha1/sha256/fuzzy_hash siblings, though it says nothing to distinguish it from the near-duplicate search_jsfingerprints_by_md5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (you have an MD5 and want prevalence data across the archive), but there is no explicit when-to-use/when-not guidance and no routing to or away from any of the many sibling hash-search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_normalized_hashSearch JS Fingerprint By Normalized HashB
Read-onlyIdempotent
Inspect

Look up JavaScript by normalized hash (computed after whitespace and formatting are removed, so reformatted copies still match) and report prevalence: total matches, unique scans, first and last seen and the matching scripts.

NameRequiredDescriptionDefault
limitNo
to_dateNo
from_dateNo
hash_valueYes
include_scansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds the meaningful behavioral trait that the hash is computed after whitespace/formatting removal, plus the prevalence aggregation it performs; it does not, however, disclose pagination, rate limits, or what happens when no match is found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the lookup action and folds the normalization explanation into a compact parenthetical. Nothing is wasted, though the trailing list of returned metrics is redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the annotations cover safety, so the return-value mention is not strictly required. The gaps that matter are the undocumented optional parameters (limit, date bounds, include_scans) and the failure to disambiguate from the plural sibling search_jsfingerprints_by_normalized_hash.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden. It explains the required hash_value semantics well (normalized hash, not raw), but limit, from_date, to_date and include_scans are undocumented in both schema and description, so four of five parameters remain opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (look up JavaScript by normalized hash) and even defines what 'normalized' means, which is genuinely clarifying. However, it does not distinguish this tool from the near-identical sibling search_jsfingerprints_by_normalized_hash, nor from the md5/sha1/sha256 hash-search family, leaving the agent to guess which hash variant to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical ('reformatted copies still match') implicitly tells the agent to reach for this over md5/sha256 when the script may have been reformatted, which is useful implied usage. But no alternative tool is named and no explicit when-to-use or when-not-to-use condition is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_serverSearch JS Fingerprint By ServerB
Read-onlyIdempotent
Inspect

Find JavaScript by the type of web server that served it (for example 'nginx' or 'microsoft'), with the matching scripts; include_headers adds the HTTP headers. The total can be a lower bound.

NameRequiredDescriptionDefault
limitNo
server_typeYes
include_headersNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds a genuinely useful behavioral note ('The total can be a lower bound') and explains what include_headers does, but says nothing about result volume, pagination, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the primary purpose before the optional-parameter note. Slightly dense shorthand ('the matching scripts') but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out. However, given 0% schema coverage and an undocumented limit parameter, plus no guidance on large result sets despite the 'lower bound' caveat, the description is only adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It explains server_type via examples and clarifies include_headers ('adds the HTTP headers'), but leaves limit completely unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Find') plus resource ('JavaScript') and the exact selection dimension ('type of web server that served it'), with concrete examples ('nginx', 'microsoft'). This clearly distinguishes it from the many sibling by_cdn/by_bundler/by_library fingerprint searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples imply how to populate server_type, but there is no when-to-use guidance and no mention of the numerous near-identical sibling tools (search_js_fingerprint_by_cdn, by_bundler, etc.) or when this is preferred over them. The agent must infer the boundary from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_sha1Search JS Fingerprint By SHA1A
Read-onlyIdempotent
Inspect

Look up a JavaScript file by SHA-1 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period.

NameRequiredDescriptionDefault
limitNo
to_dateNo
from_dateNo
hash_valueYes
include_scansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: what the result contains (total matches, unique scans, first/last seen, prevalence label, matching scripts) and that include_scans enlarges the payload and the date params narrow the window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the core action first and the return fields and parameter notes following after the colon/semicolon. Dense but waste-free, though the run-on structure packs return-value detail the output schema may already cover.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with an output schema present, the description covers the essentials: what is looked up, what comes back, and how three of the five parameters behave. Only hash format expectations and limit semantics are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It explains include_scans ('adds the scans') and from_date/to_date ('limit the period'), but says nothing about hash_value's expected format (SHA-1 hex) or what limit controls or how it interacts with the date filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Look up a JavaScript file by SHA-1 across the archive,' with the scope (archive-wide) and output focus (prevalence) stated. It is distinguishable from generic fingerprint getters, but it never differentiates itself from the near-identical sibling search_jsfingerprints_by_sha1, which an agent would struggle to choose between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool is for when you already have a SHA-1 hash and want prevalence stats. There is no explicit when-to-use, no when-not-to-use, and no named alternative (e.g., search_js_fingerprint_by_md5/sha256 for other hash types), leaving selection between the many search_js_fingerprint_* siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_by_sha256Search JS Fingerprint By SHA256A
Read-onlyIdempotent
Inspect

Look up a JavaScript file by SHA-256 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period. A rare hash shared by several phishing pages usually means one kit.

NameRequiredDescriptionDefault
limitNo
to_dateNo
from_dateNo
hash_valueYes
include_scansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine behavioral context: it enumerates the returned fields (total matches, unique scans, first/last seen, prevalence label, matching scripts) and explains the side effect of include_scans and the date-range scoping. Pagination/limit behavior is left unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler; the core lookup and its return payload are front-loaded, followed by the parameter effects and a one-line interpretive note that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still summarizes them usefully. Combined with annotation coverage, an agent has enough to call this correctly; only the limit parameter's behavior is left ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does for three of five parameters: include_scans ('adds the scans') and from_date/to_date ('limit the period'). hash_value is self-evident from the tool name, but limit is never explained in either place.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (look up a JavaScript file by SHA-256) plus the exact output shape (prevalence, matches, scans, first/last seen). The hash-type qualifier implicitly distinguishes it from the sibling MD5/SHA1/normalized-hash search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: you need a SHA-256 hash to call it, and the closing sentence gives interpretation guidance ('a rare hash shared by several phishing pages usually means one kit'). However, no sibling alternative is named and there is no when-not guidance (e.g., when to prefer the fuzzy-hash or similarity tools).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_obfuscatedSearch JS Fingerprint ObfuscatedA
Read-onlyIdempotent
Inspect

List scanned JavaScript scored as obfuscated, filtered by score range, classification and minimum code length; exclude_libraries drops known library code. min_score and max_score are obfuscation scores from 0 to 1 (defaults 0.7 and 1.0). Paginated with page and per_page.

NameRequiredDescriptionDefault
pageNo
per_pageNo
max_scoreNo
min_scoreNo
classificationNo
min_code_lengthNo
exclude_librariesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the read-only, idempotent, non-destructive profile. The description adds genuinely new behavioral facts the annotations do not carry: the effective default score window (0.7–1.0, which differs from the schema's null defaults) and that results are paginated via page/per_page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler, and the core filter description is front-loaded before the parameter detail. Slightly long but every clause conveys filter or default information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers filtering, pagination, and default behavior for a 7-parameter read tool. The only real gap is disambiguation from the sibling search_js_obfuscation, which the description never addresses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: it names min_score, max_score, classification, min_code_length, exclude_libraries, page, and per_page, plus the 0–1 range and effective defaults. What it lacks is unit/format detail for classification and min_code_length, which remain opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List scanned JavaScript scored as obfuscated', and names the exact filter axes (score range, classification, code length). It does not, however, distinguish itself from the near-identical sibling search_js_obfuscation, so an agent cannot tell the two apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no alternatives named. The presence of the closely related sibling search_js_obfuscation makes this omission costly — nothing tells the agent which of the two to pick or when.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_fingerprint_patternsSearch JS Fingerprint PatternsA
Read-onlyIdempotent
Inspect

List scanned JavaScript files that match code-pattern filters: has_eval, has_crypto, high_entropy, no_library and cdn_mismatch, where false selects files without the pattern and filters can be combined. With no filter given, has_eval=true is applied. Each result has the fingerprint ID, scan, script URL, code length, obfuscation score and the patterns detected.

NameRequiredDescriptionDefault
limitNo
has_evalNo
has_cryptoNo
no_libraryNo
cdn_mismatchNo
high_entropyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower, and the description still adds non-obvious behavior: the implicit has_eval=true fallback and the fact that filters compose. It does not mention pagination or result ordering, but for a boolean-filter listing that is a minor omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it lists, how the filters behave, then what comes back. The most important detail, the implicit has_eval=true default, is not buried. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the brief return-field summary is a bonus rather than a requirement. Combined with annotations and the default-filter disclosure, an agent has enough to call this correctly; only the unspecified limit parameter keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears the full burden, and it mostly carries it: it names the five boolean filters and explains that false is a meaningful negative selection rather than an omission. Only 'limit' is left unexplained, and the null-vs-boolean default behavior is inferred rather than stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List scanned JavaScript files that match code-pattern filters') and enumerates the five filter dimensions, so the agent knows exactly what corpus and selection mode this covers. It never names a sibling, though, so an agent must infer the split against the many search_js_fingerprint_by_* hash/library tools on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real selection semantics: false selects files *without* the pattern, filters can be combined, and with no filter has_eval=true is applied by default. That default is exactly the kind of guidance agents need. It stops short of saying when to prefer this tool over hash-based or library-based sibling searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_bundlerSearch JS Fingerprints By BundlerB
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints built with a given bundler, each with scan, page URL and script URL.

NameRequiredDescriptionDefault
limitNo
offsetNo
bundlerYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, non-destructive, and openWorldHint, so the safety profile is fully covered. The description adds that results are paginated via limit/offset and lists returned fields (scan, page URL, script URL), which is modest extra context, but since an output schema exists these fields are already structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that packs the resource, filter, pagination mechanism, and return fields with zero filler. No wasted clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be re-explained, and annotations cover the safety/idempotency profile. The description covers filtering, pagination, and the nature of results, leaving only sibling disambiguation unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It does name all three parameters semantically (limit and offset for pagination, bundler as the filter), which is useful, but adds no format/syntax detail beyond the schema's own types and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list/search), resource (archived script fingerprints), and filter axis (built with a given bundler). An agent can understand it returns fingerprints. However, it does not distinguish itself from the many near-identical siblings such as search_js_fingerprint_by_bundler, search_jsfingerprints_by_library, or search_jsfingerprints_by_sha256, so the singular/plural naming ambiguity is left unexplained.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains no when-to-use guidance, no prerequisites, and no routing to alternatives despite a crowded family of sibling search tools. The only usage-relevant content is the pagination mention, which is structural, not contextual.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_fuzzy_hashSearch JS Fingerprints By Fuzzy HashB
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints whose fuzzy hash matches this value, each with scan, page URL and script URL. An empty list means no close match.

NameRequiredDescriptionDefault
limitNo
offsetNo
fuzzy_hashYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful behavior beyond that: it discloses pagination (limit/offset) and the empty-result semantics implying a fuzzy/approximate match threshold. A 3 reflects genuine added context, though it says nothing about how fuzzy the match is or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste, front-loading what is returned and following with the empty-result interpretation. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be re-explained (though the description still summarizes them), and annotations cover safety and idempotency. What remains missing is routing information relative to the many fuzzy/exact-hash siblings, which is the one real gap for an agent deciding whether to call this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and only partly does: it identifies limit/offset as pagination controls and fuzzy_hash as the value to match. It adds no format, default values, or constraints for any of the three parameters, leaving the schema's bare integer/string types to carry the rest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Paginated list of archived script fingerprints whose fuzzy hash matches this value', and it lists the returned fields (scan, page URL, script URL). However it offers no differentiation from near-identical siblings such as search_js_fingerprint_by_fuzzy_hash (singular) and find_js_fingerprint_similar_by_hash, which an agent could easily confuse with this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is interpretive ('An empty list means no close match'), which tells the agent how to read results, not when to choose this tool. There is no mention of when to prefer it over the singular fuzzy-hash sibling or the exact-hash variants (md5/sha1/sha256), so selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_librarySearch JS Fingerprints By LibraryB
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints detected as a given library, each with scan, page URL, script URL and version.

NameRequiredDescriptionDefault
limitNo
offsetNo
libraryYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds the pagination model and the shape of each result (scan, page URL, script URL, version), which is modest extra context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that leads with the pagination model and the result contents, with no filler. It could be marginally improved by front-loading the library filter, which is the actual selection criterion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description nonetheless summarizes them. What is missing for a search-by-attribute tool is selection guidance and parameter semantics for the required 'library' argument, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it partially does by identifying limit/offset as pagination and library as the filter. It omits defaults, accepted value forms, and any note on whether library matching is exact or substring, leaving real ambiguity for the required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (archived script fingerprints) with a clear filter condition (detected as a given library) and the returned fields. It does not, however, differentiate itself from very close siblings like search_js_fingerprint_by_library (singular) or search_jsfingerprints_by_library_version, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. Given the many near-identical search_jsfingerprints_* siblings, some routing guidance (e.g. use this when you have a library name rather than a hash) would be valuable and is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_library_versionSearch JS Fingerprints By Library VersionB
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints detected as one library version, each with scan, page URL and script URL.

NameRequiredDescriptionDefault
limitNo
offsetNo
libraryYes
versionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful pagination context (limit/offset) and names the returned fields, which goes beyond the annotations, but it says nothing about ordering, total counts, or rate/volume characteristics of an open-world search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the pagination behavior and the resource. It is efficient, though the return-field enumeration is arguably already covered by the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description is adequate for a simple read-only search. The real gap is disambiguation from the many similarly named fingerprint search siblings, which the description never addresses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain that limit/offset drive pagination, but adds nothing about the format or matching rules of the required 'library' and 'version' strings (exact match? case sensitivity?), which are the two parameters that determine the result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('archived script fingerprints detected as one library version') and behavior ('Paginated list (limit and offset)'), so an agent can tell what it retrieves. However, it never differentiates itself from the near-identically named sibling 'search_js_fingerprint_by_library_version' or from 'search_jsfingerprints_by_library', so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of which sibling to pick instead. Given a sibling list containing several near-duplicate names (by_library, by_library_version, singular vs plural fingerprint tools), the description leaves the choice entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_md5Search JS Fingerprints By MD5A
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints with this MD5, each with scan, page URL, scan time, script URL and hashes.

NameRequiredDescriptionDefault
limitNo
offsetNo
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the pagination model (limit/offset) and the shape of each result row, which is modest but real added context. It says nothing about ordering, total counts, or what happens when the MD5 is unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the pagination contract before the resource and filter; nothing is redundant. The parenthetical and stacked tail ('each with scan, page URL, scan time, script URL and hashes') make it slightly dense, and the return-field list is partly wasted given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent search tool, the definition covers filter, pagination, and result shape, and an output schema plus annotations already handle return values and safety. The only gap is sibling differentiation, which is minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does name all three roles: limit/offset as pagination and the hash as the MD5 filter. It omits the accepted MD5 format (hex length) and any default or maximum for limit, which keeps it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (paginated list) plus resource (archived script fingerprints) and the filter (MD5), and even previews the returned fields. It fails to distinguish itself from the near-duplicate sibling 'search_js_fingerprint_by_md5' (singular), leaving an agent unable to tell the two apart without opening both schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives despite an almost identical sibling tool (search_js_fingerprint_by_md5) and many other hash-type siblings (sha1, sha256, fuzzy_hash, normalized_hash). The agent must infer selection from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_normalized_hashSearch JS Fingerprints By Normalized HashB
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints with this normalized hash (formatting-independent), each with scan, page URL and script URL.

NameRequiredDescriptionDefault
limitNo
offsetNo
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real behavioral context (paginated via limit/offset; each record includes scan, page URL and script URL), which is more than the annotations provide, though it says nothing about ordering, total counts, or result-size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the paginated-list framing and the key scope constraint. Nothing is wasted, though it compresses several ideas into one clause chain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still covers purpose, pagination and parameter meaning for a low-complexity read-only search. The main gap is disambiguation from the singular normalized-hash sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It does explain that limit/offset drive pagination and clarifies that hash_value is a formatting-independent normalized hash, giving meaning to all three parameters beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (paginated list/search) and resource (archived script fingerprints by normalized hash) and defines the hash as formatting-independent. It is clear on its own, but it does not distinguish itself from the near-identical sibling search_js_fingerprint_by_normalized_hash (singular), nor from the other hash-variant search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not guidance is present, and no alternative sibling is named despite the dense cluster of hash-based search tools (md5, sha1, sha256, fuzzy_hash, normalized_hash). Usage is only implied by the parameter concept.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_sha1Search JS Fingerprints By SHA1B
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints with this SHA-1, each with scan, page URL, scan time, script URL and hashes.

NameRequiredDescriptionDefault
limitNo
offsetNo
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description's remaining content (pagination, returned fields) largely restates the input schema and the output schema rather than adding new behavioral context such as rate limits or result-size caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the pagination clause and the return-field clause both earn their place without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the annotations cover the safety profile. The description adequately conveys pagination and lookup key, though it omits any note about empty results or how this differs from the singular sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only partially does. It explicitly names limit and offset for pagination and implies hash_value ('with this SHA-1'), but gives no defaults, ranges, or format details for any of the three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieving archived script fingerprints matching a given SHA-1, with clear scope ('with this SHA-1'). It reads clearly, but does not differentiate itself from the near-identical sibling search_js_fingerprint_by_sha1 (singular) or the other hash-variant searchers (by_md5, by_sha256), leaving the agent to guess which of the pair applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternatives guidance at all. The purpose implies lookup by SHA-1, but nothing steers the agent between this tool and the many sibling hash/pattern searchers listed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jsfingerprints_by_sha256Search JS Fingerprints By SHA256B
Read-onlyIdempotent
Inspect

Paginated list (limit and offset) of archived script fingerprints with this SHA-256, each with scan, page URL, scan time, script URL and hashes.

NameRequiredDescriptionDefault
limitNo
offsetNo
hash_valueYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful context: results are paginated via limit/offset and drawn from archived fingerprints, but it omits ordering, max page size, and whether an empty result is possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that packs the operation, pagination, filter, and returned fields with no filler. It is efficient, though the returned-field list is arguably redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search with an output schema, the description is nearly sufficient: it explains the filter, pagination, and result shape. The remaining gap is distinguishing this tool from the many sibling hash-search tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It names limit and offset (pagination) and clarifies that hash_value is a SHA-256, but gives no default values, acceptable range, or offset semantics for the three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Paginated list of archived script fingerprints') plus the filter dimension (SHA-256). It is clear what the tool does, but it does not differentiate itself from close siblings such as search_js_fingerprint_by_sha256 or get_js_fingerprints, leaving the singular/plural distinction unexplained.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives despite a dense cluster of near-identical hash-search siblings. Usage is only implied by the name and the mention of SHA-256.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_malware_familiesSearch JS Malware FamiliesA
Read-onlyIdempotent
Inspect

List groups of scans whose runtime JavaScript behaves alike (possible malware families), with clusters of at least min_cluster_size scans (default 2) at similarity_threshold or above (0 to 1, default 0.95). When the service has clustering switched off, status is 'disabled' and no families are returned.

NameRequiredDescriptionDefault
limitNo
min_cluster_sizeNo
similarity_thresholdNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, open-world, non-destructive), so the bar is lower, and the description adds genuinely new context: the effective defaults (min_cluster_size 2, similarity_threshold 0.95) and the fact that a disabled clustering service returns status 'disabled' with no families. It does not discuss cost, latency, or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core semantics front-loaded and the exceptional service state placed last. Slightly dense parenthetical phrasing but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers the clustering semantics, the two tunable thresholds, their defaults, and the disabled-state edge case. The only gap is the undocumented limit parameter and any expected result-size guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains min_cluster_size ('clusters of at least min_cluster_size scans'), similarity_threshold ('0 to 1, default 0.95'), and supplies effective defaults the schema leaves as null – but the third parameter, limit, is never mentioned or constrained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('List groups of scans whose runtime JavaScript behaves alike') and clarifies the concept as 'possible malware families', which distinguishes it from hash- or signature-based siblings. It does not explicitly name a sibling it must not be confused with (e.g. search_js_runtime_similar), so an agent still has to reason about the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the concept of clustering scans into families, but there is no explicit when-to-use/when-not-to-use statement and no routing to alternatives like search_js_runtime_similar. The one piece of conditional behavior given – clustering switched off – is about the service state, not about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_obfuscationSearch JS ObfuscationA
Read-onlyIdempotent
Inspect

List scans by the obfuscation signals their runtime JavaScript showed, newest analysis first: overall risk, maximum and average risk score, eval and Function constructor calls and high-risk events. Optional filters are risk_level (such as 'high' or 'critical'), min_risk_score (0-100) and has_eval; with none, the most recently analysed scans are listed.

NameRequiredDescriptionDefault
limitNo
has_evalNo
risk_levelNo
min_risk_scoreNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe, idempotent, read-only, open-world search, so the safety profile is covered. The description adds genuine behavioral context beyond that: sort order ('newest analysis first') and the specific signals/fields returned. It does not mention pagination, which is the only notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences that lead with the resource and scope, then the filters and default. Every clause earns its place, though the output-field enumeration makes the first sentence long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description helpfully summarizes them. With zero schema coverage and no required params, the description supplies almost everything an agent needs, missing only the limit parameter's meaning.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it largely does: it explains risk_level with example values ('high', 'critical'), gives min_risk_score a range (0-100), and clarifies has_eval. Only the limit parameter is left undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — listing scans by the obfuscation signals in their runtime JavaScript — and names the output dimensions it surfaces. It is clear what the tool does, though it does not explicitly differentiate itself from the closely named sibling search_js_fingerprint_obfuscated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the filtering semantics and the no-filter default ('the most recently analysed scans are listed'), which implies usage, but it never states when to prefer this tool over the many other search_* and get_js_* siblings. Usage is inferable rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_runtime_by_composite_hashSearch Runtime JS Behaviour by Composite HashB
Read-onlyIdempotent
Inspect

Find scans whose runtime JavaScript behaviour has this composite hash, each with the target URL, overall risk and time. The same composite hash across hosts usually means the same kit.

NameRequiredDescriptionDefault
limitNo
composite_hashYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, open-world, non-destructive behavior. The description adds useful context beyond annotations by stating the returned fields (target URL, overall risk, time) and a domain interpretation: the same hash across hosts usually indicates the same kit. It does not describe limit/pagination behavior, but the annotation coverage keeps the bar lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero wasted words, and the core scoping phrase is front-loaded before the analyst insight. Every part of the description earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The combination of annotations and an output schema covers safety and return structure, and the description adds useful interpretive context. However, it leaves gaps in usage routing and parameter format that an agent would need in order to use the tool confidently across siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It mentions 'this composite hash' but gives no format, provenance, or example for composite_hash, and it never explains the limit parameter at all. This leaves both parameters semantically thin beyond their names and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Find') and resource ('scans whose runtime JavaScript behaviour has this composite hash'), making it clear what the tool retrieves. It does not explicitly distinguish itself from close siblings like search_js_runtime_by_signature or search_js_runtime_similar, but the named hash key is specific enough to identify the tool's niche.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisite conditions, and no mention of alternative tools. The reader can infer that the tool is for looking up a known composite hash, but the description never states when this should be preferred over search_js_runtime_by_signature or other runtime search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_runtime_by_signatureSearch Runtime JS Behaviour by SignatureA
Read-onlyIdempotent
Inspect

Find scans with this behavioural signature (for example 'setTimeout:30|fetch:4|complex'), each with the target URL, overall risk and time. An uncached query can take up to 90 seconds by default.

NameRequiredDescriptionDefault
limitNo
signatureYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower. The description adds genuinely useful context beyond them: an uncached query can take up to 90 seconds, and results include target URL, overall risk, and time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste. The core purpose and the signature example are front-loaded, and the latency caveat is a compact second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need little explanation, and the description still adds latency and result fields. For a 2-param search tool this is close to complete, with only 'limit' semantics unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the signature format well via the 'setTimeout:30|fetch:4|complex' example, but says nothing about the 'limit' parameter (its meaning or default of 20), leaving one of two params undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: finds scans matching a behavioural signature, and gives a concrete example of the signature format. It is distinguishable from runtime siblings like search_js_runtime_by_composite_hash, though it does not explicitly name the alternative that replaces it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource ('find scans with this signature'), but there is no explicit when-to-use/when-not guidance and no routing to the many sibling search tools. The latency note is the only operational hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_runtime_similarFind Similar Runtime JS BehaviourB
Read-onlyIdempotent
Inspect

Find scans whose runtime JavaScript behaviour is similar to this scan's, above min_similarity; include_self keeps the scan itself. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
limitNo
scan_idYes
include_selfNo
min_similarityNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no note on result ordering, how similarity is computed, or how many scans are compared. With an output schema present, this is an acceptable but thin behavioural layer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler, and the core purpose is front-loaded before the parameter notes. The trailing clause about scan_id is slightly tacked-on but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the annotations cover safety. Still, the undocumented 'limit' parameter and the absence of routing guidance against many similarly named sibling search tools leave meaningful gaps for a 4-parameter search endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameter burden. It clarifies scan_id (UUID of a ScanMalware scan), min_similarity (a threshold), and include_self (whether the scan appears in results), but the 'limit' parameter is left entirely undocumented. Three of four parameters are covered, which is adequate but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: finds scans with similar runtime JavaScript behaviour to a given scan. This distinguishes the behaviour-based search from hash/fingerprint-based siblings like search_js_runtime_by_composite_hash. However, it does not explicitly name which sibling to use instead, so sibling differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (find behaviourally similar scans) and gives one usage knob (min_similarity threshold, include_self toggle), but it never states when to prefer this over search_similar_scans, search_js_runtime_by_signature, or find_js_fingerprint_similar_by_hash. Usage is inferred rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_segments_by_hashSearch JS Segments By HashA
Read-onlyIdempotent
Inspect

Find code segments with this exact code hash across the archive, with the scans and scripts they appear in; paginated with limit and offset.

NameRequiredDescriptionDefault
limitNo
offsetNo
code_hashYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds real value by disclosing that results are joined with 'the scans and scripts they appear in' and that output is paginated, which the annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence with the core action front-loaded and result scope plus pagination trailing behind a semicolon. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations and an output schema present, the description only needs to frame selection and behavior; it covers what is returned and pagination. It stops short of stating uniqueness of the hash or guidance on iterating pages, but is essentially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load: it says code_hash must be an exact hash and that limit/offset drive pagination, but gives no defaults, bounds, or ordering behavior. It partially compensates but leaves limit/offset semantics thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find code segments with this exact code hash across the archive') and the 'exact' qualifier implicitly separates it from the normalized-hash and fuzzy-hash siblings in the same family. An agent can select it without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the exact-hash lookup framing, but the description never states when to prefer this over search_js_segments_by_normalized_hash or the fingerprint hash searches, nor any exclusions. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_js_segments_by_normalized_hashSearch JS Segments By Normalized HashA
Read-onlyIdempotent
Inspect

Find code segments with this normalized hash (formatting-independent) across the archive, with the scans and scripts they appear in; paginated with limit and offset.

NameRequiredDescriptionDefault
limitNo
offsetNo
normalized_hashYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, non-destructive. The description adds useful behavioral context beyond that: results include the scans and scripts the segments appear in, and pagination is available via limit/offset. It does not mention rate limits or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence that states the lookup key, the scope, the returned relations, and the pagination mechanism with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-shape detail is not required, and the description covers key, scope, related entities, and pagination. It is essentially complete for a 3-param read-only search, only missing normalized_hash format guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It only names limit/offset for pagination without defaults or bounds, and gives a partial gloss of normalized_hash ('formatting-independent') but no format. Marginal compensation over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (code segments) keyed by normalized hash, and clarifies the 'formatting-independent' meaning, which differentiates it from the plain search_js_segments_by_hash sibling. It stops short of explicitly naming that sibling as the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and the formatting-independence note, but there is no explicit when-to-use guidance or routing to search_js_segments_by_hash for exact-hash lookups. The agent must infer the choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ocrSearch OCRB
Read-onlyIdempotent
Inspect

Search OCR text (paginated). q must contain at least 3 characters after trimming. This query can take up to 90 seconds by default.

NameRequiredDescriptionDefault
qYes
pageNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the minimum query length and the up-to-90-second latency warning, which materially affects how an agent should call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler; the resource, the input constraint, and the latency caveat are all front-loaded and each earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the query and latency constraints are covered. However, for a paginated search tool with 0% schema coverage, the pagination parameters (page, limit) remain completely undocumented, which is a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It documents only q (minimum 3 characters after trimming) and says nothing about page or limit semantics, defaults, or bounds, leaving two of three parameters unexplained in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: search OCR text, with pagination noted. It's clear what the tool does, but it never distinguishes itself from adjacent siblings like get_ocr_by_scan, search_ocr_pattern, or get_ocr_stats, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives. The only constraint given ('q must contain at least 3 characters') is an input validation rule, not selection guidance against search_ocr_pattern or get_ocr_by_scan.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ocr_patternSearch OCR PatternA
Read-onlyIdempotent
Inspect

Search the text read by OCR from scan screenshots for a pattern (paginated); case_sensitive controls matching. Useful for finding pages that show the same lure text as an image.

NameRequiredDescriptionDefault
pageNo
limitNo
patternYes
case_sensitiveNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, openWorld), so the burden is lower. The description adds genuine context beyond that: the results are paginated and case_sensitive governs matching behavior, which the annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, with the core action and the pagination/case-sensitivity qualifiers front-loaded and the use case following. No filler, though the second sentence could have been spent on sibling differentiation instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover the safety profile; the description supplies pagination, matching semantics, and a use case. The main remaining gap is the failure to distinguish this tool from search_ocr.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It gestures at pagination (page/limit) and states that case_sensitive controls matching, but gives no detail on pattern syntax (substring vs. regex) or pagination defaults, leaving the required 'pattern' parameter largely unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Search) and resource (OCR text read from scan screenshots) plus the scope (for a pattern), so the agent knows exactly what is being queried. However, it never distinguishes this from the sibling search_ocr, leaving the agent to guess which OCR search tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers one positive use case ('finding pages that show the same lure text as an image'), which gives implied context. It provides no when-not-to-use guidance and does not name or contrast with the sibling search_ocr, so routing between the two OCR tools is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_scansSearch ScansA
Read-onlyIdempotent
Inspect

Search the archive of public scans by text in the URL, domain or page title (paginated); q needs at least 3 characters and search_type narrows the match (default 'all'). Each result has the scan ID, URL, status, title, submission time and hosting ASN.

NameRequiredDescriptionDefault
qYes
pageNo
limitNo
search_typeNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower, and the description still adds real value: it discloses pagination, the 3-character minimum on q, and the default of search_type. It stops short of explaining result ordering or page-size behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with the core action front-loaded, followed by constraints and result contents. The parenthetical about pagination and the result-field list are dense but each clause carries information; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description is not obligated to enumerate return fields, yet it does so helpfully alongside pagination and the query constraints. The one meaningful gap is that an agent cannot tell what values search_type accepts beyond the default 'all', which weakens the narrowing behavior the description advertises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It clarifies q (searches URL, domain or title; minimum 3 characters) and search_type (default 'all'), and signals pagination, but never enumerates the valid search_type values and does not describe page/limit defaults. Partial compensation for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search the archive of public scans") and names the searchable fields (URL, domain, page title), which separates it from full-text tools like search_semantic and from scan-by-ID tools like get_scan_result. It does not, however, explicitly name a sibling alternative, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the field list (use this when you have free text about a URL/domain/title) and the minimum-length constraint on q hints at when it is appropriate. There is no explicit when-not guidance and no named alternative such as search_similar_scans or search_by_ip, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_semanticSearch SemanticA
Read-onlyIdempotent
Inspect

Search scans by meaning rather than exact words, comparing the query with scanned page content (for example 'bank login page asking for card details'). threshold (default 0.7) is the minimum similarity; an empty result means nothing was similar enough.

NameRequiredDescriptionDefault
pageNo
limitNo
queryYes
thresholdNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read-only, idempotent, open-world operation, so the safety profile is covered. The description adds genuine behavioral context beyond that: threshold acts as a similarity floor and an empty result explicitly means nothing cleared it, which is useful operational detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The purpose and its key differentiator are front-loaded, and the threshold/empty-result detail follows compactly. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and an output schema handling return values, the description only needs to convey purpose and usage semantics, which it does. The remaining gap is that pagination parameters (page/limit) and the relationship to sibling search tools are never addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter burden. It explains threshold well (default 0.7, minimum similarity) and query is self-evident from the name, but 'page' and 'limit' (pagination and result count) go undocumented in both description and schema, leaving half the surface unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource ('search scans by meaning rather than exact words'), and the mechanism (comparing query with scanned page content) clearly differentiates it from keyword-based siblings like search_scans. It stops short of naming the exact alternative tool, but the contrast is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'by meaning rather than exact words' framing tells the agent when this is the right choice over literal-match search, and the example ('bank login page asking for card details') anchors the intended query style. No explicit when-not conditions or named alternatives are given, so it stays below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_similar_scansSearch Similar ScansA
Read-onlyIdempotent
Inspect

Find scans that look like this one by screenshot similarity, favicon or fuzzy page hash (methods, default screenshot), each with URL, final URL, title and what it matched by; paginated. Useful for finding copies of a phishing page on other hosts. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
pageNo
limitNo
methodsNo
scan_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds value beyond that: it discloses that methods defaults to screenshot, that results are paginated, and exactly what fields each result carries (URL, final URL, title, match reason). It could still say more about rate limits or result caps, but this is solid added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A dense but single-purpose paragraph, front-loaded with what the tool does and the matching methods before the use case. Every clause earns its place, though the run-on list of return fields makes it slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't explain returns (it does anyway), and annotations cover the safety profile. It supplies the matching semantics, the default method, pagination, and scan_id meaning, so an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the param burden. It clarifies scan_id ("the UUID of a ScanMalware scan") and explains methods (default screenshot), but page and limit are only implied by the word "paginated" with no format or bounds. Partial compensation for a complete coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Find scans") and resource, and enumerates the matching methods (screenshot similarity, favicon, fuzzy page hash) with the default. It adds context beyond the name by noting the default method is screenshot, but it never names the closely-related siblings (search_similar_screenshots, search_by_screenshot_hash, search_by_favicon) to distinguish this composite search from those single-method tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line "Useful for finding copies of a phishing page on other hosts" gives a concrete use case, which is more than nothing. However, it offers no guidance on when to pick this multi-method search over the single-method siblings, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_similar_screenshotsSearch Similar ScreenshotsA
Read-onlyIdempotent
Inspect

Find screenshots within max_distance (Hamming distance, default 3) of an integer perceptual hash (hash_type, default phash), each with scan, URL, title, distance and similarity score.

NameRequiredDescriptionDefault
limitNo
hash_typeNophash
hash_valueYes
max_distanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds the Hamming-distance matching semantics, but no auth, rate-limit, or cost context, and lists return fields that the existing output schema already covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the match constraint before the return fields. Nothing is wasted, though it crams parameters, defaults, and outputs into one clause-heavy line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and rich annotations, the description only needs to add parameter meaning and matching behavior, which it largely does. The undocumented 'limit' parameter and lack of guidance on where to obtain a valid hash_value are minor residual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains max_distance as a Hamming distance with default 3, hash_type default phash, and that hash_value is an integer perceptual hash — covering three of four parameters meaningfully. Only 'limit' is left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Find) and resource (screenshots) and adds scope: matches within max_distance of a perceptual hash. It is distinguishable from search_by_screenshot_hash by the 'similar/distance' framing, though it does not name that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case (fuzzy perceptual-hash matching) is implied through max_distance and hash_type, but there is no explicit when-to-use guidance or reference to alternative tools like search_by_screenshot_hash or search_by_fuzzy_hash. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_suspicious_clipboardSearch Suspicious ClipboardA
Read-onlyIdempotent
Inspect

List scans where the page wrote suspicious content to the clipboard (for example PowerShell commands), each with URL, event count, reason and time; pattern filters the content; paginated.

NameRequiredDescriptionDefault
pageNo
limitNo
patternNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. Beyond that the description adds useful behavior: pattern filters content and results are paginated, plus it enumerates returned fields (URL, event count, reason, time). It stops short of noting rate limits or auth, but that is acceptable given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single semicolon-delimited sentence that is front-loaded with the purpose and then the filter/pagination behavior. Dense but every clause carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the field enumeration is somewhat redundant, but the description still supplies the filtering and pagination context an agent needs to call it correctly. Only the pattern syntax and page/limit conventions remain uncovered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the load: it explains that 'pattern filters the content' and that results are 'paginated', which gives meaning to pattern, page and limit. However, page/limit semantics (default 20, page indexing) and the pattern syntax (substring vs regex) are left unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists scans where the page wrote suspicious content to the clipboard, with a clarifying example (PowerShell commands). This is clear and distinct from generic tools, but it never names or contrasts against the obvious siblings get_clipboard_events, get_pastejacking, or get_clipboard_stats, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'for example PowerShell commands' clause implies the detection scenario and thus when this tool is relevant, but there is no explicit when-to-use/when-not and no alternative tool is named. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_technologiesSearch TechnologiesA
Read-onlyIdempotent
Inspect

Search the web technologies detected across the archive by name (q) or category, each with how many scans used it and when it was last seen; paginated.

NameRequiredDescriptionDefault
qNo
pageNo
limitNo
categoryNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: results include per-technology scan counts and last-seen timestamps, and output is paginated. It stops short of describing pagination limits or total-count behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the verb and scope, then appends result content and pagination. No wasted words, though the clause list is slightly crammed for one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the tool has no required parameters. The description covers the query axes and pagination adequately; the remaining gap is the semantics of page/limit, which is minor given the low-risk read-only profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does cover q (name search) and category, but page and limit are only gestured at by the word 'paginated', with no explanation of defaults (1 and 20) or their meaning. Partial compensation for a four-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (web technologies detected across the archive), plus the two search axes (name via q, or category) and what each result carries. This clearly separates it from get_technologies_by_scan and get_popular_technologies, which are scan- or popularity-oriented, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (browsing technologies by name or category), but offers no explicit when-to-use/when-not guidance or pointers to sibling tools like get_technology_stats or get_technology_combinations. Usage must be inferred from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tracking_keySearch Tracking KeyA
Read-onlyIdempotent
Inspect

Find scans that embed a given tracking or site key, such as an analytics ID or a CAPTCHA site key (tracker_type and key), sorted latest or oldest; paginated. A shared key often ties sites to one operator.

NameRequiredDescriptionDefault
keyYes
pageNo
sortNo
limitNo
tracker_typeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuine context beyond that: results are sorted latest or oldest and are paginated, and it identifies the required key/tracker_type pair. It stops short of describing result volume, paging limits, or how many scans a shared key typically surfaces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the purpose and required inputs front-loaded. The final sentence is slightly advisory rather than operational but is short and adds investigative framing, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description supplies purpose, the required key pair, ordering, and pagination, leaving only the permitted tracker_type values as a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It explicitly names tracker_type and key as the required inputs, states the sort options, and signals pagination, which maps to page/limit. However, it never enumerates or explains valid tracker_type values, which is the one piece an agent most needs and cannot infer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Find scans that embed a given tracking or site key") and disambiguates the key concept with concrete examples (analytics ID, CAPTCHA site key). It distinguishes itself from the aggregate sibling get_top_tracking_keys by framing this as a lookup by a supplied key, though it never names that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the tool is for locating scans sharing a tracking/site key. There is no explicit when-to-use guidance, no exclusions, and no mention of the related aggregate tool get_top_tracking_keys or how to choose between them. The closing note about shared keys tying sites to one operator hints at the investigative use case but doesn't state it as guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_scanSubmit ScanAInspect

Submit a URL to ScanMalware to be rendered and analysed in a sandboxed browser; returns the new scan_id. scan_type is required and sets who can see the result: 'public' lists the URL and its results in the public feed, visible to anyone and to search engines; 'unlisted' keeps the scan out of public listings, but anyone with its link can open it; 'private' limits the result to the ScanMalware account of this server's SCANMALWARE_BEARER_TOKEN and is rejected when no token is configured. Wraps POST /api/v1/scan of the ScanMalware API, documented at https://scanmalware.com/api-docs.

NameRequiredDescriptionDefault
urlYes
optionsNo
scan_typeYes
user_agentNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, openWorld=true, idempotent=false, destructive=false. The description adds genuinely new context: visibility semantics per scan_type, the SCANMALWARE_BEARER_TOKEN auth dependency, and the underlying POST /api/v1/scan endpoint. It omits rate limits or duplicate-submission behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the return value before the scan_type detail, and the trailing API-reference sentence is short and useful. The middle sentence is dense but every clause carries new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary, and the description correctly stops at naming scan_id. Combined with the scan_type semantics and auth note, an agent has enough to invoke correctly; only the undocumented 'options' and 'user_agent' parameters leave a residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters, so the description must compensate. It fully covers scan_type (all three enum values with implications) and implies url, but says nothing about 'options' or 'user_agent', leaving half the parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Submit a URL... to be rendered and analysed in a sandboxed browser') and names the returned artifact ('returns the new scan_id'). This clearly distinguishes it from the entire read-oriented sibling set (get_*/search_*), which consume scans rather than create them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains the scan_type choice space and the consequences of each value, including a when-not condition ('private' is rejected when no token is configured). It does not, however, route the agent to follow-up siblings such as wait_for_scan or get_scan_result, so the workflow context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_scan_reportSubmit Scan ReportAInspect

Vote on a scan, as the Mark as Safe and Mark as Malicious buttons on its result page do: report_type 'positive_feedback' marks the scanned page as safe and 'malware' marks it as malicious. report_details is an optional note of up to 1000 characters. Votes are recorded as crowd feedback on the scan and are rate-limited per client IP. The website's other report types (phishing, spam, copyright and so on) need a captcha and are not available here.

NameRequiredDescriptionDefault
scan_idYes
report_typeYes
report_detailsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so safety is partly covered. The description adds genuinely new context: votes are recorded as crowd feedback and are rate-limited per client IP, and note length is capped at 1000 characters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all front-loaded: purpose first, then the enum semantics, then constraints and exclusions. No filler and nothing repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description covers the actionable constraints (enum meaning, note limit, rate limit, excluded report types). Only scan_id's expected format and any success/failure behavior are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for the two non-obvious parameters: it defines what each report_type enum value means and states that report_details is optional with a 1000-character limit. scan_id is left implicit but is self-evident from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Vote on a scan') and anchors it to the concrete UI actions 'Mark as Safe'/'Mark as Malicious', then maps each enum value to its semantic effect. An agent can distinguish this from sibling tools like submit_scan or get_scan_reports without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the context in which this tool applies (crowd feedback voting on an existing scan) and explicitly excludes the other report types ('phishing, spam, copyright ... are not available here'), which is a useful when-not. It stops short of naming an alternative tool for those excluded cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_scanWait For ScanA
Read-onlyIdempotent
Inspect

Wait for a submitted scan to finish by polling its status every poll_interval_s seconds, up to timeout_s seconds (default 180). Returns the final compact summary (URL, final URL, status, completion time and the security verdict), or the last known status with timeout set to true if the scan is still running. The security verdict is computed after the scan completes, usually within about a minute: until then verdict_pending is true and the verdict fields are empty, so a risk score of 0 is not yet a verdict. scan_id is the UUID of a ScanMalware scan.

NameRequiredDescriptionDefault
scan_idYes
timeout_sNo
poll_interval_sNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds real value beyond them: it discloses the polling mechanism, the timeout fallback with timeout=true, and crucially the verdict-pending behavior (verdict fields empty and risk score 0 until the verdict computes, usually within a minute). That timing nuance is not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core polling/timeout behavior and return semantics, with the verdict caveat following. Every sentence is substantive, though the verdict explanation is slightly verbose relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be documented, yet the description usefully summarizes the returned summary fields. Combined with the timeout-fallback and verdict-pending notes, an agent has enough to call this correctly; the only missing piece is explicit routing guidance versus the single-poll and summary siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it largely does: poll_interval_s and timeout_s (default 180) are both explained via the polling sentence, and scan_id is identified as the UUID of a ScanMalware scan. All three parameters get meaningful context, though the units/format of poll_interval_s are only implied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Wait for a submitted scan to finish by polling its status') and clearly defines the blocking-wait behavior, which is distinct from single-check siblings like get_scan_progress or get_scan_result. It stops short of naming those siblings explicitly, so differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing 'a submitted scan' implies this follows submit_scan, and the timeout semantics imply when to stop waiting. However, there is no explicit guidance on when to prefer this over get_scan_progress (single poll) or get_scan_summary (post-completion fetch), nor any stated prerequisites beyond the implicit submitted-scan requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updates
    • Removedget_js_fingerprinter2
    • Removedget_js_fingerprinter2_coverage
    • Removedget_js_fingerprinter2_health
    • Removedget_js_fingerprinter2_stats
    • Addedget_js_runtime_behaviour
    • Addedget_js_runtime_coverage
    • Addedget_js_runtime_health
    • Addedget_js_runtime_stats
    • Changedsearch_js_fingerprint_patterns1 field changed
      • removedInput schema / properties / has_websocket
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Has Websocket"
        -}
    • Removedsearch_js_fingerprinter2_composite_hash
    • Removedsearch_js_fingerprinter2_signature
    • Removedsearch_js_fingerprinter2_similar
    • Addedsearch_js_runtime_by_composite_hash
    • Addedsearch_js_runtime_by_signature
    • Addedsearch_js_runtime_similar
  2. 2 tool updates
    • Changedsubmit_scan2 fields changed
      • removedInput schema / properties / scan_type / default
        Removed value: -"public"
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "url",
        +  "scan_type"
        +]
    • Changedsubmit_scan_report7 fields changed
      • removedInput schema / properties / captcha_answer
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Captcha Answer"
        -}
      • removedInput schema / properties / captcha_token
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Captcha Token"
        -}
      • addedInput schema / properties / report_type / enum
        Added value: +[
        +  "positive_feedback",
        +  "malware"
        +]
      • removedInput schema / properties / skip_captcha
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Skip Captcha"
        -}
      • removedInput schema / properties / user_agent
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "User Agent"
        -}
      • removedInput schema / properties / x_forwarded_for
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "X Forwarded For"
        -}
      • removedInput schema / properties / x_real_ip
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "X Real Ip"
        -}
  3. 1 tool update
    • Changedsubmit_scan1 field changed
      • addedInput schema / properties / scan_type / enum
        Added value: +[
        +  "public",
        +  "unlisted",
        +  "private"
        +]
  4. 5 tool updates
    • Changedsearch_ai_classification1 field changed
      • addedInput schema / properties / classification / enum
        Added value: +[
        +  "LEGITIMATE",
        +  "LOW_RISK",
        +  "MODERATE_RISK",
        +  "HIGH_RISK",
        +  "CONFIRMED_SCAM"
        +]
    • Changedsearch_by_favicon1 field changed
      • addedInput schema / properties / hash_type / enum
        Added value: +[
        +  "mmh3",
        +  "md5"
        +]
    • Changedsearch_by_fuzzy_hash1 field changed
      • addedInput schema / properties / hash_type / enum
        Added value: +[
        +  "tlsh",
        +  "ssdeep",
        +  "sdhash"
        +]
    • Changedsearch_by_screenshot_hash1 field changed
      • addedInput schema / properties / hash_type / enum
        Added value: +[
        +  "ahash",
        +  "phash",
        +  "dhash",
        +  "whash",
        +  "color_hash",
        +  "crop_resistant"
        +]
    • Changedsearch_tracking_key1 field changed
      • changedInput schema / properties / sort / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "latest",
        +      "oldest"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  5. 128 tool updates
    • First observedfind_js_fingerprint_similar_by_hash
    • First observedget_ai_analysis
    • First observedget_analyzer_results
    • First observedget_analyzer_stats
    • First observedget_api_root
    • First observedget_bot_protection
    • First observedget_capabilities_by_date
    • First observedget_clipboard_events
    • First observedget_clipboard_stats
    • First observedget_cpe_by_scan
    • First observedget_cpe_stats
    • First observedget_ct_certificates
    • First observedget_ct_dns_records
    • First observedget_ct_domains_by_ip
    • First observedget_ct_similar_domains
    • First observedget_ct_timeline
    • First observedget_domain_history
    • First observedget_domain_scans
    • First observedget_domain_stats
    • First observedget_favicon
    • First observedget_favicon_stats
    • First observedget_health
    • First observedget_ids_alerts
    • First observedget_ip_stats
    • First observedget_jarm_signatures
    • First observedget_jarm_stats
    • First observedget_js_fingerprinter2
    • First observedget_js_fingerprinter2_coverage
    • First observedget_js_fingerprinter2_health
    • First observedget_js_fingerprinter2_stats
    • First observedget_js_fingerprints
    • First observedget_js_library_inventory
    • First observedget_js_segments_by_scan
    • First observedget_js_segments_suspicious
    • First observedget_js_segments_unknown
    • First observedget_jsfingerprint
    • First observedget_jsfingerprint_bundle_stats
    • First observedget_jsfingerprint_hash_prevalence
    • First observedget_jsfingerprint_library_stats
    • First observedget_jsfingerprint_similar
    • First observedget_jsfingerprint_similarity_counts
    • First observedget_jsfingerprint_source
    • First observedget_latest_capabilities
    • First observedget_malware_by_scan
    • First observedget_malware_stats
    • First observedget_netlog
    • First observedget_ocr_by_scan
    • First observedget_ocr_stats
    • First observedget_open_graph
    • First observedget_pastejacking
    • First observedget_pcap_metadata
    • First observedget_platform_stats
    • First observedget_popular_technologies
    • First observedget_rdap
    • First observedget_recent_scans
    • First observedget_recent_threats
    • First observedget_recent_yara_threats
    • First observedget_safe_browsing
    • First observedget_safe_browsing_stats
    • First observedget_scan_ioc
    • First observedget_scan_progress
    • First observedget_scan_reports
    • First observedget_scan_result
    • First observedget_scan_summary
    • First observedget_screenshot_stats
    • First observedget_technologies_by_scan
    • First observedget_technology_combinations
    • First observedget_technology_stats
    • First observedget_tls_asn1
    • First observedget_tls_details
    • First observedget_top_tracking_keys
    • First observedget_yara_by_scan
    • First observedget_yara_matches
    • First observedget_yara_stats
    • First observedrun_js_differential_analysis
    • First observedsearch_ai_classification
    • First observedsearch_ai_high_risk
    • First observedsearch_ai_scam_type
    • First observedsearch_analyzer_high_risk
    • First observedsearch_by_asn
    • First observedsearch_by_favicon
    • First observedsearch_by_fuzzy_hash
    • First observedsearch_by_ip
    • First observedsearch_by_jarm
    • First observedsearch_by_nameserver
    • First observedsearch_by_registrar
    • First observedsearch_by_screenshot_hash
    • First observedsearch_cpe
    • First observedsearch_favicon_mmh3
    • First observedsearch_js_fingerprint_by_bundler
    • First observedsearch_js_fingerprint_by_cdn
    • First observedsearch_js_fingerprint_by_fuzzy_hash
    • First observedsearch_js_fingerprint_by_library
    • First observedsearch_js_fingerprint_by_library_version
    • First observedsearch_js_fingerprint_by_md5
    • First observedsearch_js_fingerprint_by_normalized_hash
    • First observedsearch_js_fingerprint_by_server
    • First observedsearch_js_fingerprint_by_sha1
    • First observedsearch_js_fingerprint_by_sha256
    • First observedsearch_js_fingerprint_obfuscated
    • First observedsearch_js_fingerprint_patterns
    • First observedsearch_js_fingerprinter2_composite_hash
    • First observedsearch_js_fingerprinter2_signature
    • First observedsearch_js_fingerprinter2_similar
    • First observedsearch_js_malware_families
    • First observedsearch_js_obfuscation
    • First observedsearch_js_segments_by_hash
    • First observedsearch_js_segments_by_normalized_hash
    • First observedsearch_jsfingerprints_by_bundler
    • First observedsearch_jsfingerprints_by_fuzzy_hash
    • First observedsearch_jsfingerprints_by_library
    • First observedsearch_jsfingerprints_by_library_version
    • First observedsearch_jsfingerprints_by_md5
    • First observedsearch_jsfingerprints_by_normalized_hash
    • First observedsearch_jsfingerprints_by_sha1
    • First observedsearch_jsfingerprints_by_sha256
    • First observedsearch_ocr
    • First observedsearch_ocr_pattern
    • First observedsearch_scans
    • First observedsearch_semantic
    • First observedsearch_similar_scans
    • First observedsearch_similar_screenshots
    • First observedsearch_suspicious_clipboard
    • First observedsearch_technologies
    • First observedsearch_tracking_key
    • First observedsubmit_scan
    • First observedsubmit_scan_report
    • First observedwait_for_scan

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that checks URLs against the URLhaus malware database to identify malicious URLs.
    -
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for urlscan.io that scans URLs, searches historical scan data, and assesses indicators with compact, context-efficient summaries instead of raw API responses.
    14
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for detecting and analyzing scams using various heuristics and data sources.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.