# GIMP Agent MCP (pypi · gimp-agent-mcp)

Edit in GIMP 3 with AI agents: live previews, grouped edits, pixel measurements and recipes.

- Trust score: 70/100 (medium)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- pypi · `gimp-agent-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp.md), [page](https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp)

## Channel facts

- Registry: `pypi`
- Package: `gimp-agent-mcp`
- Version: `0.5.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 1 of 29 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 35/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (Apache Software License) isn't a recognized OSI-approved license.
  - Actively maintained (last published 12 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 66/100
  - 50% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3679 tokens (~91/item across 40 items; 39 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 53/100
  - Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (95% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "gimp_shutdown" implies "shutdown" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the GIMP Agent MCP server?

GIMP Agent MCP runs locally as a PyPI package, launched with uvx gimp-agent-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add sarutobisasuke8-gimp-agent-mcp -- uvx gimp-agent-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "sarutobisasuke8-gimp-agent-mcp": {
      "command": "uvx",
      "args": [
        "gimp-agent-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "sarutobisasuke8-gimp-agent-mcp": {
      "command": "uvx",
      "args": [
        "gimp-agent-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add sarutobisasuke8-gimp-agent-mcp -- uvx gimp-agent-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sarutobisasuke8-gimp-agent-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "gimp-agent-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sarutobisasuke8-gimp-agent-mcp --command uvx --arg gimp-agent-mcp
```

### Hermes

```yaml
mcp_servers:
  sarutobisasuke8-gimp-agent-mcp:
    command: "uvx"
    args: ["gimp-agent-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "sarutobisasuke8-gimp-agent-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "gimp-agent-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add sarutobisasuke8-gimp-agent-mcp -t stdio -c uvx -a gimp-agent-mcp
```

### Other

```json
{
  "mcpServers": {
    "sarutobisasuke8-gimp-agent-mcp": {
      "command": "uvx",
      "args": [
        "gimp-agent-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-19 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 68, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 52, −15)

- [security regression] Malware scan: pass → unverified

### 2026-09-13 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-11 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 65, +22)

- [security improvement] Malware scan: unverified → pass
- [security improvement] Judged manipulation: unverified → pass
- [functional improvement] Schema quality: unverified → good

### 2026-09-08 (score 43, −6)

- [security regression] Judged manipulation: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Schema quality: 3248 → 3679
- [functional regression] Schema quality: excellent → unverified
- [functional] Package version: 0.4.0 → 0.5.0

## MCP tools (39)

### `gimp_help` (~58 tokens)

Read this first. How to work with GIMP through this server, by topic: start, filters, colours, text, masks, paths, layers, measure, recipes, compose, errors, or all.

Input parameters:

- `topic` (string)

Output parameters:

- `result` (string)

### `gimp_status` (~31 tokens)

Check whether GIMP and the agent bridge are reachable. Returns GIMP version, mode, and open images.

### `gimp_launch` (~55 tokens)

Start GIMP 3 with the bridge running. mode='gui' opens the normal window; 'headless' runs gimp-console with no UI.

Input parameters:

- `mode` (string)
- `wait_seconds` (integer)

### `gimp_shutdown` (~44 tokens)

Stop the bridge. quit_gimp defaults to True for headless sessions and False for the GUI (unsaved work is not prompted for).

Input parameters:

- `quit_gimp`

### `gimp_context` (~74 tokens)

Read a document's selected layers, selection bounds and bridge colour/brush context. Optionally select layers or present a GUI document. With multiple images pass image_id; focused-image detection is unavailable, never inferred from list order.

Input parameters:

- `image_id`
- `present` (boolean)
- `selected_layer_ids`

### `gimp_edit_batch` (~146 tokens)

Run 1..100 edits on one image in ONE undo group. steps=[{op:'layer'|'text'|'select'|'path'|'layer_mask'|'apply_filter', params:{...}}]. Params use the corresponding tool arguments; image_id is injected. Reference an earlier result with {'$ref':'0.id'}. Check complete/error: failure stops later steps, preserves partial work, and always closes the undo group. One Ctrl+Z in GIMP reverts it; this is not automatic rollback or programmatic undo. No edits by another bridge request interleave within the batch.

Input parameters:

- `image_id` (integer, required)
- `steps` (array, required)

### `gimp_list_images` (~25 tokens)

List open images with ids, dimensions, file path, and layer count.

Output parameters:

- `result` (array)

### `gimp_image_info` (~39 tokens)

Full structure of one image: layer tree with item ids, channels, paths, selection bounds, resolution.

Input parameters:

- `image_id` (integer, required)

### `gimp_new_image` (~60 tokens)

Create an RGB image with one layer. fill: 'transparent', 'white', 'black', 'foreground', 'background' or any colour.

Input parameters:

- `fill` (string)
- `height` (integer)
- `width` (integer)

### `gimp_open` (~41 tokens)

Open an image file (PNG, JPEG, WebP, XCF, PSD, SVG, ...) and return its structure.

Input parameters:

- `path` (string, required)

### `gimp_export` (~116 tokens)

Export an image; the extension chooses the format (.png .webp .jpg .tiff .bmp .gif .xcf). options are passed to the format's export procedure, e.g. {"quality": 0.85} for JPEG (0..1), {"quality": 80, "lossless": false} for WebP, {"compression": 9} for PNG. Unknown option names return the valid list.

Input parameters:

- `image_id` (integer, required)
- `options`
- `path` (string, required)

### `gimp_close_image` (~24 tokens)

Close an image without saving.

Input parameters:

- `image_id` (integer, required)

### `gimp_render` (~108 tokens)

Render an image as PNG. layer_id isolates a layer; region crops. Diagnostic overlays may include grid, layers, selection and points. points=[{"x": 100, "y": 80, "label": "target"}]. Overlays affect only the returned preview.

Input parameters:

- `grid_size` (integer)
- `image_id`
- `layer_id`
- `max_size` (integer)
- `overlay`
- `points`
- `region`

### `gimp_pdb_search` (~53 tokens)

Search GIMP's Procedure Database by words in the procedure name (e.g. 'image scale', 'layer text', 'file png').

Input parameters:

- `limit` (integer)
- `query` (string)

### `gimp_pdb_describe` (~38 tokens)

Describe a PDB procedure: arguments with types, defaults and enum choices, plus return values.

Input parameters:

- `name` (string, required)

### `gimp_pdb_call` (~162 tokens)

Call any PDB procedure by name with arguments keyed by name. Pass images/items as ids, colours as strings, enums by nick. Example: name="gimp-image-scale", args={"image": 3, "new-width": 800, "new-height": 600}; name="gimp-image-select-round-rectangle", args={"image": 3, "operation": "replace", "x": 10, "y": 10, "width": 200, "height": 80, "corner-radius-x": 20, "corner-radius-y": 20}. Use gimp_pdb_describe first when unsure.

Input parameters:

- `args`
- `name` (string, required)
- `undo_group` (boolean)

### `gimp_filter_search` (~48 tokens)

Search the GEGL operations available as filters (e.g. 'blur', 'shadow', 'levels', 'noise').

Input parameters:

- `limit` (integer)
- `query` (string)

### `gimp_filter_describe` (~34 tokens)

Describe a GEGL operation's properties (names, types, ranges, defaults).

Input parameters:

- `op` (string, required)

### `gimp_apply_filter` (~179 tokens)

Apply a GEGL operation to a layer. mode='merge' bakes it in; mode='append' adds a non-destructive layer effect. Examples: white outline = op="gegl:dropshadow", params={"x":0,"y":0,"radius":0,"grow-radius":8,"color":"white"}; soft shadow = {"x":0,"y":6,"radius":12,"opacity":0.4}; blur = op="gegl:gaussian-blur", params={"std-dev-x":4,"std-dev-y":4}. gimp_help("filters") lists the useful ops.

Input parameters:

- `blend_mode`
- `layer_id` (integer, required)
- `mode` (string)
- `name`
- `op` (string, required)
- `opacity`
- `params`

### `gimp_adjust` (~120 tokens)

Common adjustments without discovery. action: brightness_contrast, hue_saturation, curves, desaturate, invert, blur, sharpen, noise, pixelate. mode='append' keeps GEGL actions editable; mode='merge' bakes pixels. curves is destructive and needs params={channel:'value', points:[0,0,1,1]}. Returns the installed operation description used.

Input parameters:

- `action` (string, required)
- `layer_id` (integer, required)
- `mode` (string)
- `name`
- `params`

### `gimp_layer_effects` (~31 tokens)

List the non-destructive filters currently attached to a layer.

Input parameters:

- `layer_id` (integer, required)

Output parameters:

- `result` (array)

### `gimp_measure` (~115 tokens)

Measure pixels instead of guessing from a render. kind='color' (rgba at image x,y), 'bbox' (bounding box of non-transparent pixels), 'histogram' (mean/median/std per channel), 'dominant' (top k colours). Defaults to the selected layer.

Input parameters:

- `channels`
- `image_id`
- `k` (integer)
- `kind` (string, required)
- `layer_id`
- `threshold` (integer)
- `x`
- `y`

### `gimp_snapshot` (~39 tokens)

Take a hidden snapshot of an image's current state so gimp_render_compare can show before/after later.

Input parameters:

- `image_id` (integer, required)

### `gimp_drop_snapshot` (~44 tokens)

Release a stored comparison snapshot. At most 16 may be retained per bridge; snapshots are also cleaned up when the bridge closes.

Input parameters:

- `snapshot_id` (integer, required)

### `gimp_render_compare` (~82 tokens)

Side-by-side render of a snapshot and the current image. panels is a comma list of before, after, diff (diff = pixel difference, black means identical).

Input parameters:

- `drop_snapshot` (boolean)
- `image_id` (integer, required)
- `max_size` (integer)
- `panels` (string)
- `snapshot_id` (integer, required)

### `gimp_select` (~176 tokens)

Selection in one tool. mode: rect, ellipse (x,y,width,height), color (color, threshold 0..1, layer_id), alpha (layer_id: select the layer's opaque pixels), item (item_id: path or channel), all, none, invert, grow/shrink/feather/border (amount), bounds (just report). op: replace, add, subtract, intersect. Returns the selection bounds.

Input parameters:

- `amount`
- `color`
- `height`
- `image_id` (integer, required)
- `item_id`
- `layer_id`
- `mode` (string)
- `op` (string)
- `sample_merged` (boolean)
- `threshold` (number)
- `width`
- `x`
- `y`

### `gimp_canvas` (~122 tokens)

Common canvas operations without PDB discovery. action: scale, crop, resize, rotate (angle 90/180/270), flip (direction horizontal/vertical), merge_visible, flatten. Operations bake pixels or layer structure and return the installed PDB description plus final image info.

Input parameters:

- `action` (string, required)
- `angle`
- `direction`
- `height`
- `image_id` (integer, required)
- `merge_type` (string)
- `width`
- `x` (integer)
- `y` (integer)

### `gimp_draw` (~147 tokens)

Fill or draw without PDB discovery. action: fill_layer, fill_selection, rectangle, ellipse, rectangle_outline, ellipse_outline, line. Colours use the normal CSS/#hex convention; coordinates are image pixels. Shapes clear their temporary selection. Drawing bakes pixels and returns every installed PDB operation used.

Input parameters:

- `action` (string, required)
- `color` (string)
- `height`
- `image_id` (integer, required)
- `layer_id` (integer, required)
- `line_width` (number)
- `method` (string)
- `width`
- `x`
- `x2`
- `y`
- `y2`

### `gimp_layer_mask` (~88 tokens)

Layer masks. action='add' with type selection|alpha|alpha-transfer|white|black|copy; 'apply' bakes the mask in; 'remove' discards it; 'enable'/'disable' toggle it; 'show'/'hide' preview it.

Input parameters:

- `action` (string)
- `layer_id` (integer, required)
- `type` (string)

### `gimp_layer` (~192 tokens)

Layer operations. action: new (image_id, name, width, height, fill, x, y, position), set (name, visible, opacity, mode, x, y, lock), move (dx, dy), reorder (position, parent_id), duplicate, merge_down, delete, resize_to_image, scale (width, height), add_alpha, crop_to_content, info.

Input parameters:

- `action` (string, required)
- `dx`
- `dy`
- `fill`
- `height`
- `image_id`
- `layer_id`
- `local_origin` (boolean)
- `lock`
- `merge_type`
- `mode`
- `name`
- `opacity`
- `parent_id`
- `position`
- `visible`
- `width`
- `x`
- `y`

### `gimp_layer_effect` (~84 tokens)

Edit or delete a non-destructive layer effect (ids from gimp_layer_effects). action='set' updates params/visible/opacity/blend_mode; 'delete' removes it.

Input parameters:

- `action` (string)
- `blend_mode`
- `filter_id` (integer, required)
- `opacity`
- `params`
- `visible`

### `gimp_list_fonts` (~35 tokens)

List installed font names, optionally filtered by a regex.

Input parameters:

- `filter` (string)
- `limit` (integer)

### `gimp_text` (~132 tokens)

Create a text layer (image_id + text) or edit one (layer_id). size in px, font by name (gimp_list_fonts), colour, justify left|center|right|fill, spacing, optional fixed box.

Input parameters:

- `box_height`
- `box_width`
- `color`
- `font`
- `image_id`
- `justify`
- `layer_id`
- `letter_spacing`
- `line_spacing`
- `name`
- `size`
- `text`
- `x`
- `y`

### `gimp_path` (~148 tokens)

Vector paths. action='create' (image_id, strokes=[{type:'line'|'bezier', points:[[x,y],...], closed:bool}]; bezier points after the first are control1, control2, anchor triples), 'select' (path to selection), 'stroke' (draw it on layer_id with color and width), 'fill' (fill it on layer_id), 'delete'.

Input parameters:

- `action` (string)
- `color`
- `image_id`
- `layer_id`
- `name`
- `op` (string)
- `path_id`
- `strokes`
- `width` (number)

### `gimp_remove_background` (~115 tokens)

AI subject cut-out. Runs a segmentation model on the layer and writes the result as an editable layer mask (mode='mask') or bakes it into the alpha channel (mode='apply'). Needs the optional segmentation extra. Models: u2net (default), isnet-general-use, u2net_human_seg, isnet-anime, silueta.

Input parameters:

- `alpha_matting` (boolean)
- `layer_id` (integer, required)
- `mode` (string)
- `model` (string)

### `gimp_run_python` (~81 tokens)

Run Python inside GIMP. Gimp, Gegl, Gio, GLib and helpers image_by_id/item_by_id/make_color are available; the namespace persists between calls. Returns stdout plus the expression value or `result`. Pass image_id to wrap the call in one undo step.

Input parameters:

- `code` (string, required)
- `image_id`

### `gimp_list_recipes` (~20 tokens)

List tested multi-step recipes and their parameters.

Output parameters:

- `result` (array)

### `gimp_run_recipe` (~42 tokens)

Run a recipe by name with parameters. Recipes are Python jobs executed inside GIMP with defaults applied.

Input parameters:

- `name` (string, required)
- `params`

### `gimp_batch_recipe` (~70 tokens)

Run a recipe over every file matching input_glob, writing to output_dir. Recipes must accept input_path and output_path.

Input parameters:

- `input_glob` (string, required)
- `name` (string, required)
- `output_dir` (string, required)
- `output_ext`
- `params`

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp#diagnostics

## Score history

- 2026-09-21: 70
- 2026-09-20: 70
- 2026-09-19: 70
- 2026-09-18: 69
- 2026-09-17: 69
- 2026-09-16: 68
- 2026-09-15: 68
- 2026-09-14: 52
- 2026-09-13: 67
- 2026-09-12: 66
- 2026-09-11: 66
- 2026-09-10: 65
- 2026-09-09: 65
- 2026-09-08: 43
- 2026-09-07: 49
- 2026-09-06: 64
- 2026-09-05: 48

## Common questions

### What is the GIMP Agent MCP server?

GIMP Agent MCP is listed in the public MCP registry as io.github.SarutobiSasuke8/gimp-agent-mcp. Edit in GIMP 3 with AI agents: live previews, grouped edits, pixel measurements and recipes. This page covers its PyPI package (gimp-agent-mcp).

### Is the GIMP Agent MCP server safe to use?

GIMP Agent MCP scores 70 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the GIMP Agent MCP server expose?

GIMP Agent MCP exposes 39 tools: gimp_help, gimp_status, gimp_launch, gimp_shutdown, gimp_context, and 34 more. Their descriptions and schemas cost roughly 3,218 tokens of context every time the server is loaded.

### Is the GIMP Agent MCP server still maintained?

GIMP Agent MCP is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- PyPI project: https://pypi.org/project/gimp-agent-mcp/
- Socket report: https://socket.dev/pypi/package/gimp-agent-mcp
- Repository: https://github.com/SarutobiSasuke8/gimp-agent-mcp
- Website: https://pypi.org/project/gimp-agent-mcp/
- Changelog RSS feed: https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp.json
- HTML version of this page: https://verifymcp.io/servers/sarutobisasuke8-gimp-agent-mcp/gimp-agent-mcp
