Your Mac screenshots folder is a disaster. This fixes it โ with vision, embeddings, and semantic search.
Project description
๐ง snapsearch
Your Mac screenshots folder is a disaster. This fixes it โ with vision, embeddings, and semantic search.
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.
How it works
screenshot.png
โ
โผ
GPT-4o vision "React error about invalid hook call in App.js, line 23"
โ
โผ
text-embedding-3-small [0.021, -0.847, 0.334, ...]
โ
โผ
ChromaDB (local) stored permanently on disk
โ
โผ
search("hooks problem") โ finds it, even with a garbage filename
The result
~/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)
โ
โ MCPServerStdio
โผ
snapsearch-mcp (MCP server โ 8 tools)
โโโ vision.py GPT-4o vision โ structured description
โโโ embeddings.py OpenAI embeddings + ChromaDB
โโโ models.py Pydantic data models
Why MCP and not just a script?
A script renames blindly. This agent:
- Understands context across a conversation
- Lets you say "actually split design into figma vs other" and re-organizes
- Finds screenshots by meaning: "that slack message about the deploy" works
- Remembers decisions across sessions (ChromaDB persists to
~/.snapsearch/)
Setup (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
You can trigger the autonomous organizer right away:
# Full auto-organize (scan โ vision โ embed โ move โ rename)
uvx snapsearch
# Semantic search
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
uvx snapsearch --stats
MCP Tools
| Tool | What it does |
|---|---|
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-..."
}
}
}
}
Where data lives
| What | Where |
|---|---|
| ChromaDB index | ~/.snapsearch/chroma/ |
| Your screenshots | wherever SCREENSHOTS_DIR points |
| Nothing else | nothing is uploaded anywhere |
Stack
- MCP server โ
mcpPython 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snapsearch_mcp-0.1.0.tar.gz.
File metadata
- Download URL: snapsearch_mcp-0.1.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30230ae9dc7ef0cbdd004c4ce1d2422ebce88db9999152d28d7705e65f2ccc16
|
|
| MD5 |
27a95f72cc62a24d4abe079b90e94d51
|
|
| BLAKE2b-256 |
9701fbe43c1e0a9c3fcbd0c4f9b3f254523d281349e130d5e847e31a9f94fcc9
|
File details
Details for the file snapsearch_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: snapsearch_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f4718960459cc56b9eb5bec0fe1366392a84170ebdbd8306c692004ab81c376
|
|
| MD5 |
a1df7c486b798b02fca60c3dce763b90
|
|
| BLAKE2b-256 |
74953be5ccdaca849d29900b6c88b5f8e544ed0270118859d95fb18206b25d2b
|