Lightroom Classic MCP Server

Local setup required. This server has to be cloned and prepared on your machine before you register it in Claude Code.
1

Set the server up locally

Run this once to clone and prepare the server before adding it to Claude Code.

Run in terminal
git clone https://github.com/4xiomdev/lightroom-classic-mcp
cd lightroom-classic-mcp

Then follow the repository README for any remaining dependency or build steps before continuing.

2

Register it in Claude Code

After the local setup is done, run this command to point Claude Code at the built server.

Run in terminal
claude mcp add lightroom-classic -- bash -lc "<FULL_PATH_TO_LIGHTROOM_CLASSIC_MCP>/dist/index.js"

Replace <FULL_PATH_TO_LIGHTROOM_CLASSIC_MCP>/dist/index.js with the actual folder you prepared in step 1.

README.md

Agentic professional photo editing for Adobe Lightroom Classic on macOS.

Lightroom Classic MCP

Lightroom Classic MCP banner

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.

Install In 2 Minutes

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:

  • installs the Lightroom plugin bundle
  • bootstraps the Python runtime
  • registers the MCP server with Codex
  • registers the MCP server with Claude

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.

Use With Codex

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'

Use With Claude

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

Launch Behavior

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:

  • open Lightroom yourself
  • then let Codex or Claude connect through MCP

If you want the MCP wrapper to launch Lightroom for you, install with:

./scripts/install_for_ai.sh --client both --auto-launch

Why This Exists

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:

  • inspect the current selection
  • read and write metadata
  • read and write Develop settings
  • apply grouped looks and presets
  • work with masks, collections, snapshots, exports, and virtual copies

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.

What This Feels Like

This is meant to feel like a professional photo editing operator for Lightroom Classic:

  • inspect selected photos and catalog state
  • inspect the original file directly from the Lightroom-provided path
  • apply structured edit changes safely
  • read and write Develop settings through Lightroom
  • automate repetitive editing workflows
  • stay local, deterministic, and compatible with real Lightroom usage

Inspection-First Workflow

The preferred workflow is:

  1. ask Lightroom for the active photo or current selection
  2. use the returned absolute file path to inspect the original image directly
  3. decide your edit
  4. apply Lightroom changes through MCP
  5. export only if you need a rendered before/after or final output

New inspection tools:

  • get_active_photo_file
  • get_selected_photo_files

These are read-only MCP tools that return Lightroom metadata plus a normalized inspection payload:

  • absolute file path
  • local ID
  • filename
  • dimensions when available
  • file existence / readability / inspectability flags
  • basic file metadata like suffix, MIME type, and size when readable

Example Agent Prompts

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.

Who This Is For

  • photographers building agentic editing workflows around Lightroom Classic
  • creative technologists connecting Codex or Claude to a real editi

Tools (2)

get_active_photo_fileReturns metadata and file path for the currently active photo in Lightroom.
get_selected_photo_filesReturns metadata and file paths for the currently selected photos in Lightroom.

Configuration

claude_desktop_config.json
{"mcpServers": {"lightroom-classic": {"command": "bash", "args": ["-lc", "cd \"/absolute/path/to/lightroom-classic-mcp\" && ./scripts/start_managed_server.sh"]}}}

Try it

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.
Use get_active_photo_file to inspect the active image, create a Lightroom snapshot, then lift the subject slightly without blowing out highlights.
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.
If the edit is not an improvement, restore the most recent Lightroom snapshot instead of trying to manually undo each slider.

Frequently Asked Questions

What are the key features of Lightroom Classic MCP?

Inspect current photo selection and catalog state. Read and write Develop settings through Lightroom. Apply grouped looks, presets, and manage snapshots. Work with masks, collections, and virtual copies. Safe, deterministic bridge for AI-driven photo editing.

What can I use Lightroom Classic MCP for?

Automating repetitive editing workflows across large photo batches. Applying consistent develop settings based on visual inspection of original files. Creating and managing Lightroom snapshots for non-destructive experimentation. Verifying edits by exporting before/after comparisons via AI-driven workflows.

How do I install Lightroom Classic MCP?

Install Lightroom Classic MCP by running: ./scripts/install_for_ai.sh --client both

What MCP clients work with Lightroom Classic MCP?

Lightroom Classic MCP works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Lightroom Classic MCP docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare