Skip to main content
Glama
rawtherapee-mcp-server

rawtherapee-mcp-server

by lucamarien

RawTherapee MCP Server

CI PyPI Python License: MIT

Cross-platform Model Context Protocol (MCP) server for AI-assisted RAW photo development via RawTherapee CLI. Provides 49 tools for profile generation, image processing, visual previews, batch operations, device presets, luminance-based local adjustments, lens correction, film simulation LUTs, profile inheritance, and metadata privacy.

What makes it unique: The LLM can see the photos it's editing. Preview tools return inline Base64 images via MCP's ImageContent protocol, creating a visual feedback loop where the AI analyzes the image, adjusts settings, previews the result, and iterates — just like a human editor.

MCP Client Compatibility

Not all MCP clients handle inline images the same way. The visual feedback loop requires a client that renders ImageContent from tool responses and a backing LLM with vision capabilities.

Client

MCP Support

Image Display

Visual Workflow

Status

Claude Desktop

Full

Yes

Full

Tested

Claude Code

Full

No (terminal)

Partial

Tested — images not rendered in terminal, but processing and text analysis work fully

Cursor

Full

Should work

Should work

Untested — MCP docs indicate ImageContent support

Windsurf

Full

Should work

Should work

Untested

Cline

Partial

Unknown

Unknown

Untested — community reports suggest ImageContent may not render (#1865)

Zed

Full

Unknown

Unknown

Untested

Minimum requirements for the full visual workflow:

  • MCP client renders ImageContent (type: "image", data: base64, mimeType: "image/jpeg") from tool responses

  • Backing LLM supports vision/image analysis (e.g. Claude with vision)

  • Tool response size accommodates ~150KB previews (most clients: 1MB limit)

Text-only clients: All 49 tools work without inline images. Preview tools return file paths instead. The LLM can still read EXIF metadata, histogram statistics, generate profiles, batch process, and use luminance presets — the visual feedback loop is the only feature that requires image support.

Related MCP server: gimp-agent-mcp

Prerequisites

  • Python 3.11+

  • RawTherapee 5.9+ with CLI component installed

  • An MCP-compatible client (see table above)

Verify the RawTherapee CLI is reachable before proceeding:

Windows (PowerShell):

& "C:\Program Files\RawTherapee\5.12\rawtherapee-cli.exe" --version

macOS:

/Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cli --version

Linux:

rawtherapee-cli --version

Installation

Two supported methods - pick the one that matches your priorities:

Method

Choose when you want

uvx

Minimal setup, no persistent install, standard MCP community pattern

pip + venv

Explicit version control, predictable updates, easier debugging, air-gapped environments

Option A - uvx

No persistent install. uvx downloads, caches, and runs the server on demand.

Important: always pin a specific version. The unpinned form ("rawtherapee-mcp-server") locks to the first resolved version and will not auto-upgrade on its own. See Updating for the full refresh procedure.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server@1.0.4"],
      "env": {
        "RT_CLI_PATH": "C:\\Program Files\\RawTherapee\\5.12\\rawtherapee-cli.exe",
        "RT_OUTPUT_DIR": "C:\\Users\\YourName\\Pictures\\rawtherapee-output"
      }
    }
  }
}
{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server@1.0.4"],
      "env": {
        "RT_OUTPUT_DIR": "/Users/yourname/Pictures/rawtherapee-output"
      }
    }
  }
}

RT CLI is auto-detected at /Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cli. Set RT_CLI_PATH if your installation differs.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server@1.0.4"],
      "env": {
        "RT_OUTPUT_DIR": "/home/yourname/Pictures/rawtherapee-output"
      }
    }
  }
}

RT CLI is auto-detected at /usr/bin/rawtherapee-cli. Set RT_CLI_PATH if needed.

Option B - pip + venv

Explicit install with a dedicated virtual environment. You control exactly which version is running and updates are transparent.

1. Create the venv and install

Windows (PowerShell):

python -m venv "$env:USERPROFILE\.rawtherapee-mcp-env"
& "$env:USERPROFILE\.rawtherapee-mcp-env\Scripts\pip.exe" install rawtherapee-mcp-server

macOS / Linux:

python3 -m venv ~/.rawtherapee-mcp-env
~/.rawtherapee-mcp-env/bin/pip install rawtherapee-mcp-server

2. Configure Claude Desktop

Point Claude Desktop at the venv's entry-point script directly. No activation step is needed - the path is absolute.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "C:\\Users\\YourName\\.rawtherapee-mcp-env\\Scripts\\rawtherapee-mcp-server.exe",
      "args": [],
      "env": {
        "RT_CLI_PATH": "C:\\Program Files\\RawTherapee\\5.12\\rawtherapee-cli.exe",
        "RT_OUTPUT_DIR": "C:\\Users\\YourName\\Pictures\\rawtherapee-output"
      }
    }
  }
}

