Skip to main content
Glama

search_bulk

Read-only

Paginate ONE search query asynchronously and merge deduplicated organic results. Page-one AI Overview/PAA/Knowledge Graph/answer enrichments are retained; set render:true to request those Google JS blocks. Billed per page actually fetched, with unavailable pages refunded.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
langNoUI language, e.g. 'en'
nfprNoDisable Google spelling correction
safeNoGoogle SafeSearch setting
uuleNoEncoded geo token or raw coordinates
queryYesThe search query to paginate
deviceNoSERP device shape
engineNoSearch engine (default google)
renderNoForce rendering to capture page-one Google JS enrichments
browserNoFetch-path browser identity
countryNoISO country code, e.g. 'us'
webhookNoPublic URL to POST the finished job to
locationNoSearch location, e.g. 'Milan, Italy'
wait_forNoRendered path CSS selector for late panels
max_pagesNoMax pages to fetch (1-10, default 5). Stops early when Google has no more pages.
search_typeNoVertical to paginate (default search)
google_paramsNoAdditional Google query parameters

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses asynchronous execution, deduplication, retention of page-one enrichments, the render requirement for JS blocks, and per-page billing with refunds for unavailable pages. These are meaningful behavioral details an agent could not infer from the 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.

Conciseness5/5

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

Three sentences, front-loaded with the core operation, then enrichment behavior, then billing. Every sentence adds distinct value; no filler or restatement of the 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?

The description covers the operation, billing, and enrichment behavior well, which is strong for an asynchronous tool. However, since there is no output schema, it does not mention what the actual response contains, such as a job handle or status reference, which is a relevant missing piece for an async flow.

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 100%, so the baseline is 3, but the description adds extra meaning by explaining that render:true is needed for Google JS enrichments and that billing is per actually fetched page. This semantic context goes beyond the parameter names and schema comments.

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?

The description leads with a specific verb and resource: 'Paginate ONE search query asynchronously'. It also defines the output behavior ('merge deduplicated organic results') and names retained SERP enrichments, making it distinct from synchronous or single-page search siblings without needing to open 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 Guidelines4/5

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

The first sentence makes the intended use case clear: asynchronous pagination of a single query. The description also gives conditional guidance for render:true, but it does not explicitly name alternatives or state when not to use this tool versus search or search_and_read.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: single scrape, batch scrape, crawl, search, dataset creation, parser lifecycle, proxy management, and SEO audit. Even the five status pollers are clearly differentiated by job type and their descriptions explicitly state which job they poll, so an agent can reliably select the right tool.

Naming Consistency4/5

Most names follow a verb-first pattern (create_dataset, generate_parser, run_collector, save_parser_preset, whitelist_ip) and listing tools consistently use the 'list_' prefix. However, a few are noun-first (parser_preset_stats, proxy_locations, collector_run_status) and the status polling tool for collectors breaks the otherwise consistent '<job>_status' convention ('collector_run_status' instead of 'run_collector_status').

Tool Count3/5

At 25 tools, the set is at the upper edge of the 'heavy' range. The tools all serve distinct functions, reflecting a broad platform covering scraping, crawling, search, datasets, parsers, proxies, and SEO, but the count borders on overwhelming for an agent, and some consolidation (e.g., a generic async job status endpoint) could reduce the surface.

Completeness4/5

The tool surface covers the core data-extraction lifecycle well: discovery (map, search), acquisition (scrape, batch, crawl), structured extraction (generate_parser, save_parser_preset, parser stats/heal), proxy management, and result aggregation (datasets, collectors). Notable gaps are the absence of any cancellation/abort mechanism for long-running async jobs and no way to delete a parser preset, but these are minor for most workflows.