loading…
Search for a command to run...
loading…
Enables AI agents to control Adobe Lightroom Classic on macOS for professional photo editing and catalog management. It allows users to inspect photos, apply de
Enables AI agents to control Adobe Lightroom Classic on macOS for professional photo editing and catalog management. It allows users to inspect photos, apply develop settings, and automate workflows through a secure local bridge without direct catalog database manipulation.

Agentic professional photo editing for Adobe Lightroom Classic on macOS.
This project combines a Lightroom Classic plugin bundle and a Python MCP server so Codex, Claude, and other MCP clients can operate Lightroom through Lightroom itself. The goal is simple: expose serious editing and catalog workflows without touching the catalog database directly.
This project is not affiliated with or endorsed by Adobe.
If you want to use this with Codex or Claude, start here:
git clone https://github.com/4xiomdev/lightroom-classic-mcp.git
cd lightroom-classic-mcp
./scripts/install_for_ai.sh --client both
That one command:
By default, the registered MCP command expects Lightroom to already be open. That avoids surprising app launches when Codex or Claude probes the server.
Homebrew install:
brew tap 4xiomdev/tap
brew install lightroom-classic-mcp
lightroom-classic-mcp-install --client both
If you prefer the old behavior where the MCP command opens Lightroom for you,
use --auto-launch during install.
Fast path:
./scripts/install_for_ai.sh --client codex
Manual Codex registration:
codex mcp add lightroom-classic -- bash -lc 'cd "/absolute/path/to/lightroom-classic-mcp" && ./scripts/start_managed_server.sh'
Fast path:
./scripts/install_for_ai.sh --client claude
Manual Claude registration:
claude mcp add -s local lightroom-classic -- bash -lc 'cd "/absolute/path/to/lightroom-classic-mcp" && ./scripts/start_managed_server.sh'
More detail: docs/CLIENT_SETUP.md
The MCP wrapper does not auto-open Lightroom by default.
That is intentional. During clean-install testing, automatic app launch turned out to be noisy and surprising, especially when clients probe MCP servers in the background.
Default behavior:
If you want the MCP wrapper to launch Lightroom for you, install with:
./scripts/install_for_ai.sh --client both --auto-launch
Lightroom Classic is still the center of a lot of real photo workflows, but it is hard to automate safely from external tools. This project gives an AI agent a controlled way to:
The key design choice is that Lightroom still performs the actual work. The Python side acts as a bridge and validation layer, not as a catalog editor.
This is meant to feel like a professional photo editing operator for Lightroom Classic:
The preferred workflow is:
New inspection tools:
get_active_photo_fileget_selected_photo_filesThese are read-only MCP tools that return Lightroom metadata plus a normalized inspection payload:
Inspect the active image before editing:
Use get_active_photo_file, inspect the image at the returned path, then tell me what edit you would make before changing anything in Lightroom.
Snapshot first, then make a targeted edit:
Use get_active_photo_file to inspect the active image, create a Lightroom snapshot, then lift the subject slightly without blowing out highlights.
Use export only for verification:
Inspect the active image from its original file path, make the edit in Lightroom, then export a verification JPEG so we can compare before and after.
Restore if needed:
If the edit is not an improvement, restore the most recent Lightroom snapshot instead of trying to manually undo each slider.
lightroom-classic-mcp is split into three parts:
plugin/LightroomMCPCustom.lrpluginsrc/lightroom_mcp_custom/When the plugin starts, it opens localhost sockets and writes bridge metadata
to /tmp/lightroom_mcp_custom_ports.json. The managed server launcher waits
for that handshake and then starts the MCP server over stdio.
More detail: docs/ARCHITECTURE.md
3.10+plugin/LightroomMCPCustom.lrplugin/ - Lightroom plugin bundlesrc/lightroom_mcp_custom/ - Python MCP server and bridge clientscripts/install_plugin.sh - installs the plugin bundle into Lightroom's plugin foldersscripts/start_managed_server.sh - recommended launcher for daily usescripts/run_server.sh - starts the MCP server directlyscripts/smoke_bridge.py - verifies local bridge connectivityscripts/print_mcp_config.sh - prints an MCP config snippet for the current checkout pathscripts/package_release.sh - builds source and plugin zip bundles in dist/If you downloaded a release zip instead of cloning the repo:
./scripts/install_for_ai.sh --client both.If you only want one client, use --client codex or --client claude.
git clone <your-repo-url>
cd lightroom-classic-mcp
./scripts/install_for_ai.sh --client both
File -> Plug-in Manager~/Library/Application Support/Adobe/Lightroom/Modules/LightroomMCPCustom.lrdevpluginPYTHONPATH=src python3 scripts/smoke_bridge.py
./scripts/print_mcp_config.sh
./scripts/start_managed_server.sh
The printed config from scripts/print_mcp_config.sh is the easiest way to
avoid path mistakes. The generated command uses your current absolute checkout
path and launches the managed server:
./scripts/start_managed_server.sh
That script:
The managed launcher is the reason this project behaves reliably on a normal local Lightroom setup:
That preserves the same startup model this project uses successfully in local development.
Optional environment variables:
LIGHTROOM_SKIP_INSTALL=1 skips plugin reinstallLIGHTROOM_AUTO_LAUNCH=1 opens Lightroom automatically when the managed server startsLIGHTROOM_FORCE_RESTART=1 force restarts Lightroom before launchLIGHTROOM_WAIT_SECONDS=180 changes the bridge wait timeoutLIGHTROOM_ROOT=/custom/path overrides the default Lightroom support directory during installLIGHTROOM_WRITE_PREFS=0 skips the automatic Lightroom plugin-loader preference updateLIGHTROOM_VENV_DIR=/custom/venv/path overrides the Python runtime locationLIGHTROOM_BOOTSTRAP_PYTHON=python3.12 chooses the Python executable used for venv creation.lrcat mutationUnit tests run with plain pytest.
Live integration tests require a running Lightroom bridge and are opt-in:
LIGHTROOM_RUN_INTEGRATION=1 pytest -q
Without that flag, the integration suite is skipped by default so CI and fresh contributors do not need Lightroom installed just to contribute.
To build release bundles:
./scripts/package_release.sh
That creates:
LightroomMCPCustom.lrpluginHomebrew release notes and packaging guidance live in docs/DISTRIBUTION.md.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"lightroom-classic-mcp": {
"command": "npx",
"args": []
}
}
}