<?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: sharan babu paramasivam murugesan</title>
    <description>The latest articles on DEV Community by sharan babu paramasivam murugesan (@sharan_babuparamasivamm).</description>
    <link>https://dev.to/sharan_babuparamasivamm</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3598220%2Fa209f984-b2e6-43ec-992a-a4a316fa611d.jpeg</url>
      <title>DEV Community: sharan babu paramasivam murugesan</title>
      <link>https://dev.to/sharan_babuparamasivamm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sharan_babuparamasivamm"/>
    <language>en</language>
    <item>
      <title>Drowning in Photos? Let a VS Code AI Agent Organize Them for You (No Coding Needed)</title>
      <dc:creator>sharan babu paramasivam murugesan</dc:creator>
      <pubDate>Tue, 18 Nov 2025 05:48:19 +0000</pubDate>
      <link>https://dev.to/sharan_babuparamasivamm/drowning-in-photos-let-a-vs-code-ai-agent-organize-them-for-you-no-coding-needed-5ab8</link>
      <guid>https://dev.to/sharan_babuparamasivamm/drowning-in-photos-let-a-vs-code-ai-agent-organize-them-for-you-no-coding-needed-5ab8</guid>
      <description>&lt;p&gt;I have always enjoyed taking photos but like most people today, I am drowning in them. Unlike the good ol’ days where you had a roll of 24 or 36 shots and had to make each one count, nowadays a single trip leaves me with hundreds of images across my phone, camera, and cloud shares from friends. The real challenge isn’t taking photos anymore, but curating and organizing them.&lt;/p&gt;

&lt;p&gt;Sure, you could upload everything into your favorite cloud storage provider and ask their built-in AI service to organize them for you. But why send terabytes over the wire (and hope some cloud AI doesn’t mislabel your dog as a toaster) when you can run the whole workflow locally? If you’re in the same boat as me, follow along and I’ll show you how I built a &lt;strong&gt;local-only Photo Organizer Agent&lt;/strong&gt; using an LLM, custom MCP servers, and a bit of VS Code magic.&lt;/p&gt;

&lt;p&gt;Before we begin, let’s clearly define our goal. We want the agent to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run locally on your machine
&lt;/li&gt;
&lt;li&gt;Recursively read files from a folder
&lt;/li&gt;
&lt;li&gt;Read image metadata (EXIF)
&lt;/li&gt;
&lt;li&gt;Organize these images based on &lt;strong&gt;your&lt;/strong&gt; instructions
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pre-reqs
&lt;/h2&gt;

&lt;p&gt;You’ll need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;VS Code (latest) with GitHub Copilot&lt;/strong&gt; – supports custom agents + MCP
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js + npx&lt;/strong&gt; – download from &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A folder of photos&lt;/strong&gt; – I’ve downloaded all my photos from different sources into a single folder, e.g. &lt;code&gt;C:/Images&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Think like a human first: what tools do we need?
&lt;/h2&gt;

&lt;p&gt;Before we talk about agents, let’s pretend we’re doing this manually. If I had to organize a huge folder of photos by hand, I’d need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A way to browse and manipulate files&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A way to inspect what’s inside each photo&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our AI agent needs those exact same capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One tool for working with the filesystem
&lt;/li&gt;
&lt;li&gt;One tool for reading EXIF metadata
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the MCP world, these tools are implemented as &lt;strong&gt;MCP servers&lt;/strong&gt; that expose capabilities to the agent.&lt;/p&gt;

&lt;p&gt;So our plan is to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up a &lt;strong&gt;Filesystem MCP server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Set up an &lt;strong&gt;EXIF MCP server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create the agent that orchestrates both
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Set up the MCP tools (Filesystem + EXIF)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Add MCP configuration
&lt;/h3&gt;