Replace YourName with your actual Windows username.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "/Users/yourname/.rawtherapee-mcp-env/bin/rawtherapee-mcp-server",
      "args": [],
      "env": {
        "RT_OUTPUT_DIR": "/Users/yourname/Pictures/rawtherapee-output"
      }
    }
  }
}
{
  "mcpServers": {
    "rawtherapee": {
      "command": "/home/yourname/.rawtherapee-mcp-env/bin/rawtherapee-mcp-server",
      "args": [],
      "env": {
        "RT_OUTPUT_DIR": "/home/yourname/Pictures/rawtherapee-output"
      }
    }
  }
}

3. Verify the install

Windows:

& "$env:USERPROFILE\.rawtherapee-mcp-env\Scripts\python.exe" -c "import rawtherapee_mcp; print(rawtherapee_mcp.__version__)"

macOS / Linux:

~/.rawtherapee-mcp-env/bin/python -c "import rawtherapee_mcp; print(rawtherapee_mcp.__version__)"

Expected output: the installed version number (e.g. 1.0.4).

After editing claude_desktop_config.json, fully quit and restart Claude Desktop - closing the window alone leaves a background process running on both macOS and Windows.

Client Configuration

Claude Desktop

The RawTherapee CLI path is auto-detected on most systems. Set RT_CLI_PATH if auto-detection fails or RawTherapee is in a non-standard location.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_CLI_PATH": "C:\\Program Files\\RawTherapee\\5.12\\rawtherapee-cli.exe",
        "RT_OUTPUT_DIR": "D:\\Photos\\Processed"
      }
    }
  }
}
{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_OUTPUT_DIR": "/Users/you/Pictures/Processed"
      }
    }
  }
}

RT CLI is auto-detected at /Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cli.

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_OUTPUT_DIR": "/home/you/Pictures/Processed"
      }
    }
  }
}

RT CLI is auto-detected at /usr/bin/rawtherapee-cli, /usr/local/bin/rawtherapee-cli, or /snap/bin/rawtherapee-cli.

Use uv to run from the cloned repository:

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uv",
      "args": ["--directory", "/path/to/rawtherapee-mcp-server", "run", "rawtherapee-mcp-server"],
      "env": {
        "RT_OUTPUT_DIR": "/home/you/Pictures/Processed"
      }
    }
  }
}

Claude Code

# Published package
claude mcp add rawtherapee -- uvx rawtherapee-mcp-server

# Development (from source)
claude mcp add rawtherapee -- uv --directory /path/to/rawtherapee-mcp-server run rawtherapee-mcp

Cursor

Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_CLI_PATH": "/usr/bin/rawtherapee-cli",
        "RT_OUTPUT_DIR": "/home/you/Pictures/Processed"
      }
    }
  }
}

Windsurf

Add to your Windsurf MCP configuration:

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_CLI_PATH": "/usr/bin/rawtherapee-cli",
        "RT_OUTPUT_DIR": "/home/you/Pictures/Processed"
      }
    }
  }
}

Cline (VS Code)

Add to your Cline MCP settings:

{
  "mcpServers": {
    "rawtherapee": {
      "command": "uvx",
      "args": ["rawtherapee-mcp-server"],
      "env": {
        "RT_CLI_PATH": "/usr/bin/rawtherapee-cli",
        "RT_OUTPUT_DIR": "/home/you/Pictures/Processed"
      }
    }
  }
}

Note: Cline may not render inline images from tool responses. All text-based tools work normally.

For pip + venv config examples for all clients, see docs/CLIENT_COMPATIBILITY.md.

Quick Start

After installation and client configuration, try this workflow:

  1. "Analyze this photo" — analyze_image reads EXIF, computes histogram, generates a thumbnail, and returns processing recommendations

  2. "Make it warmer with more contrast" — generate_pp3_profile creates a profile with warm white balance and contrast boost, preview_before_after shows the difference

  3. "The shadows are too dark" — add_luminance_adjustment adds a shadow recovery spot, preview_with_adjustments shows the result

  4. "Export for my phone" — process_raw with device_preset crops and processes at the right aspect ratio

Updating

Both installation methods require a two-step procedure. Upgrading the package alone is not enough - Claude Desktop caches the MCP server's tool list. Always follow the full sequence: update package → fully quit Claude Desktop → relaunch.

With uvx

uvx creates a per-package receipt that locks the resolved version. --refresh re-downloads the same locked version; it does not upgrade. To get a new release, clear the receipt and update the version pin:

Windows (PowerShell):

uv cache clean rawtherapee-mcp-server
# Update the version pin in %APPDATA%\Claude\claude_desktop_config.json
# e.g. change @1.0.4 to @1.0.5
Get-Process *claude* -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Process "$env:LOCALAPPDATA\AnthropicClaude\Claude.exe"

macOS:

uv cache clean rawtherapee-mcp-server
# Update the version pin in ~/Library/Application Support/Claude/claude_desktop_config.json
osascript -e 'quit app "Claude"' && sleep 2 && open -a Claude

Linux:

uv cache clean rawtherapee-mcp-server
# Update the version pin in ~/.config/Claude/claude_desktop_config.json
pkill -f claude && sleep 2 && claude &

With pip + venv

Windows:

& "$env:USERPROFILE\.rawtherapee-mcp-env\Scripts\pip.exe" install --upgrade rawtherapee-mcp-server
Get-Process *claude* -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Process "$env:LOCALAPPDATA\AnthropicClaude\Claude.exe"

macOS / Linux:

~/.rawtherapee-mcp-env/bin/pip install --upgrade rawtherapee-mcp-server
# macOS:
osascript -e 'quit app "Claude"' && sleep 2 && open -a Claude
# Linux:
pkill -f claude && sleep 2 && claude &

Verify the update worked

After relaunch, ask Claude:

"What is the current rawtherapee-mcp-server version and how many tools are registered?"

Compare against CHANGELOG.md. If the version string is correct but new tools are missing, see docs/TROUBLESHOOTING.md.

Check GitHub Releases for full changelogs.

Available Tools (49)

Discovery & Configuration (5)

Tool

Description

check_rt_status

Check RawTherapee installation, version, CLI path, and server configuration

list_templates

List all available PP3 templates (built-in and custom)

list_device_presets

List all device/format crop and resize presets

list_raw_files

Scan a directory for supported RAW files

list_output_files

List processed output files in the output directory

Metadata & Analysis (5)

Tool

Description

read_exif

Read EXIF metadata with structured processing recommendations

analyze_image

All-in-one analysis: EXIF + histogram + thumbnail + recommendations

batch_analyze

Analyze multiple images with EXIF, recommendations, and thumbnails

get_image_info

Get dimensions, format, file size with optional inline thumbnail

get_histogram

RGB histogram with per-channel statistics, clipping, and SVG visualization

Profile Management (8)

Tool

Description

generate_pp3_profile

Create a PP3 profile from base template + parameters + device preset

read_profile

Display PP3 profile contents in human-readable format

adjust_profile

Modify specific parameters in an existing profile

compare_profiles

Diff two profiles with optional visual A/B comparison

save_template

Save a profile as a reusable custom template

create_template_from_description

Create a template stub from natural language description

delete_template

Delete a custom template

interpolate_profiles

Blend two profiles by linear interpolation

Preview & Visualization (7)

Tool

Description

preview_raw

Quick preview JPEG with optional inline image return

preview_before_after

Side-by-side neutral vs. profile comparison

preview_exposure_bracket

Multiple EV stops rendered for exposure comparison

preview_white_balance

Multiple WB presets with Kelvin values

batch_preview

Thumbnails for multiple RAW files

preview_luminance_mask

Grayscale mask showing local adjustment coverage

preview_with_adjustments

Preview with all Locallab spots active

Processing & Export (4)

Tool

Description

process_raw

Process a RAW file to JPEG/TIFF/PNG with inline thumbnail

apply_template

Apply a template to process a RAW file with optional device preset

batch_process

Process multiple RAW files with the same profile

export_multi_device

Export one RAW optimized for multiple devices in one call

Crop & Device (3)

Tool

Description

adjust_crop_position

Reposition crop (left/center/right, top/center/bottom, or pixel offsets)

add_device_preset_tool

Create a custom device preset

delete_device_preset

Delete a custom device preset

Local Adjustments (5)

Tool

Description

add_luminance_adjustment

Add luminance-based local adjustment (shadows/midtones/highlights/custom)

list_local_adjustments

List all Locallab spots in a profile

adjust_local_spot

Modify an existing Locallab spot

remove_local_adjustment

Remove a Locallab spot

apply_local_preset

Apply a predefined local adjustment preset with intensity scaling

Lens Correction (2)

Tool

Description

apply_lens_correction

Apply Lensfun auto-detect or Adobe LCP correction to a PP3 profile

check_lens_support

Query the Lensfun database for distortion/vignetting/TCA coverage

Film Simulation / LUT Support (4)

Tool

Description

list_luts

Scan RT_HALDCLUT_DIR for HaldCLUT film simulation LUTs, grouped by category

apply_lut

Write a HaldCLUT film simulation into a PP3 profile with configurable strength

preview_lut

Render an inline preview of a RAW file with a film simulation applied

preview_lut_comparison

Render 2–5 LUT previews side-by-side for quick comparison

Profile Inheritance (3)

Tool

Description

create_profile_variant

Derive a child PP3 from a parent template with section-level overrides

list_profile_variants

List all variants with override summaries, optionally filtered by parent

update_base_profile

Modify a base template and propagate changes to all child variants

Metadata Privacy (3)

Tool

Description

inspect_metadata

Classify JPEG/TIFF EXIF into sensitive/technical/rights buckets with privacy recommendations

strip_metadata

Losslessly remove GPS, serial numbers, software, and owner tags from a JPEG

set_metadata

Write copyright, artist, description, and keywords into a JPEG

Built-in Resources

PP3 Templates (5)

Template

Description

neutral

Minimal processing, camera white balance, basic sharpening

warm_portrait

Warm tones (5800K), gentle contrast, skin-friendly saturation

moody_cinematic

Cool tones (5200K), lifted blacks, reduced saturation, film look

vivid_pet

