Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

GIMP 3 MCP

PYPI · GIMP3-MCP · SCANNED SEP 21

Let AI assistants paint, edit and export images in a running GIMP 3, with 80 tools.

Available components

65 Trust /100
Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 29 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency32
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 13732 tokens (~171/item across 80 items; 80 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (1% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "restart_server" implies "drop" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 81 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the GIMP 3 MCP server?

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

pypi · gimp3-mcp

# add to Claude Code
claude mcp add tifyr-gimp3-mcp -- uvx gimp3-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "tifyr-gimp3-mcp": {
      "command": "uvx",
      "args": [
        "gimp3-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "tifyr-gimp3-mcp": {
      "command": "uvx",
      "args": [
        "gimp3-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add tifyr-gimp3-mcp -- uvx gimp3-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tifyr-gimp3-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "gimp3-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tifyr-gimp3-mcp --command uvx --arg gimp3-mcp
# ~/.hermes/config.yaml
mcp_servers:
  tifyr-gimp3-mcp:
    command: "uvx"
    args: ["gimp3-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "tifyr-gimp3-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "gimp3-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add tifyr-gimp3-mcp -t stdio -c uvx -a gimp3-mcp
// mcp.json
{
  "mcpServers": {
    "tifyr-gimp3-mcp": {
      "command": "uvx",
      "args": [
        "gimp3-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Sept 26 +15
    • Malware scan: unverified → pass security
  • 16 Sept 26 50

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed pypi/gimp3-mcp@0.2.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 29 packages
Packages resolved 29
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 80 exposed · ~13,404 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_text ~215

Add a text layer to an image. Parameters: - text: The text string to render - x, y: Position of the text layer's top-left corner (default 0, 0) - font: Font family name — "Sans" (default), "Serif", etc. - size: Font size in pixels (default 24) - color: Text color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); default "black" - image_index: Target image index (default 0) Returns: {layer_name, layer_id, text_width, text_height, position}

NameTypeReqDescription
colorstring
fontstring
image_indexinteger
sizeinteger
textstringyes
xinteger
yinteger

No output schema declared.

No examples provided.

adjust_brightness_contrast ~104

Adjust brightness and contrast of a layer. Parameters: - brightness: -127 to +127 (default 0) - contrast: -127 to +127 (default 0) - image_index: Target image index (default 0) - layer_name: Layer to adjust; defaults to active layer Returns status dict.

NameTypeReqDescription
brightnessinteger
contrastinteger
image_indexinteger
layer_name

No output schema declared.

No examples provided.

adjust_color_balance ~171

Adjust color balance (shadows / midtones / highlights) of a layer. Parameters: - cyan_red: -100 to +100 (negative = cyan, positive = red; default 0) - magenta_green: -100 to +100 (default 0) - yellow_blue: -100 to +100 (default 0) - range: "shadows", "midtones" (default), "highlights" - image_index: Target image index (default 0) - layer_name: Layer to adjust; defaults to active layer Returns status dict.

NameTypeReqDescription
cyan_rednumber
image_indexinteger
layer_name
magenta_greennumber
rangestring
yellow_bluenumber

No output schema declared.

No examples provided.

adjust_curves ~147

Adjust tonal curves for a layer. Parameters: - preset: Built-in curve shape — "s_curve" (default), "lighten", "darken", "contrast" - points: Custom control points as [[input, output], ...] override (overrides preset) - channel: "value" (all), "red", "green", "blue", "alpha" - image_index: Target image index (default 0) - layer_name: Layer to adjust; defaults to active layer Returns status dict.

NameTypeReqDescription
channelstring
image_indexinteger
layer_name
points
presetstring

No output schema declared.

No examples provided.

adjust_hue_saturation ~177

Adjust hue, saturation, and lightness of a layer. Parameters: - hue: Hue rotation -180 to +180 (default 0) - saturation: Saturation shift -100 to +100 (default 0) - lightness: Lightness shift -100 to +100 (default 0) - color_range: "all", "red", "yellow", "green", "cyan", "blue", "magenta" (default "all") - image_index: Target image index (default 0) - layer_name: Layer to adjust; defaults to active layer Returns status dict.

NameTypeReqDescription
color_rangestring
huenumber
image_indexinteger
layer_name
lightnessnumber
saturationnumber

No output schema declared.

No examples provided.

apply_drop_shadow ~201

Apply a drop shadow effect to a layer. Parameters: - offset_x, offset_y: Shadow offset in pixels (default 5, 5) - blur_radius: Shadow softness radius (default 10) - color: Shadow color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); default "black" - opacity: Shadow opacity 0-100 (default 60) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
blur_radiusnumber
colorstring
image_indexinteger
layer_name
offset_xinteger
offset_yinteger
opacitynumber

No output schema declared.

No examples provided.

apply_emboss ~142

Apply an emboss (bas-relief) effect to a layer. Parameters: - azimuth: Light direction in degrees 0-360 (default 315 = top-left) - elevation: Light elevation angle 0-90 (default 45) - depth: Effect depth/intensity, whole number 1-100 (default 2) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
azimuthnumber
depthnumber
elevationnumber
image_indexinteger
layer_name

No output schema declared.

No examples provided.

apply_gaussian_blur ~96

Apply Gaussian blur as a destructive filter operation. Same as blur with equal horizontal and vertical radii. Parameters: - radius: Blur radius in pixels (default 5.0) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name
radiusnumber

No output schema declared.

No examples provided.

apply_noise ~87

Add noise/grain to a layer. Parameters: - amount: Noise intensity 0.0-1.0 (default 0.2) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
amountnumber
image_indexinteger
layer_name

No output schema declared.

No examples provided.

apply_pixelate ~87

Pixelate a layer using a mosaic/block effect. Parameters: - block_size: Size of each mosaic block in pixels (default 10) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
block_sizeinteger
image_indexinteger
layer_name

No output schema declared.

No examples provided.

apply_vignette ~128

Apply a vignette darkening effect around the edges of a layer. Parameters: - softness: Edge softness / fade width, 0.0-1.0 (default 0.8) - shape: "circle" (default), "square", "diamond", "horizontal" or "vertical" - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name
shapestring
softnessnumber

No output schema declared.

No examples provided.

auto_levels ~74

Automatically stretch the tonal range of an image (auto levels / auto stretch contrast). Parameters: - image_index: Index of the target image (default 0) - layer_name: Name of the layer to adjust; defaults to active layer Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name

No output schema declared.

No examples provided.

batch_export ~180

Export all open images (or a specific one) to a directory. Parameters: - output_dir: Directory to write exported files into - format: "png", "jpeg", "webp", "tiff" (default "png") - quality: JPEG/WEBP quality (default 90) - name_pattern: Filename template — use {name} for image name, {index} for position - image_index: If set, export only that image; omit to export all open images Returns: - exported: list of {file_path, name, width, height} - count: number of files written - errors: list of any export errors

NameTypeReqDescription
formatstring
image_index
name_patternstring
output_dirstringyes
qualityinteger

No output schema declared.

No examples provided.

batch_resize ~129

Resize all open images to a common target size. Parameters: - width / height: Target dimensions in pixels (provide one or both) - scale_factor: Proportional scale (e.g. 0.5 = 50%); overrides width/height if set - maintain_aspect: Preserve aspect ratio when only one dimension is given (default True) Returns: {results: [{image_id, old_width, old_height, new_width, new_height}], count}

NameTypeReqDescription
height
maintain_aspectboolean
scale_factor
width

No output schema declared.

No examples provided.

blur ~124

Apply Gaussian blur to a layer. Same as apply_gaussian_blur, but with separate horizontal and vertical radii. Parameters: - radius_x: Horizontal blur radius in pixels (default 5.0) - radius_y: Vertical blur radius in pixels (default 5.0) - image_index: Target image index (default 0) - layer_name: Layer to blur; defaults to active layer Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name
radius_xnumber
radius_ynumber

No output schema declared.

No examples provided.

call_api ~1,229

Call GIMP 3.2 API methods through PyGObject console. GIMP MCP Protocol: - Use api_path="exec" to execute Python code in GIMP - args[0] should be "pyGObject-console" for executing commands - args[1] should be array of Python code strings to execute - Each array item runs as its own exec(): put a multi-line block (for/if/def) in ONE item with embedded newlines, not split across items - Only print() output is returned (one string per item); bare expressions are not echoed. To get values back, use args[0] = "pyGObject-eval" with a list of expressions, e.g. ["pyGObject-eval", ["len(Gimp.get_images())"]] - Commands execute in persistent context - imports and variables persist - Always call Gimp.displays_flush() after drawing operations For image operations, use get_image_bitmap() which return proper MCP Image objects that Claude can process directly. GUIDANCE PROMPTS: - For common operations and best practices, invoke the 'gimp_best_practices' prompt - For complex multi-element drawings with layers, invoke the 'gimp_iterative_workflow' prompt Optional Initialization Pattern: ["images = Gimp.get_images()", "image1 = images[0]", "layers = image1.get_layers()", "layer1 = layers[0]", "drawable1 = layer1"] Common Operations: - Draw line: ["Gimp.pencil(drawable1, [0, 0, 200, 200])", "Gimp.displays_flush()"] - Set color: ["from gi.repository import Gegl", "red_color = Gegl.Color.new('red')", "Gimp.context_set_foreground(red_color)"] - Draw ellipse: ["Gimp.Image.select_ellipse(image1, Gimp.ChannelOps.REPLACE, 100, 100, 30, 20)", "Gimp.Drawable.edit_fill(drawable1, Gimp.FillType.FOREGROUND)", "Gimp.Selection.none(image1)", "Gimp.displays_flush()"] - Paint curve: ["Gimp.paintbrush_default(drawable1, [50.0, 50.0, 150.0, 200.0, 250.0, 50.0, 350.0, 200.0])", "Gimp.displays_flush()"] - Draw bezier curve: ["path = Gimp.Path.new(image1, 'my_bezier_path')", "image1.insert_path(path, None,…

NameTypeReqDescription
api_pathstringyes
args
kwargs
NameTypeReqDescription
resultstringyes

No examples provided.

check_server ~89

Check whether the GIMP MCP plugin socket is reachable and responding. Returns a status dict: - connected: bool - host / port: where it tried - gimp_version: if connected successfully - error: description if not connected Use this before any other operation to verify the GIMP plugin is running. If not connected, open GIMP and run Tools > MCP > Start MCP Server.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

close_image ~226

Close an image, optionally saving as XCF first. Closes images opened with new_canvas or open_image, and images that have no window. GIMP 3 gives plug-ins no way to close a window opened from GIMP's own menus, so for those images this returns an error and they must be closed in GIMP. Parameters: - image_index: Index of the image to close (default 0 = most recently opened) - save_first: If True, save as XCF before closing (default False). An image opened from an XCF file is saved over that file. Any other image is saved as a new .xcf next to the file it came from (in the temp directory if it has none), named name-2.xcf, name-3.xcf, ... instead of overwriting an existing file. Without save_first, unsaved changes are discarded. Returns: {closed_image_id, saved_to (XCF path, or null)}

NameTypeReqDescription
image_indexinteger
save_firstboolean

No output schema declared.

No examples provided.

convert_color_mode ~112

Convert an image to a different color mode. Parameters: - mode: "RGB", "RGBA", "GRAY", "GRAYA" (the A forms also add alpha to every layer) or "INDEXED" - num_colors: Number of colors for INDEXED mode, 1-256 (default 256) - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
image_indexinteger
modestringyes
num_colorsinteger

No output schema declared.

No examples provided.

create_layer ~293

Create and insert a new layer into an image. Parameters: - name: Layer name (default "New Layer") - width, height: Layer dimensions; defaults to image dimensions - fill: "transparent" (default) or a color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) - opacity: Layer opacity 0-100 (default 100) - blend_mode: NORMAL (default), MULTIPLY, SCREEN, OVERLAY, DARKEN, LIGHTEN, DODGE, BURN, HARD_LIGHT, SOFT_LIGHT, DIFFERENCE, HUE, SATURATION, COLOR, LUMINOSITY or DISSOLVE (case-insensitive; other names are rejected) - position: Stack index, 0 = top of the stack; -1 (default) = directly above the active layer - image_index: Target image index (default 0) Returns: {layer_name, layer_id, width, height, position}

NameTypeReqDescription
blend_modestring
fillstring
height
image_indexinteger
namestring
opacitynumber
positioninteger
width

No output schema declared.

No examples provided.

crop_to_rect ~105

Crop the image canvas to an explicit rectangle. Parameters: - x, y: Top-left corner of the crop rectangle - width, height: Dimensions of the crop rectangle - image_index: Target image index (default 0) Returns: {status, x, y, width, height}

NameTypeReqDescription
heightintegeryes
image_indexinteger
widthintegeryes
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

crop_to_selection ~87

Crop the image canvas to the current selection bounds. Parameters: - autocrop: If True, auto-detect crop bounds instead of using selection (default False) - image_index: Target image index (default 0) Returns: {status, x, y, width, height} — crop region applied

NameTypeReqDescription
autocropboolean
image_indexinteger

No output schema declared.

No examples provided.

delete_layer ~95

Delete a layer from an image. Parameters: - layer_name: Name of the layer to delete - layer_index: Position index of the layer (alternative to layer_name) - image_index: Target image index (default 0) Provide either layer_name or layer_index. Defaults to active layer if neither given. Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_index
layer_name

No output schema declared.

No examples provided.

denoise ~88

Reduce noise in a layer using GEGL noise-reduction. Parameters: - strength: Noise reduction strength 0-100 (default 50) - image_index: Target image index (default 0) - layer_name: Layer to denoise; defaults to active layer Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name
strengthinteger

No output schema declared.

No examples provided.

desaturate ~99

Convert a layer to grayscale (desaturate). Parameters: - mode: Desaturation algorithm — "luminosity" (default), "luma", "average", "lightness" - image_index: Target image index (default 0) - layer_name: Layer to desaturate; defaults to active layer Returns status dict.

NameTypeReqDescription
image_indexinteger
layer_name
modestring

No output schema declared.

No examples provided.

draw_ellipse ~201

Draw an ellipse outline (stroke only) on a layer. Parameters: - x, y: Top-left corner of the bounding box - width, height: Bounding box dimensions - color: Stroke color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); uses current foreground if omitted - line_width: Stroke width in pixels (default 2.0) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
color
heightintegeryes
image_indexinteger
layer_name
line_widthnumber
widthintegeryes
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

draw_line ~225

Draw a straight line on a layer. Parameters: - x1, y1: Start point - x2, y2: End point - color: Stroke color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); uses current foreground if omitted - width: Stroke width in pixels (default 2.0) - tool: "pencil" (default, hard edge) or "paintbrush" (soft edge) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
color
image_indexinteger
layer_name
toolstring
widthnumber
x1numberyes
x2numberyes
y1numberyes
y2numberyes

No output schema declared.

No examples provided.

draw_rectangle ~195

Draw a rectangle outline (stroke only) on a layer. Parameters: - x, y: Top-left corner - width, height: Rectangle dimensions - color: Stroke color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); uses current foreground if omitted - line_width: Stroke width in pixels (default 2.0) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
color
heightintegeryes
image_indexinteger
layer_name
line_widthnumber
widthintegeryes
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

duplicate_layer ~71

Duplicate a layer and insert the copy above it. Parameters: - layer_name: Name of the layer to duplicate; defaults to active layer - image_index: Target image index (default 0) Returns: {layer_name, layer_id}

NameTypeReqDescription
image_indexinteger
layer_name

No output schema declared.

No examples provided.

edit_text ~228

Edit an existing text layer's content or formatting. Parameters: - layer_name: Name of the text layer to edit - text: New text content (omit to leave unchanged) - font: New font family (omit to leave unchanged) - size: New font size in pixels (omit to leave unchanged) - color: New text color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) (omit to leave unchanged) - image_index: Target image index (default 0) All values are checked before anything changes. A font name GIMP does not have falls back to a similar or default font, so check the returned font. Returns: {layer_name (it can change with the text), text, font, size}

NameTypeReqDescription
color
font
image_indexinteger
layer_namestringyes
size
text

No output schema declared.

No examples provided.

export_icon_sizes ~222

Export an image as a complete icon set for Android or iOS. Android sizes: 48 (mdpi), 72 (hdpi), 96 (xhdpi), 144 (xxhdpi), 192 (xxxhdpi), 512 (Play Store) iOS sizes: 20x1/2/3, 29x1/2/3, 40x2/3, 60x2/3, 76x1/2, 83.5x2, 1024x1 Parameters: - output_dir: Directory to write icon files into - platform: "android" (default) or "ios" - source_image_index: Image to use as source (default 0) - format: Output format — "png" (default) Returns: {exported: [{size, file_path}], count, platform}

NameTypeReqDescription
formatstring
output_dirstringyes
platformstring
source_image_indexinteger

No output schema declared.

No examples provided.

export_image ~163

Export the current image to a raster file (PNG, JPEG, WEBP, TIFF). Parameters: - file_path: Absolute path for the output file - format: Output format — "png" (default), "jpeg", "webp", "tiff" - quality: JPEG/WEBP quality 1-100 (default 90; ignored for PNG/TIFF) - flatten: Flatten all layers before export (default True) - image_index: Index of the image to export (default 0) Returns: - status, file_path, format, file_size_bytes

NameTypeReqDescription
file_pathstringyes
flattenboolean
formatstring
image_indexinteger
qualityinteger

No output schema declared.

No examples provided.

export_social_media_kit ~157

Export an image resized for multiple social media platforms. Platform sizes (all in pixels): - instagram_square: 1080x1080 - instagram_story: 1080x1920 - twitter_header: 1500x500 - facebook_cover: 820x312 - youtube_thumbnail: 1280x720 Parameters: - output_dir: Directory to write output files - platforms: List of platform names to export (omit for all five) - image_index: Source image index (default 0) Returns: {exported: [{platform, file_path, width, height}], count}

NameTypeReqDescription
image_indexinteger
output_dirstringyes
platforms

No output schema declared.

No examples provided.

export_sprite_sheet ~188

Combine multiple frames into a sprite sheet PNG. Parameters: - output_path: Absolute path for the output PNG file - columns: Number of columns in the grid (defaults to square root of frame count) - padding: Pixel gap between frames (default 0) - source: "layers" (each layer is a frame, in list_layers order; default) or "images" (each open image's visible result, in list_images order) - image_index: Source image when source="layers" (default 0) Each cell is the size of the first frame; bigger frames are cropped. Transparency is kept. Returns: {file_path, columns, rows, frame_width, frame_height, count}

NameTypeReqDescription
columns
image_indexinteger
output_pathstringyes
paddinginteger
sourcestring

No output schema declared.

No examples provided.

export_web_optimized ~163

Export an image as both JPEG and PNG, choosing the smaller format. Parameters: - output_dir: Directory to write output files - jpeg_quality: JPEG quality 1-100 (default 85) - png_compression: PNG compression level, 0 (fastest, largest) to 9 (smallest; default) - max_width / max_height: Optional scaling before export - image_index: Source image index (default 0) Returns: {jpeg_path, jpeg_size, png_path, png_size, recommendation}

NameTypeReqDescription
image_indexinteger
jpeg_qualityinteger
max_height
max_width
output_dirstringyes
png_compressioninteger

No output schema declared.

No examples provided.

fill_ellipse ~171

Fill an elliptical region with a solid color. Parameters: - x, y: Top-left corner of the bounding box - width, height: Bounding box dimensions - color: Fill color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
colorstringyes
heightintegeryes
image_indexinteger
layer_name
widthintegeryes
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

fill_layer ~121

Fill an entire layer with a solid color. Parameters: - color: Fill color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) - layer_name: Layer to fill; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
colorstringyes
image_indexinteger
layer_name

No output schema declared.

No examples provided.

fill_rectangle ~165

Fill a rectangular region with a solid color. Parameters: - x, y: Top-left corner - width, height: Rectangle dimensions - color: Fill color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
colorstringyes
heightintegeryes
image_indexinteger
layer_name
widthintegeryes
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

fill_selection ~181

Fill the current selection with a color or fill type. Parameters: - color: Fill color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple) (used when fill_type is omitted) - fill_type: Instead of color: "foreground" or "background" (GIMP's current colors, see set_colors), "pattern", or "transparent" (clears the selection). Give color or fill_type. - image_index: Target image index (default 0) - layer_name: Target layer; defaults to active layer Returns status dict.

NameTypeReqDescription
color
fill_type
image_indexinteger
layer_name

No output schema declared.

No examples provided.

flatten_image ~43

Flatten all layers into a single background layer. Parameters: - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
image_indexinteger

No output schema declared.

No examples provided.

flip_image ~62

Flip the entire image horizontally or vertically. Parameters: - direction: "horizontal" (default) or "vertical" - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
directionstring
image_indexinteger

No output schema declared.

No examples provided.

get_context_state ~195

Get the current GIMP context state (colors, brush, settings). IMPORTANT: Context state can be changed by the user in GIMP UI at any time. Check context state before operations that depend on specific settings. Returns information about: - Foreground and background colors as sRGB hex ("#rrggbb", as tools accept) and alpha 0-1 - Current brush and its properties - Opacity setting (0-100%) - Paint mode, named like set_layer_properties blend modes (e.g. "NORMAL") - Feather state and radius [x, y] - Antialiasing state Use cases: - Verify colors before drawing operations - Check if feathering is enabled (avoid unwanted blurry edges) - Ensure correct opacity and blend mode - Detect if user changed settings in GIMP UI Returns: - Dictionary containing current context state - Raises exception if unable to get context state

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_gimp_info ~111

Get comprehensive information about the GIMP installation and environment. Returns detailed information about GIMP that AI assistants need to understand the current environment, including: - GIMP version and build information - Installation paths and directories - Available plugins and procedures - System configuration - Runtime environment details This information helps AI assistants provide better support and troubleshooting by understanding the specific GIMP setup they're working with. Returns: - Dictionary containing comprehensive GIMP environment information - Raises exception if GIMP connection fails

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_histogram ~131

Get histogram statistics for one channel of a layer. Parameters: - channel: "value" (all; default), "red", "green", "blue", "alpha" - image_index: Target image index (default 0) - layer_name: Layer to measure; defaults to the active layer Returns: {layer, mean, std_dev, median (on a 0-255 scale), pixels (in the layer), count (pixels in range), percentile (fraction of pixels in range)}

NameTypeReqDescription
channelstring
image_indexinteger
layer_name

No output schema declared.

No examples provided.

get_image_bitmap ~366

Get an open image in GIMP as an Image object with optional scaling and region selection. Renders the image data (all visible layers), independent of GIMP's zoom or scroll. No size restrictions — pass any max_width/max_height you need. For large images, omit max_width/max_height to get the full resolution. Supports two main use cases: 1. Full image with optional scaling (pass max_width/max_height) 2. Region extraction with optional scaling (pass region dict) Parameters: - max_width, max_height: Box to scale the image into, preserving aspect ratio (smaller images are enlarged). Omit for full resolution. - region: Dictionary with keys (image pixel coordinates, integers): - origin_x, origin_y: Top-left corner of region to extract - width, height: Dimensions of region to extract - max_width, max_height: Optional box to scale the region into (small regions are enlarged) Other keys (such as x/y) are rejected. - image_index: Which open image to render (default 0 = most recently opened; see list_images) Examples: - Full image at full res: get_image_bitmap() - Full image scaled: get_image_bitmap(max_width=2048, max_height=2048) - Region: get_image_bitmap(region={"origin_x": 0, "origin_y": 0, "width": 512, "height": 512}) get_state_snapshot is a shorter way to ask for the same image. Returns: the image as PNG. Fails if no image is open, the region is invalid, or export fails.

NameTypeReqDescription
image_indexinteger
max_height
max_width
region

No output schema declared.

No examples provided.

get_image_metadata ~147

Get metadata about an open image in GIMP without the bitmap data. Parameters: - image_index: Which open image to describe (default 0 = most recently opened; see list_images) Returns detailed information about the image including: - Image dimensions (width, height) - Color mode and base type - Number of layers and channels - File information if available - Layer structure and properties This is much faster than get_image_bitmap() since it doesn't export the actual image data. Perfect for when you only need to know image properties for decision making. Returns: - Dictionary containing comprehensive image metadata - Raises exception if no images are open

NameTypeReqDescription
image_indexinteger

No output schema declared.

No examples provided.

get_pixel_color ~180

Get the color of a single pixel. sample_color does the same and can average over a radius; it reports alpha as 0-1, this tool as 0-255. Parameters: - x, y: Image pixel coordinates - image_index: Target image index (default 0) - layer_name: Layer to sample when sample_merged is false; defaults to active layer - sample_merged: true (default) samples what is visible across all layers; false samples only one layer Returns: {color_hex (sRGB), color_rgb: [r, g, b], alpha (0-255), sampled (what was read)}

NameTypeReqDescription
image_indexinteger
layer_name
sample_mergedboolean
xintegeryes
yintegeryes

No output schema declared.

No examples provided.

get_selection_bounds ~54

Get the bounding rectangle of the current selection. Parameters: - image_index: Target image index (default 0) Returns: {has_selection, x, y, width, height}

NameTypeReqDescription
image_indexinteger

No output schema declared.

No examples provided.

get_state_snapshot ~343

Return a live visual snapshot of the current image state — no file save needed. A shortcut for get_image_bitmap with a single max_size and x/y region keys. AI agents call this to get immediate visual feedback after any edit operation, letting them verify results and decide next steps without saving to disk. Parameters: - image_index: Which open image to snapshot (default: 0 = most recent) - max_size: Longest side of the returned PNG in pixels (default: 512). The image or region is scaled to fit, so small regions are enlarged: positions in the snapshot are not image coordinates (multiply by region width / snapshot width). - region: Optional dict {x, y, width, height} in image pixels to zoom into an area e.g. {"x": 200, "y": 300, "width": 100, "height": 80} for mouth area - label: Optional annotation label (logged but not drawn — for agent bookkeeping) Returns: - PNG image of the current GIMP canvas state (with alpha if present) Typical agent workflow: 1. open_image / new_canvas 2. <edit operations> 3. get_state_snapshot() ← see result, decide next step 4. <more edits> 5. get_state_snapshot(region={"x":200,"y":300,"width":100,"height":80}) 6. export_image when satisfied

NameTypeReqDescription
image_indexinteger
labelstring
max_sizeinteger
region

No output schema declared.

No examples provided.

gradient_fill ~266

Fill a layer or selection with a gradient. With an active selection, only the selected part of the layer is filled. Parameters: - color1: Start color as hex "#rrggbb" or a basic name (black, white, gray, silver, red, maroon, yellow, olive, lime, green, aqua, teal, blue, navy, fuchsia, purple); default "black" - color2: End color, same formats; default "white" - x1, y1: Gradient start point in image pixels (default 0, 0) - x2, y2: Gradient end point in image pixels (default: the image's bottom-right corner); must differ from the start point - gradient_type: "linear" (default) or "radial" - layer_name: Target layer; defaults to active layer - image_index: Target image index (default 0) Returns status dict.

NameTypeReqDescription
color1string
color2string
gradient_typestring
image_indexinteger
layer_name
x1number
x2
y1number
y2

No output schema declared.

No examples provided.

Common questions

What is the GIMP 3 MCP server?

GIMP 3 MCP is listed in the public MCP registry as io.github.tifyr/gimp3-mcp. Let AI assistants paint, edit and export images in a running GIMP 3, with 80 tools. This page covers its PyPI package (gimp3-mcp).

Is the GIMP 3 MCP server safe to use?

GIMP 3 MCP scores 65 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 3 MCP server expose?

GIMP 3 MCP exposes 80 tools: check_server, restart_server, new_canvas, get_image_bitmap, get_image_metadata, and 75 more. Their descriptions and schemas cost roughly 13,404 tokens of context every time the server is loaded.

Is the GIMP 3 MCP server still maintained?

GIMP 3 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.