Skip to main content
Glama
by garylab

google_search_news

Retrieve real-time Google News results using search queries customized by country, language, location, or time period. Integrate with Serper MCP Server for accurate, up-to-date web information.

Instructions

Search Google for results

Input Schema

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

Input Schema (JSON Schema)

{ "properties": { "gl": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The country to search in, e.g. us, uk, ca, au, etc.", "title": "Gl" }, "hl": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The language to search in, e.g. en, es, fr, de, etc.", "title": "Hl" }, "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The location to search in, e.g. San Francisco, CA, USA", "title": "Location" }, "num": { "default": 10, "description": "The number of results to return, max is 100", "maximum": 100, "title": "Num", "type": "integer" }, "page": { "anyOf": [ { "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": 1, "description": "The page number to return, first page is 1", "title": "Page" }, "q": { "description": "The query to search for", "title": "Q", "type": "string" }, "tbs": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The time period to search in, e.g. d, w, m, y", "title": "Tbs" } }, "required": [ "q" ], "title": "SearchRequest", "type": "object" }

Implementation Reference

  • Handler function that executes the google_search_news tool by deriving the API endpoint 'news' from the tool name and delegating to fetch_json for the API call.
    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)
  • Supporting HTTP client function that sends the POST request to the Serper Google News API with the validated request payload.
    async def fetch_json(url: str, request: BaseModel) -> Dict[str, Any]: payload = request.model_dump(exclude_none=True) headers = { 'X-API-KEY': SERPER_API_KEY, 'Content-Type': 'application/json' } ssl_context = ssl.create_default_context(cafile=certifi.where()) connector = aiohttp.TCPConnector(ssl=ssl_context) timeout = aiohttp.ClientTimeout(total=AIOHTTP_TIMEOUT) async with aiohttp.ClientSession(connector=connector, timeout=timeout) as session: async with session.post(url, headers=headers, json=payload) as response: response.raise_for_status() return await response.json()
  • Pydantic model for input schema of google_search_news (extends BaseRequest with common fields like q, gl, location, hl, page).
    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)", )
  • Dictionary mapping tool names to schema classes, used for tool registration and request validation. Includes GOOGLE_SEARCH_NEWS: 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, }
  • MCP server list_tools handler that registers 'google_search_news' with its schema and description.
    @server.list_tools() async def list_tools() -> List[Tool]: tools = [] for k, v in google_request_map.items(): tools.append( Tool( name=k.value, description="Search Google for results", inputSchema=v.model_json_schema(), ), ) tools.append(Tool( name=SerperTools.WEBPAGE_SCRAPE, description="Scrape webpage by url", inputSchema=WebpageRequest.model_json_schema(), )) return 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