Warm tones (5600K), boosted saturation and vibrance, strong sharpening

bw_classic

Black & white via channel mixer, high contrast, strong sharpening

Device Presets (19)

  • Mobile (7): Samsung Galaxy S26 Ultra, Galaxy S25 Ultra, iPhone 16 Pro Max, iPhone 16, Google Pixel 9 Pro, generic 9:16, generic 9:19.5

  • Desktop (5): 4K UHD (3840x2160), WQHD (2560x1440), Full HD (1920x1080), Ultrawide 21:9 (3440x1440), Dual 4K 32:9 (7680x2160)

  • Photo Formats (7): 3:2 (35mm), 4:3, 16:9, 1:1 (square), 5:4, 4:5 (Instagram portrait), 2:3 (portrait 35mm)

Custom presets can be added via add_device_preset_tool and persist across sessions.

Local Adjustment Presets (7)

Preset

Description

shadow_recovery

Brighten shadows without affecting highlights

highlight_protection

Compress highlights to recover detail

split_tone_warm_cool

Warm shadows, cool highlights

midtone_contrast

Add contrast to midtones only

shadow_desaturation

Desaturate shadow areas for a clean look

amoled_optimize

High contrast and deep blacks for AMOLED displays

hdr_natural

Natural HDR look with lifted shadows and compressed highlights

Presets accept an intensity parameter (50 = default, 25 = half, 100 = double).

Environment Variables

Variable

Default

Description

RT_CLI_PATH

Auto-detect

Path to rawtherapee-cli binary

RT_OUTPUT_DIR

~/Pictures/rawtherapee-mcp-output

Default output directory

RT_PREVIEW_DIR

OS temp dir

Preview image directory

RT_CUSTOM_TEMPLATES_DIR

./custom_templates

Custom PP3 templates directory

RT_PREVIEW_MAX_WIDTH

1200

Max preview width in pixels

RT_JPEG_QUALITY

95

Default JPEG quality (1-100)

RT_LOG_LEVEL

WARNING

Logging level (DEBUG, INFO, WARNING, ERROR)

See .env.example for a documented configuration template.

Known Limitations

  • RawTherapee CLI must be installed separately — it is not a Python package and cannot be installed via pip

  • stdio transport only — designed for local desktop use, no HTTP/SSE server mode

  • RT 5.12 crop+resize bug — RawTherapee 5.12 silently ignores Crop when Resize is also enabled in the same PP3 profile; the server applies a crop-only workaround automatically

  • 1MB MCP tool response limit — preview resolution is managed to stay within Claude Desktop's response size limit

  • No pixel-level editing — no retouching, object removal, frequency separation, or content-aware fill

  • No multi-image compositing — no HDR merge, panorama stitching, or focus stacking

  • Luminance masks are tonal only — no spatial or subject-aware masking

  • Integration tests require a RawTherapee installation and are skipped by default

Troubleshooting

RawTherapee not found:

  • Run check_rt_status to see detection details

  • Set RT_CLI_PATH to the full path of rawtherapee-cli:

    • Windows: C:\Program Files\RawTherapee\5.12\rawtherapee-cli.exe

    • macOS: /Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cli

    • Linux: /usr/bin/rawtherapee-cli

Paths with spaces on Windows:

  • Always use the full path in RT_CLI_PATH, including quotes if your shell requires them

  • Environment variables in MCP client config JSON do not need extra escaping

Preview images too large:

  • Reduce RT_PREVIEW_MAX_WIDTH (default: 1200)

  • Preview tools auto-thumbnail to stay within the 1MB response limit

Server not responding:

  • Verify the entry in your MCP client config is correct

  • Restart your MCP client after config changes

  • Set RT_LOG_LEVEL=DEBUG to see detailed logs on stderr

New version installed but old tools still showing in Claude: See docs/TROUBLESHOOTING.md - Stale tool list after update. Short version: fully quit Claude Desktop (it runs as a background process), then relaunch.

Docker

docker build -t rawtherapee-mcp-server .
docker run -i --rm \
  -v /path/to/photos:/photos \
  -v /path/to/output:/output \
  -e RT_OUTPUT_DIR=/output \
  rawtherapee-mcp-server

Development

See docs/DEVELOPMENT.md for full setup instructions.

git clone https://github.com/lucamarien/rawtherapee-mcp-server
cd rawtherapee-mcp-server
pip install -e ".[dev]"
make validate    # lint + format + typecheck + test + security + audit

Testing

# Unit tests (mocked, no RawTherapee required)
pytest -v

# Integration tests (requires RawTherapee installation)
pytest -m integration -v

MCP Inspector

npx @modelcontextprotocol/inspector uv run rawtherapee-mcp

Contributing

See CONTRIBUTING.md for development guidelines, coding standards, and PR checklist.

License

MIT

Available Tools

49 tools
add_device_preset_toolA

Create and persist a custom device/format preset for cropping and resizing.

Use this to add a preset for a device or format not in the built-in list. Custom presets are saved to disk and available in future sessions. Params: preset_id, name, width, height, category