&lt;p&gt;Create:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.vscode/mcp.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"filesystem"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"C:/Images"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"exif"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"C:/path/to/exif-mcp/dist/server.js"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Filesystem MCP&lt;/strong&gt; allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listing directories
&lt;/li&gt;
&lt;li&gt;Listing files
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stat&lt;/code&gt; operations
&lt;/li&gt;
&lt;li&gt;Move/copy/delete
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;EXIF MCP&lt;/strong&gt; allows reading EXIF metadata:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Date taken
&lt;/li&gt;
&lt;li&gt;GPS
&lt;/li&gt;
&lt;li&gt;Camera
&lt;/li&gt;
&lt;li&gt;Other metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2.2 Install and build the EXIF MCP server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/stass/exif-mcp
&lt;span class="nb"&gt;cd &lt;/span&gt;exif-mcp
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dist/server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use its full path in your &lt;code&gt;mcp.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You might be wondering: Why are we manually building the EXIF MCP server but not the filesystem server?&lt;br&gt;
That’s because the Filesystem MCP is officially published and already available on npm. So VS Code can run it directly using npx, no setup required. It’s a general purpose server that works out-of-box for most common file operations.&lt;/p&gt;

&lt;p&gt;The EXIF MCP server, however, is community developed and not published as a ready-made package. It needs to be cloned and built locally so that its logic for parsing EXIF metadata is available on your machine. Once built, VS Code treats both tools the same way but only the EXIF server requires a one-time local build step.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Create the Photo Organizer agent
&lt;/h2&gt;

&lt;p&gt;Create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/
  copilot/
    photo_organizer.agent.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Local agent to organize photos on filesystem using EXIF metadata.&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filesystem/*"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;exif/*"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
You are an expert photo organizing agent who can read and interpret EXIF metadata from image files. Your task is to help organize a large collection of photos stored on the local filesystem into a structured folder hierarchy based on the criteria provided by the user.

Rules:
&lt;span class="p"&gt;-&lt;/span&gt; Never send raw image bytes anywhere; only work with file paths and text metadata.
&lt;span class="p"&gt;-&lt;/span&gt; Always do a DRY RUN first:
&lt;span class="p"&gt;  *&lt;/span&gt; Propose a folder structure and show which files you plan to move.
&lt;span class="p"&gt;  *&lt;/span&gt; Wait for my confirmation before calling any move/delete operations but proceed with other read operations without my confirmation
&lt;span class="p"&gt;-&lt;/span&gt; Prefer non-destructive actions unless I explicitly say "you can move files".
&lt;span class="p"&gt;-&lt;/span&gt; When grouping:
&lt;span class="p"&gt;  *&lt;/span&gt; Use EXIF date/time for year/month.
&lt;span class="p"&gt;  *&lt;/span&gt; Use EXIF GPS to infer location
&lt;span class="p"&gt;  *&lt;/span&gt; Keep logs of decisions in a summary at the end.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Start the MCP servers
&lt;/h2&gt;

&lt;p&gt;In VS Code, opening &lt;code&gt;mcp.json&lt;/code&gt; shows &lt;strong&gt;Start&lt;/strong&gt; buttons for each server. Click on start for both these servers and you should see them in &lt;strong&gt;Running&lt;/strong&gt; state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fveogfkpflze8ume9atmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fveogfkpflze8ume9atmi.png" alt=" " width="714" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also start them via the &lt;strong&gt;MCP Servers&lt;/strong&gt; extension view.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Start organizing!
&lt;/h2&gt;

&lt;p&gt;Open GitHub Copilot &lt;strong&gt;Chat&lt;/strong&gt; → select &lt;code&gt;photo_organizer&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Organize all my photos based on the date taken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scan all photos
&lt;/li&gt;
&lt;li&gt;Extract EXIF metadata&lt;/li&gt;
&lt;li&gt;Propose folder structure
&lt;/li&gt;
&lt;li&gt;Plan file moves
&lt;/li&gt;
&lt;li&gt;Wait for confirmation
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted my agent to organize my photos not just by date taken, but also by whether the image had been edited or not and here is the response &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvljvgh2oy4zds2l69hoz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvljvgh2oy4zds2l69hoz.png" alt=" " width="800" height="916"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Approve with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This looks good, you can now move the files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voila! Your gallery reorganizes itself (all locally).&lt;/p&gt;

&lt;p&gt;A great foundation for future enhancements like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local vision models (Ollama + LLaVA)
&lt;/li&gt;
&lt;li&gt;Organizing photos by visual content
&lt;/li&gt;
&lt;li&gt;Auto-tagging and smart albums
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy organizing!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>vscode</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
