rawtherapee-mcp-server
Click on "Deploy 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., "@rawtherapee-mcp-server Open photo.ARW, apply exposure +0.5 and show preview."
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.
RawTherapee MCP Server
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 responsesBacking 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" --versionmacOS:
/Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cli --versionLinux:
rawtherapee-cli --versionInstallation
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-servermacOS / Linux:
python3 -m venv ~/.rawtherapee-mcp-env
~/.rawtherapee-mcp-env/bin/pip install rawtherapee-mcp-server2. 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-mcpCursor
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:
"Analyze this photo" —
analyze_imagereads EXIF, computes histogram, generates a thumbnail, and returns processing recommendations"Make it warmer with more contrast" —
generate_pp3_profilecreates a profile with warm white balance and contrast boost,preview_before_aftershows the difference"The shadows are too dark" —
add_luminance_adjustmentadds a shadow recovery spot,preview_with_adjustmentsshows the result"Export for my phone" —
process_rawwithdevice_presetcrops 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 ClaudeLinux:
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 RawTherapee installation, version, CLI path, and server configuration |
| List all available PP3 templates (built-in and custom) |
| List all device/format crop and resize presets |
| Scan a directory for supported RAW files |
| List processed output files in the output directory |
Metadata & Analysis (5)
Tool | Description |
| Read EXIF metadata with structured processing recommendations |
| All-in-one analysis: EXIF + histogram + thumbnail + recommendations |
| Analyze multiple images with EXIF, recommendations, and thumbnails |
| Get dimensions, format, file size with optional inline thumbnail |
| RGB histogram with per-channel statistics, clipping, and SVG visualization |
Profile Management (8)
Tool | Description |
| Create a PP3 profile from base template + parameters + device preset |
| Display PP3 profile contents in human-readable format |
| Modify specific parameters in an existing profile |
| Diff two profiles with optional visual A/B comparison |
| Save a profile as a reusable custom template |
| Create a template stub from natural language description |
| Delete a custom template |
| Blend two profiles by linear interpolation |
Preview & Visualization (7)
Tool | Description |
| Quick preview JPEG with optional inline image return |
| Side-by-side neutral vs. profile comparison |
| Multiple EV stops rendered for exposure comparison |
| Multiple WB presets with Kelvin values |
| Thumbnails for multiple RAW files |
| Grayscale mask showing local adjustment coverage |
| Preview with all Locallab spots active |
Processing & Export (4)
Tool | Description |
| Process a RAW file to JPEG/TIFF/PNG with inline thumbnail |
| Apply a template to process a RAW file with optional device preset |
| Process multiple RAW files with the same profile |
| Export one RAW optimized for multiple devices in one call |
Crop & Device (3)
Tool | Description |
| Reposition crop (left/center/right, top/center/bottom, or pixel offsets) |
| Create a custom device preset |
| Delete a custom device preset |
Local Adjustments (5)
Tool | Description |
| Add luminance-based local adjustment (shadows/midtones/highlights/custom) |
| List all Locallab spots in a profile |
| Modify an existing Locallab spot |
| Remove a Locallab spot |
| Apply a predefined local adjustment preset with intensity scaling |
Lens Correction (2)
Tool | Description |
| Apply Lensfun auto-detect or Adobe LCP correction to a PP3 profile |
| Query the Lensfun database for distortion/vignetting/TCA coverage |
Film Simulation / LUT Support (4)
Tool | Description |
| Scan |
| Write a HaldCLUT film simulation into a PP3 profile with configurable strength |
| Render an inline preview of a RAW file with a film simulation applied |
| Render 2–5 LUT previews side-by-side for quick comparison |
Profile Inheritance (3)
Tool | Description |
| Derive a child PP3 from a parent template with section-level overrides |
| List all variants with override summaries, optionally filtered by parent |
| Modify a base template and propagate changes to all child variants |
Metadata Privacy (3)
Tool | Description |
| Classify JPEG/TIFF EXIF into sensitive/technical/rights buckets with privacy recommendations |
| Losslessly remove GPS, serial numbers, software, and owner tags from a JPEG |
| Write copyright, artist, description, and keywords into a JPEG |
Built-in Resources
PP3 Templates (5)
Template | Description |
| Minimal processing, camera white balance, basic sharpening |
| Warm tones (5800K), gentle contrast, skin-friendly saturation |
| Cool tones (5200K), lifted blacks, reduced saturation, film look |
| Warm tones (5600K), boosted saturation and vibrance, strong sharpening |
| 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 |
| Brighten shadows without affecting highlights |
| Compress highlights to recover detail |
| Warm shadows, cool highlights |
| Add contrast to midtones only |
| Desaturate shadow areas for a clean look |
| High contrast and deep blacks for AMOLED displays |
| 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 |
| Auto-detect | Path to |
|
| Default output directory |
| OS temp dir | Preview image directory |
|
| Custom PP3 templates directory |
|
| Max preview width in pixels |
|
| Default JPEG quality (1-100) |
|
| 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_statusto see detection detailsSet
RT_CLI_PATHto the full path ofrawtherapee-cli:Windows:
C:\Program Files\RawTherapee\5.12\rawtherapee-cli.exemacOS:
/Applications/RawTherapee.app/Contents/MacOS/rawtherapee-cliLinux:
/usr/bin/rawtherapee-cli
Paths with spaces on Windows:
Always use the full path in
RT_CLI_PATH, including quotes if your shell requires themEnvironment 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=DEBUGto 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-serverDevelopment
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 + auditTesting
# Unit tests (mocked, no RawTherapee required)
pytest -v
# Integration tests (requires RawTherapee installation)
pytest -m integration -vMCP Inspector
npx @modelcontextprotocol/inspector uv run rawtherapee-mcpContributing
See CONTRIBUTING.md for development guidelines, coding standards, and PR checklist.
License
Available Tools
49 toolsadd_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
Scored across 49 tools
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.
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.
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.
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
Related MCP Connectors
AI-cull, edit and export RAW photos locally with the imagic desktop app, from any MCP client.
Image & PDF tools for AI agents: compress, convert, resize, PDF, AI vision, pipeline.
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
Image and video AI tools and your own pipelines, run from any AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to edit photos in darktable via natural language, adjusting sliders, applying styles, and organizing the library in real time through the MCP protocol.1MIT
- AlicenseBqualityBmaintenanceEnables 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.3276 PyPI5Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables Claude to iteratively edit raw photos in Lightroom Classic non-destructively, applying Develop adjustments, reviewing rendered results, and refining edits within guarded sessions.MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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