Inputs: preset_id (required), name (required), width (required), height (required), +1 more. Returns: object

add_luminance_adjustmentA

Add a luminance-based local adjustment to a PP3 profile.

Creates a Locallab spot that targets a specific luminance range (shadows, midtones, highlights, or custom). The adjustment only affects pixels within the specified brightness range, enabling selective edits like shadow recovery or highlight compression without affecting the rest.

adjustment_type: "shadows" (0-30%), "midtones" (25-75%), "highlights" (70-100%), or "custom" (requires luminance_range).

parameters: Processing adjustments to apply in the selected range. Keys: exposure (-2 to +2 EV), contrast (-100 to +100), saturation (-100 to +100), brightness (-100 to +100), black (0-500), highlight_compression (0-500), sharpening (0-100), denoise_luma (0-100), denoise_chroma (0-100), white_balance_shift (Kelvin, -500 to +500).

luminance_range (custom only): {"lower": 0-100, "upper": 0-100, "lower_transition": 0-100, "upper_transition": 0-100}.

Params: profile_path, adjustment_type, parameters, luminance_range, transition, strength, spot_name, save_as

Inputs: profile_path (required), adjustment_type (required), parameters (required), luminance_range, +4 more. Returns: object

adjust_crop_positionA

Reposition an existing crop within the source image bounds.

Moves the crop area defined in a PP3 profile to a new position. Accepts named positions ('left', 'center', 'right' for horizontal; 'top', 'center', 'bottom' for vertical) or pixel offsets as strings. The profile is updated in-place. Params: profile_path, file_path, horizontal, vertical, include_preview, preview_max_width

Inputs: profile_path (required), file_path (required), horizontal, vertical, +2 more.

adjust_local_spotA

Modify parameters of an existing Locallab spot in a PP3 profile.

Change processing parameters, luminance range, strength, or enable/disable a spot without removing and re-adding it.

Params: profile_path, spot_index, parameters, luminance_range, strength, enabled, save_as

Inputs: profile_path (required), spot_index (required), parameters, luminance_range, +3 more. Returns: object

adjust_profileA

Modify specific parameters in an existing PP3 profile.

Use this to tweak individual settings without recreating the entire profile. Only the specified parameters are changed; all other settings are preserved.

Accepts both friendly parameter names (e.g. {"crop": {"width": 3108}}) and raw PP3 section/key pairs (e.g. {"Crop": {"W": "3108", "H": "6732"}}). Unrecognized group names are treated as raw PP3 section names. Params: profile_path, adjustments, save_as

Inputs: profile_path (required), adjustments (required), save_as. Returns: object

analyze_imageA

Comprehensive single-call analysis of a RAW or processed image.

Combines EXIF metadata, structured processing recommendations, histogram statistics, and an inline thumbnail into one response. Use this for the initial assessment of an image before deciding on processing settings. Params: file_path, include_histogram, include_thumbnail, thumbnail_max_width

Inputs: file_path (required), include_histogram, include_thumbnail, thumbnail_max_width.

apply_lens_correctionB

Apply Lensfun or Adobe LCP lens correction to a PP3 profile.

Writes LensProfile section into the profile. Use mode='auto' for automatic Lensfun correction (camera/lens detected from RAW EXIF), or mode='lcp' to specify an Adobe Lens Correction Profile (.lcp file). Params: profile_path, mode ('auto'|'lcp'), lcp_file, correct_distortion, correct_vignetting, correct_ca, file_path (optional RAW for EXIF info), save_as

Inputs: profile_path (required), mode, lcp_file, correct_distortion, +4 more. Returns: object

apply_local_presetB

Apply a predefined local adjustment preset to a PP3 profile.

Available presets: shadow_recovery, highlight_protection, split_tone_warm_cool, midtone_contrast, shadow_desaturation, amoled_optimize, hdr_natural.

intensity scales all parameters: 50 = default, 25 = half, 100 = double.

Params: profile_path, preset, intensity, save_as

Inputs: profile_path (required), preset (required), intensity, save_as. Returns: object

apply_lutB

Apply a HaldCLUT film simulation LUT to a PP3 profile.

Writes the [Film Simulation] section into the profile. lut_name is the relative path from RT_HALDCLUT_DIR, e.g. 'Fuji/Fuji Velvia 50.png'. strength controls blend intensity (0-100). Params: profile_path, lut_name, strength (0-100), save_as

Inputs: profile_path (required), lut_name (required), strength, save_as. Returns: object

apply_templateA

Apply a built-in or custom PP3 template to a RAW file and process it.

Use this for quick processing with a predefined style. Optionally apply a device preset for crop/resize on top of the template. Returns an inline thumbnail when include_preview is True. Params: file_path, template_name, output_format, output_dir, device_preset, include_preview, preview_max_width

Inputs: file_path (required), template_name (required), output_format, output_dir, +3 more.

batch_analyzeA

Batch analysis of multiple images with EXIF, recommendations, and stats.

