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 the JSON block into your client's configuration file under mcpServers, then restart the application.
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:
Factual signals from GitHub, npm, and our automated checks β not a rating.
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/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>