Skip to main content
Glama

Server Details

The most accurate web access API. Stop getting blocked.

Ownership verified
Status
Healthy
Uptime
29.8% over 69 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
usestring/string-ai-mcp
GitHub Stars
4
Server Listing
String AI Web Access MCP Server

TDQS

A4.7/5.0

Scored across 4 tools

Disambiguation4/5

The four tools mostly have distinct purposes: search for queries, fetch for reading URLs, request for sending bodies, and sitemap for crawling. Fetch and request could be confused since both hit a URL, but the descriptions explicitly separate reading via GET from submitting via POST/PUT/PATCH.

Naming Consistency5/5

All tool names use the same predictable `web_access_<action>` pattern: fetch, request, search, sitemap. The convention is consistent across the entire set.

Tool Count5/5

Four tools is well-scoped for a web access server: query, read, submit, and crawl. Each tool earns its place without redundant surface area.

Completeness4/5

The set covers the core web-access lifecycle: search, fetch, non-GET requests, and asynchronous crawling. There is a minor gap around other HTTP methods such as DELETE, and no dedicated structured extraction tool beyond fetch formats, but core workflows are covered.

Available Tools

4 tools
web_access_fetchFetch a web pageA
Destructive
Inspect

Fetch a caller-specified HTTP(S) URL and get clean, LLM-ready Markdown back.

Primary use (the common case): pass only a url. The page is fetched with a normal GET and returned as Markdown — no other parameters are needed.

{ "url": "https://example.com/article" }

Best for: any URL, especially sites that block automated traffic or render their content client-side (news, docs, blogs, web apps). Not for: searching the web when you don't have a URL — use web_access_search instead.

Optional parameters (omit unless you need them):

  • format — markdown (default), raw (the destination's verbatim body), or json (a { statusCode, headers, data } envelope with the destination's status and headers).

  • executeJS — set true to render JavaScript for SPAs when the content comes back empty.

  • actions — drive a real browser (click, scroll, type, wait) before capturing the page. See below.

To send a direct POST, PUT or PATCH (with a body), use web_access_request — this tool's direct HTTP path only issues GETs. Plenty of those calls are reads: a GraphQL query, a search backend that takes a body, a JSON API that refuses GET.

  • headers — forward custom request headers; not combinable with executeJS or actions, which run in a browser.

  • countryCode — ISO 3166-1 alpha-2 (e.g. "US") to route through a proxy in that country.

  • solveCaptcha — defaults true; set false to fail fast instead of spending effort solving a challenge.

Returns: Markdown by default; the verbatim body or a JSON envelope when format is set accordingly.


actions — driving the page instead of just loading it

An actions sequence runs in a real browser session and returns the page as it stands after the last step. Use it when the content you need does not exist in the document until something happens to the page: a click past a consent gate, a search form submitted, a "load more" button, a tab or accordion opened, or rows that only render once scrolled into view. Actions can modify destination data or submit a form, so clients should treat any call to this tool as potentially destructive.

Escalate in this order — each step takes longer than the last, and steps 2 and 3 bill at the browser rate:

  1. Plain url — always try this first.

  2. executeJS: true — the page renders client-side but needs no interaction.

  3. actions — the content requires interaction. Takes tens of seconds and holds a browser session.

If the data is still absent after all three, it is likely never in the HTML at all — look for the JSON API the page itself calls and fetch that endpoint directly, which is faster and returns exact values.

Steps (max 50 per request; at most one screenshot):

  • {"type": "wait", "selector": ".price", "timeout": 20000} — wait until the selector appears, then continue immediately. Prefer this over a fixed pause.

  • {"type": "wait", "milliseconds": 3000} — fixed pause. Max 30000ms, as is timeout above.

  • {"type": "click", "selector": "#accept", "all": false} — all: true clicks every match.

  • {"type": "write", "text": "..."} — types into the focused element; click it first.

  • {"type": "press", "key": "Enter"}

  • {"type": "scroll", "direction": "down", "amount": 1000, "selector": "..."} — selector scrolls that element instead of the page.

  • {"type": "hover", "selector": "..."}

  • {"type": "selectOption", "selector": "select#size", "value": "L"} — value may be an array.

  • {"type": "navigate", "url": "https://..."} — go to another page mid-session, keeping cookies and state.

  • {"type": "screenshot", "full_page": true, "quality": 80}

The session opens on url before your first step, so never begin with a navigate to that same URL.

Examples

Dismiss a cookie banner, then read the page:

{ "url": "https://example.com/pricing", "actions": [
  { "type": "click", "selector": "#accept-cookies" },
  { "type": "wait", "selector": "main .plan", "timeout": 15000 }
] }

Run a search the site offers no URL for:

{ "url": "https://example.com", "actions": [
  { "type": "click", "selector": "input[name=q]" },
  { "type": "write", "text": "standing desk" },
  { "type": "press", "key": "Enter" },
  { "type": "wait", "selector": ".results .item", "timeout": 20000 }
] }

Fill in rows that render only as they scroll into view:

{ "url": "https://example.com/listings", "actions": [
  { "type": "wait", "selector": ".card", "timeout": 20000 },
  { "type": "scroll", "direction": "down" },
  { "type": "wait", "milliseconds": 1500 },
  { "type": "scroll", "direction": "down" },
  { "type": "wait", "milliseconds": 1500 }
] }

Returns with actions: a JSON object — data (the final page, Markdown by default), finalUrl, statusCode, and screenshot when the sequence took one. If a step fails, the call still succeeds and returns error plus failedActionIndex, a 0-based index into your actions array, with data holding the page as it stood at that point — read it to see what the page actually showed, then fix that step's selector.

Not combinable with headers or format: "raw"; a browser session is always a GET.

Requests must comply with destination policy, robots directives, rate limits, and access controls. Challenge handling is subject to the caller's String account and organization policy.

