Skip to main content
Glama
by garylab

google_search_images

Search Google for images using a query, specifying country, language, location, or time period. Retrieve results in bulk for data analysis or research purposes 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 constructs the specific Serper API endpoint for 'google_search_images' (https://google.serper.dev/images) based on the tool enum value and performs the API request via fetch_json.
    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)
  • Helper function that sends the POST request to the Serper API with the request payload and API key, returning the JSON response.
    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 schema for input validation of google_search_images tool, inheriting from BaseRequest (q, gl, location, hl, page). Defines additional fields tbs (time filter) and num (number of results). Used in registration.
    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 SerperTools enum values to their corresponding Pydantic request schemas. 'google_search_images' is mapped to SearchRequest for input parsing.
    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 list_tools handler that registers all Google search tools, including 'google_search_images', with name, generic description, and inputSchema from the mapped request class.
    @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