Search and download stock images from Unsplash, Pexels, Pixabay, Freepik, StockVault, and Burst
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
An MCP server that lets Claude Code (or any MCP-compatible agent) search and download stock images by tool call β useful for sourcing images while writing SEO blog posts or other content.
| Provider | API type | Requires key | Default rate limit |
|---|---|---|---|
| Unsplash | Official | Yes | 50/hr demo, 5000/hr production |
| Pexels | Official | Yes | 200/hr |
| Pixabay | Official | Yes | 100 req/60s |
| Freepik | Official | Yes | configurable (plan-dependent) |
| StockVault | Official | Yes | configurable (undocumented, conservative default) |
| Burst (Shopify) | Unofficial scrape | No | self-imposed, polite default |
Burst has no public API. It's included as a best-effort HTML scraper, clearly
marked unsupported in code β any failure there is caught and reported as an
empty result rather than breaking search_all_images.
Each user runs the server locally and supplies their own provider API keys β there's no shared hosting or centrally-held keys.
With Claude Code:
With OpenAI Codex CLI:
With Gemini CLI:
Or add it to your MCP config manually with uvx
(no clone or install step required β uvx fetches the package from PyPI on
first run):
Only UNSPLASH_ACCESS_KEY, PEXELS_API_KEY, PIXABAY_API_KEY,
FREEPIK_API_KEY, and STOCKVAULT_API_KEY are actual secrets β set only the
ones for providers you want enabled and drop the rest; any provider key you
omit is simply skipped by search_all_images and rejected if queried
directly via search_stock_images. The remaining variables are optional
tuning knobs shown above with their defaults β see .env.example for the
full list.
search_stock_images(query, provider="default", orientation=None, per_page=10, page=1)search_all_images(query, orientation=None, per_page=5) β fans out to every configured provider concurrentlyget_best_image(query, provider="default")download_image(url, dest_path, provider=None) β saves locally, returns attribution text if the image came from a prior searchget_attribution(provider, image_id)get_rate_limit_status(provider=None)You don't call these tools directly β you just talk to your agent, and it decides when to reach for one based on what you asked and the tool descriptions above. A few things worth knowing:
search_all_images (or
search_stock_images if you name a provider). "Download that first
Unsplash result to ./images/hero.jpg" triggers download_image. "How
many Pexels requests do I have left this hour?" triggers
get_rate_limit_status.search_stock_images needs a specific provider (or "default");
search_all_images just queries everything you've configured keys for and
merges the results. Say "search Pexels only" or similar if you care which
one gets used.download_image returns
the attribution text alongside the file when it applies β it's on you to
paste it wherever the image ends up, the server won't do that part for you.Working from a clone instead of the published package:
Point your Claude config at the local checkout instead of uvx:
To try it against real providers, use the MCP Inspector:
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/stock-image-mcp)<a href="https://allmcps.com/mcp/stock-image-mcp"><img src="https://allmcps.com/api/badge/stock-image-mcp?style=directory" alt="Stock Image MCP on AllMCPs" /></a>