
Stock Image MCP
io.github.HasiltPublished by GitHub account Hasiltv0.1.6Updated Oct 24, 2026
Search and download stock images from Unsplash, Pexels, Pixabay, Freepik, StockVault, and Burst
Overview
A local MCP server that lets an assistant search and download stock images from Unsplash, Pexels, Pixabay, Freepik, StockVault and Burst.
- What you can do
- Search stock images on one named provider or fan out across every configured provider at once, with orientation and paging options and a best-image picker for a query. Download a chosen image to a local path and return the attribution text when the image came from an earlier search. Look up attribution details for a provider and image ID. Check remaining rate-limit status per provider.
- When to use it
- Useful when writing blog posts, SEO content or other material and you want the assistant to find and save real stock photos without leaving the conversation. Also handy when you need to compare results across several image providers or keep track of per-provider request limits.
- Requirements
- Runs locally via uvx from the PyPI package (Python/uv toolchain, fetched on first run). Each user supplies their own provider API keys as environment variables: UNSPLASH_ACCESS_KEY, PEXELS_API_KEY, PIXABAY_API_KEY, FREEPIK_API_KEY and STOCKVAULT_API_KEY; only the providers you configure are queried. Optional tuning variables include DEFAULT_PROVIDER and DOWNLOAD_DIR. Network access to the provider APIs is required.
Installation
In SourceWeft
- Open Stock Image MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
stock-image-mcp
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.
Providers
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.
Install
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.
Tools
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)
Usage
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:
- Just ask in plain English. "Find me 3 landscape photos of mountains for a
blog post" is enough to trigger
search_all_images(orsearch_stock_imagesif you name a provider). "Download that first Unsplash result to./images/hero.jpg" triggersdownload_image. "How many Pexels requests do I have left this hour?" triggersget_rate_limit_status. search_stock_imagesneeds a specific provider (or"default");search_all_imagesjust queries everything you've configured keys for and merges the results. Say "search Pexels only" or similar if you care which one gets used.- Several providers (Unsplash and Pexels in particular) require attribution
if you actually use the image somewhere public.
download_imagereturns 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. - Want to call tools by hand instead of through a conversation? See the MCP Inspector section under Development below.
Developing locally
Working from a clone instead of the published package:
Point your Claude config at the local checkout instead of uvx:
Development
To try it against real providers, use the MCP Inspector:
Source: README.md at commit 38b4ebf
Tools
0Version history
1- v0.1.6LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts