Skip to main content
Glama
by garylab

google_search

Perform targeted Google searches to retrieve up-to-date web results using customizable parameters like location, language, and query terms via the Serper MCP Server.

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 implements the google_search tool (and other google_* tools) by constructing the Serper API endpoint URL from the tool name and delegating to fetch_json for the HTTP request.
    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)
  • Pydantic model defining the input schema/validation for the google_search 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 enums to their corresponding input schema classes, used in tool registration to associate 'google_search' with 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 method that lists/registers the tools, including 'google_search' by using its name from enum and schema from the map.
    @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
  • Helper function that performs the actual HTTP POST request to the Serper API, used by the google handler.
    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()

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