Skip to main content
snapsearch logo

snapsearch

Your Mac screenshots folder is a disaster. This fixes it — with vision, embeddings, and semantic search.

PyPI Version Python Versions License: MIT

An AI agent + custom MCP server that sees your screenshots, understands what's in them, organizes them into clean folders, and lets you find anything with natural language.

Fully local. No cloud uploads. No subscriptions.


✨ Features

  • Context-Aware Organization: Unlike scripts that blindly rename files, this agent understands context and categorizes intelligently.
  • Semantic Search: Find screenshots by meaning (e.g., "that slack message about the deploy"), even with garbage filenames.
  • Adaptive: Tell it to "actually split design into figma vs other" and it re-organizes on the fly.
  • Persistent Memory: Decisions are remembered across sessions using a local ChromaDB.

🚀 Quickstart (No Clone Needed!)

Using uvx (the modern Python alternative to npx), you can run snapsearch instantly without manual cloning or pip installs.

1. Set your Environment Variables

You need to provide your OpenAI API key and optionally your screenshots directory. You can set them in your environment:

export OPENAI_API_KEY="sk-..."
export SCREENSHOTS_DIR="/Users/yourname/Desktop" # Optional, defaults to ~/Desktop/screenshots-demo

2. Run the Agent

Trigger the autonomous organizer right away with these commands:

# Full auto-organize (scan → vision → embed → move → rename)
uvx snapsearch

# Semantic search queries
uvx snapsearch "find my react error screenshots"
uvx snapsearch "show me figma mockups from last month"
uvx snapsearch "that slack conversation about the deployment"

# Partial organize
uvx snapsearch "organize only the code screenshots"

# Index health check
uvx snapsearch --stats

🤖 How it works

Behind the scenes, snapsearch builds a powerful pipeline to understand your images:

  1. 🖼️ screenshot.png
  2. 👁️ GPT-4o vision → "React error about invalid hook call in App.js, line 23"
  3. 🔢 text-embedding-3-small → [0.021, -0.847, 0.334, ...]
  4. 💾 ChromaDB (local) → Stored permanently on disk
  5. 🔍 search("hooks problem") → Finds it instantly!

The Resulting Organization

Your chaotic screenshots folder turns into a clean, categorized structure:

  • 📂 ~/Screenshots/
    • 📁 code/
      • 📁 errors/
        • 📄 react-hooks-invalid-call.png
        • 📄 python-importerror-requests.png
      • 📁 snippets/
        • 📄 vim-config-lsp-setup.png
    • 📁 design/
      • 📁 figma/
        • 📄 darkmode-mobile-v3.png
      • 📁 other/
        • 📄 canva-instagram-post.png
    • 📁 chats/
      • 📄 whatsapp-trip-planning-march.png
    • 📁 docs/
      • 📄 notion-q2-sprint-board.png
    • 📁 memes/
      • 📄 drake-hotline-bling-coding.png
    • 📁 web/
      • 📄 vercel-deployment-dashboard.png

🛠️ Architecture

  • 🤖 snapsearch (Agent)
    • 🔌 Connects via MCPServerStdio to:
    • ⚙️ snapsearch-mcp (MCP server — 8 tools)
      • 👁️ vision.py — GPT-4o vision to structured descriptions
      • 🧠 embeddings.py — OpenAI embeddings & ChromaDB operations
      • 🧱 models.py — Pydantic data models

MCP Tools Available

Tool Description
scan_screenshots List all images + metadata
read_screenshot Return base64 image for direct visual inspection
describe_and_index Main tool — GPT-4o vision + ChromaDB embedding
search_screenshots Semantic search (meaning, not filenames)
move_screenshot Move to category subfolder, updates index
rename_screenshot Human-readable rename, updates index
list_categories Folder structure + counts
index_stats ChromaDB health check

🔌 Use in Claude Desktop (MCP server only)

Because it's distributed on PyPI, using it in Claude Desktop is extremely simple.

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "snapsearch": {
      "command": "uvx",
      "args": ["snapsearch-mcp"],
      "env": {
        "SCREENSHOTS_DIR": "/Users/yourname/Desktop",
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

🔒 Privacy & Data

Component Location
ChromaDB index ~/.snapsearch/chroma/
Your screenshots wherever SCREENSHOTS_DIR points
Cloud Uploads None. Nothing is uploaded anywhere.

🏗️ Stack

  • MCP server — mcp Python SDK v1.27+
  • Agent — OpenAI Agents SDK v0.17+
  • Vision — gpt-4o (low detail mode — fast + cheap)
  • Embeddings — text-embedding-3-small
  • Vector DB — ChromaDB (local, persistent)
  • Validation — Pydantic v2

📄 License

MIT

Metadata

Release files for snapsearch-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for snapsearch-mcp 0.1.1
File Size Uploaded Provenance
snapsearch_mcp-0.1.1.tar.gz 19.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for snapsearch-mcp 0.1.1
File Interpreter ABI Platform
snapsearch_mcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 40.9 kB

Release files / snapsearch_mcp-0.1.1.tar.gz

Download URL snapsearch_mcp-0.1.1.tar.gz
Size 19.0 kB
Tags Source
SHA-256 checksum
How to use checksums
530100bb7b6c3ca2fbdba5cb2db345996c68a0bfc9c6bb60133f0504f564d4ee
BLAKE2b-256 checksum
How to use checksums
dc46f2a15f9e640d1e802fc79a9128bb296240160b4d40090ebfa11226fa0edd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.4

Release files / snapsearch_mcp-0.1.1-py3-none-any.whl

Download URL snapsearch_mcp-0.1.1-py3-none-any.whl
Size 21.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f047479683b4e17e8747beb2e73086a70bc94a9c122372a726cdb6f6f5e98a3
BLAKE2b-256 checksum
How to use checksums
d47cc59d4ba0f79f8790554dcb6e5e8c4550b3481ab82877fdbcb8d827e892f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.4

Security for snapsearch-mcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page