About webfetch
webfetch is an MCP server for agents that search for and download images while surfacing license and attribution details. It combines federated search across providers with URL license checks, page inspection, and batch processing.
Key features
- 01Federated image search across 25 providers
- 02License labels and confidence scores
- 03Attribution lines for results
- 04Download with SHA-256 hash
- 05URL license checks and page inspection
- 06Reverse image search and CLI batches
Use cases
- 01Find reusable images with license details
- 02Check a URL’s license before using an image
- 03Inspect image sources on a webpage
- 04Process many image queries through the CLI
MCP support
The MCP server exposes seven tools for image search, specialist artist and album-cover searches, downloads, license resolution, reverse image search, and webpage inspection.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y getwebfetch-mcpUNSPLASH_ACCESS_KEYSecretOptional Unsplash API key for Unsplash provider results.PEXELS_API_KEYSecretOptional Pexels API key for Pexels provider results.PIXABAY_API_KEYSecretOptional Pixabay API key for Pixabay provider results.BRAVE_API_KEYSecretOptional Brave Search API key for Brave image search results.SERPAPI_KEYSecretOptional SerpApi key for Google Images results.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
7Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | Yes | What to search for (e.g., 'Drake musician portrait') |
| minWidth | integer | No | |
| minHeight | integer | No | |
| providers | array | No | |
| timeoutMs | integer | No | |
| safeSearch | enum | No | strict | moderate | off |
| licensePolicy | enum | No | open-only | safe-only | context-safe | prefer-safe | any |
| maxPerProvider | integer | No |
Details
From the project READMEwebfetch MCP
License-first image search and download for any MCP-speaking agent.
Every result ships with a structured license tag (CC0, CC_BY, CC_BY_SA, platform-license tags, EDITORIAL_LICENSED, ...), a confidence score, and a ready-to-render attribution line. Covers 25 providers, with 19 in the default set — no API key needed for Wikimedia Commons, Openverse, iTunes, MusicBrainz CAA, NASA, The Met, Library of Congress, Internet Archive, Wellcome Collection, and Burst.
Why webfetch MCP?
Most image-search tools give you URLs. webfetch gives you URLs plus the legal metadata needed to classify them as open/commercial reusable, platform-license, editorial-only, or exploration-only. The MCP layer exposes seven composable tools — search, specialize by artist/album, download with a hash, resolve an arbitrary URL's license, reverse-image-search, and triage a source page — so an agent can go from prompt to attributed asset in a single conversation turn.
- 25 providers, 19 in the default set and many requiring no key at all
- License-first ranking: CC0 floats to the top; heuristic-only results stay below 0.5 confidence
- Attribution always included: one
attributionLinestring, ready for a tooltip or credits footer - Free tier needs no API key for Wikimedia and Openverse; full provider coverage adds optional keys per provider
Install
One-line (recommended)
curl -fsSL https://raw.githubusercontent.com/ashlrai/webfetch/main/install/install.sh | bash
Installs bun if missing, builds the server, symlinks webfetch onto $PATH, and merges the MCP block into ~/.claude/settings.json.
Claude Desktop / Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"webfetch": {
"command": "bun",
"args": ["run", "/path/to/webfetch/packages/mcp/src/index.ts"]
}
}
}
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"webfetch": {
"command": "bun",
"args": ["run", "/path/to/webfetch/packages/mcp/src/index.ts"]
}
}
}
Cline
Paste into Cline's MCP settings JSON (VSCode sidebar → Cline → MCP Servers):
{
"mcpServers": {
"webfetch": {
"command": "bun",
"args": ["run", "/path/to/webfetch/packages/mcp/src/index.ts"],
"disabled": false,
"autoApprove": ["search_images", "search_artist_images", "search_album_cover", "probe_page"]
}
}
}
Replace /path/to/webfetch with your clone path (default after installer: ~/.webfetch/repo).
Tools
| Tool | Description | Key params |
|---|---|---|
search_images | Federated search across 25 providers. Returns the top candidates with license + attribution. Does not download. For large batches, use CLI handoff: webfetch batch --jsonl. | query, providers[], licensePolicy, minWidth, minHeight |
search_artist_images | Specialized artist image search with kind-aware provider routing: portrait, album, logo, performing. | artist, kind, providers[] |
search_album_cover | Canonical album artwork via MusicBrainz CAA + iTunes + Spotify. Results are EDITORIAL_LICENSED. | artist, album |
download_image | Download a URL to local disk cache. 20 MB cap, content-type guard, SHA-256 hash, host blocklist enforced. | url, maxBytes, cacheDir |
fetch_with_license | Resolve license for any URL via host heuristics + page metadata (<link rel=license>, dc.rights, OG tags). | url, probe (also download bytes) |
find_similar | Reverse-image-search a reference URL. Requires SERPAPI_KEY. Returns leads — verify before shipping. | url, providers[] |
probe_page | Enumerate every <img> on a webpage with inferred dimensions and per-image heuristic license. Respects robots.txt. | url, respectRobots |
License tags
Results carry one of: CC0 · PUBLIC_DOMAIN · CC_BY · CC_BY_SA · UNSPLASH_LICENSE · PEXELS_LICENSE · PIXABAY_LICENSE · EDITORIAL_LICENSED · PRESS_KIT_ALLOWLIST · UNKNOWN (rejected by default). Use open-only when platform/editorial licenses are not acceptable.
Migration note: Unsplash, Pexels, and Pixabay are no longer reported as CC0.
Agents should treat UNSPLASH_LICENSE, PEXELS_LICENSE, and
PIXABAY_LICENSE as platform-license results, not Creative Commons/public
domain results.
Batch handoff
MCP tools are meant for interactive agent calls. For hundreds or thousands of queries, have the agent hand off to the CLI:
webfetch batch --file queries.txt --jsonl --continue-on-error --candidates 3
Input lines are query or query<TAB>provider-a,provider-b. Each output line
contains index, query, status, candidateCount, candidates, top,
downloads, and provider diagnostics.
Auth / env vars
| Provider | Env var | Free tier? |
|---|---|---|
| Wikimedia Commons | — | Yes (no key) |
| Openverse | — | Yes (no key) |
| Unsplash | UNSPLASH_ACCESS_KEY | Demo key rate-limited |
| Pexels | PEXELS_API_KEY | Free tier available |
| Pixabay | PIXABAY_API_KEY | Free tier available |
| Spotify | SPOTIFY_CLIENT_ID + SPOTIFY_CLIENT_SECRET | Dev app required |
| Brave Search | BRAVE_API_KEY | Free tier available |
| SerpApi | SERPAPI_KEY | Required for find_similar |
| Bright Data managed browser | BRIGHTDATA_API_TOKEN | Optional server/cloud fallback |
MusicBrainz CAA and iTunes require no key. Missing keys cause the provider to skip gracefully — other providers still respond.
Demo prompts
Try these in Claude Code or Cursor after installing:
Find me a CC-licensed portrait of Miles Davis I can use on an album liner page.
Search for album artwork for "Kind of Blue" by Miles Davis and show me the attribution line.
Probe the page at https://commons.wikimedia.org/wiki/File:Miles_Davis.jpg and tell me if I can use it commercially.
Requirements
- Node ≥ 18 or Bun ≥ 1.0
- No API key required for basic use (Wikimedia + Openverse cover most editorial needs)
Links
- Landing site + docs: getwebfetch.com
- One-line install guide: docs/QUICKSTART.md
- Provider coverage matrix: docs/PROVIDERS.md
- License policy details: docs/LICENSE_POLICY.md
- Per-agent install guides: Claude Code · Cursor · Cline
- Issues: github.com/ashlrai/webfetch/issues
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.