shutter-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shutter-mcpscan my photo library and generate a cull report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
shutter-mcp
English | Espanol

A local, read-only MCP server that lets AI agents inspect and analyze a photo library. Point Claude (or any MCP client) at a folder of RAW and JPEG files and ask it to scan the library, break down cameras and lenses, find duplicates, flag likely-blurry shots, or generate a cull report, all without a single byte leaving your machine.
Why this exists: photo culling tools that touch your shoots are either paid subscriptions or require uploading client work to someone else's cloud. shutter-mcp is neither. It runs entirely on your filesystem, reads metadata and pixels you already have locally, and returns text, not files. It is the read-only MVP and the first piece of a larger local-first photo culling project (see Roadmap).
Tools
Tool | Description | Read/write |
| Recursively count files under a root by extension, size, and mtime range | read-only |
| Aggregate EXIF stats across a library: camera, lens, focal length, ISO, year-month | read-only |
| Flattened EXIF fields for one file | read-only |
| Exact (sha256) or visual (perceptual hash) duplicate groups | read-only |
| Laplacian-variance blur ranking for jpg files | read-only |
| Markdown report combining all of the above | read-only |
Every tool is read-only. None of them write, move, rename, or delete a file.
Related MCP server: immich-mcp
Install
Requires Python 3.11+.
With uv (recommended):
uv tool install shutter-mcpWith pipx:
pipx install shutter-mcpFrom source, for development:
git clone https://github.com/keivanmalhani/shutter-mcp.git
cd shutter-mcp
uv venv
uv pip install -e ".[dev]"Usage
shutter-mcp takes one or more --root directories at launch. Every tool call is validated against this allowlist, so the server can only ever see the folders you explicitly grant it.
shutter-mcp --root /path/to/photos --root /path/to/scansClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"shutter-mcp": {
"command": "shutter-mcp",
"args": ["--root", "/Users/you/Pictures/2026-shoot"]
}
}
}Claude Code
claude mcp add shutter-mcp -- shutter-mcp --root /Users/you/Pictures/2026-shootSecurity model
Read-only. No tool writes, moves, renames, or deletes user files.
cull_reportreturns markdown text; it never writes a file.Root allowlist. The server only accepts
--rootdirectories at launch. Every path argument a tool receives is resolved (Path.resolve, symlinks included) and rejected if it falls outside every allowed root, even if a symlink inside the root points elsewhere.No network calls at runtime. Everything happens on your filesystem.
No image bytes returned. Tools return paths and metadata only, never base64 or raw pixel data.
No telemetry, no analytics.
Format support
Capability | Extensions |
EXIF read ( | jpg, jpeg, tif, tiff, png, dng, arw, raf, nef, cr2, cr3 (best effort on RAW) |
Pixel decode ( | jpg, jpeg, png, tiff |
RAW pixel decode (blur scoring and visual dedup on ARW/RAF/etc.) is out of scope for this MVP; EXIF reading works today on both. See Roadmap.
Development
uv pip install -e ".[dev]"
uv run pytestTests generate their own fixture images with Pillow at run time; no binary fixtures are committed to the repo.
Roadmap
RAW pixel decode (ARW, RAF, and friends) via rawpy, for blur scoring and visual dedup
XMP rating/flag writeback so cull decisions show up in Lightroom Classic
Integration as the agent interface for the local-first photo culling engine
Publish to PyPI and the MCP registry
Family
shutter-cull is the photo engine and shutter-select the video one. shutter-cull-mcp is the side that does write, with human confirmation and undo. This is the read-only one, and that guarantee is structural rather than a promise in the docs.
License
MIT, see LICENSE.
Este documento tambien esta en espanol, completo y no abreviado.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceThis MCP server aids users in searching and analyzing their photo library by location, labels, and people, offering functionalities like photo analysis and fuzzy matching for enhanced photo management.Last updated24MIT
- FlicenseAqualityDmaintenanceAn MCP server for Immich self-hosted photo management that provides AI-accessible tools for browsing, searching, organizing, and managing photo libraries with duplicate detection and safe deletion workflows.Last updated431
- AlicenseBqualityDmaintenanceAn MCP server that lets AI assistants read and visually analyze local documents — PDFs, Excel spreadsheets, CSV files, Word documents, PowerPoint presentations, and images.Last updated468MIT
- Alicense-qualityAmaintenanceLocal-first MCP server for safely searching, reading, summarizing, tagging, deduplicating, and organizing local files with scoped access, read-only defaults, and dry-run plans.Last updated14MIT
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Local-first RAG engine with MCP server for AI agent integration.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/keivanmalhani/shutter-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server