NameRequiredDescriptionDefault
urlYesThe full URL of the webpage to fetch. Must be a valid HTTP/HTTPS URL.
formatNoOutput format: 'markdown' for clean LLM-optimized text (recommended), 'raw' for the destination's verbatim body, 'json' for a { statusCode, headers, data } envelope.
actionsNoBrowser actions to run in order before the page is captured, for content that only appears after interaction. Max 50, at most one screenshot. Not combinable with headers, format 'raw' or solveCaptcha false.
headersNoCustom request headers to forward (max 50). Not combinable with executeJS or actions.
executeJSNoEnable JavaScript rendering for SPAs and dynamic content. Set to true if content appears empty or incomplete.
countryCodeNoISO 3166-1 alpha-2 country code for geolocated proxy routing, e.g. 'US'.
solveCaptchaNoWhether to attempt captcha solving. Defaults to true server-side; set false to fail fast on challenges.

Output Schema

NameRequiredDescription
bodyYes
errorNoSet when a browser action step failed. The call still succeeds, and body holds the page as it stood when the step failed.
headersYes
finalUrlNo
screenshotNo
statusCodeYes
failedActionIndexNo0-based index into the request's actions array identifying the step that failed.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations: browser-rate billing, session duration (tens of seconds), max 50 actions / one screenshot, 30000ms caps, failure semantics (call still succeeds, returns error + failedActionIndex with partial data), incompatibility matrix (headers, format raw, solveCaptcha false), and that action sequences can mutate destination state — consistent with destructiveHint=true.

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

Conciseness4/5

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

Front-loaded with the primary use and well-structured with bold headers, inline JSON examples and bullet lists proportional to a 7-parameter nested tool. It loses a point for some redundancy — `format` and the action-return shape are described twice (optional parameters block and Returns block).

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

Completeness5/5

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

For a complex, open-world, nested-schema tool, nothing essential is missing: invocation shape, escalation strategy, per-action contract, failure handling, and the policy/robots caveat are all covered. An output schema exists, yet the action-mode return shape is still explained where it matters.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning on top: when to pick each format, when executeJS is warranted vs. actions, per-action semantics with examples, and the non-combinability rules between headers, executeJS and actions.

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

Purpose5/5

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

States a specific verb and resource ("Fetch a caller-specified HTTP(S) URL") and names the output ("clean, LLM-ready Markdown"). It also explicitly disambiguates against siblings: web_access_search for searching without a URL, web_access_request for POST/PUT/PATCH bodies.

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

Usage Guidelines5/5

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

Gives the common case (pass only url), a "Best for" and a "Not for" section, and a three-step escalation ladder (plain url → executeJS → actions) with cost/latency guidance. It even tells the agent what to do if all three fail (find the underlying JSON API).

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

web_access_requestSend a web requestA
Destructive
Inspect

Send a POST, PUT or PATCH request to any URL, through String's Web Access API. It works like web_access_fetch, but for calls that submit data rather than read a page — a JSON API that only accepts POST, a GraphQL endpoint, a search backend that takes a body.

Use web_access_fetch instead whenever you only need to read a page. This tool sends a body to the destination rather than reading it, so use it only for a request the user actually asked for.

Usage Example:

{
  "url": "https://api.example.com/search",
  "method": "POST",
  "body": { "q": "widgets" }
}

Returns: The destination's response, in the requested format.

NameRequiredDescriptionDefault
urlYesThe full URL to send the request to. Must be a valid HTTP/HTTPS URL.
bodyNoRequest body. A string is sent as-is; an object is JSON-stringified.
formatNoOutput format: 'markdown' for clean LLM-optimized text, 'raw' for the destination's verbatim body, 'json' for a { statusCode, headers, data } envelope (default).
methodYesHTTP method: POST, PUT or PATCH. GET is not accepted here — use web_access_fetch to read a page.
headersNoCustom request headers to forward (max 50).
countryCodeNoISO 3166-1 alpha-2 country code for geolocated proxy routing, e.g. 'US'.
solveCaptchaNoWhether to attempt captcha solving. Defaults to true server-side; set false to fail fast on challenges.

Output Schema

NameRequiredDescription
bodyYes
errorNoSet when a browser action step failed. The call still succeeds, and body holds the page as it stood when the step failed.
headersYes
finalUrlNo
screenshotNo
statusCodeYes
failedActionIndexNo0-based index into the request's actions array identifying the step that failed.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds the reason it is a write ('sends a body to the destination rather than reading it') and a caution about only acting on user-requested calls, which gives useful context beyond the flags. It does not discuss auth requirements or rate limits, so it stops short of a 5.

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

Conciseness5/5

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

The core purpose and the alternative-tool routing are front-loaded in the first two sentences, with example and return note following. Every block earns its place and nothing is redundant.

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

Completeness5/5

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

An output schema exists, so return-value detail is not required, and the description still sketches the response shape. Combined with full param coverage and annotations, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, and the parameters are fully self-documenting. The description adds a concrete usage example showing how url, method and a JSON body combine, which is modestly useful gloss on top of the schema rather than a restatement.

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

Purpose5/5

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

States a specific verb and resource ('Send a POST, PUT or PATCH request to any URL'), names the API it routes through, and explicitly contrasts itself with the sibling web_access_fetch. An agent can distinguish it from web_access_search and web_access_sitemap immediately.

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

Usage Guidelines5/5

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

Gives an explicit when-not rule ('Use web_access_fetch instead whenever you only need to read a page') and a gating condition ('use it only for a request the user actually asked for'). The alternative and the condition that selects it are both stated.

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

web_access_sitemapMap a site's URLsA
Destructive
Inspect

Manage an asynchronous crawl of authorized public pages on one website. Starting from one URL, the crawler follows same-domain links breadth-first and can also seed from the site's /sitemap.xml. Requests must comply with destination policy, robots directives, rate limits, and access controls.

