Skip to main content
Glama
README.md
# EditX - Screenshot & Image Editor MCP Server

MCP server for taking screenshots and editing images with annotations, shapes, and effects. Inspired by ShareX functionality for Linux.

## Features

### šŸ“ø Screenshot Capture
- **Fullscreen**: Capture entire screen
- **Area Selection**: Interactive region selection (GUI)
- **Region**: Capture specific coordinates programmatically

### āœļø Drawing Tools
- **Arrows**: Point to specific areas
- **Rectangles**: Highlight regions
- **Step Numbers**: Numbered circles for tutorials (1, 2, 3...)
- **Text**: Add text annotations

### šŸŽØ Effects
- **Blur**: Gaussian blur for privacy
- **Pixelate**: Stronger privacy effect (faces, sensitive data)
- **Crop**: Cut image to specific region

### šŸ’¾ Image Management
- Load existing images
- Save in PNG/JPEG
- Undo operations
- Reset to original
- Image info and history

## Installation

```bash
cd /path/to/EditX
pip install -r requirements.txt
```

### System Dependencies (Linux)

For interactive area selection, install one of:
```bash
# Ubuntu/Debian
sudo apt install gnome-screenshot
# OR
sudo apt install scrot
```

## Configuration

Add to `~/.claude.json`:

```json
{
  "mcpServers": {
    "editx": {
      "type": "stdio",
      "command": "python",
      "args": [
        "/absolute/path/to/EditX/src/server.py"
      ]
    }
  }
}
```

Replace `/absolute/path/to/EditX` with the actual path where you cloned this repository.

## Usage Examples

### Basic Workflow

```
1. Take screenshot
   → take_screenshot(mode="fullscreen")

2. Add annotations
   → add_arrow(start_x=100, start_y=100, end_x=200, end_y=150)
   → add_rectangle(x=150, y=150, width=300, height=200)
   → add_step_number(x=250, y=250, number=1)

3. Add privacy blur
   → blur_region(x=400, y=100, width=200, height=50)

4. Save result
   → save_image(output_path="/path/to/annotated.png")
```

### Tutorial Screenshot with Steps

```
take_screenshot(mode="area")
add_step_number(x=100, y=100, number=1, bg_color="red")
add_step_number(x=100, y=200, number=2, bg_color="blue")
add_step_number(x=100, y=300, number=3, bg_color="green")
add_arrow(start_x=150, start_y=100, end_x=300, end_y=100)
save_image(output_path="tutorial.png")
```

### Privacy Screenshot

```
take_screenshot(mode="fullscreen")
blur_region(x=100, y=100, width=300, height=200, blur_amount=20)
pixelate_region(x=500, y=500, width=200, height=200, pixel_size=15)
save_image(output_path="private.png")
```

### Edit Existing Image

```
load_image(image_path="/path/to/existing.png")
add_rectangle(x=50, y=50, width=400, height=300, color="red", border_width=5)
add_text(x=60, y=60, text="Important!", color="red", size=24, bg_color="white")
save_image(output_path="/path/to/annotated.png")
```

## Available Tools

### Screenshot Tools

- **`take_screenshot`**: Capture screen
  - `mode`: "fullscreen" | "area" | "region"
  - `output_path`: (optional) where to save
  - `x, y, width, height`: (for "region" mode)

### Editing Tools

- **`load_image`**: Load existing image file
  - `image_path`: path to image

- **`add_arrow`**: Draw arrow
  - `start_x, start_y`: arrow start
  - `end_x, end_y`: arrowhead position
  - `color`: arrow color
  - `width`: line width

- **`add_rectangle`**: Draw rectangle
  - `x, y`: top-left corner
  - `width, height`: dimensions
  - `color`: border color
  - `border_width`: border thickness
  - `fill`: (optional) fill color

- **`add_step_number`**: Add numbered circle
  - `x, y`: center position
  - `number`: step number (1, 2, 3...)
  - `size`: circle diameter
  - `bg_color`: circle color
  - `text_color`: number color

- **`add_text`**: Add text annotation
  - `x, y`: text position
  - `text`: text content
  - `color`: text color
  - `size`: font size
  - `bg_color`: (optional) background

### Effects

- **`blur_region`**: Blur specific area
  - `x, y, width, height`: region
  - `blur_amount`: intensity (5-50)

- **`pixelate_region`**: Pixelate area (privacy)
  - `x, y, width, height`: region
  - `pixel_size`: block size (5-30)

- **`crop_image`**: Crop to region
  - `x, y, width, height`: crop area

### Management

- **`save_image`**: Save edited image
  - `output_path`: where to save
  - `format`: "PNG" | "JPEG"

- **`get_image_info`**: Get image details
- **`undo`**: Undo last operation
- **`reset_image`**: Reset to original

## Technical Details

### Architecture

```
EditX/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ server.py        # MCP server (main entry)
│   ā”œā”€ā”€ screenshot.py    # Screenshot capture (mss)
│   ā”œā”€ā”€ editor.py        # Image editor manager
│   ā”œā”€ā”€ shapes.py        # Drawing shapes (Pillow)
│   └── effects.py       # Image effects (Pillow + OpenCV)
ā”œā”€ā”€ requirements.txt
└── README.md
```

### Technology Stack

- **MCP Framework**: Server implementation
- **python-mss**: Fast cross-platform screenshots
- **Pillow (PIL)**: Image manipulation and drawing
- **OpenCV**: Advanced effects (blur, pixelate)
- **NumPy**: Array operations

### Workflow

1. Screenshot is captured and auto-loaded into editor
2. All edits are applied to the loaded image
3. Editor maintains history (up to 10 states)
4. Undo/reset available at any time
5. Save to desired format

## Colors Available

- `red`, `blue`, `green`, `yellow`, `black`, `white`, `orange`

## Tips

- **Step numbers**: Use different colors for different workflows
- **Blur vs Pixelate**: Blur for slight privacy, pixelate for strong privacy
- **Arrow direction**: Arrow points to `end` coordinates
- **History**: Max 10 undo states kept in memory
- **Formats**: Use PNG for transparency, JPEG for smaller files

## License

MIT License - see [LICENSE](LICENSE) file for details.