<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jean Pierre</title>
    <description>The latest articles on DEV Community by Jean Pierre (@jeanpfs).</description>
    <link>https://dev.to/jeanpfs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4194813%2Ff8e604d9-e875-49db-8b6d-9f16dbb14547.jpg</url>
      <title>DEV Community: Jean Pierre</title>
      <link>https://dev.to/jeanpfs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeanpfs"/>
    <language>en</language>
    <item>
      <title>An MCP server that lets Claude Code find and download stock photos</title>
      <dc:creator>Jean Pierre</dc:creator>
      <pubDate>Mon, 19 Oct 2026 19:33:36 +0000</pubDate>
      <link>https://dev.to/jeanpfs/an-mcp-server-that-lets-claude-code-find-and-download-stock-photos-5fof</link>
      <guid>https://dev.to/jeanpfs/an-mcp-server-that-lets-claude-code-find-and-download-stock-photos-5fof</guid>
      <description>&lt;p&gt;Coding agents can write a landing page, but the images are usually&lt;br&gt;
placeholders. stock-images-mcp is a small MCP server that lets the agent find&lt;br&gt;
real photos and save them into your project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjeanpfs%2Fstock-images-mcp%2Fmain%2Fassets%2Fdemo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjeanpfs%2Fstock-images-mcp%2Fmain%2Fassets%2Fdemo.gif" alt="Claude Code searching three stock photo providers and downloading the best match with its&lt;br&gt;
credit" width="760" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The server has two tools. &lt;code&gt;search_images&lt;/code&gt; queries Pexels, Unsplash and Pixabay,&lt;br&gt;
one provider or all of them, and returns each photo's description, size,&lt;br&gt;
photographer, photographer URL and download URL. &lt;code&gt;download_image&lt;/code&gt; saves the&lt;br&gt;
chosen photo into a folder in your project.&lt;/p&gt;

&lt;p&gt;In the demo I asked for three photos of a rainy city street at night and for&lt;br&gt;
the most atmospheric landscape one to be downloaded. The agent searched, picked&lt;br&gt;
one from the results, saved it into &lt;code&gt;downloads/&lt;/code&gt; and told me which credit to&lt;br&gt;
add. It chose from the descriptions and sizes in the search results. It did not&lt;br&gt;
look at the images.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;You need at least one free API key from Pexels, Unsplash or Pixabay. Add the&lt;br&gt;
server to your MCP config for Claude Code, Cursor or Claude Desktop:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "stock-images": {
      "command": "npx",
      "args": ["-y", "stock-images-mcp"],
      "env": { "PEXELS_API_KEY": "your-key-here" }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It needs Node.js 22 or newer, and there is a Docker image too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Letting an agent download files
&lt;/h2&gt;

&lt;p&gt;A download tool that an agent controls should be strict about what it accepts.&lt;br&gt;
It only takes &lt;code&gt;https&lt;/code&gt; URLs on pexels.com, unsplash.com and pixabay.com, and&lt;br&gt;
redirects can only go to those hosts. It saves only &lt;code&gt;image/*&lt;/code&gt; responses, with a&lt;br&gt;
50 MiB limit and a 30 second timeout. Paths that escape the download folder are&lt;br&gt;
rejected, symlinks included, and it never overwrites an existing file.&lt;/p&gt;

&lt;p&gt;If one provider fails, you still get results from the others, with a&lt;br&gt;
per-provider error list. For Unsplash downloads the tool calls their download&lt;br&gt;
endpoint, which their API guidelines require.&lt;/p&gt;

&lt;p&gt;The images stay under each provider's license. The search results include the&lt;br&gt;
photographer's name and URL so you can credit them where the license asks for it.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/jeanpfs/stock-images-mcp" rel="noopener noreferrer"&gt;https://github.com/jeanpfs/stock-images-mcp&lt;/a&gt;&lt;br&gt;
npm: &lt;a href="https://www.npmjs.com/package/stock-images-mcp" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/stock-images-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT licensed.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