Use this tool to discover pages for site audits, authorized retrieval worklists, or coverage checks before fetching individual pages. Not for: reading one page's content (use web_access_fetch) or open-ended web queries (use web_access_search).

This single tool drives the whole job lifecycle through action:

1. submit — quote a crawl (nothing is crawled or billed yet). Requires url. Optional: maxPages (1–10000, default 10), maxDepth (1–100, default 2), pathPrefix (only crawl URLs whose path starts with this, e.g. "/docs"), budgetUsd (spend ceiling; the crawl stops with status token_cap_exceeded if it would exceed it), useSitemap (also seed the site's root /sitemap.xml — one extra billed page, but finds pages links miss). A maxPages or maxDepth outside its range, 0 included, is rejected rather than replaced by the default — omit the field to get the default. Returns jobId, estimatedPages, and estimatedCostUsd with status awaiting_approval.

{ "action": "submit", "url": "https://example.com", "maxPages": 200, "maxDepth": 3 }

2. approve — start the quoted crawl (requires jobId). This is the billing-consent step: pages are billed as they are fetched, capped by the quote/budget. Before approving a non-trivial estimatedCostUsd, confirm the spend with your user. Fails with status 402 if the account balance cannot cover the quote; a 409 partial_state error means an earlier approve was interrupted — just call approve again.

3. status — poll progress (requires jobId). Statuses: awaiting_approval → running → terminal completed | failed | canceled | token_cap_exceeded (budget hit before maxPages; collected results are still readable). While running it returns pending and processed counts; a partial_state status means an interrupted approve — call approve again to repair it. Status never includes the URL list — page that with results. Poll every few seconds for small crawls; give hundreds-of-pages crawls tens of seconds between polls.

4. results — page through discovered URLs (requires jobId). Optional limit (1–5000, default 1000) and offset (≥ 0); out-of-range values are rejected. total tells you when to stop paging. Each entry has url, statusCode (0 = discovered but not fetched), depth, parentUrl, isSitemap, sourceType, and an error when that page failed. discoveredUrls (links found on the page) is only present for ~1h after completion; afterwards results come from durable storage which omits it — everything else stays available.

5. cancel — stop a running or pending job (requires jobId). Already-terminal jobs return a 409 error. Pages already fetched stay billed and readable via results.

6. list — recent crawl jobs for the account. Optional limit (1–100, default 20) and offset (≥ 0); out-of-range values are rejected. Use it to find a jobId you lost or check for an equivalent recent crawl before paying for a new one.

Typical workflow: submit → check estimatedCostUsd → approve → poll status until terminal → results (paged). A 404 on any jobId action means the job doesn't exist or belongs to another account; a 403 on submit means the target domain is blocked for this account (contact support@usestring.ai).

Returns: the JSON envelope for the chosen action (quote, status, URL page, job list) alongside a one-line summary.

NameRequiredDescriptionDefault
urlNosubmit only (required there): the full http(s) URL to start crawling from. The crawl stays on this URL's domain.
jobIdNoThe job id returned by submit. Required for approve, status, results, and cancel.
limitNoresults/list only: page size. results 1-5000 (default 1000); list 1-100 (default 20). 0 or any value outside the range is rejected.
actionYesLifecycle action to perform: 'submit' (quote a new crawl), 'approve' (start a quoted crawl — billing consent), 'status' (poll progress), 'results' (page through discovered URLs), 'cancel' (stop a job), or 'list' (recent jobs).
offsetNoresults/list only: number of rows to skip for pagination (0 or more).
maxDepthNosubmit only: maximum link depth from the start URL, 1-100 (server default 2 when omitted; 0 or any value outside the range is rejected).
maxPagesNosubmit only: maximum pages to fetch, 1-10000 (server default 10 when omitted; 0 or any value outside the range is rejected). Each fetched page is billed.
budgetUsdNosubmit only: spend ceiling in USD (min 0.0001). The crawl finalizes as token_cap_exceeded when it would exceed this; omit to let the approved quote be the cap.
pathPrefixNosubmit only: restrict the crawl to URLs whose path starts with this prefix, e.g. '/docs'.
useSitemapNosubmit only: also seed the crawl from the site's root /sitemap.xml (one extra billed page; finds pages that internal links miss).

Output Schema

NameRequiredDescription
jobsNo
urlsNo
jobIdNo
totalNo
statusNo
pendingNo
processedNo
finishedAtNo
errorMessageNo
estimatedPagesNo
pagesProcessedNo
estimatedCostUsdNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes far beyond the annotations: billing-consent semantics of approve, per-page billing, 402/403/404/409 error meanings, the partial_state repair path, token_cap_exceeded budget behavior, the ~1h TTL on discoveredUrls, and the fact that canceled pages stay billed. The destructiveHint/openWorldHint annotations are generic; this text supplies the operational reality.

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

Conciseness4/5

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

Long but front-loaded and rigorously structured: purpose, exclusions, then a numbered lifecycle with embedded examples. Every section maps to a distinct action, so little is wasted, though the trailing 'Returns:' sentence is largely redundant given the output schema exists.

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

Completeness5/5

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

For a 10-parameter, six-action, billable, asynchronous tool with an output schema, this leaves nothing essential unstated: state machine, error codes, pagination termination, budget exhaustion, and result durability are all covered.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: out-of-range maxPages/maxDepth are rejected rather than silently defaulted, useSitemap costs one extra billed page, and limit/offset bounds differ per action. Billing implications of maxPages and the budgetUsd cap relationship are not in the schema.

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

Purpose5/5

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

States a specific verb and resource ('Manage an asynchronous crawl of authorized public pages on one website') and immediately names what it is not for, routing the agent to web_access_fetch and web_access_search by name. An agent can distinguish this from all three siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly lists when to use it (site audits, retrieval worklists, coverage checks before fetching pages), when not (single-page reads, open-ended queries) with the correct alternative named. It even supplies the canonical workflow (submit → check estimate → approve → poll → results) and the decision rule for choosing between actions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedweb_access_fetch10 fields changed
      • changedInput schema / properties / actions / description
        Previous value: -"Browser actions to run in order before the page is captured, for content that only appears after interaction. Max 50, at most one screenshot. Not combinable with method, body, headers, or format 'raw'."New value: +"Browser actions to run in order before the page is captured, for content that only appears after interaction. Max 50, at most one screenshot. Not combinable with headers, format 'raw' or solveCaptcha false."
      • removedInput schema / properties / body
        Removed value: -{
        -  "description": "Request body for POST/PUT/PATCH. A string is sent as-is; an object is JSON-stringified. Not allowed for GET."
        -}
      • changedInput schema / properties / executeJS / description
        Previous value: -"Enable JavaScript rendering for SPAs and dynamic content. Set to true if content appears empty or incomplete. Cannot be combined with custom headers."New value: +"Enable JavaScript rendering for SPAs and dynamic content. Set to true if content appears empty or incomplete."
      • changedInput schema / properties / format / description
        Previous value: -"Output format: 'markdown' for clean LLM-optimized text (recommended), 'raw' for the verbatim upstream body, 'json' for a { statusCode, headers, data } envelope."New value: +"Output format: 'markdown' for clean LLM-optimized text (recommended), 'raw' for the destination's verbatim body, 'json' for a { statusCode, headers, data } envelope."
      • changedInput schema / properties / headers / description
        Previous value: -"Custom request headers to forward (max 50). Not supported when executeJS is enabled."New value: +"Custom request headers to forward (max 50). Not combinable with executeJS or actions."
      • removedInput schema / properties / method
        Removed value: -{
        -  "description": "HTTP method for the request (GET/POST/PUT/PATCH), defaults to GET. Use POST/PUT/PATCH to send a body.",
        -  "type": "string"
        -}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / error / description
        Added value: +"Set when a browser action step failed. The call still succeeds, and body holds the page as it stood when the step failed."
      • addedOutput schema / properties / failedActionIndex / description
        Added value: +"0-based index into the request's actions array identifying the step that failed."
      • removedOutput schema / properties / screenshot / additionalProperties
        Removed value: -false
    • Addedweb_access_request
    • Changedweb_access_search47 fields changed
      • addedInput schema / properties / aiMode
        Added value: +{
        +  "description": "Answer from Google AI Mode instead of the results page: the response carries aiMode (the answer as text, Markdown and structured blocks, its cited sources, and any products, places and videos it shows) and no results. Billed as one search; not combinable with searchCount.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aiOverview
        Added value: +{
        +  "description": "Fill the AI Overview Google streams in after the results page loads. A second, sequential fetch: about 64% of pages carry one, and filling it adds about 2.8 s at p50 and 5.6 s at p90. Costs 2x a normal search. Off by default; an overview already on the page is returned without it. Not combinable with aiMode.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / autocorrect
        Added value: +{
        +  "description": "Google only: false searches the query exactly as typed rather than Google's corrected spelling. On by default. Not combinable with aiMode.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / coordinates
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A point to search from, sent from the country it lies in. Google results are biased toward it, most strongly for 'near me' queries; with aiMode the answer is given for it. Wins over location when both are sent.",
        +  "properties": {
        +    "latitude": {
        +      "description": "Latitude in decimal degrees, -90 to 90.",
        +      "type": "number"
        +    },
        +    "longitude": {
        +      "description": "Longitude in decimal degrees, -180 to 180.",
        +      "type": "number"
        +    },
        +    "radius": {
        +      "description": "How precise the point is, in meters: a whole number from 1 to 1000000. Omit for 5000.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "latitude",
        +    "longitude"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "ISO 3166-1 alpha-2 country code the search runs from, e.g. 'GB'. Defaults to US.",
        +  "type": "string"
        +}
      • addedInput schema / properties / dateRange
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "hour",
        +        "day",
        +        "week",
        +        "month",
        +        "year"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "minProperties": 1,
        +      "properties": {
        +        "from": {
        +          "description": "First day of the range, inclusive, YYYY-MM-DD.",
        +          "format": "date",
        +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +          "type": "string"
        +        },
        +        "to": {
        +          "description": "Last day of the range, inclusive, YYYY-MM-DD.",
        +          "format": "date",
        +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  ],
        +  "description": "Google only: limit results to a publication window. One of 'hour', 'day', 'week', 'month' or 'year' for the past hour through the past year, or {from, to} for a custom range of ISO dates (YYYY-MM-DD), inclusive; either end is optional but at least one is required, and from must not be after to. Not combinable with aiMode.",
        +  "type": [
        +    "string",
        +    "object"
        +  ]
        +}
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Google only: 'structured' (the default) for parsed results, or 'raw' for html: the Google results page as HTML, one page per call. The tool sends at most 60,000 bytes of markup per call and sets htmlTruncated when it cuts the page. Raw supports page only: searchCount is rejected with raw, so send one call per page. dateRange and sortBy work with raw. Web only; not combinable with aiMode.",
        +  "enum": [
        +    "structured",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / includeOmittedResults
        Added value: +{
        +  "description": "Google only: true includes the results Google omits as very similar to ones already shown. Not combinable with aiMode.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "Results language tag: two letters, optionally a two-letter region, e.g. 'en' or 'pt-br'.",
        +  "type": "string"
        +}
      • addedInput schema / properties / location
        Added value: +{
        +  "description": "A place name such as 'London' or 'Austin,Texas,United States', 1 to 200 characters; the search is sent from its country. Google results are biased toward the place, most strongly for 'near me' queries, and may still cover a wider area; with aiMode the answer is given for that place. A name that cannot be placed is rejected, so send coordinates instead. coordinates win when both are sent.",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Google only: the results page to start from, an integer from 1 to 30 (default 1), where page N is the page Google shows as N. Without searchCount the response is that one page; with it, searchCount results are collected starting from that page. page and searchCount together stay within the first 300 results: (page-1)*10 + (searchCount, or 10) must be at most 300. A page past the last result returns zeroResults true. Pages hold 8-10 results, so separate page calls can repeat or skip a result; use one call with searchCount for a list without repeats. Not combinable with aiMode.",
        +  "maximum": 30,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / restrictCountry
        Added value: +{
        +  "description": "Google only: keep only results from pages in this country, a two-letter ISO code such as 'FR'. Unlike country, it does not change where the search runs from. Not combinable with aiMode.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / safeSearch
        Added value: +{
        +  "description": "Google only: true removes explicit results (SafeSearch). Not combinable with aiMode.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / searchCount
        Added value: +{
        +  "description": "Organic results wanted, an integer from 1 to 300; above 300 is rejected. Google is paged, up to 36 pages, until that many are in hand or it has no more, and each page is billed as one search. Omit for one page (about 10 results). Not with format raw, which returns one page per call; use page there.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / searchType
        Added value: +{
        +  "description": "Google only: the tab to search. 'web' (the default) is the results page; 'videos', 'books' and 'forums' answer results; 'images' answers images (3 pages of about 100); 'shopping' answers products (one page of about 55, so page must be 1); 'places' answers places (20 a page). No news tab. Not combinable with aiMode.",
        +  "enum": [
        +    "web",
        +    "images",
        +    "videos",
        +    "shopping",
        +    "books",
        +    "places",
        +    "forums"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sortBy
        Added value: +{
        +  "description": "Google only: 'relevance' (the default) or 'date' for the newest results first. Not combinable with aiMode.",
        +  "enum": [
        +    "relevance",
        +    "date"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / verbatim
        Added value: +{
        +  "description": "Google only: true matches the query's words exactly, without synonyms or stemming. Web, videos and forums only; not combinable with aiMode.",
        +  "type": "boolean"
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / ads
        Added value: +{
        +  "description": "Sponsored results, kept apart from results.",
        +  "items": {
        +    "properties": {
        +      "advertiser": {
        +        "type": "string"
        +      },
        +      "block": {
        +        "type": "string"
        +      },
        +      "displayUrl": {
        +        "type": "string"
        +      },
        +      "format": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "format",
        +      "block"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / aiMode
        Added value: +{
        +  "description": "Google's AI Mode answer, only when aiMode was requested: text (plain), markdown, and blocks (paragraph, heading, list, table, code) in reading order; sources it cites, each with title, url (absent when the citation could not be resolved), snippet and source (the site's name); and products, places and videos when the answer shows them. Fields other than text and sources are absent when empty.",
        +  "properties": {
        +    "blocks": {
        +      "items": {
        +        "properties": {
        +          "header": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": [
        +              "null",
        +              "array"
        +            ]
        +          },
        +          "items": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": [
        +              "null",
        +              "array"
        +            ]
        +          },
        +          "language": {
        +            "type": "string"
        +          },
        +          "level": {
        +            "type": "integer"
        +          },
        +          "ordered": {
        +            "type": "boolean"
        +          },
        +          "rows": {
        +            "items": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": [
        +                "null",
        +                "array"
        +              ]
        +            },
        +            "type": [
        +              "null",
        +              "array"
        +            ]
        +          },
        +          "text": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "declined": {
        +      "type": "boolean"
        +    },
        +    "markdown": {
        +      "type": "string"
        +    },
        +    "places": {
        +      "items": {
        +        "properties": {
        +          "address": {
        +            "type": "string"
        +          },
        +          "category": {
        +            "type": "string"
        +          },
        +          "description": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "priceLevel": {
        +            "type": "string"
        +          },
        +          "rating": {
        +            "type": "number"
        +          },
        +          "reviews": {
        +            "type": "integer"
        +          },
        +          "status": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "products": {
        +      "items": {
        +        "properties": {
        +          "merchant": {
        +            "type": "string"
        +          },
        +          "moreSellers": {
        +            "type": "boolean"
        +          },
        +          "oldPrice": {
        +            "type": "string"
        +          },
        +          "price": {
        +            "type": "string"
        +          },
        +          "productId": {
        +            "type": "string"
        +          },
        +          "rating": {
        +            "type": "number"
        +          },
        +          "reviews": {
        +            "type": "integer"
        +          },
        +          "thumbnail": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title"
        +        ],
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "question": {
        +      "type": "string"
        +    },
        +    "sources": {
        +      "items": {
        +        "properties": {
        +          "snippet": {
        +            "type": "string"
        +          },
        +          "source": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "text": {
        +      "type": "string"
        +    },
        +    "topic": {
        +      "type": "string"
        +    },
        +    "videos": {
        +      "items": {
        +        "properties": {
        +          "channel": {
        +            "type": "string"
        +          },
        +          "duration": {
        +            "type": "string"
        +          },
        +          "thumbnail": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title"
        +        ],
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "sources"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / answers
        Added value: +{
        +  "description": "Single-purpose widgets: local time, currency, unit conversion, weather, translation, sports, flights.",
        +  "properties": {
        +    "currency": {
        +      "properties": {
        +        "amount": {
        +          "type": "number"
        +        },
        +        "asOf": {
        +          "type": "string"
        +        },
        +        "from": {
        +          "type": "string"
        +        },
        +        "fromId": {
        +          "type": "string"
        +        },
        +        "rate": {
        +          "type": "number"
        +        },
        +        "result": {
        +          "type": "number"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "text": {
        +          "type": "string"
        +        },
        +        "to": {
        +          "type": "string"
        +        },
        +        "toId": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "from",
        +        "result",
        +        "to",
        +        "text"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "flights": {
        +      "properties": {
        +        "cabin": {
        +          "type": "string"
        +        },
        +        "departure": {
        +          "type": "string"
        +        },
        +        "destination": {
        +          "type": "string"
        +        },
        +        "options": {
        +          "items": {
        +            "properties": {
        +              "airline": {
        +                "type": "string"
        +              },
        +              "duration": {
        +                "type": "string"
        +              },
        +              "price": {
        +                "type": "string"
        +              },
        +              "stops": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "airline"
        +            ],
        +            "type": "object"
        +          },
        +          "type": [
        +            "null",
        +            "array"
        +          ]
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "return": {
        +          "type": "string"
        +        },
        +        "title": {
        +          "type": "string"
        +        },
        +        "tripType": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "options"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "localTime": {
        +      "properties": {
        +        "date": {
        +          "type": "string"
        +        },
        +        "place": {
        +          "type": "string"
        +        },
        +        "time": {
        +          "type": "string"
        +        },
        +        "timezone": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "time"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "sports": {
        +      "properties": {
        +        "games": {
        +          "items": {
        +            "properties": {
        +              "date": {
        +                "type": "string"
        +              },
        +              "note": {
        +                "type": "string"
        +              },
        +              "status": {
        +                "type": "string"
        +              },
        +              "teams": {
        +                "items": {
        +                  "properties": {
        +                    "name": {
        +                      "type": "string"
        +                    },
        +                    "score": {
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "name",
        +                    "score"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": [
        +                  "null",
        +                  "array"
        +                ]
        +              }
        +            },
        +            "required": [
        +              "teams"
        +            ],
        +            "type": "object"
        +          },
        +          "type": [
        +            "null",
        +            "array"
        +          ]
        +        },
        +        "team": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "team",
        +        "games"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "translation": {
        +      "properties": {
        +        "detected": {
        +          "type": "boolean"
        +        },
        +        "dictionary": {
        +          "items": {
        +            "properties": {
        +              "meanings": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": [
        +                  "null",
        +                  "array"
        +                ]
        +              },
        +              "partOfSpeech": {
        +                "type": "string"
        +              },
        +              "term": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "term"
        +            ],
        +            "type": "object"
        +          },
        +          "type": [
        +            "null",
        +            "array"
        +          ]
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "sourceLanguage": {
        +          "type": "string"
        +        },
        +        "sourceTransliteration": {
        +          "type": "string"
        +        },
        +        "targetLanguage": {
        +          "type": "string"
        +        },
        +        "translation": {
        +          "type": "string"
        +        },
        +        "transliteration": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "sourceLanguage",
        +        "detected",
        +        "targetLanguage",
        +        "source",
        +        "translation"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "unitConversion": {
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "formula": {
        +          "type": "string"
        +        },
        +        "from": {
        +          "type": "string"
        +        },
        +        "result": {
        +          "type": "number"
        +        },
        +        "to": {
        +          "type": "string"
        +        },
        +        "value": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "from",
        +        "result",
        +        "to"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    },
        +    "weather": {
        +      "properties": {
        +        "condition": {
        +          "type": "string"
        +        },
        +        "forecast": {
        +          "items": {
        +            "properties": {
        +              "condition": {
        +                "type": "string"
        +              },
        +              "day": {
        +                "type": "string"
        +              },
        +              "highC": {
        +                "type": "number"
        +              },
        +              "highF": {
        +                "type": "number"
        +              },
        +              "lowC": {
        +                "type": "number"
        +              },
        +              "lowF": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "day",
        +              "highF",
        +              "highC",
        +              "lowF",
        +              "lowC"
        +            ],
        +            "type": "object"
        +          },
        +          "type": [
        +            "null",
        +            "array"
        +          ]
        +        },
        +        "humidity": {
        +          "type": "number"
        +        },
        +        "location": {
        +          "type": "string"
        +        },
        +        "observed": {
        +          "type": "string"
        +        },
        +        "precipitation": {
        +          "type": "number"
        +        },
        +        "temperatureC": {
        +          "type": "number"
        +        },
        +        "temperatureF": {
        +          "type": "number"
        +        },
        +        "windKmh": {
        +          "type": "string"
        +        },
        +        "windMph": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "temperatureF",
        +        "temperatureC",
        +        "precipitation",
        +        "humidity",
        +        "forecast"
        +      ],
        +      "type": [
        +        "null",
        +        "object"
        +      ]
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / discussions
        Added value: +{
        +  "description": "Threads from Discussions and forums.",
        +  "items": {
        +    "properties": {
        +      "age": {
        +        "type": "string"
        +      },
        +      "comments": {
        +        "type": "string"
        +      },
        +      "excerpt": {
        +        "type": "string"
        +      },
        +      "forum": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "site": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / entity
        Added value: +{
        +  "description": "The knowledge panel for the one business or person the query named.",
        +  "properties": {
        +    "attributes": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "label": {
        +            "type": "string"
        +          },
        +          "value": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "label",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "description": {
        +      "type": "string"
        +    },
        +    "descriptionSource": {
        +      "properties": {
        +        "name": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "profiles": {
        +      "items": {
        +        "properties": {
        +          "name": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "rating": {
        +      "type": "number"
        +    },
        +    "reviews": {
        +      "type": "integer"
        +    },
        +    "subtitle": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "unread": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "website": {
        +      "properties": {
        +        "name": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "title",
        +    "descriptionSource",
        +    "website",
        +    "attributes",
        +    "profiles",
        +    "unread"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / html
        Added value: +{
        +  "description": "Only with format raw: the Google results page as HTML, in place of results and the surfaces. Cut at a tag boundary when htmlTruncated is true.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / htmlBytes
        Added value: +{
        +  "description": "Only with format raw: UTF-8 bytes of the whole page the API returned.",
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
      • addedOutput schema / properties / htmlTruncated
        Added value: +{
        +  "description": "Only with format raw: true when html stops short of the page because the tool sends at most 60,000 bytes of markup per call. The HTTP API's format raw returns the whole page.",
        +  "type": [
        +    "null",
        +    "boolean"
        +  ]
        +}
      • addedOutput schema / properties / images
        Added value: +{
        +  "description": "Source pages of the Images block; with searchType images, the whole answer, each with imageUrl, imageWidth, imageHeight and thumbnail too.",
        +  "items": {
        +    "properties": {
        +      "imageHeight": {
        +        "type": "integer"
        +      },
        +      "imageUrl": {
        +        "type": "string"
        +      },
        +      "imageWidth": {
        +        "type": "integer"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "thumbnail": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / overviews
        Added value: +{
        +  "description": "Google's AI overviews: the query's own first (no topic), then the Things to know tabs (topic and question); declined marks a frame Google did not fill. Each has text and the cited sources.",
        +  "items": {
        +    "properties": {
        +      "blocks": {
        +        "items": {
        +          "properties": {
        +            "header": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": [
        +                "null",
        +                "array"
        +              ]
        +            },
        +            "items": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": [
        +                "null",
        +                "array"
        +              ]
        +            },
        +            "language": {
        +              "type": "string"
        +            },
        +            "level": {
        +              "type": "integer"
        +            },
        +            "ordered": {
        +              "type": "boolean"
        +            },
        +            "rows": {
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": [
        +                  "null",
        +                  "array"
        +                ]
        +              },
        +              "type": [
        +                "null",
        +                "array"
        +              ]
        +            },
        +            "text": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      },
        +      "declined": {
        +        "type": "boolean"
        +      },
        +      "markdown": {
        +        "type": "string"
        +      },
        +      "places": {
        +        "items": {
        +          "properties": {
        +            "address": {
        +              "type": "string"
        +            },
        +            "category": {
        +              "type": "string"
        +            },
        +            "description": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "priceLevel": {
        +              "type": "string"
        +            },
        +            "rating": {
        +              "type": "number"
        +            },
        +            "reviews": {
        +              "type": "integer"
        +            },
        +            "status": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      },
        +      "products": {
        +        "items": {
        +          "properties": {
        +            "merchant": {
        +              "type": "string"
        +            },
        +            "moreSellers": {
        +              "type": "boolean"
        +            },
        +            "oldPrice": {
        +              "type": "string"
        +            },
        +            "price": {
        +              "type": "string"
        +            },
        +            "productId": {
        +              "type": "string"
        +            },
        +            "rating": {
        +              "type": "number"
        +            },
        +            "reviews": {
        +              "type": "integer"
        +            },
        +            "thumbnail": {
        +              "type": "string"
        +            },
        +            "title": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "title"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      },
        +      "question": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "items": {
        +          "properties": {
        +            "snippet": {
        +              "type": "string"
        +            },
        +            "source": {
        +              "type": "string"
        +            },
        +            "title": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      },
        +      "text": {
        +        "type": "string"
        +      },
        +      "topic": {
        +        "type": "string"
        +      },
        +      "videos": {
        +        "items": {
        +          "properties": {
        +            "channel": {
        +              "type": "string"
        +            },
        +            "duration": {
        +              "type": "string"
        +            },
        +            "thumbnail": {
        +              "type": "string"
        +            },
        +            "title": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "title"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "text",
        +      "sources"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / paging
        Added value: +{
        +  "description": "How a searchCount request was filled: pages that answered (each billed as one search); stoppedBy, why paging stopped (search_count, end_of_results, page_cap, page_failed or deadline); and complete, false only for page_failed and deadline, when results holds what was collected. Absent unless searchCount was sent.",
        +  "properties": {
        +    "complete": {
        +      "type": "boolean"
        +    },
        +    "pages": {
        +      "type": "integer"
        +    },
        +    "stoppedBy": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "pages",
        +    "complete"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / peopleAlsoAsk
        Added value: +{
        +  "description": "Questions from the People also ask block; answers are not on the page.",
        +  "items": {
        +    "properties": {
        +      "question": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "question"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / places
        Added value: +{
        +  "description": "Business listings from a local pack.",
        +  "items": {
        +    "properties": {
        +      "address": {
        +        "type": "string"
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "hours": {
        +        "type": "string"
        +      },
        +      "mapsUrl": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "phone": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "rating": {
        +        "type": "number"
        +      },
        +      "reviews": {
        +        "type": "integer"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "name"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / products
        Added value: +{
        +  "description": "Only with searchType shopping: the product cards, each with title, productId, price, originalPrice, merchant, moreMerchants, delivery, returns, rating and reviews; no url.",
        +  "items": {
        +    "properties": {
        +      "delivery": {
        +        "type": "string"
        +      },
        +      "merchant": {
        +        "type": "string"
        +      },
        +      "moreMerchants": {
        +        "type": "boolean"
        +      },
        +      "originalPrice": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "price": {
        +        "type": "string"
        +      },
        +      "productId": {
        +        "type": "string"
        +      },
        +      "rating": {
        +        "type": "number"
        +      },
        +      "returns": {
        +        "type": "string"
        +      },
        +      "reviews": {
        +        "type": "integer"
        +      },
        +      "title": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / relatedSearches
        Added value: +{
        +  "description": "Query strings from the Related searches block.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / results / description
        Added value: +"Ranked web documents, in engine order. Empty when the page carried no documents, and on a format raw search, which answers html instead."
      • removedOutput schema / properties / results / items / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / results / items / properties / book
        Added value: +{
        +  "properties": {
        +    "authors": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": [
        +        "null",
        +        "array"
        +      ]
        +    },
        +    "published": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / displayText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / rank
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / items / properties / source
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / video
        Added value: +{
        +  "properties": {
        +    "channel": {
        +      "type": "string"
        +    },
        +    "duration": {
        +      "type": "string"
        +    },
        +    "platform": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "position",
        -  "title",
        -  "url",
        -  "snippet",
        -  "displayUrl"
        -]New value: +[
        +  "position",
        +  "title",
        +  "snippet",
        +  "displayUrl"
        +]
      • addedOutput schema / properties / shortVideos
        Added value: +{
        +  "description": "Entries of the Short videos block.",
        +  "items": {
        +    "properties": {
        +      "channel": {
        +        "type": "string"
        +      },
        +      "date": {
        +        "type": "string"
        +      },
        +      "duration": {
        +        "type": "string"
        +      },
        +      "platform": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / sitelinks
        Added value: +{
        +  "description": "Sub-pages listed under a navigational result.",
        +  "items": {
        +    "properties": {
        +      "description": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "resultPosition": {
        +        "type": "integer"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "resultPosition",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / spelling
        Added value: +{
        +  "description": "Google's correction of the query: substituted when results are for the corrected query, suggested when they are for the query as typed.",
        +  "properties": {
        +    "asked": {
        +      "type": "string"
        +    },
        +    "kind": {
        +      "type": "string"
        +    },
        +    "query": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "kind",
        +    "query"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
      • addedOutput schema / properties / videos
        Added value: +{
        +  "description": "Entries of the Videos block.",
        +  "items": {
        +    "properties": {
        +      "channel": {
        +        "type": "string"
        +      },
        +      "date": {
        +        "type": "string"
        +      },
        +      "duration": {
        +        "type": "string"
        +      },
        +      "platform": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "integer"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / zeroResults
        Added value: +{
        +  "description": "True when the engine itself reported that nothing matched the query; broaden it rather than retry.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results"
        -]New value: +[
        +  "results",
        +  "zeroResults"
        +]
    • Changedweb_access_sitemap11 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"results/list only: page size. results default 1000 (max 5000); list default 20 (max 100)."New value: +"results/list only: page size. results 1-5000 (default 1000); list 1-100 (default 20). 0 or any value outside the range is rejected."
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / maxDepth / description
        Previous value: -"submit only: maximum link depth from the start URL, 1-100 (server default 2)."New value: +"submit only: maximum link depth from the start URL, 1-100 (server default 2 when omitted; 0 or any value outside the range is rejected)."
      • changedInput schema / properties / maxDepth / type
        Previous value: -"integer"New value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / maxPages / description
        Previous value: -"submit only: maximum pages to fetch, 1-10000 (server default 10). Each fetched page is billed."New value: +"submit only: maximum pages to fetch, 1-10000 (server default 10 when omitted; 0 or any value outside the range is rejected). Each fetched page is billed."
      • changedInput schema / properties / maxPages / type
        Previous value: -"integer"New value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / offset / description
        Previous value: -"results/list only: number of rows to skip for pagination."New value: +"results/list only: number of rows to skip for pagination (0 or more)."
      • changedInput schema / properties / offset / type
        Previous value: -"integer"New value: +[
        +  "null",
        +  "integer"
        +]
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / jobs / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / urls / items / additionalProperties
        Removed value: -false
  2. 1 tool update
    • Changedweb_access_fetch5 fields changed
      • addedInput schema / properties / actions
        Added value: +{
        +  "description": "Browser actions to run in order before the page is captured, for content that only appears after interaction. Max 50, at most one screenshot. Not combinable with method, body, headers, or format 'raw'.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "all": {
        +        "description": "click: click every element matching the selector instead of the first.",
        +        "type": [
        +          "null",
        +          "boolean"
        +        ]
        +      },
        +      "amount": {
        +        "description": "scroll: distance in pixels.",
        +        "type": [
        +          "null",
        +          "integer"
        +        ]
        +      },
        +      "direction": {
        +        "description": "scroll: up, down, left, or right.",
        +        "type": "string"
        +      },
        +      "full_page": {
        +        "description": "screenshot: capture the whole scrollable page rather than the viewport.",
        +        "type": [
        +          "null",
        +          "boolean"
        +        ]
        +      },
        +      "key": {
        +        "description": "press: the key to press, e.g. 'Enter'.",
        +        "type": "string"
        +      },
        +      "milliseconds": {
        +        "description": "wait: pause this many milliseconds (max 30000). Prefer waiting on a selector.",
        +        "type": [
        +          "null",
        +          "integer"
        +        ]
        +      },
        +      "quality": {
        +        "description": "screenshot: JPEG quality, 1-100.",
        +        "type": [
        +          "null",
        +          "integer"
        +        ]
        +      },
        +      "selector": {
        +        "description": "CSS selector. Required for click, hover and selectOption; on wait it waits for the element to appear; on scroll it scrolls that element instead of the page.",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "write: the text to type into the focused element.",
        +        "type": "string"
        +      },
        +      "timeout": {
        +        "description": "wait with a selector: give up after this many milliseconds (max 30000).",
        +        "type": [
        +          "null",
        +          "integer"
        +        ]
        +      },
        +      "type": {
        +        "description": "The action to run: wait, click, write, press, scroll, screenshot, navigate, hover, or selectOption.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "navigate: the URL to go to, carrying the session's cookies and state.",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "selectOption: the option value to select, or an array of them for a multi-select."
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / error
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / failedActionIndex
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
      • addedOutput schema / properties / finalUrl
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / screenshot
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "base64": {
        +      "type": "string"
        +    },
        +    "format": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "format",
        +    "base64"
        +  ],
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
  3. 3 tool updates
    • First observedweb_access_fetch
    • First observedweb_access_search
    • First observedweb_access_sitemap

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.