Skip to main content
Glama

Search Google

serp_google_search
Read-only

Search Google and return structured JSON results for web, images, news, maps, places, or videos. Filter by country, language, time range, and pagination.

Instructions

Search Google and get structured results using the SERP API.

Performs a Google search and returns the complete JSON response from the API,
preserving all available fields and data.

Args:
    query: The search query string. Required.
    search_type: Type of search to perform. Options:
        - "search": Regular web search (default)
        - "images": Image search
        - "news": News articles
        - "maps": Map results
        - "places": Local business/place results
        - "videos": Video results
    country: Country code for localized results (e.g., "us", "cn", "uk").
        Default is "us".
    language: Language code for results (e.g., "en", "zh-cn", "fr").
        Default is "en".
    time_range: Time filter for results. Options:
        - "qdr:h": Past hour
        - "qdr:d": Past day
        - "qdr:w": Past week
        - "qdr:m": Past month
        - None: No time restriction (default)
    number: Number of results per page (default: 10).
        Note: More than 10 results may incur additional credits.
    page: Page number for pagination (default: 1).

Returns:
    Complete JSON response from the SERP API containing all available data.

Example:
    serp_google_search(query="artificial intelligence", search_type="news")

Input Schema

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1).
queryYesThe search query string. Required.
numberNoNumber of results per page (default: 10). Note: More than 10 results may incur additional credits.
countryNoCountry code for localized results (e.g., 'us', 'cn', 'uk'). Default is 'us'.
languageNoLanguage code for results (e.g., 'en', 'zh-cn', 'fr'). Default is 'en'.
image_sizeNoImage size filter. Only valid when search_type is 'images'. Options: large, medium, icon, 2mp, 4mp, 6mp, 8mp, 10mp, 12mp, 15mp, 20mp, 40mp, 70mp.
time_rangeNoTime filter for results. Options: 'h'/'qdr:h' (past hour), 'd'/'qdr:d' (past day), 'w'/'qdr:w' (past week), 'm'/'qdr:m' (past month), 'y'/'qdr:y' (past year), or None for no time restriction (default).
search_typeNoType of search to perform. Options: 'search' (regular web search, default), 'images' (image search), 'news' (news articles), 'maps' (map results), 'places' (local business/place results), 'videos' (video results).search

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv0.1.49
    • changedInput schema / properties / country / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 32,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / image_size
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "large",
      +        "medium",
      +        "icon",
      +        "2mp",
      +        "4mp",
      +        "6mp",
      +        "8mp",
      +        "10mp",
      +        "12mp",
      +        "15mp",
      +        "20mp",
      +        "40mp",
      +        "70mp"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Image size filter. Only valid when search_type is 'images'. Options: large, medium, icon, 2mp, 4mp, 6mp, 8mp, 10mp, 12mp, 15mp, 20mp, 40mp, 70mp.",
      +  "title": "Image Size"
      +}
    • changedInput schema / properties / language / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 32,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / number / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 100,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / page / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 100,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / query / maxLength
      Added value: +2048
    • addedInput schema / properties / query / minLength
      Added value: +1
    • addedInput schema / properties / query / pattern
      Added value: +".*\\S.*"
    • changedInput schema / properties / time_range / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "h",
      +      "d",
      +      "w",
      +      "m",
      +      "y",
      +      "qdr:h",
      +      "qdr:d",
      +      "qdr:w",
      +      "qdr:m",
      +      "qdr:y"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / time_range / description
      Previous value: -"Time filter for results. Options: 'qdr:h' (past hour), 'qdr:d' (past day), 'qdr:w' (past week), 'qdr:m' (past month), or None for no time restriction (default)."New value: +"Time filter for results. Options: 'h'/'qdr:h' (past hour), 'd'/'qdr:d' (past day), 'w'/'qdr:w' (past week), 'm'/'qdr:m' (past month), 'y'/'qdr:y' (past year), or None for no time restriction (default)."
  2. Addedv0.1.46
  3. Removedv0.1.45
  4. First observedv0.1.0

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint=false, and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: the credit-cost caveat on 'number' above 10 and the fact that the complete unfiltered JSON response is returned.

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

Conciseness3/5

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

The purpose statement is front-loaded and clear, but the Args section duplicates the schema descriptions nearly word-for-word, padding length without adding information. Given 100% schema coverage, that block does not earn its place.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, yet the description still notes the full JSON response is preserved. Combined with the enum options and defaults, an agent has enough to call it correctly; only the sibling-routing gap keeps this from a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema. The Args block largely restates those same descriptions verbatim and adds almost no new semantics, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Search Google and get structured results using the SERP API') and is unambiguous about what the tool does. However, it never distinguishes itself from the many overlapping siblings like serp_google_news, serp_google_images, serp_google_places, and serp_google_maps, which it partially duplicates via its own search_type enum.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all. Critically, the search_type enum ('news', 'images', 'maps', 'places', 'videos') overlaps directly with dedicated sibling tools, and the description offers no rule for choosing between them. An agent is left to guess whether to call serp_google_search(search_type='news') or serp_google_news.

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