Skip to main content
Glama
garylab

Serper MCP Server

by garylab

google_search_news

Search Google for news articles using specific queries, filters, and location parameters to retrieve current information from the web.

Instructions

Search Google for results

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qYesThe query to search for
glNoThe country to search in, e.g. us, uk, ca, au, etc.
locationNoThe location to search in, e.g. San Francisco, CA, USA
hlNoThe language to search in, e.g. en, es, fr, de, etc.
pageNoThe page number to return, first page is 1 (integer value as string)1
tbsNoThe time period to search in, e.g. d, w, m, y
numNoThe number of results to return, max is 100 (integer value as string)10

Implementation Reference

  • Core handler function for google_search_news: extracts 'news' from tool name, builds Serper API URL https://google.serper.dev/news, and fetches JSON response.
    async def google(tool: SerperTools, request: BaseModel) -> Dict[str, Any]:
        uri_path = tool.value.split("_")[-1]
        url = f"https://google.serper.dev/{uri_path}"
        return await fetch_json(url, request)
  • Dispatch logic in @server.call_tool() that handles google_search_news by parsing tool name to SerperTools enum, instantiating SearchRequest, calling google() handler, and formatting response.
    if not SerperTools.has_value(name):
        raise ValueError(f"Tool {name} not found")
    
    tool = SerperTools(name)
    request = google_request_map[tool](**arguments)
    result = await google(tool, request)
    return [TextContent(text=json.dumps(result, indent=2), type="text")]
  • Pydantic SearchRequest schema used for input validation of google_search_news tool.
    class SearchRequest(BaseRequest):
        tbs: Optional[str] = Field(
            None, description="The time period to search in, e.g. d, w, m, y"
        )
        num: str = Field(
            "10",
            pattern=r"^([1-9]|[1-9]\d|100)$",
            description="The number of results to return, max is 100 (integer value as string)",
        )
  • Mapping of tool names to input schemas; maps 'google_search_news' to SearchRequest.
    google_request_map = {
        SerperTools.GOOGLE_SEARCH: SearchRequest,
        SerperTools.GOOGLE_SEARCH_IMAGES: SearchRequest,
        SerperTools.GOOGLE_SEARCH_VIDEOS: SearchRequest,
        SerperTools.GOOGLE_SEARCH_PLACES: AutocorrectRequest,
        SerperTools.GOOGLE_SEARCH_MAPS: MapsRequest,
        SerperTools.GOOGLE_SEARCH_REVIEWS: ReviewsRequest,
        SerperTools.GOOGLE_SEARCH_NEWS: SearchRequest,
        SerperTools.GOOGLE_SEARCH_SHOPPING: ShoppingRequest,
        SerperTools.GOOGLE_SEARCH_LENS: LensRequest,
        SerperTools.GOOGLE_SEARCH_SCHOLAR: AutocorrectRequest,
        SerperTools.GOOGLE_SEARCH_PATENTS: PatentsRequest,
        SerperTools.GOOGLE_SEARCH_AUTOCOMPLETE: AutocorrectRequest,
    }
  • SerperTools enum defining the tool name 'google_search_news' and utility method has_value() used in dispatch.
    class SerperTools(StrEnum):
        GOOGLE_SEARCH = "google_search"
        GOOGLE_SEARCH_IMAGES = "google_search_images"
        GOOGLE_SEARCH_VIDEOS = "google_search_videos"
        GOOGLE_SEARCH_PLACES = "google_search_places"
        GOOGLE_SEARCH_MAPS = "google_search_maps"
        GOOGLE_SEARCH_REVIEWS = "google_search_reviews"
        GOOGLE_SEARCH_NEWS = "google_search_news"
        GOOGLE_SEARCH_SHOPPING = "google_search_shopping"
        GOOGLE_SEARCH_LENS = "google_search_lens"
        GOOGLE_SEARCH_SCHOLAR = "google_search_scholar"
        GOOGLE_SEARCH_PATENTS = "google_search_patents"
        GOOGLE_SEARCH_AUTOCOMPLETE = "google_search_autocomplete"
        WEBPAGE_SCRAPE = "webpage_scrape"
    
        @classmethod
        def has_value(cls, value: str) -> bool:
            return value in cls._value2member_map_
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but provides almost none. It doesn't mention what type of results are returned (news articles, headlines, sources), format of results, pagination behavior, rate limits, authentication requirements, or any other behavioral characteristics. The description is completely inadequate for a search tool with 7 parameters.

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 description is extremely concise at just 4 words. While this represents under-specification rather than ideal conciseness, according to the scoring framework, 'Process' (1 word) scored 2 for conciseness, so this slightly longer but still minimal description earns a higher score. Every word serves a purpose, though the purpose is insufficient.

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

Completeness1/5

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

For a search tool with 7 parameters, no annotations, no output schema, and 11 sibling tools requiring differentiation, the description is completely inadequate. It doesn't explain what makes this a 'news' search versus other Google search types, what results to expect, or any behavioral characteristics. The description fails to provide the minimal context needed for effective tool selection and use.

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 the schema already documents all 7 parameters thoroughly with good descriptions. The tool description adds no additional parameter information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.

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

Purpose2/5

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

The description 'Search Google for results' is tautological - it essentially restates the tool name 'google_search_news' without specifying what makes it unique. While it indicates a search function, it doesn't clarify that this is specifically for news results versus general web search or other Google search types. The name suggests news focus, but the description fails to explicitly state this purpose.

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

Usage Guidelines1/5

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

No guidance is provided about when to use this tool versus the 11 sibling tools listed, including 'google_search' (general search) and other specialized search types like images, videos, scholar, etc. The description gives no indication that this is specifically for news searches, nor does it mention any context where news search would be preferred over other search types.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/garylab/serper-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server