A lightweight alternative to calling analyze_image N times. Returns per-image EXIF data, processing recommendations, and summary histogram statistics (mean, clipping) without full 256-bin channel data or SVG. Optionally includes small thumbnails. Params: file_paths, max_images, include_thumbnails, thumbnail_max_width

Inputs: file_paths (required), max_images, include_thumbnails, thumbnail_max_width.

batch_previewA

Generate small preview thumbnails for multiple RAW files.

Creates a batch of preview images for quick visual scanning. Useful for selecting images from a series or verifying batch settings before full-resolution processing. Set include_exif=True to attach a short EXIF summary (ISO, aperture, shutter speed, focal length) per image. Params: file_paths, profile_path, max_width, max_images, include_exif

Inputs: file_paths (required), profile_path, max_width, max_images, +1 more.

batch_processC

Process multiple RAW files with the same PP3 profile.

Use this for bulk processing of a set of RAW files with identical settings. Params: file_paths, profile_path, output_format, output_dir, device_preset

Inputs: file_paths (required), profile_path (required), output_format, output_dir, +1 more. Returns: object

check_lens_supportA

Check whether a camera/lens combination has a Lensfun calibration profile.

Reads EXIF from a RAW file to detect camera/lens automatically, or accepts manual camera_make, camera_model, lens_model parameters. Parses the local Lensfun XML database (configured via RT_LENSFUN_DIR or auto-detected). Params: file_path (optional RAW for EXIF detection), camera_make, camera_model, lens_model

Inputs: file_path, camera_make, camera_model, lens_model. Returns: object

check_rt_statusA

Check RawTherapee installation status and server configuration.

Use this to verify RT is installed, check its version, and view the configured output directories. Call this first when troubleshooting. Returns: dict with installed, cli_path, version, platform, and directory paths.

Inputs: no named parameters. Returns: object

compare_profilesA

Compare two PP3 profiles and show the differences.

Use this to understand how two profiles differ before choosing between them, or to see what changed after adjustments. When file_path and include_preview are provided, renders both profiles as inline images for visual comparison. Params: profile_a, profile_b, file_path, include_preview, preview_max_width

Inputs: profile_a (required), profile_b (required), file_path, include_preview, +1 more.

create_profile_variantA

Create a child PP3 profile variant derived from a parent template.

The variant is generated by merging the parent PP3 with the given overrides (raw PP3 section -> key -> value dict). A single merged PP3 is written to _generated/<variant_name>.pp3. The parent-child relationship is tracked in profile_hierarchy.json for update propagation. Params: parent_profile (template name or path), variant_name, overrides (e.g. {'White Balance': {'Temperature': '3800'}}), description

Inputs: parent_profile (required), variant_name (required), overrides (required), description. Returns: object

create_template_from_descriptionA

Create a new PP3 template from a natural language style description.

Use this to create a template when the user describes a look in words (e.g. "warm golden hour tones, film-like grain"). You (Claude) interpret the description and call generate_pp3_profile with appropriate parameters. This tool creates a neutral base template with the given name and description. Params: name, description, reference_image_path

Inputs: name (required), description (required), reference_image_path. Returns: object

delete_device_presetB

Delete a custom device preset.

Use this to remove a custom device preset. Built-in presets cannot be deleted. Params: preset_id

Inputs: preset_id (required). Returns: object

delete_templateA

Delete a custom PP3 template.

Use this to remove a custom template that is no longer needed. Built-in templates cannot be deleted. Params: template_name

Inputs: template_name (required). Returns: object

export_multi_deviceA

Export a RAW file optimized for multiple devices in one call.

Processes the same RAW file with device-specific crop/resize for each target device. Output filenames include the device name. Set include_previews=True to return inline thumbnails per export. Params: file_path, profile_path, device_presets, output_format, output_dir, include_previews, preview_max_width

Inputs: file_path (required), profile_path (required), device_presets (required), output_format, +3 more.

generate_pp3_profileA

Create a PP3 processing profile from parameters.

Use this to generate a new processing profile for RAW development. Start with a base_template (e.g. "neutral", "warm_portrait") and override specific parameters, or build from scratch with parameters only.

When device_preset is specified with file_path, the profile uses aspect-ratio-based cropping (correct behavior). Without file_path, it falls back to resize-only which may produce different results. Params: name, base_template, parameters, device_preset, file_path, description

Inputs: name (required), base_template, parameters, device_preset, +2 more. Returns: object

get_histogramA

Compute RGB histogram and image statistics for a processed image.

Analyzes the tonal distribution of a JPEG, TIFF, or PNG image. Returns per-channel histograms (256 bins), statistics (mean, median, std_dev, min, max), and clipping percentages. Optionally includes an SVG visualization. Params: file_path, include_svg

Inputs: file_path (required), include_svg. Returns: object

get_image_infoA

Get technical information about a processed image file.

Use this to check dimensions, format, file size, and bit depth of JPEG, TIFF, or PNG output files. When include_thumbnail is True, returns an inline thumbnail for visual verification. Params: file_path, include_thumbnail, thumbnail_max_width

Inputs: file_path (required), include_thumbnail, thumbnail_max_width.

inspect_metadataA

Inspect EXIF metadata in an exported JPEG/TIFF and classify by sensitivity.

Returns sensitive fields (GPS, serial numbers, owner), technical fields (camera, lens, ISO, aperture, shutter), processing info (software), rights (copyright, artist), and privacy recommendations for public sharing. Params: file_path (exported JPEG or TIFF)

Inputs: file_path (required). Returns: object

interpolate_profilesB

Blend two PP3 profiles by linear interpolation.

Numeric values are interpolated (factor=0.0 gives profile A, factor=1.0 gives profile B). Non-numeric values are taken from the nearer profile. Useful for creating intermediate looks between two processing styles. Params: profile_a, profile_b, factor, output_name, file_path, include_preview, preview_max_width

Inputs: profile_a (required), profile_b (required), factor, output_name, +3 more.

list_device_presetsA

List all device/format crop and resize presets.

Use this to discover available presets for mobile wallpapers, desktop wallpapers, and photo aspect ratios. Presets can be applied when generating profiles or processing images. Returns: dict with presets grouped by category (mobile, desktop, photo_formats, custom).

Inputs: no named parameters. Returns: object

list_local_adjustmentsA

List all Locallab (local adjustment) spots in a PP3 profile.

Shows each spot's name, type, luminance range, active parameters, and enabled state. Use this to inspect the local adjustments before previewing or modifying them.

Params: profile_path

Inputs: profile_path (required). Returns: object

list_lutsA

List available HaldCLUT film simulation LUT files.

Scans RT_HALDCLUT_DIR (or the optional directory parameter) for PNG/TIFF HaldCLUT files and groups them by subdirectory category (e.g. 'Fuji', 'Kodak'). Params: directory (optional override), category (optional filter e.g. 'Fuji')

Inputs: directory, category. Returns: object

list_output_filesA

List processed output files in the output directory.

Use this to see what images have been processed and are available. Params: directory, format_filter (jpeg, tiff, png)

Inputs: directory, format_filter. Returns: object

list_profile_variantsA

List profile variants tracked by the inheritance system.

Shows parent -> [variants] relationships with override summaries and effective PP3 paths. Optionally filter by parent_profile name. Params: parent_profile (optional filter)

Inputs: parent_profile. Returns: object

list_raw_filesA

Scan a directory for supported RAW image files.

Use this to discover which RAW files are available for processing. Returns: dict with files list (path, size, extension) and count. Params: directory, recursive (default: false)

Inputs: directory (required), recursive. Returns: object

list_templatesA

List all available PP3 processing templates (built-in and custom).

Use this to discover which templates are available for apply_template or as a base_template for generate_pp3_profile. Returns: dict with built_in and custom template lists.

Inputs: no named parameters. Returns: object

preview_before_afterA

Generate before/after preview images to compare processing effects.

Renders a RAW file twice: once with default (neutral) settings and once with the specified profile. Returns both images inline for the LLM to visually compare the difference. Params: file_path, profile_path, max_width

Inputs: file_path (required), profile_path (required), max_width.

preview_exposure_bracketA

Simulate exposure bracketing by rendering multiple EV previews.

Generates preview images at different exposure compensation values. Useful for determining the optimal exposure before committing to a full-resolution render. Params: file_path, profile_path, stops, max_width

Inputs: file_path (required), profile_path, stops, max_width.

preview_luminance_maskA

Preview a luminance mask showing which image areas are affected by a local adjustment.

Generates a grayscale mask image: white = full effect, black = no effect, gray = transition zone. Use this to verify the luminance range targets the correct tonal areas before processing.

Params: file_path, profile_path, spot_index, max_width

Inputs: file_path (required), profile_path (required), spot_index, max_width.

preview_lutA

Render an inline preview of a RAW file with a HaldCLUT film simulation applied.

Optionally merges onto an existing PP3 base_profile so WB, exposure, etc. are preserved. Returns an inline thumbnail image. Params: file_path, lut_name, base_profile (optional PP3 path), strength (0-100), max_width

Inputs: file_path (required), lut_name (required), base_profile, strength, +1 more.

preview_lut_comparisonA

Render side-by-side inline previews for 2-5 HaldCLUT LUTs for quick comparison.

Renders each LUT sequentially and returns all thumbnails in a single response. Each image is labeled with its LUT name. Typical render time: 2-5s per LUT. Params: file_path, lut_names (list of 2-5 LUT relative paths), base_profile, strength (0-100), max_width (per image)

Inputs: file_path (required), lut_names (required), base_profile, strength, +1 more.

preview_rawC

Generate a small preview JPEG for visual analysis.

Use this to create a quick preview of how a RAW file will look with specific processing settings. The preview is a small JPEG suitable for visual inspection of composition, exposure, and color. When return_image is True, the preview image is returned inline for the LLM to see. Params: file_path, profile_path, max_width, return_image

Inputs: file_path (required), profile_path, max_width, return_image.

preview_white_balanceB

Preview different white balance presets on a RAW file.

