This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Adobe MCP is a unified Model Context Protocol server that enables AI-powered automation of Adobe Creative Suite applications (Photoshop, Premiere Pro, Illustrator, and InDesign). It uses a 3-tier architecture with Python MCP servers, a Node.js WebSocket proxy, and JavaScript UXP plugins.
The Python MCP servers require a .env file in the adobe-mcp-unified/ directory (or environment variables set externally). Required variables:
# .env (minimum required)
ADOBE_PROXY_HOST=localhost # WebSocket proxy host
ADOBE_PROXY_PORT=3001 # WebSocket proxy port
# ADOBE_LOG_LEVEL=INFO # Optional: DEBUG, INFO, WARNING, ERROR
# ADOBE_TIMEOUT=20 # Optional: command timeout in seconds# Install Python dependencies (from adobe-mcp-unified/ directory)
uv pip install -e .
# Install proxy server dependencies
cd proxy-server
npm install
cd ..
# Start the proxy server (required for all MCP servers)
adobe-proxy
# Or manually: node proxy-server/proxy.js# Individual servers (require proxy to be running)
adobe-photoshop
adobe-premiere
adobe-illustrator
adobe-indesign# Run automated test suite (Windows)
./run-tests.ps1
# Run with coverage
./run-tests.ps1 -Coverage
# Run manual Illustrator test
./run-tests.ps1 -Manual
# Run specific test file
uv run pytest tests/test_illustrator.py -v -s# Install dev dependencies
uv pip install -e ".[dev]"
# Format code
black adobe_mcp/
isort adobe_mcp/
# Lint code
ruff adobe_mcp/
# Type checking
mypy adobe_mcp/-
MCP Servers (
adobe_mcp/): FastMCP-based servers that expose tools to AI clients- Each application has its own server module (photoshop/, premiere/, illustrator/, indesign/)
- Shared utilities in
shared/handle socket communication, logging, and common operations
-
Proxy Server (
proxy-server/): Node.js WebSocket bridge on port 3001- Routes commands between MCP servers and UXP plugins
- Manages real-time bidirectional communication
-
UXP Plugins (
uxp-plugins/): JavaScript plugins that execute commands within Adobe apps- Each app has its own plugin with manifest.json and command handlers
- Commands are organized in separate modules (e.g., layers.js, filters.js)
- AI client sends command to MCP server via stdin/stdout
- MCP server formats command and sends to proxy via WebSocket
- Proxy forwards to appropriate UXP plugin
- Plugin executes in Adobe app and returns result
- Response flows back through proxy to MCP server to AI client
- Command Pattern: All operations use
createCommand(action, options)structure - Socket Client: Centralized WebSocket client in
shared/socket_client.pyhandles all proxy communication - Error Handling: Commands return
{status: "ok"|"error", message: string, data: any} - Font Management: Shared font utilities in
shared/fonts.pywith PostScript name resolution
- Proxy Dependency: All MCP servers require the proxy server to be running on port 3001
- UXP Plugin Loading: Plugins must be manually loaded via Adobe UXP Developer Tools
- Environment Detection: Use
shared/adobe_detector.pyfor finding Adobe installations - WebSocket Timeout: Default timeout is 20 seconds for command execution
- Font Limit: Maximum 1000 fonts returned to prevent overwhelming AI context
- Add tool method to appropriate MCP server (e.g.,
adobe_mcp/photoshop/server.py) - Implement command handler in corresponding UXP plugin (e.g.,
uxp-plugins/photoshop/commands/) - Register command in plugin's command index
- Test via proxy with manual test script
install.ps1: Sets up virtual environment and dependenciestest-setup.ps1: Validates environment configurationrun-tests.ps1: Test runner with environment managementscripts/EnvUtils.psm1: PowerShell module for environment handlingscripts/ProxyManager.psm1: PowerShell module for proxy server management