Skip to main content
Glama

zerodom_crawl

Crawl in-scope app routes via BFS, returning one JSONL record per page: URL, forms, links, API calls, hidden fields, and blocked interstitials. Reads only; never clicks or submits.

Instructions

BFS-walk an app's in-scope routes and return one JSONL record per page: final URL, forms, in-scope links, the XHR/fetch API calls it fired, hidden fields, and blocked when the route is a challenge interstitial.

Recon, not action: it navigates and reads, never clicks or submits. A link matching deny (logout/delete/… default) is never followed; a blocked route is recorded but not descended into; session scope (zerodom_set_scope) is enforced per navigated URL, including its max_rps rate limit. Runs in the active tab, so on an attached session the walk resolves authenticated routes the way the human's own Chrome does (CLI: zerodom crawl --relay). scope adds extra in-scope hosts (comma-separated, beside the start URL's host); deny overrides the link-follow regex. The crawl leaves the active tab on the last crawled page and re-reads the graph to match — call zerodom_read_page to see it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
denyNo
scopeNo
max_pagesNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it never clicks or submits, deny-matched links (logout/delete defaults) are never followed, blocked routes are recorded but not descended into, session scope and its max_rps limit are enforced per URL, it runs in the active tab and resolves authenticated routes on an attached session, and it leaves the tab on the last crawled page. Those are exactly the destructive-boundary and state-side-effect facts an agent needs.

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 core operation and output contract, then breaks out behavioral rules in short, dense sentences that each add information. It is on the long side for a tool description and the CLI/parenthetical asides could be tightened, but no sentence is filler given the behavior it has to convey without annotations.

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 4-parameter, annotation-free crawl tool this covers everything material: what it walks, what it records (aided by the output schema), what it refuses to do, rate/scope enforcement, tab-state side effects, and the follow-up call. Only max_pages is left unexplained, which is a minor gap against otherwise complete disclosure.

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 defines three of four parameters: `scope` (extra in-scope hosts, comma-separated, beside the start URL's host), `deny` (overrides the link-follow regex, defaults to logout/delete-style links), and `url` by implication as the start URL. `max_pages` and its default of 10 are never mentioned, leaving one parameter undocumented 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?

States a specific verb and resource — 'BFS-walk an app's in-scope routes' — plus the exact output shape (one JSONL record per page enumerating URL, forms, links, XHR calls, hidden fields, blocked status). It explicitly distinguishes itself from action siblings with 'Recon, not action: it navigates and reads, never clicks or submits,' so an agent can separate it from click_node/fill_node/read_page 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 Guidelines4/5

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

Clear context for use: reconnaissance of a whole route graph rather than single-page inspection, with the natural next step named ('call zerodom_read_page to see it') and the interaction with zerodom_set_scope spelled out. There is no explicit when-not-to-use exclusion against siblings like zerodom_network_log or zerodom_find, but the recon-vs-action framing provides strong implied routing.

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