Google Images results with source pages, thumbnails and full-resolution URLs, as JSON.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf and any other MCP client one read-only Google Images tool. Run an image search with size, colour and type filters and get 100 results a call, each with the page it came from and the full-resolution file URL, as structured JSON, with nothing to host.
It reads the Google Images results page a signed-out visitor sees.
1,000 free credits every month, no card required, which is 200 Google Images calls at the 5-credit rate.
An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 200 calls a month at the 5-credit rate. This is a remote server, so the simplest path is a URL and an x-api-key header, with no container to run. A client that only speaks stdio reaches it through a thin launcher, published as @hasdata/google-images-mcp on npm and hasdata-google-images-mcp on PyPI, shown below.
The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.
| Field | Value |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_images |
| Transport | HTTP, streamable |
| Auth header | x-api-key: HASDATA_API_KEY |
Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.
Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=google_images and sign in.
For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/google-images-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:
For Python instead of Node, swap the launcher for the PyPI package, which uvx runs without a manual install:
~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:
~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:
.vscode/mcp.json in the workspace:
One call answers each of these, because a page carries 100 results. Paging is only needed past that.
| Tool | What it returns |
|---|---|
hasdata_google_images_images_getImageSearchResults | Each image with title, source page URL, direct image URL, thumbnail, dimensions, source domain, and position. 5 credits a call |
One tool, 5 credits per successful call.
hasdata_google_images_images_getImageSearchResults
One page of Google Images results.
| Parameter | Type | Required | Notes |
|---|---|---|---|
q | string | yes | The search term |
tbs | string | Google's filter string for size, colour and type. See below | |
location | string | Google canonical location for the search | |
uule | string | The encoded location, if you already have one | |
domain | string | Google domain, one of 195, defaults to google.com | |
gl | string | Country code, one of 245 | |
hl | string | Interface language, one of 159 | |
safe | string | active or off | |
filter | number | 1 keeps Google's similar and omitted result filters, 0 drops them | |
deviceType | string | desktop, mobile or tablet | |
ijn | number | Page number, where 0 is the first page |
Returns an imagesResults array. Each entry carries position, title, link to the page hosting the image, source as the site name, thumbnail on Google's CDN, original as the full-resolution file, and originalWidth and originalHeight.
The tbs parameter is Google's own filter string, and several filters combine with commas.
| Filter | Value |
|---|---|
| Large, medium or icon | isz:l, isz:m, isz:i |
| Larger than a size | isz:lt,islt:qsvga for 400Γ300, through islt:4mp for 2272Γ1704 |
| Exact size | isz:ex,iszw:1000,iszh:1000 |
| Full colour or black and white | ic:color, ic:gray |
| A specific colour | ic:specific,isc:red, and the other colour names |
| Type | itp:photo, itp:face, itp:clipart, itp:lineart, itp:animated |
Plan for these rather than assuming a happy path.
original is a third-party URL and it can be dead, hotlink-blocked or slow. It points at the file on whichever site hosts it, so it carries none of Google's availability. Fetch it defensively, and fall back to thumbnail, which is served from Google's CDN.
thumbnail is a Google CDN link, not an embedded image. It is a real URL rather than a data URI, so displaying one still costs a request to gstatic.com.
A page carries 100 results, not 10. Cost is per call rather than per result, so one call covering 100 images is the cheapest shape here. Reach for ijn only past the first hundred.
ijn starts at zero. Passing 1 gets the second page, not the first.
Dimensions describe the original, not the thumbnail. originalWidth and originalHeight are the file behind original, so a size filter applied locally has to read those rather than measure what you displayed.
tbs values are Google's, and an unrecognised one is ignored rather than rejected. A filter that silently does nothing looks the same as a filter that found everything, so check that the results actually narrowed before trusting a tbs string you assembled by hand.
domain, gl and hl are three separate axes. The domain is which Google answers, the country code is where the search comes from, and the language is the interface. Changing one moves the results less than you expect.
Results that carry data also carry a requestMetadata.id worth quoting in support.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/hasdata-google-images)<a href="https://allmcps.com/mcp/hasdata-google-images"><img src="https://allmcps.com/api/badge/hasdata-google-images?style=directory" alt="HasData Google Images on AllMCPs" /></a>