OpenSERP
OfficialOpenSERP MCP server provides multi-engine web/image search and LLM-ready page extraction for AI agents.
Search six engines (Google, Bing, Yandex, Baidu, DuckDuckGo, Ecosia) using engine-specific or fallback/merged modes:
search,any_search,fast_search, andmega_search.Filter and paginate results by query, site, file type, language, region, date range, limit, start offset, duplicate filtering, and response format.
Enrich search results with cleaned page content via extraction depth and extraction mode.
Search images from one engine with
image_searchor across multiple engines withmega_image.Extract Markdown/LLM-ready content from one URL with
extractor up to 20 URLs withbatch_extract, including truncation controls and per-URL failure isolation.List available engines and operational status with
list_engines, and check Cloud credit usage withget_usage.Run against local OSS mode or OpenSERP Cloud, using stdio or HTTP transport.
Enables querying Google search engine via OpenSERP, supporting web search, image search, filtering by site/language/region, and enrichment of results with cleaned page content.
@openserp/mcp
Live search on six engines (Google, Bing, Yandex, Baidu, DuckDuckGo, Ecosia), image search and single/batch page extraction for AI agents. Results keep the source engine and rank. Runs against a self-hosted OpenSERP server or OpenSERP Cloud.
When OPENSERP_API_KEY is not set, the server uses OSS mode at http://localhost:7000 and writes:
[openserp-mcp] No OPENSERP_API_KEY set - using OSS mode at http://localhost:7000.
[openserp-mcp] Get an API key: https://openserp.org/dashboard/keys
[openserp-mcp] Docs: https://openserp.org/docs | Issues: https://github.com/openserpapi/mcp/issuesSet OPENSERP_API_KEY to use OpenSERP Cloud. API keys are available at https://openserp.org/dashboard/keys. Set OPENSERP_BASE_URL to target another compatible OpenSERP API base URL.
Install
npm install -g @openserp/mcpYou can also run it without installing:
npx -y @openserp/mcp --stdioRelated MCP server: wigolo
Tools
Tool | Use it when |
| The engine matters (Yandex for Russian, Baidu for Chinese), or you page with |
| You want a preferred engine with fallbacks, in your order |
| Any engine will do; picks the healthiest, fastest one |
| You compare engines or want wider coverage; results keep engine and rank |
| Images from one engine |
| Images merged from several engines |
| Reading one page as Markdown |
| Reading several pages (up to 20) in one call; a failed URL doesn't fail the batch |
| Searches keep failing and you need a healthy engine |
| Checking the Cloud credit balance or what the last call cost |
extract and batch_extract cut long pages to fit an agent's context: 20,000 characters per page, or 40,000 shared across a batch (at least 2,000 per URL). Cut content ends with a [truncated: ...] line and is flagged (truncated / metadata.truncated). Pass maxChars to read more.
Quick Examples
Ask your MCP client to:
Search Google for current docs and return the top 5 URLs.
Compare Google and Bing results for an SEO keyword.
Extract clean Markdown from a URL before passing it to an LLM.
Ground an answer in several sources at once with
batch_extract- up to 20 URLs in one round-trip, where a dead link returns an error item instead of failing the batch.Read a geo-fenced page as a local visitor by passing
region: "DE".Check remaining Cloud credits with
get_usage.
Cloud search parameters
Cloud requests use Authorization: Bearer with OPENSERP_API_KEY. For paging, use start and keep limit: 10; pass the previous response's pagination.next_start while has_more is true. Google, Bing, and Yandex take multiples of 10; Baidu supports early pages, Ecosia any offset, and DuckDuckGo only the first page. mega_search with mode: "balanced" rejects start > 0; use search, any_search, or fast_search for later pages.
Cloud web search supports date: "20250101..20251231" on Google and Ecosia. Unsupported offsets or date filters return 400 invalid_request without charge; adjust the request before retrying.
list_engines returns Cloud capabilities plus operational status. Omit engines to use defaults. Any starts engines in your order, overlapping slow attempts; Fast prioritizes recent health and latency. Read meta.engine_used for the winner; engines_tried and engines_skipped may be absent.
Tool errors include the public HTTP status, error code, request ID, and retry delay when present. Honor retry_after for 429 and 503; 503 engine_unavailable carries a 60-second delay. The server does not retry automatically.
Claude Desktop
Local OSS mode:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"]
}
}
}Cloud mode:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"],
"env": {
"OPENSERP_API_KEY": "osk_live_..."
}
}
}
}Cursor
For stdio use, add an MCP server entry:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"],
"env": {
"OPENSERP_API_KEY": "osk_live_..."
}
}
}
}For remote-style HTTP use, run:
npx -y @openserp/mcp --http --host 127.0.0.1 --port 3333Then point a streamable HTTP MCP client to:
http://127.0.0.1:3333/mcpClients that still use the older SSE transport can connect to:
http://127.0.0.1:3333/sseEnvironment
OPENSERP_API_KEY: Cloud API key from https://openserp.org/dashboard/keys.OPENSERP_BASE_URL: API base URL override.OPENSERP_BACKEND: Optional backend hint,ossorcloud.OPENSERP_TIMEOUT_MS: SDK request timeout in milliseconds.HOST: HTTP host, default127.0.0.1.PORT: HTTP port, default3333.
Resources
Available Tools
10 toolsany_searchAny SearchA
Try engines one at a time in the order you give and return the first result set that succeeds, e.g. engines [google, bing, duckduckgo]. Use it as a resilient default when you prefer one engine but need a fallback; use fast_search when the order doesn't matter. On Cloud a slow attempt can overlap with the next one. Returns JSON: results (rank, title, url, snippet, domain, engine), pagination (has_more, next_start) and meta (request_id, took_ms, engines_failed). Cloud: 1 credit. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| merge | No | true (default): one list from every engine that succeeded. false: keep only the first engine that returned results. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| dedupe | No | Drop duplicate URLs across engines (default true). | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| engines | No | Engines to query, in priority order for any mode. Omit to use all available engines. | |
| extract | No | Enrich the top web results with cleaned page content. Boolean or integer depth: false/0 off, true/1 top result, N top N (1-5). | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| extractMode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses substantial behavior: sequential engine attempts, possible Cloud overlap, 1 credit cost, isError responses, retry_after handling, blocked-engine fallback, and 400/no-charge for unsupported parameters. However, “return the first result set that succeeds” sits awkwardly against the schema’s merge=true default, which returns one list from every successful engine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, with purpose first and then operational details. It could be better structured into return/error/cost sections, but most sentences carry useful information for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter tool with no annotations and no output schema, the description supplies return JSON shape plus error, retry, credit, and failed-engine context. The main gap is the ambiguous/conflicting aggregation behavior around first successful result versus the schema’s merge default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 17 parameters. The description reinforces the engines ordering concept and return shape, but does not add meaningful semantics for most parameters such as merge, dedupe, filter, extract, or start beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and behavior: try engines in a given order and return the first successful result set, with a concrete engines example. It also distinguishes this tool from fast_search by explaining when engine order matters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance: use as a resilient default when you prefer one engine but need a fallback, and use fast_search when order does not matter. The alternative is named with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_extractExtract several URLsA
Extract LLM-ready content from up to 20 URLs in one request. Prefer this over repeated extract calls when grounding an answer in several pages: it is one round-trip, and a URL that fails returns an item with an error instead of failing the batch. Returns results (url, page_content as Markdown, error when that URL failed; metadata with title, mode_used and, when cut, truncated and total_chars) and meta (requested, succeeded, failed). Cloud: billed per URL like extract; failed and empty URLs are free.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Preferred page language, sent as Accept-Language, such as en or de. | |
| mode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. | auto |
| urls | Yes | Absolute URLs to fetch and extract. Duplicates are dropped. | |
| clean | No | Article-only extraction (default true). Set false for landing pages, docs indexes and dashboards, where content sits in navigation or feature blocks. | |
| region | No | Two-letter country code applied to every URL, e.g. US or DE. On Cloud this adds 1 credit per extracted URL. | |
| maxChars | No | Max characters of content per URL. Default splits 40000 across the batch (at least 2000 each). Longer pages are cut and marked metadata.truncated. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| useLlmsTxt | No | For a site root URL, return the site's /llms-full.txt or /llms.txt instead when it has one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the full burden of transparency. It successfully discloses critical behaviors: handling failure within the batch (one URL failure doesn't halt the process), the complete structure of the return value (results and meta), and the impact of length limits (truncation metadata).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is highly efficient. It front-loads the scope and primary use case and then dedicates the rest of the text to describing essential operational guarantees (failure handling, billing, output structure) without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool is complex (8 parameters) and lacks formal output/annotation schemas, the description is exceptionally complete. It details input limits, operational guarantees, and the resulting data structure needed for an agent to predict the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds crucial contextual meaning beyond the schema definitions. It explains practical implications, such as the effect of `clean` (when NOT to use it), the operational difference between `mode` values, and how `maxChars` leads to truncation metadata.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool clearly defines its purpose (Extract LLM-ready content) and immediately differentiates itself from its sibling tools (like standard 'extract') by defining its batch operation and primary use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage guidance: 'Prefer this over repeated extract calls when grounding an answer in several pages.' This clearly sets the context for when to use batch_extract versus its sequential alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extractExtract URLA
Fetch one URL and return its main content as Markdown, e.g. to read a page found by search. Returns JSON: url, title, description, markdown, text, headings, links (first 50), lang and meta.mode_used. Content over maxChars (default 20000) is cut and the result gets truncated: true. For two or more pages use batch_extract. Pages behind logins or bot walls can fail or come back thin; try mode rendered or another source. Cloud: 1 credit for a fast fetch, 3 when the page needs a browser, +1 with region; failed and empty pages are free. Errors return isError with status and error code.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL to fetch and extract. | |
| lang | No | Preferred page language, sent as Accept-Language, such as en or de. | |
| mode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. | auto |
| clean | No | Article-only extraction (default true). Set false for landing pages, docs indexes and dashboards, where content sits in navigation or feature blocks. | |
| format | No | json (default) for the structured fields; markdown or text for the page content as plain text. | json |
| region | No | Two-letter country code to extract from, e.g. US or DE, for geo-fenced or localized pages. On Cloud this adds 1 credit per extracted URL. | |
| maxChars | No | Max characters of page content (default 20000). Longer pages are cut and marked truncated. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| useLlmsTxt | No | For a site root URL, return the site's /llms-full.txt or /llms.txt instead when it has one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations exist, the description carries the full burden of disclosure. It provides excellent transparency regarding behavioral traits like content truncation (`maxChars`), failure modes (logins/bot walls), and operational costs (credit usage).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is highly dense but well-ordered, following a logical flow: primary action, return data, operational limits, failure modes, and cloud billing. It maximizes information density while remaining coherent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and the absence of an output schema, the description is exceptionally complete. It defines the entire lifecycle of the tool, from successful return structure to operational costs and error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema coverage is 100%, the description adds significant value by detailing the expected output structure (url, markdown, text, etc.), defining the default limit (20,000 chars), and explaining the functionality of features like truncation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool clearly states its purpose is to fetch one URL and return its main content. It distinguishes itself from its sibling, batch_extract, by specifying it operates on a single URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The definition provides explicit usage guidelines, advising the use of batch_extract for multiple pages. It also instructs users on what to try (mode rendered) when faced with failure conditions (logins, bot walls).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fast_searchFast SearchA
Return one web result set as fast as possible, from the engine with the best recent health and latency. Use it for quick lookups where the engine doesn't matter; use search to pick the engine, or any_search to set a fallback order. Returns JSON: results (rank, title, url, snippet, domain, engine), pagination (has_more, next_start) and meta (request_id, took_ms, engines_failed). Cloud: 1 credit. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| merge | No | true (default): one list from every engine that succeeded. false: keep only the first engine that returned results. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| dedupe | No | Drop duplicate URLs across engines (default true). | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| engines | No | Engines to query, in priority order for any mode. Omit to use all available engines. | |
| extract | No | Enrich the top web results with cleaned page content. Boolean or integer depth: false/0 off, true/1 top result, N top N (1-5). | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| extractMode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. |
TDQS
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 well: it discloses engine selection by health/latency, credit cost, return structure, error shape, retry behavior on 429/503, handling of blocked engines, and that unsupported parameters return 400 without charge. These are behavioral traits an agent would otherwise have to discover empirically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and alternatives, then compactly covers return shape, cost, and error handling. For a 17-parameter tool with no annotations, every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations exist, so the description must explain returns and error behavior, and it does: it names the result fields, pagination fields, meta fields, credit cost, and retry/error cases. Given the tool's complexity, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries the parameter semantics. The description adds useful return and error context but does not add per-parameter guidance beyond what the schema provides, such as pagination interaction with start or limit. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: it returns one web result set and does so from the engine with the best recent health and latency. It explicitly distinguishes itself from sibling tools by naming search and any_search and explaining the engine-selection difference. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the intended use case, quick lookups where the engine doesn't matter, and names both alternatives with the conditions that select them: search to pick the engine, any_search to set a fallback order. This is explicit routing among siblings rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageGet UsageA
Show the OpenSERP Cloud account behind OPENSERP_API_KEY: account (plan, credits_remaining) and lastResponse (request_id, credits used, engine) for the previous tool call in this session. Read-only and free. Use it to check the balance before a large batch or to see what a call cost. Self-hosted mode has no credits, so it returns an error there.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does useful work: it declares the operation read-only and free, and discloses the self-hosted failure mode. However, it says nothing about the error shape, whether a first call in a session has no lastResponse, or any rate/refresh behavior, leaving some invocation-risk questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose and return shape first, then usage guidance, then the self-hosted caveat last. There is no redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description supplies both the return fields and the safety profile itself, which is exactly what an agent needs to decide to call it and interpret the result. The zero-parameter schema leaves nothing else to document.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning to convey and the baseline of 4 applies. The description correctly implies parameter-free invocation rather than suggesting any input is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the OpenSERP Cloud account behind OPENSERP_API_KEY) and enumerates exactly what is returned: plan, credits_remaining, and lastResponse fields (request_id, credits used, engine). It is clearly distinguishable from the search/extract siblings, which consume credits rather than report them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('check the balance before a large batch or to see what a call cost') and states a when-not-to-use condition (self-hosted mode has no credits and returns an error). No alternative tool could serve this purpose, so no routing gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_searchImage SearchA
Search images on one engine you choose. Returns JSON results (rank, title, image url/thumbnail/width/height, source page_url and domain, engine) and pagination. Use mega_image to combine several engines. Cloud: cost scales with the number of returned images. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| engine | Yes | Engine to query: google, bing, yandex, baidu, duckduckgo (or duck), ecosia. | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. |
TDQS
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: it lists the return fields, discloses that cloud cost scales with returned images, describes the error envelope (isError with status, code, retry_after), and explains engine-blocking failure modes and remediation. This is unusually complete behavioral disclosure for a search/mutation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool does, then outputs, then the alternative tool, then cost, then error handling. Every sentence (return shape, cost, retry, 400 unbilled) carries operational information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the JSON result fields and pagination. Combined with cost and error semantics for a 12-parameter tool, an agent has everything needed to call it correctly and interpret failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents engine, limit/start paging, date, site, and format in more detail than the description. The description adds only the generic notion of engine choice and pagination, so it neither compensates for nor improves on the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search images'), scopes it to a single chosen engine, and explicitly names the sibling mega_image as the multi-engine alternative. An agent can distinguish it from the other search siblings without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear routing rule ('Use mega_image to combine several engines') plus concrete recovery guidance: wait retry_after on 429/503, switch engines on CAPTCHA/502/503, and note that unsupported parameters return 400 unbilled. It stops short of explicit when-not-to-use guidance relative to web `search`/`any_search`, relying on the name for that split.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_enginesList EnginesA
List the engines this OpenSERP backend can use and whether they work right now. Self-hosted: each engine with initialized and circuit_state (open means it is failing, skip it). Cloud: per-engine web/image support and status (operational, loaded, down) with latency. Read-only and free. Call it when searches keep failing, then pick a healthy engine for search or the engines list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full load and delivers the key traits: 'Read-only and free' declares both the safety profile and the cost model, and 'open means it is failing, skip it' pre-interprets a status value the agent would otherwise misread. It omits auth/prerequisite conditions and whether results are cached, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the diagnostic use case lands last, which is the right ordering. Four sentences for a zero-param tool is slightly dense with backend-specific field lists, but every clause conveys real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the concrete return fields for both self-hosted and cloud modes along with their semantics. For a zero-parameter read-only diagnostic tool this leaves no meaningful gap for an agent deciding whether to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 to misinterpret and the description correctly implies no arguments are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List the engines this OpenSERP backend can use') with scope limited to engine health rather than content, which cleanly separates it from the sibling search/extract tools. It goes further and enumerates the differing payload per deployment mode (initialized/circuit_state vs. web/image support, status, latency).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition ('Call it when searches keep failing') and a follow-up action ('pick a healthy engine for search'). It stops short of naming a specific sibling tool (e.g., any_search vs. fast_search) or stating when not to call it, so it is clear context without full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mega_imageMega Image SearchA
Search images on several engines and merge them into one list (mode balanced, the default); each image keeps its source engine and rank, and duplicates are dropped. Use it when one engine gives too few or too similar images; use image_search for a single engine. Balanced mode serves only the first page; mode any or fast returns the first engine that succeeds. Output fields match image_search. Cloud: any/fast cost 1 credit, balanced depends on engines and image volume. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| mode | No | balanced (default): all engines in parallel, results merged. any: engines in your order until one succeeds; on Cloud slow attempts can overlap. fast: the healthiest, fastest engine. Only any and fast support start above 0. | balanced |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| merge | No | true (default): one list from every engine that succeeded. false: keep only the first engine that returned results. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| dedupe | No | Drop duplicate URLs across engines (default true). | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| engines | No | Engines to query, in priority order for any mode. Omit to use all available engines. | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, yet the description covers the full behavioral envelope: credit costs per mode, cloud-specific behavior, error shape (isError with status, code, retry_after), 429/503 backoff instructions, blocked-engine fallback, and the fact that unsupported params return 400 uncharged. It also discloses the hard constraint that balanced mode only serves the first page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and the sibling alternative, then packs operational details into dense clauses. It is information-dense rather than padded, though the run-on semicolon chaining makes some of the error/cost guidance harder to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with no output schema it covers selection, modes, cost, errors and retry behavior thoroughly. The only gap is that return-shape documentation is delegated to 'Output fields match image_search', requiring a cross-reference to a sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains mode, start offsets per engine, dedupe, merge, limit and format in detail. The description mostly restates the mode semantics and adds only the balanced/first-page constraint, so it does little beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search images on several engines and merge them into one list') plus the default mode and that each result keeps source engine and rank. It explicitly contrasts with image_search for single-engine use, so an agent can distinguish it from all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection condition ('use it when one engine gives too few or too similar images') and names the alternative ('use image_search for a single engine'). It also codifies mode choice: balanced for merged first page, any/fast when one engine succeeding suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mega_searchMega SearchA
Query several engines in parallel and merge their web results into one list (mode balanced, the default). Each result keeps its source engine and rank, and clusters list each URL with its rank on every engine that found it. Use it to compare engines, check where a page ranks across engines, or widen coverage for research; it is slower and costs more than one engine. Balanced mode serves only the first page (start 0); mode any or fast behaves like any_search or fast_search. Returns JSON: results (rank, title, url, snippet, domain, engine), pagination (has_more, next_start) and meta (request_id, took_ms, engines_failed). Cloud: balanced is billed per engine that returns results. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| mode | No | balanced (default): all engines in parallel, results merged. any: engines in your order until one succeeds; on Cloud slow attempts can overlap. fast: the healthiest, fastest engine. Only any and fast support start above 0. | balanced |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| merge | No | true (default): one list from every engine that succeeded. false: keep only the first engine that returned results. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| dedupe | No | Drop duplicate URLs across engines (default true). | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| engines | No | Engines to query, in priority order for any mode. Omit to use all available engines. | |
| extract | No | Enrich the top web results with cleaned page content. Boolean or integer depth: false/0 off, true/1 top result, N top N (1-5). | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| extractMode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: billing is per engine returning results, balanced mode only serves page 1, unsupported params return 400 uncharged, and 429/503 require waiting on retry_after. It stops short of describing engine-failure semantics beyond 'try another engine,' but the safety/cost profile is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key constraint (slower and costlier) are front-loaded, and later sentences cover return shape, billing, and errors efficiently. It is dense but nearly every clause carries actionable information; only the enumeration of result fields is slightly list-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter tool with no annotations and no output schema, the description is complete enough: it documents the JSON return shape, pagination behavior, billing model, and error protocol. An agent has what it needs to call this correctly and interpret failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds value beyond the schema by explaining the balanced/any/fast mode trade-offs and the consequence of merging versus not merging, rather than merely restating field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Query several engines in parallel and merge their web results into one list.' It also states what each result retains (source engine and rank), which distinguishes it from plain search and any_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it (compare engines, check cross-engine rank, widen research coverage) and the trade-off (slower, costs more than one engine). It also routes the agent elsewhere: 'mode any or fast behaves like any_search or fast_search.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchA
Search one engine you choose and return its ranked web results. Use it when the engine matters (Yandex for Russian, Baidu for Chinese, Google for the widest index) or to page with start. If any engine will do, use any_search; to compare engines, use mega_search. Returns JSON: results (rank, title, url, snippet, domain, engine), pagination (has_more, next_start) and meta (request_id, took_ms, engines_failed). Cloud: 1 credit per 10 returned results. Errors return isError with status, error code and retry_after. On 429 or 503 wait retry_after; if an engine is blocked (CAPTCHA, 502/503), try another engine. Unsupported parameters return 400 and are not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. | |
| file | No | File extension filter, such as PDF. | |
| lang | No | Language code, such as EN or de. | |
| site | No | Domain filter, such as example.com. | |
| text | No | Search query text. At least one of text, site, or file should be provided. | |
| limit | No | Maximum result count, 1-100. Keep 10 when paging with start. | |
| start | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. | |
| engine | Yes | Engine to query: google, bing, yandex, baidu, duckduckgo (or duck), ecosia. | |
| filter | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). | |
| format | No | json (default) for structured results; markdown, text or ndjson for compact plain text. | json |
| region | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. | |
| extract | No | Enrich the top web results with cleaned page content. Boolean or integer depth: false/0 off, true/1 top result, N top N (1-5). | |
| features | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. | |
| minRunes | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. | |
| extractMode | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses return structure, credit cost, error handling (429/503 retry, blocked engine fallback, 400 for unsupported parameters), and notes no charge for 400 errors. It lacks explicit auth or safety notes, but search is inherently read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by usage, alternatives, return structure, cost, and error handling. Every sentence contributes directly to correct tool selection and invocation, with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters, no annotations, and no output schema, the description is thorough: it explains return JSON shape, pagination, error responses, retry logic, and cost. The schema fully documents parameters, and the description complements it appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds semantic value beyond the schema by explaining engine selection trade-offs (Yandex for Russian, etc.) and the paging use case with start, though it does not detail every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search one engine you choose and return its ranked web results') and explicitly distinguishes from two siblings (any_search for engine-agnostic, mega_search for comparison). It also implies differentiation from fast_search by emphasizing engine choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance ('Use it when the engine matters... or to page with start'), names concrete alternatives ('If any engine will do, use any_search; to compare engines, use mega_search'), and gives examples of engine suitability (Yandex for Russian, etc.).
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.
8 tool updates
v0.1.8- Changed
any_search9 fields changed- changed
Input schema / properties / dedupe / descriptionPrevious value: -"Deduplicate by normalized URL."New value: +"Drop duplicate URLs across engines (default true)." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use the default engine set."New value: +"Engines to query, in priority order for any mode. Omit to use all available engines." - changed
Input schema / properties / extractMode / descriptionPrevious value: -"Extraction strategy for target pages."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start." - changed
Input schema / properties / merge / descriptionPrevious value: -"Merge successful engine results."New value: +"true (default): one list from every engine that succeeded. false: keep only the first engine that returned results." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor."
- Changed
batch_extract5 fields changed- changed
Input schema / properties / clean / descriptionPrevious value: -"Use article-only extraction when true."New value: +"Article-only extraction (default true). Set false for landing pages, docs indexes and dashboards, where content sits in navigation or feature blocks." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language hint."New value: +"Preferred page language, sent as Accept-Language, such as en or de." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor." - changed
Input schema / properties / mode / descriptionPrevious value: -"Extraction strategy."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / useLlmsTxt / descriptionPrevious value: -"Prefer /llms-full.txt or /llms.txt for site roots."New value: +"For a site root URL, return the site's /llms-full.txt or /llms.txt instead when it has one."
- Changed
extract6 fields changed- changed
Input schema / properties / clean / descriptionPrevious value: -"Use article-only extraction when true."New value: +"Article-only extraction (default true). Set false for landing pages, docs indexes and dashboards, where content sits in navigation or feature blocks." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for the structured fields; markdown or text for the page content as plain text." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language hint."New value: +"Preferred page language, sent as Accept-Language, such as en or de." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor." - changed
Input schema / properties / mode / descriptionPrevious value: -"Extraction strategy."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / useLlmsTxt / descriptionPrevious value: -"Prefer /llms-full.txt or /llms.txt for site roots."New value: +"For a site root URL, return the site's /llms-full.txt or /llms.txt instead when it has one."
- Changed
fast_search9 fields changed- changed
Input schema / properties / dedupe / descriptionPrevious value: -"Deduplicate by normalized URL."New value: +"Drop duplicate URLs across engines (default true)." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use the default engine set."New value: +"Engines to query, in priority order for any mode. Omit to use all available engines." - changed
Input schema / properties / extractMode / descriptionPrevious value: -"Extraction strategy for target pages."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start." - changed
Input schema / properties / merge / descriptionPrevious value: -"Merge successful engine results."New value: +"true (default): one list from every engine that succeeded. false: keep only the first engine that returned results." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor."
- Changed
image_search5 fields changed- changed
Input schema / properties / engine / descriptionPrevious value: -"Search engine endpoint alias."New value: +"Engine to query: google, bing, yandex, baidu, duckduckgo (or duck), ecosia." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start."
- Changed
mega_image8 fields changed- changed
Input schema / properties / dedupe / descriptionPrevious value: -"Deduplicate by normalized URL."New value: +"Drop duplicate URLs across engines (default true)." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use the default engine set."New value: +"Engines to query, in priority order for any mode. Omit to use all available engines." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start." - changed
Input schema / properties / merge / descriptionPrevious value: -"Merge successful engine results."New value: +"true (default): one list from every engine that succeeded. false: keep only the first engine that returned results." - changed
Input schema / properties / mode / descriptionPrevious value: -"balanced merges results. Cloud any starts engines in your order, overlapping slow attempts; fast orders the same race by health and latency. Only any/fast support start above 0."New value: +"balanced (default): all engines in parallel, results merged. any: engines in your order until one succeeds; on Cloud slow attempts can overlap. fast: the healthiest, fastest engine. Only any and fast support start above 0."
- Changed
mega_search10 fields changed- changed
Input schema / properties / dedupe / descriptionPrevious value: -"Deduplicate by normalized URL."New value: +"Drop duplicate URLs across engines (default true)." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use the default engine set."New value: +"Engines to query, in priority order for any mode. Omit to use all available engines." - changed
Input schema / properties / extractMode / descriptionPrevious value: -"Extraction strategy for target pages."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start." - changed
Input schema / properties / merge / descriptionPrevious value: -"Merge successful engine results."New value: +"true (default): one list from every engine that succeeded. false: keep only the first engine that returned results." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor." - changed
Input schema / properties / mode / descriptionPrevious value: -"balanced merges results. Cloud any starts engines in your order, overlapping slow attempts; fast orders the same race by health and latency. Only any/fast support start above 0."New value: +"balanced (default): all engines in parallel, results merged. any: engines in your order until one succeeds; on Cloud slow attempts can overlap. fast: the healthiest, fastest engine. Only any and fast support start above 0."
- Changed
search7 fields changed- changed
Input schema / properties / engine / descriptionPrevious value: -"Search engine endpoint alias."New value: +"Engine to query: google, bing, yandex, baidu, duckduckgo (or duck), ecosia." - changed
Input schema / properties / extractMode / descriptionPrevious value: -"Extraction strategy for target pages."New value: +"auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages." - changed
Input schema / properties / features / descriptionPrevious value: -"Include supported rich SERP features."New value: +"Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them." - changed
Input schema / properties / filter / descriptionPrevious value: -"Enable duplicate filtering."New value: +"Let the engine collapse near-duplicate results (default true, mostly affects Google)." - changed
Input schema / properties / format / descriptionPrevious value: -"Response format."New value: +"json (default) for structured results; markdown, text or ndjson for compact plain text." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum result count."New value: +"Maximum result count, 1-100. Keep 10 when paging with start." - changed
Input schema / properties / minRunes / descriptionPrevious value: -"Minimum content length (in runes) before auto mode escalates to rendered extraction."New value: +"Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor."
8 tool updates
v0.1.7- Changed
any_search3 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use all available engines."New value: +"Engines to query. Omit to use the default engine set." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
- Added
batch_extract - Changed
extract2 fields changed- added
Input schema / properties / maxCharsAdded value: +{ + "description": "Max characters of page content (default 20000). Longer pages are cut and marked truncated.", + "maximum": 9007199254740991, + "minimum": 500, + "type": "integer" +} - added
Input schema / properties / regionAdded value: +{ + "description": "Two-letter country code to extract from, e.g. US or DE, for geo-fenced or localized pages. On Cloud this adds 1 credit per extracted URL.", + "pattern": "^[a-z]{2}$", + "type": "string" +}
- Changed
fast_search3 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use all available engines."New value: +"Engines to query. Omit to use the default engine set." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
- Changed
image_search2 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
- Changed
mega_image4 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use all available engines."New value: +"Engines to query. Omit to use the default engine set." - changed
Input schema / properties / mode / descriptionPrevious value: -"Mega execution mode."New value: +"balanced merges results. Cloud any starts engines in your order, overlapping slow attempts; fast orders the same race by health and latency. Only any/fast support start above 0." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
- Changed
mega_search4 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / engines / descriptionPrevious value: -"Engines to query. Omit to use all available engines."New value: +"Engines to query. Omit to use the default engine set." - changed
Input schema / properties / mode / descriptionPrevious value: -"Mega execution mode."New value: +"balanced merges results. Cloud any starts engines in your order, overlapping slow attempts; fast orders the same race by health and latency. Only any/fast support start above 0." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
- Changed
search2 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Date interval in YYYYMMDD..YYYYMMDD format."New value: +"Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge." - changed
Input schema / properties / start / descriptionPrevious value: -"Pagination offset."New value: +"Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400."
9 tool updates
v0.1.6- First observed
any_search - First observed
extract - First observed
fast_search - First observed
get_usage - First observed
image_search - First observed
list_engines - First observed
mega_image - First observed
mega_search - First observed
search
TDQS
Scored across 10 tools
The four web-search tools overlap in broad purpose, but the descriptions explicitly distinguish them by engine selection, parallel comparison, speed, and fallback ordering. Image search, extraction, account, and engine-status tools are clearly separated.
All names use snake_case consistently, and variant prefixes such as mega_, fast_, any_, and batch_ are readable and systematic. The set is not strictly a uniform verb_noun pattern, but it remains predictable.
Ten tools are well-scoped for a search API: four web-search variants, two image-search variants, two extraction tools, and two utility/status tools. Each tool has a distinct role and none feels redundant.
The surface covers core search, image search, content extraction, batching, usage, and engine health, which are the main workflows for this domain. Minor gaps exist around specialized verticals like news/video/scholar search, but agents can work around them with general search.
Maintenance
Related MCP Connectors
Google, Bing, DuckDuckGo and Google Maps search results, free without an API key.
Live organic search results from Google, Bing, DuckDuckGo, Yahoo, Brave and Yandex as JSON.
Live web search, scraping and crawling API for AI. Get structured, LLM-ready data from any site.
Google SERP, Maps, Shopping, News and AI-answer data for AI agents, from the Searlo search API.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that integrates with SerpApi to retrieve search results from multiple search engines including Google, Bing, Yahoo, and others, enabling fast access to both live and archived search data.3183MIT
- AlicenseAqualityAmaintenanceProvides local-first web intelligence over MCP with tools for search, fetch, crawl, extract, cache, find-similar, research, and autonomous agent loops, requiring no API keys.101,154 npm5,527AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceWeb scraping and search MCP server that wraps Firecrawl API for URL discovery and web search with optional content retrieval.13 npm1MIT
- AlicenseAqualityDmaintenanceProvides real-time Google search results (organic + knowledge graph) with country targeting, language, time filters, and pagination, at low cost.15 npmMIT