Renders the same image with multiple white balance settings so the LLM can compare and recommend the best one. Each preview includes an approximate Kelvin temperature for reference. Params: file_path, profile_path, presets, max_width

Inputs: file_path (required), profile_path, presets, max_width.

preview_with_adjustmentsA

Preview a RAW file with all active local adjustments applied.

Renders a preview JPEG using RT CLI with the full profile including Locallab spots. Optionally includes histogram statistics for the processed result. Use this after add_luminance_adjustment or apply_local_preset to verify the effect visually.

Params: file_path, profile_path, max_width, include_histogram

Inputs: file_path (required), profile_path (required), max_width, include_histogram.

process_rawA

Process a RAW file with a PP3 processing profile.

Use this to convert a RAW file to JPEG, TIFF, or PNG using a PP3 profile. The profile controls all processing parameters (exposure, white balance, sharpening, etc.). Returns an inline thumbnail when include_preview is True. Params: file_path, profile_path, output_format, output_path, jpeg_quality, bit_depth, include_preview, preview_max_width

Inputs: file_path (required), profile_path (required), output_format, output_path, +4 more.

read_exifA

Read EXIF metadata from a RAW image file.

Returns camera settings (ISO, aperture, shutter speed, focal length, etc.) used when the photo was taken. Use this to make better decisions about processing parameters like noise reduction, lens correction, and white balance. Params: file_path

Inputs: file_path (required). Returns: object

read_profileA

Display contents of a PP3 profile in human-readable format.

Use this to inspect what settings a profile contains before applying it. Returns all active sections and their key-value pairs. Params: profile_path

Inputs: profile_path (required). Returns: object

remove_local_adjustmentB

Remove a Locallab spot from a PP3 profile.

Deletes the spot at the given index and re-indexes remaining spots.

Params: profile_path, spot_index, save_as

Inputs: profile_path (required), spot_index (required), save_as. Returns: object

save_templateB

Save an existing PP3 profile as a reusable custom template.

Use this to save a tuned profile so it can be reused later with apply_template or as a base_template for generate_pp3_profile. Params: profile_path, name, description

Inputs: profile_path (required), name (required), description. Returns: object

set_metadataA

Write copyright, artist, description, and keywords into an exported JPEG file.

Writes metadata losslessly (EXIF APP1 segment only, no JPEG recompression). Keywords are stored as XPKeywords (UTF-16LE, semicolon-separated) for compatibility with Windows Explorer and most DAM software. Params: file_path, copyright (e.g. '© 2026 Luca Marien'), artist, description, keywords (list of strings), output_path (None = in-place)

Inputs: file_path (required), copyright, artist, description, +2 more. Returns: object

strip_metadataA

Strip selected EXIF metadata from an exported JPEG file.

Operates losslessly — only the EXIF APP1 segment is rewritten, the JPEG image data is not recompressed. By default removes GPS and serial numbers. Use strip_all=True to remove everything except orientation (and copyright if keep_copyright=True). Params: file_path, strip_gps, strip_camera_serial, strip_lens_serial, strip_software, strip_owner, strip_all, keep_copyright, keep_orientation, output_path (None = in-place)

Inputs: file_path (required), strip_gps, strip_camera_serial, strip_lens_serial, +6 more. Returns: object

update_base_profileA

Update a base PP3 template and optionally propagate changes to all its variants.

Applies adjustments (raw PP3 section -> {key: value} dict, same format as adjust_profile) to the named template, then regenerates all child variants so their override-specific settings are preserved on top of the updated base. Params: profile_name (template name or path), adjustments, propagate (default True)

Inputs: profile_name (required), adjustments (required), propagate. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 49 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes with detailed descriptions. However, the large number of preview and local adjustment tools could cause minor confusion, e.g., differentiating preview_raw from preview_with_adjustments.

    Naming Consistency5/5

    Tool names follow a very consistent verb_noun pattern (e.g., add_device_preset_tool, adjust_crop_position, list_templates). A few exceptions exist (e.g., analyze_image instead of analyze_image_metadata) but overall highly predictable.

    Tool Count2/5

    With 49 tools, the server is overpopulated. While RawTherapee is complex, this number exceeds typical MCP server scopes (per guidelines, 25+ is too many) and may overwhelm agents.

    Completeness5/5

    The tool set covers the full RAW processing workflow: metadata, profiles (create/read/update/delete), local adjustments, presets, templates, batch processing, lens correction, LUTs, and export. No obvious gaps for the domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      Enables AI agents to operate GIMP 3 end-to-end: open and inspect images, call every PDB procedure, apply GEGL filters destructively or as layer effects, measure pixels, render before/after/diff comparisons, cut out subjects with AI segmentation, and run multi-step recipes across folders.
      32
      76 PyPI
      5
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to run cross-platform batch photo-processing workflows—including RAW decoding, adjustments, noise reduction, white balance, LOG restoration, EXIF tagging, deduplication, selection, HTML galleries, folder watching, and presets—through a unified versioned JSON contract. It also exposes MCP tools for processing, suggestions, autopilot, indexing, search, selection, HDR, face blurring, and more.
      MIT