{"name":"io.github.quantumproxies/quanticdata-mcp","slug":"quantumproxies-quanticdata-mcp","title":null,"description":"Live web access for agents: scrape, SERP search, crawl/map, 74 collectors, datasets, proxies.","url":"https://mcp.market/server/quantumproxies-quanticdata-mcp","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"seo","tags":["seo","scraping","search","maps"],"presence":{"score":20,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-28T16:03:10.000Z","license":"MIT"},"uptime":{"percent":100,"checks":9,"ok":9,"last_checked_at":"2026-09-21T16:50:32.831Z","last_ok_at":"2026-09-21T16:50:32.831Z","latency_ms":76},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/quantumproxies/quanticdata-mcp-server","website":null,"version":"0.9.2","remotes":[{"type":"streamable-http","url":"https://api.quanticdata.io/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"quanticdata-mcp","version":"0.9.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key from https://app.quanticdata.io/api-keys — $2 of free API usage every month, no card required","isRequired":true,"isSecret":true,"name":"QUANTICDATA_API_KEY"}]},{"registryType":"mcpb","identifier":"https://github.com/quantumproxies/quanticdata-mcp-server/releases/download/v0.9.1/quanticdata-0.9.1.mcpb","fileSha256":"dc6498416c1870dccd9f86a3d22106f7e0f76991a4ca1db2858c504532d51225","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key from https://app.quanticdata.io/api-keys — $2 of free API usage every month, no card required","isRequired":true,"isSecret":true,"name":"QUANTICDATA_API_KEY"}]}],"tools":[{"name":"ai_visibility","description":"Audit whether AI assistants (ChatGPT, Claude, Perplexity, Google AI Overview, Bing Copilot) can read and cite a page, and optionally ask them. On-page pass (always): the live robots.txt resolved for 24 AI crawlers per RFC 9309 with the deciding line, Content-Signal, a fetch that identifies as GPTBot to catch WAFs filtering on user-agent, noindex/nosnippet/noai/data-nosnippet, text present without JavaScript, JSON-LD types and resolvable Organization/Person entities, heading outline, question-shaped headings, answer-first paragraph, lists/tables, numeric facts and quotes, chunk-sized sections, dateModified with age, author, outbound sources. Also readability grade, paragraph length, definitional openers, named-entity density, keyword stuffing, first-hand content, images/video, paywall and retired robots tokens. Retrievability first: where Google ranks the page for its own H1 question and whether it is indexed (2 SERPs) — a page that is not retrievable is not cited whatever its on-page score. Google AI Overview and Bing Copilot report brand MENTIONS only: their no-JS SERP exposes no sources. Returns a 0-100 score per pillar (retrievability, access, readability, structure, answerability, trust, plus offsite when requested), blockers that cap the score, every check with evidence and fix, and topFixes. Citation panel (when `queries` is set): asks each engine, reports cited / mentioned / rank per (query × engine), share of voice across all cited domains, and the domains winning the questions where the page is absent. Use this instead of seo_audit when the question is AI answers rather than Google rankings.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The page URL to audit"},"queries":{"type":"array","items":{"type":"string","minLength":1,"maxLength":300},"maxItems":10,"description":"Questions to ask the AI engines (max 10). Omit for the on-page audit only — each (query × engine) pair is a billed engine call."},"engines":{"type":"array","items":{"type":"string","enum":["perplexity","openai","anthropic","aio","copilot","deepseek"]},"description":"Engines to ask (default: all). aio = Google AI Overview read from a live SERP, copilot = Bing's generative answer, openai/anthropic = the vendors' APIs with web search (an approximation of ChatGPT/Claude search), deepseek = our own Google top-10 handed to DeepSeek to answer and cite (cheapest; measures whether a model picks your page from the same results)."},"competitors":{"type":"array","items":{"type":"string","minLength":1,"maxLength":253},"maxItems":20,"description":"Competitor domains to flag in the share of voice, e.g. ['brightdata.com']"},"brand":{"type":"string","maxLength":80,"description":"Brand name to look for in the answer text ('mentioned' even when not cited). Defaults to the page's og:site_name / Organization name."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit, e.g. 'us' — also the locale of the AI Overview / Copilot SERP"},"no_render":{"type":"boolean","description":"Skip the rendered pass (cheaper — the two JS-parity checks are reported as skipped)"},"no_bot_fetch":{"type":"boolean","description":"Skip the extra request that identifies itself as GPTBot"},"no_retrieval":{"type":"boolean","description":"Skip the retrievability probe (2 SERPs: Google rank of the page for its own H1 question, and whether it is indexed). On by default — it is the strongest single predictor of citation and a blocker when the page is not indexed."},"offsite":{"type":"boolean","description":"Also measure the brand OFF the page with five searches (\"brand\" site:youtube.com / reddit.com / wikipedia.org / linkedin.com / review sites) — the signals studies rank above anything on-page for whether a brand gets named. Adds an `offsite` pillar; billed as 5 SERP calls."},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["url","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"batch","description":"Scrape many URLs asynchronously with shared options. Returns a job id — poll with batch_status. For SEO/status audits over many pages set mode 'summary': items carry metadata only (title, description, canonical, contentLength) instead of full page content.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":5000,"description":"URLs to scrape"},"format":{"type":"string","enum":["markdown","html","text"],"description":"Output format (default markdown)"},"content_mode":{"type":"string","enum":["smart","article","full"],"description":"Per-URL content scope: smart (default) | article | full"},"engine":{"type":"string","enum":["auto","tls","fetch","render"],"description":"Fetch engine (default auto)"},"mode":{"type":"string","enum":["summary"],"description":"summary: per-URL metadata only, no page content — the light mode for audits"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["urls","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"batch_status","description":"Poll a batch job for progress and per-URL results. Polls are incremental: pass the previous response's `nextCursor` as `since` to receive only the items completed after your last poll. Items omit page content by default — set include_content true only when you actually need the text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The batch job id returned by batch"},"since":{"type":"integer","minimum":0,"description":"Item cursor from the previous poll's `nextCursor` — returns only newer items"},"include_content":{"type":"boolean","description":"Include each item's full page content (default false — metadata only)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["jobId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collector_run_status","description":"Fetch a Collector run by run_id: status (queued|running|done|failed), result count, cost, partial flag and the result rows. Use after run_collector returned 202/async. Pass format 'csv' to get the rows as CSV text.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"run_id":{"type":"string","minLength":1,"description":"The run id returned by run_collector"},"format":{"type":"string","enum":["json","csv"],"description":"Return rows as JSON (default) or CSV text"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["run_id","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"crawl","description":"Start an asynchronous BFS crawl of a site from a seed URL, converting each page to Markdown. Returns a job id — poll with crawl_status.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Seed URL"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Max pages (default 50)"},"depth":{"type":"integer","minimum":0,"maximum":10,"description":"Max link depth (default 3)"},"content_mode":{"type":"string","enum":["smart","article","full"],"description":"Per-page content scope: smart (default) | article | full"},"include":{"type":"array","items":{"type":"string"},"description":"URL substrings/globs to include"},"exclude":{"type":"array","items":{"type":"string"},"description":"URL substrings/globs to exclude"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["url","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"crawl_status","description":"Poll a crawl job for progress and the pages crawled so far. Polls are incremental: pass the previous response's `nextCursor` as `since` to receive only the pages crawled since your last poll. Pages omit their content by default — set include_content true only when you actually need the text (a large crawl's full content can be hundreds of KB).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The crawl job id returned by crawl"},"since":{"type":"integer","minimum":0,"description":"Page cursor from the previous poll's `nextCursor` — returns only newer pages"},"include_content":{"type":"boolean","description":"Include each page's full content (default false — metadata only)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["jobId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_dataset","description":"Build a structured dataset from a plain-language prompt. Quantic AI plans the search queries, searches Google/Bing/DuckDuckGo, maps the sites it finds and scrapes them into validated rows (CSV/JSON). Returns a job id — poll with dataset_status. Billed per delivered, validated record (email/phone fields cost extra, only when found); the run never exceeds limits.max_cost_usd, and the unspent budget is refunded.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"prompt":{"type":"string","description":"What dataset you want, in plain language (e.g. 'coffee roasters in Portland with email and phone')"},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["string","number","email","phone","url","boolean","deep"],"description":"email/phone/deep are premium fields, billed only when found"},"description":{"type":"string"}},"required":["name"],"additionalProperties":false},"description":"Columns to extract; omit to let the planner infer them"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit geo"},"sources":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"description":"Domain allow/deny lists"},"limits":{"type":"object","properties":{"max_rows":{"type":"integer","minimum":1},"max_pages":{"type":"integer","minimum":1},"max_cost_usd":{"type":"number","minimum":0.05,"description":"Budget cap for the run (default 5)"}},"additionalProperties":false},"webhook":{"type":"string","format":"uri","description":"Public URL to POST the finished dataset to"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["prompt","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"dataset_status","description":"Poll a dataset job for progress, the collection trace (steps) and the rows so far. Polls are incremental: pass the previous response's `nextCursor` as `since` to receive only rows delivered after your last poll. Set mode 'summary' to omit rows and get only progress + steps (light poll). When status is completed, the response includes signed CSV/JSON download URLs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The dataset job id returned by create_dataset"},"since":{"type":"integer","minimum":0,"description":"Row cursor from the previous poll's `nextCursor` — returns only newer rows"},"mode":{"type":"string","enum":["summary"],"description":"summary: progress + steps only, no rows"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["jobId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_parser","description":"Look at a page ONCE with an LLM and get back CSS selectors that extract the fields you asked for. Pass the returned `parser` as the `extract` argument on every later scrape of that same layout and no AI runs again — it becomes a plain, free, deterministic extraction. Use this instead of ai_prompt whenever you will scrape more than a couple of pages of the same shape. Every selector is run against the page before being returned, so `report`/`coverage` tell you which fields are actually reliable.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The page to learn the layout from"},"html":{"type":"string","description":"Markup you already have, instead of fetching a URL (no proxy bandwidth used)"},"fields":{"type":"object","additionalProperties":{"type":"string"},"description":"What to extract, as { field_name: \"plain-English description\" } — e.g. { \"price\": \"the product price\", \"specs\": \"every spec bullet, as a list\" }. Max 25."},"prompt":{"type":"string","description":"Free-text alternative to `fields` — the model picks and names the fields itself"},"render":{"type":"boolean","description":"Learn from the browser-rendered DOM instead of the raw HTML (needed for SPA pages)"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_proxies","description":"Generate ready-to-use proxy endpoint strings (credentials included) from one of the account's active proxy services — any type: residential, mobile, datacenter, ISP, IPv6. Supports geo targeting (country/state/city, ISP or ASN where the plan allows it), rotating or sticky sessions, HTTP or SOCKS5, and several output formats. Use list_proxies first to get the orderId, and proxy_locations for valid targeting codes. The returned strings plug straight into any HTTP client, e.g. curl -x.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"orderId":{"type":"string","description":"The proxy service's orderId (from list_proxies)"},"protocol":{"type":"string","enum":["http","socks5"],"description":"Proxy protocol (default http)"},"format":{"type":"string","enum":["user:pass@host:port","host:port:user:pass","http://user:pass@host:port","socks5://user:pass@host:port"],"description":"Output string format (default user:pass@host:port)"},"quantity":{"type":"integer","minimum":1,"maximum":10000,"description":"Number of proxy strings (default 10)"},"country":{"type":"string","maxLength":10,"description":"Country code for geo targeting, lowercase, e.g. 'us'"},"state":{"type":"string","description":"State/region (Residential Premium & Mobile V2: use the slug from proxy_locations; 'all' for any)"},"city":{"type":"string","description":"City (slug from proxy_locations where applicable; 'all' for any)"},"rotation":{"type":"string","enum":["rotating","sticky","static"],"description":"rotating (default): new IP per request. sticky: keep the IP for sessionTime. static: IPv6 only, fixed session with no TTL."},"sessionTime":{"type":"integer","minimum":1,"maximum":1440,"description":"Sticky session duration in minutes (default 10; Residential Basic/Datacenter minimum 3)"},"isp":{"type":"string","description":"ISP code for Residential Premium / Mobile V2 targeting (from proxy_locations tree, e.g. 'tmobile')"},"asn":{"type":"string","description":"ASN for Residential/Datacenter Basic targeting, e.g. 'AS12345'"},"strict":{"type":"boolean","description":"Residential/Datacenter Basic: true allows fallback to nearby locations when the exact target has no IPs"},"filter":{"type":"string","enum":["speed","speed-quality","quality"],"description":"Residential Premium / Mobile V2 pool filter (omit for the full pool)"},"ip":{"type":"string","description":"Mobile V2 only: a whitelisted IP (see whitelist_ip) to fetch the IP-auth proxy list instead of user:pass proxies"},"gateway":{"type":"string","enum":["ww","us","eu","as"],"description":"Mobile V2 region gateway (default ww)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["orderId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"heal_parser_preset","description":"Regenerate a preset's selectors now (the manual trigger for the automatic repair). Refetches the source page and adopts new selectors ONLY if they extract more than the current ones — a heal that finds nothing better leaves the preset untouched and is not billed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"preset_id":{"type":"string","description":"The preset id"},"force":{"type":"boolean","description":"Bypass the cooldown between heals"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["preset_id","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_collectors","description":"List the ready-made Collectors: paid, versioned scrapers you run with a semantic input (keyword + location, place id, product id, domain…) instead of URLs — e.g. web_search, search_images, search_videos, keyword_ideas, amazon_search, amazon_product, ebay_search, aliexpress_search, linkedin_jobs, indeed_jobs, reddit_posts, youtube_search, youtube_channel, instagram_profile, tiktok_profile, tiktok_video, linkedin_profile, linkedin_company, zillow_search, zillow_property, app_store_apps, app_store_reviews, google_play_apps, google_maps_places, place_reviews, google_jobs, google_news, google_shopping, product_offers, hotels, google_flights, google_events, google_trends, google_autocomplete, google_lens, youtube_video, ebay_product, flipkart_search, idealista_search, kleinanzeigen_search, autotrader_search, github_repos, hacker_news, coingecko_coins, wikipedia_articles, yahoo_finance, stackoverflow, steam, npm_packages, sec_filings, defillama, wayback_machine, clinical_trials, certificate_transparency, wikidata, nvd_cve, openfda, openalex, pypi_packages, exchange_rates, gleif_lei, docker_hub, crates_io, world_bank, openlibrary_books, arxiv_papers, weather_forecast, whois_domain, dns_records, itunes_search, local_business_leads, site_contacts, company_profile, business_directory. Returns each collector's slug, input/output schema, example input, price per delivered result and current health. Billing is pay-per-success: only delivered rows are charged.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string","maxLength":40,"description":"Optional category filter (e.g. 'local', 'ecommerce', 'jobs', 'news', 'travel', 'leads', 'finance', 'dev', 'gaming', 'osint', 'research', 'classifieds', 'knowledge')"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_parser_presets","description":"List your stored parser presets with their version, health stats and changelog.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_proxies","description":"List the account's proxy services of every type — Residential Basic/Premium/Private, Mobile, Mobile V2, Datacenter (static or traffic-based), ISP, IPv6 — with plan type, bandwidth left, expiry, whitelisted IPs and the orderId to pass to generate_proxies. Call this first to see which proxy plans are available.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"active":{"type":"boolean","description":"true: only non-expired services (recommended). false: only expired. Omit for all."},"planType":{"type":"string","enum":["residentialbasic","residentialpremium","resiprivate","isp","datacenter","datacentertraffic","ipv6","mobile","mobile_v2"],"description":"Only services of this plan type"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max services returned (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Pagination offset (default 0)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"map","description":"Discover a site's URLs fast (robots.txt sitemaps + /sitemap.xml + homepage links) without a full crawl. Returns up to `limit` URLs (default 100) plus the site-wide `total` and a per-section `summary` (e.g. '/blog': 1988) so you see the site's shape without the full list. Narrow with `search` (substring filter — the primary way to find specific pages) or set group_by 'path' for the path tree with counts instead of URLs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The site URL to map"},"limit":{"type":"integer","minimum":1,"maximum":5000,"description":"Max URLs returned (default 100). `total`/`summary` always cover the whole site."},"search":{"type":"string","description":"Only return URLs containing this substring — use this to narrow before raising limit"},"group_by":{"type":"string","enum":["path"],"description":"path: return the path tree with per-prefix counts instead of the flat URL list"},"includeSubdomains":{"type":"boolean","description":"Include subdomains of the seed host"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["url","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"parser_preset_stats","description":"How well a stored parser is still working: success rate per field, mean coverage over the recent runs, and whether it now counts as decayed (i.e. the site probably changed).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"preset_id":{"type":"string","description":"The preset id returned by save_parser_preset"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["preset_id","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"proxy_locations","description":"Discover valid geo-targeting values for a proxy plan type before calling generate_proxies: countries, states, cities, ASNs, or the full location tree (countries → regions → cities → ISPs). Use level 'tree' for Residential Premium / Mobile V2 slugs and ISP codes, or for the static datacenter gateway list; note the tree can be large.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"planType":{"type":"string","enum":["residentialbasic","residentialpremium","resiprivate","isp","datacenter","datacentertraffic","ipv6","mobile","mobile_v2"],"description":"The plan type to look up (same value as list_proxies planType)"},"level":{"type":"string","enum":["countries","states","cities","asns","tree"],"description":"countries (default) | states (needs country) | cities (needs country) | asns | tree (full location tree: residentialpremium, mobile/mobile_v2, datacenter)"},"country":{"type":"string","maxLength":10,"description":"Country code, required for states/cities, optional filter for asns"},"state":{"type":"string","description":"Cities only: filter by state"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["planType","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"run_collector","description":"Run a Collector by slug with a semantic input (see list_collectors for each collector's inputSchema and example). Short runs return the rows inline; long runs return 202 with a run_id + statusUrl — poll with collector_run_status. Results are billed per delivered row (never for failures). Set `async` true to force background execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","minLength":1,"description":"Collector slug from list_collectors, e.g. 'google_maps_places'"},"input":{"type":"object","additionalProperties":{},"description":"Input fields matching the collector's inputSchema (e.g. { keyword: 'dentist', location: 'Austin, TX', max_results: 20 })"},"async":{"type":"boolean","description":"Force background execution and return a run_id to poll"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["slug","input","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"save_parser_preset","description":"Store a generated parser under a name so it can be reused by id. Scrape later with scrape's `preset_id` instead of repeating the selectors, and every run is scored per field — when the recent success rate decays (the site redesigned), the preset regenerates itself from `source_url` and bumps a version. Give it a source_url whenever you can: without one it can never self-heal.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","maxLength":120,"description":"A name you'll recognise, e.g. 'amazon product page'"},"parser":{"type":"object","additionalProperties":{},"description":"The parser to store — normally the `parser` object returned by generate_parser"},"source_url":{"type":"string","format":"uri","description":"Page to relearn from when the parser decays — required for self-healing"},"fields":{"type":"object","additionalProperties":{"type":"string"},"description":"The original field descriptions, so a self-heal regenerates the same shape"},"render":{"type":"boolean","description":"The page needs a browser render to show its content"},"auto_heal":{"type":"boolean","description":"Regenerate automatically on decay (default true when source_url is set)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["name","parser","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"scrape","description":"Scrape a single web page through a residential proxy and return it as clean Markdown (or HTML/text). Uses a real Chrome TLS fingerprint by default and only spins up a headless browser if the page is bot-challenged. Optionally run structured extraction (CSS selectors) or AI extraction (natural-language prompt). Markdown keeps the complete page by default (content_mode 'smart': everything except nav/footer/cookie chrome, with GFM tables and absolutized links); to inspect a page's raw no-JS/SEO fallback use format 'html'.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The page URL to scrape (optional only when you pass `html` to convert)"},"format":{"type":"string","enum":["markdown","html","text"],"description":"Output format (default markdown)"},"formats":{"type":"array","items":{"type":"string","enum":["markdown","html","text"]},"maxItems":3,"description":"Additional formats to return together in payload.formats, e.g. ['markdown','text']"},"include_links":{"type":"boolean","description":"Return all de-duplicated absolute page links in payload.links"},"content_mode":{"type":"string","enum":["smart","article","full"],"description":"smart (default): whole page minus nav/footer/cookie chrome. article: Readability main article only (news/blogs). full: entire body as-is."},"engine":{"type":"string","enum":["auto","tls","fetch","render"],"description":"auto (default): TLS tier, escalate to browser on block. tls: never escalate — exactly what a pure HTTP bot (no JS) sees, right for SEO checks. render: force browser."},"render":{"type":"boolean","description":"Force the headless browser (JS execution)"},"mode":{"type":"string","enum":["summary"],"description":"summary: return only metadata (title, description, canonical, contentLength, status, engine, bytes) with no page content — use this when auditing pages instead of reading them"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit, e.g. 'us'"},"ai_prompt":{"type":"string","description":"Natural-language instruction — the LLM turns the page into structured JSON"},"ai_schema":{"type":"object","additionalProperties":{},"description":"JSON Schema for deterministic AI extraction; returned under payload.ai.data"},"extract":{"type":"object","additionalProperties":{},"description":"Structured-extraction schema: { field: \"css selector\" | { selector, attr, all, fns } }. `fns` is a transform pipeline run on the value — e.g. { \"price\": { \"selector\": \".price\", \"fns\": [\"amount_from_string\"] } } returns a number, not text. Functions: amount_from_string, amount_range_from_string, convert_to_float/int/str, trim, lower, upper, {regex_search|regex_find_all: \"pat\"}, {replace:{from,to}}, {join:\",\"}, {select_nth:0}, length, unique, max, min, average, product."},"app_state":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["auto","raw"]}],"description":"Mine the page's own hydration state (Next.js __NEXT_DATA__, Nuxt, embedded JSON islands) into payload.metadata.appState. This is where SPAs keep the real data — prices behind a picker, stock, download counts, listings — even when the DOM shows only a shell, so it often answers the question without a browser render. true/'auto': pruned to the informative parts (recommended). 'raw': the complete blobs, up to 512KB."},"parser":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"maxItems":25},"exclude":{"type":"array","items":{"type":"string"},"maxItems":25},"keep":{"type":"array","items":{"type":"string"},"maxItems":25}},"additionalProperties":false,"description":"Your own parsing rules, as CSS selector lists — use these when you know the page and don't want to rely on heuristics. include: keep ONLY these subtrees (targeted extraction, e.g. ['article.post']). exclude: delete site-specific chrome we kept. keep: protect a section (sidebar, dialog, form) that smart mode would strip."},"reveal_hidden":{"type":"boolean","description":"Render tier only: before capturing, open <details>/accordions and click through every tab, appending each revealed panel to the page. Use it for tabbed code samples or spec accordions where a plain render captures only the visible variant."},"xhr":{"type":"boolean","description":"Record the page's XHR/fetch traffic (URL, method, status, response body) into payload.xhr. Forces a browser render. An SPA's own JSON API is usually far cleaner than its DOM — use this to DISCOVER the API, then fetch_resource to return it directly."},"fetch_resource":{"type":"string","maxLength":500,"description":"Regex matched against the page's network requests: the first matching response's BODY becomes the result instead of the page HTML (e.g. '/api/products' to get an SPA's JSON directly). Forces a render. Fails with 504 if nothing matches."},"preset_id":{"type":"string","description":"Run a stored parser preset (see save_parser_preset) instead of passing `extract` selectors. Results land in payload.data exactly the same way, and the run is scored so the preset can detect decay and self-heal."},"actions":{"type":"array","items":{"type":"object","additionalProperties":{}},"maxItems":20,"description":"Ordered browser interactions before capture (forces a render). Each is one object: {\"click\":\"#sel\"}, {\"clickText\":\"Accept\"} (click by visible text — dismiss a consent wall without knowing its CSS), {\"type\":{\"selector\":\"#q\",\"text\":\"shoes\"}}, {\"scroll\":\"bottom\"}, {\"wait\":1000}, {\"waitForSelector\":\".results\"}. Add \"optional\":true to skip a miss, or \"timeoutMs\":N to bound one action."},"frontmatter":{"type":"boolean","description":"Prepend YAML front-matter (title, url, canonical, description, author, date) so the markdown is self-contained for RAG/Obsidian pipelines"},"links_mode":{"type":"string","enum":["inline","footnote","strip"],"description":"Link rendering. inline (default): [text](url). footnote: URLs moved to a numbered reference list at the end. strip: keep only the link text — cuts 30-48% of the tokens on link-dense pages when you only need the prose."},"toc":{"type":"boolean","description":"Prepend a table of contents built from the page headings"},"max_tokens":{"type":"integer","minimum":200,"maximum":2000000,"description":"Cap the markdown at ~this many tokens, cutting at a section boundary (never inside a table or code block) and noting how much was omitted"},"query":{"type":"string","maxLength":512,"description":"What you are looking for on the page. Keeps only the relevant sections (BM25 scoring over blocks, headings preserved) — the way to read one fact off a huge page without spending its whole token budget."},"highlights":{"type":"integer","minimum":1,"maximum":20,"description":"With `query`: also return the N most relevant passages in payload.highlights"},"chunk":{"type":"object","properties":{"by":{"type":"string","enum":["heading","sentence","tokens"]},"size":{"type":"integer","minimum":1,"maximum":100000},"overlap":{"type":"integer","minimum":0,"maximum":100000}},"additionalProperties":false,"description":"Segment the output into payload.chunks[] for RAG/vector-DB ingestion — each chunk carries its heading path and token count. Fences and tables are never split."},"images_mode":{"type":"string","enum":["inline","alt","strip"],"description":"inline (default) keeps ![alt](url); 'alt' keeps only alt text; 'strip' removes images"},"summary_sections":{"type":"boolean","description":"Append 'Links on this page' / 'Images on this page' sections — handy when deciding the next hop"},"html":{"type":"string","description":"Convert HTML you already have instead of fetching: no proxy bandwidth is used, and the full parser pipeline still applies. Pass `url` too if you want relative links absolutized."},"content_modes":{"type":"array","items":{"type":"string","enum":["smart","article","full"]},"maxItems":3,"description":"Return several content scopes from ONE fetch under payload.contents (e.g. compare smart vs full)"},"cookies":{"type":"object","additionalProperties":{"type":"string"},"description":"Cookies to send as name→value — the simple way to scrape behind a login"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search","description":"Run structured Google, Bing or DuckDuckGo searches through a residential proxy. Bing supports web, shopping, images, news, videos, places/maps and autocomplete over HTTP, including Copilot AI answers and citations when Bing returns them. Google web search also parses rich blocks directly from its HTTP response.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"The search query (optional for place_details/product/flights/lens/reviews, which are ID/URL-addressed)"},"engine":{"type":"string","enum":["google","bing","duckduckgo"],"description":"Search engine (default google)"},"search_type":{"type":"string","enum":["search","shopping","images","news","places","maps","videos","scholar","jobs","autocomplete","place_details","hotels","flights","events","product","lens","reviews","trends"],"description":"Vertical (default search). Bing supports shopping/images/news/videos/places/maps/autocomplete. Google additionally supports scholar/jobs/place_details/hotels/flights/events/product/lens/reviews; maps accepts gps_coordinates, place_details uses place_id, and reviews uses data_id."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code, e.g. 'us'"},"lang":{"type":"string","maxLength":10,"description":"Search UI language, e.g. 'en' or 'it'"},"render":{"type":"boolean","description":"Force browser rendering where supported; Google/Bing web search rich blocks are parsed over HTTP"},"device":{"type":"string","enum":["desktop","mobile"],"description":"SERP device shape (default desktop)"},"page":{"type":"integer","minimum":1,"description":"Result page, 1-based (default 1). The response's pagination.available_pages lists which pages exist; use search_bulk to fetch many pages at once."},"start":{"type":"integer","minimum":0,"description":"Result offset alias (0, 10, 20…)"},"num":{"type":"integer","minimum":1,"maximum":100,"description":"How many organic results to aim for (default 10, max 100). Google serves ~10 per page, so a larger num is satisfied by fetching consecutive pages and merging them — it is NOT ignored. `search_metadata.search_url` is necessarily the first page's URL and therefore shows num=<page size>; `search_metadata.paging` reports what was actually requested, the page size, and how many pages were fetched. Getting fewer results than requested means Google ran out, not that num was dropped. Use `page` to address one specific page, or search_bulk for many queries."},"location":{"type":"string","description":"Search from this location, e.g. 'Milan, Italy' (encoded to Google's uule server-side)"},"timeframe":{"type":"string","description":"Trends only: Google timeframe token — 'today 12-m' (default), 'now 7-d', or an explicit 'YYYY-MM-DD YYYY-MM-DD' range"},"uule":{"type":"string","description":"Geo token: encoded uule, or raw coordinates 'lat,lon' / 'lat,lon,radius_m' (encoded server-side)"},"safe":{"type":"string","enum":["active","off"],"description":"Google SafeSearch setting"},"nfpr":{"type":"boolean","description":"Disable Google spelling correction"},"wait_for":{"type":"string","maxLength":512,"description":"Rendered path: wait for this CSS selector before parsing late panels"},"browser":{"type":"string","enum":["chrome","firefox","safari"],"description":"TLS/browser identity for the fetch path"},"google_params":{"type":"object","additionalProperties":{"type":["string","number"]},"description":"Additional Google query parameters not modeled above"},"place_id":{"type":"string","description":"Google Maps place id (from maps/places results) for place_details"},"data_id":{"type":"string","description":"Maps data id, hex fid '0x…:0x…' (from maps/place_details results) — required for reviews"},"product_id":{"type":"string","description":"Google Shopping product id for product details"},"departure_id":{"type":"string","description":"Flights: departure airport IATA code, e.g. 'JFK'"},"arrival_id":{"type":"string","description":"Flights: arrival airport IATA code, e.g. 'LAX'"},"outbound_date":{"type":"string","description":"Flights: outbound date YYYY-MM-DD"},"return_date":{"type":"string","description":"Flights: return date YYYY-MM-DD (omit for one-way)"},"check_in_date":{"type":"string","description":"Hotels: check-in date YYYY-MM-DD"},"check_out_date":{"type":"string","description":"Hotels: check-out date YYYY-MM-DD"},"adults":{"type":"integer","minimum":1,"maximum":10,"description":"Hotels: number of adults"},"children_ages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17},"description":"Hotels: children's ages, e.g. [5, 7]"},"free_cancellation":{"type":"boolean","description":"Hotels: only offers with free cancellation"},"accommodation_type":{"type":"string","enum":["hotels","vacation_rentals"],"description":"Hotels: property kind (default hotels)"},"currency":{"type":"string","minLength":3,"maxLength":3,"description":"Hotels/Flights: price currency, e.g. 'EUR'"},"gps_coordinates":{"type":"string","description":"Maps: center the search on 'lat,lon' or 'lat,lon,zoom' (zoom 3-21)"},"image_url":{"type":"string","description":"Lens: publicly reachable image URL to reverse-search"},"exact_matches":{"type":"boolean","description":"Lens: return the exact-matches tab (pages using this exact image) instead of visual matches"},"sort_by":{"type":"string","enum":["relevance","newest","highest_rating","lowest_rating"],"description":"Reviews: sort order (default relevance)"},"filter":{"type":"string","description":"Reviews: only reviews whose text contains this keyword"},"next_page_token":{"type":"string","description":"Reviews: continuation token from the previous response's serpapi_pagination"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_and_read","description":"Search the live web, fetch the top organic pages as clean Markdown, and return citation-ready numbered sources plus one token-bounded `context` string ready for an AI prompt. Use this when the goal is answering/researching, and use `search` when raw SERP structure or a specialized vertical is needed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"The research/search query"},"engine":{"type":"string","enum":["google","bing","duckduckgo"],"description":"Search engine (default google)"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for search and proxy geo"},"lang":{"type":"string","maxLength":10,"description":"Search UI language, e.g. 'en' or 'it'"},"top_n":{"type":"integer","minimum":1,"maximum":5,"description":"Top organic pages to fetch (default 3, max 5)"},"max_tokens":{"type":"integer","minimum":500,"maximum":50000,"description":"Maximum estimated tokens in the assembled context (default 8000)"},"fetch_content":{"type":"boolean","description":"False returns snippet-only context without fetching result pages"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["query","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_bulk","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"The search query to paginate"},"engine":{"type":"string","enum":["google","bing","duckduckgo"],"description":"Search engine (default google)"},"search_type":{"type":"string","enum":["search","news","videos","images","shopping"],"description":"Vertical to paginate (default search)"},"max_pages":{"type":"integer","minimum":1,"maximum":10,"description":"Max pages to fetch (1-10, default 5). Stops early when Google has no more pages."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code, e.g. 'us'"},"lang":{"type":"string","maxLength":10,"description":"UI language, e.g. 'en'"},"render":{"type":"boolean","description":"Force rendering to capture page-one Google JS enrichments"},"device":{"type":"string","enum":["desktop","mobile"],"description":"SERP device shape"},"location":{"type":"string","maxLength":256,"description":"Search location, e.g. 'Milan, Italy'"},"uule":{"type":"string","maxLength":512,"description":"Encoded geo token or raw coordinates"},"safe":{"type":"string","enum":["active","off"],"description":"Google SafeSearch setting"},"nfpr":{"type":"boolean","description":"Disable Google spelling correction"},"wait_for":{"type":"string","maxLength":512,"description":"Rendered path CSS selector for late panels"},"browser":{"type":"string","enum":["chrome","firefox","safari"],"description":"Fetch-path browser identity"},"google_params":{"type":"object","additionalProperties":{"type":["string","number"]},"description":"Additional Google query parameters"},"webhook":{"type":"string","format":"uri","description":"Public URL to POST the finished job to"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["query","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_bulk_status","description":"Poll a bulk search job for progress and merged organic results. Polls are incremental: pass the previous response's `nextCursor` as `since` to receive only the organic results gathered after your last poll.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The bulk search job id returned by search_bulk"},"since":{"type":"integer","minimum":0,"description":"Organic cursor from the previous poll's `nextCursor` — returns only newer results"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["jobId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_audit","description":"Audit a URL's SEO in one call: fetches it twice — as a pure HTTP bot (no JS) and fully rendered — and returns both views (title, description, canonical, h1, word count) plus the diff (JS-only content, changed title/description, canonical missing without JS) and bot-facing meta (robots, Open Graph, JSON-LD types). Use this instead of scraping manually when checking how a page indexes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The page URL to audit"},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code for the proxy exit, e.g. 'us'"},"no_render":{"type":"boolean","description":"Skip the rendered pass (cheaper — returns the no-JS view only, no diff)"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["url","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whitelist_ip","description":"Manage IP-auth whitelisting on a proxy service (Residential Basic, Datacenter, ISP, IPv6, Mobile): add or remove an IP, or list the current entries. A whitelisted machine uses the proxies without username/password — required for the Mobile V2 IP-auth proxy list. Residential Premium/Private use user:pass auth and don't need this.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["add","list","remove"],"description":"What to do with the order's whitelist"},"orderId":{"type":"string","description":"The proxy service's orderId (from list_proxies)"},"ip":{"type":"string","description":"The IP to add/remove (required for add and remove)"},"ports_count":{"type":"integer","minimum":1,"maximum":1000,"description":"Mobile add: number of ports to allocate"},"protocol":{"type":"string","enum":["HTTP","SOCKS5"],"description":"Mobile add: protocol for the allocated ports"},"country":{"type":"string","maxLength":10,"description":"Mobile add: geo targeting for the ports, e.g. 'us'"},"region":{"type":"string","description":"Mobile add: region slug"},"city":{"type":"string","description":"Mobile add: city slug"},"isp":{"type":"string","description":"Mobile add: ISP code, e.g. 'tmobile'"},"sticky":{"type":"boolean","description":"Mobile add: keep the same IP per port"},"ttl":{"type":"integer","minimum":1,"description":"Mobile add: sticky session TTL in seconds"},"context":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"llm_model":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."}},"required":["action","orderId","context","llm_model"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-09-21T05:08:39.085Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-21T05:08:39.112Z","components":{"code":{"score":25,"max":25,"notes":["4 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 537ms"]},"poisoning":{"score":15,"max":15,"notes":["26 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 4 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 24 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://api.quanticdata.io/mcp","reachable":true,"authRequired":false,"latencyMs":537,"serverInfo":{"name":"quanticdata","version":"0.9.1"}}],"packages":[{"registryType":"npm","identifier":"quanticdata-mcp","version":"0.9.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-08-28T10:19:56.196Z"}],"repo":{"found":true,"owner":"quantumproxies","repo":"quanticdata-mcp-server","archived":false,"pushedAt":"2026-08-28T16:03:10Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/242826224?v=4","ownerCreatedAt":"2025-11-08T16:35:08Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-28T16:03:10.000Z","score":20}}}},"grade_history":[],"reviews":[]}