GIMP Studio MCP
Enables AI assistants to edit images in GIMP 3, with tools for print and DTF transfer production.
Connector by twelvetake.com · Domain verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/twelvetake-com-gimp-studio-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 25 read · 46 write · 5 delete · 43 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 119
Read from the source code; the running server may list different tools.
Read 25 · Look things up without changing anything.
check_fontscheckpointcolor_atconvert_profiledesaturatedescribe_opget_bitmapget_metadataget_profilelist_brusheslist_checkpointslist_fonts
Show 13 more tools
list_gegl_opslist_gradientslist_imageslist_paletteslist_patternslist_procedureslist_profileslist_shirt_presetsread_regionseam_checkstatusto_grayscaleto_rgb
Write 46 · Create, change, send or run things.
add_alphaadd_maskapply_filterapply_maskassign_profilebleed_and_safebucket_fillcreate_layercreate_text_layercurvesfillforeground_select
Show 34 more tools
fuzzy_selectgroup_addgroup_createhalftone_separationlock_alphamerge_downmove_layernew_imageoutline_textprint_geometryrename_layerreorder_layerrestoreselect_allselect_borderselect_by_colorselect_ellipseselect_featherselect_from_alphaselect_from_pathselect_growselect_invertselect_rectselect_shrinkselection_to_channelset_active_imageset_bgset_blend_modeset_brushset_fgset_opacityset_paint_opacityset_text_propsset_visible
Delete 5 · Delete, drop, revoke or wipe things.
delete_layerdrop_shadowremove_maskreset_namespaceselect_none
Not yet classified 43 · We could not tell from the name and description.
brightness_contrastclean_for_dtfcolor_balancecolor_to_alphacutout_colordespillduplicate_layeredge_chokeedge_spreadexport_dtf_pngexport_imageflatten
Show 31 more tools
gang_sheetgaussian_blurgimp_execgradientgroup_ungrouphistogramhue_saturationinvertknockout_backgroundlayer_from_filelevelsluminance_to_alphanormalizeoffset_contentoffset_layeropen_imagepaintbrushpencilposterizeredosoft_proofstroke_selectionsubstitute_fontthresholdthreshold_alphatrim_to_contentundoundo_group_beginundo_group_endunsharp_maskwhite_underbase
Network hosts it talks to 2
github.com· found in codetwelvetake.com· found in code
Files it touches
- Your home directory (~)
~/.config- Any path the agent passes to its tools
Tools (119)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_alphaAdd an alpha channel to the layer if it lacks one.
add_maskAdd a layer mask. mask_type: white|black|alpha|alpha-transfer| selection|copy|channel. Omit `layer` for the selected/top layer. For mask_type='channel' pass `channel` (id/name) as the source, or have a channel already selected; with neither, channel masks return supported=False (GIMP 3.0.4 create_mask(CHANNEL) needs a selected channel and exposes no source-channel parameter).
apply_filterApply any GEGL operation to a layer (destructive merge). `op` = full op name e.g. 'gegl:pixelize'. `params` = {property: value} (underscores become hyphens; color-like values auto-coerced).
apply_maskMerge the layer's mask into its alpha (destructive). No-op if no mask.
assign_profileTag the image with an ICC profile WITHOUT converting pixels (assign). `icc_path` = path to a .icc/.icm file. RGB/working-space use.
bleed_and_safeAdd a bleed margin (resize canvas by bleed_in on each side) and report the inner safe-area rect (inset by safe_in).
brightness_contrastAdjust brightness and contrast. Each ranges -1.0..1.0 (0 = no change).
bucket_fillFlood-fill from seed point (x, y) with `color` (or current fg). mode = layer-mode name (e.g. 'normal', 'multiply').
check_fontsReport availability of each font name -> {name: bool}.
checkpointSnapshot an image (a real duplicate) so you can restore() it later. Returns a numeric checkpoint_id. `image` = id/basename, or omit for active.
clean_for_dtfBinarize the ALPHA channel at `threshold` (0-1, default 0.5): pixels below it -> fully transparent (drops faint dust/noise), at/above -> fully opaque (crisp ink edges for film). RGB is untouched. NOTE: this HARDENS every soft/anti-aliased edge and drops intentional low-alpha interior detail (faint gradients / highlights) below the threshold — skip it, or lower the threshold, when the art has soft edges worth keeping.
color_atSample one pixel: returns {rgba:[r,g,b,a]} (0-255).
color_balanceShift color balance for a tonal range: shadows|midtones|highlights. Each channel pair is -100..100; preserve_lum keeps luminosity.
color_to_alphaSOFT knockout: remove a color to transparency with graded alpha (destructive; gegl:color-to-alpha). color: name/#rrggbb. The colour is subtracted from every pixel that contains it, so edges and matching interior tones fade smoothly — great for feathered/anti-aliased backgrounds (e.g. a clean black knockout from #000000 at threshold ~0.15-0.20). Higher `transparency_threshold` (0-1) removes a wider band of near-target colours; `opacity_threshold` (0-1) sets where fully-opaque begins. For a CRISP, hard-edged cut (select-by-colour + delete, no fade) use `cutout_color`.
convert_profileConvert pixels into the target ICC working space (RGB/working-space only). intent: perceptual|relative-colorimetric|saturation|absolute-colorimetric. bpc = black-point compensation.
Show 104 more tools
create_layerCreate a new transparent RGBA layer (default sized to the image) and insert it at `position` (0=top) under optional `parent` group.
create_text_layerCreate a text layer. font=name (else context font); size in px; color by name/#hex/(r,g,b); justify=left|right|center|fill; x/y = position offsets.
curvesApply a spline curve. `points` = flat [x0,y0,x1,y1,...] control points in 0.0-1.0, in LINEAR light like levels (not the sRGB values color_at reports). channel: value|red|green|blue|alpha.
cutout_colorHARD knockout: select a colour and DELETE it to transparency — the crisp, predictable cutout (the tool form of by-hand 'add alpha -> select by colour -> delete'). Auto-adds alpha. WYSIWYG: no auto-mode, no defringe, no alpha-clean. Colour to remove: explicit `color` (name/#hex/rgb) OR a `sample_xy=[x,y]` eyedropper (one is required). `threshold` (0-1, default 0.15) = colour-match tolerance. `contiguous=True` removes only the edge-connected region (keeps interior areas that reuse the colour); seeds from `sample_xy` if given, else the nearest-matching corner. `antialias` (default on) smooths th…
delete_layerRemove a layer from the image. `layer` = id/name, or omit for active.
desaturateConvert to grayscale values in place. mode: luminance|luma|lightness| average|value.
describe_opIntrospect a GEGL op: categories, description, and its properties.
despillReduce edge color spill left over from a knockout (best-effort approximation; flag if results are off).
drop_shadowAdd a drop shadow to a layer (gegl:dropshadow). x/y = offset, blur = shadow radius, grow = shadow expansion, color = name/'#rrggbb'/(r,g,b). NOTE: gegl:dropshadow ENLARGES the target layer and shifts its offsets so the soft shadow has room to render (verified on GIMP 3.0.4: a 64x48 layer at (0,0) became 116x100 at (-20,-20)). The layer may therefore extend beyond the canvas; flatten or crop afterward if you need it clipped.
duplicate_layerDuplicate a layer; the copy is inserted just above the original. `layer` = id/name, or omit for the active layer.
edge_chokePull the art's effective alpha edge inward by `pixels` (trims a thin rim — useful before underbase or to remove fringing).
edge_spreadGrow (dilate) the art's alpha edge outward by `pixels`, fattening the artwork and carrying the edge colour into the grown ring (morphological alpha dilate via gegl:median-blur).
export_dtf_pngExport a transparent, print-ready PNG. PRESERVES ALPHA — merges visible layers WITHOUT flattening (flattening would drop alpha and ruin the DTF transfer). DPI: if `dpi` is given the file is tagged at it; if OMITTED the file inherits the image's CURRENT resolution (e.g. whatever `print_geometry` set). This only writes the DPI tag — it never resamples pixels, so set the physical print size with `print_geometry` FIRST, then export. Works on a duplicate (source untouched); returns the saved path and the DPI tag written.
export_imageExport an image to a file (format by extension: png/jpg/tiff/webp/...). Works on a COPY — the source image is never modified. ALPHA-SAFE: transparency is PRESERVED by default for formats that support it (png/tiff/webp/tga/gif) and only flattened for formats that can't hold alpha (jpg/bmp) — so a transparent cutout isn't silently ruined. `flatten=True` forces a flattened opaque export; `flatten=False` forces keep-alpha (merge visible, no flatten). For DTF PNGs prefer `export_dtf_png` (also tags DPI). Returns {saved, format, flattened, alpha (kept in the file?), had_alpha, warning (set when alp…
fillFill the whole drawable. fill_type: foreground|background|white| transparent|pattern. `layer`/`image` optional (default active).
flattenFlatten the image to a single layer. Destructive.
foreground_selectEdge-aware SUBJECT selection via SIOX/matting (gimp-drawable-foreground-extract). Refines a ROUGH hint into a clean foreground selection — good for hair/soft/complex edges and backgrounds that AREN'T a flat colour (where cutout_color / select_by_color fail). It is SEMI-automatic: it needs a rough hint and does NOT auto-detect the subject. Rough hint: pass a bounding box `x, y, w, h` roughly around the subject, OR make a rough selection first and omit the box. `band` = px the hint is grown / shrunk to form the 'unknown' boundary ring the matting solves (so the ring is ~2*band wide; default aut…
fuzzy_selectContiguous color (magic-wand) selection seeded at x,y within threshold (0..1). op: replace|add|subtract|intersect.
gang_sheetLay out multiple design files on a print sheet via a left-to-right / top-to-bottom shelf packer (gutter between items), growing height as needed, then export a transparent PNG. A design wider than the sheet's printable width is skipped with a warning; with `rotate=True`, a design that fits when turned 90 degrees is rotated instead. If no design can be placed, nothing is saved and the call returns ok=false with each file's reason. Returns {placed, skipped, sheet_px, out_path, image}.
gaussian_blurGaussian blur a layer (gegl:gaussian-blur). std_dev_x/y in pixels.
get_bitmapTHE vision tool: render a scaled/cropped/composited COPY and return it as a VIEWABLE image (an MCP image block you can actually see) plus size metadata. region=[x,y,w,h] crops first; background (name/hex) flattens over an opaque colour (else alpha is kept); the longest side is scaled to <= max_dim (clamped 1..4096). If the encoded image would exceed max_bytes (~4 MB default) it is auto-downscaled to fit your context. Pass save_to=<abs path> to write the render to disk and get the path back instead of an inline image — use this for previews too large to view inline.
get_metadataMetadata for an OPEN image: pixel width/height, resolution [x_dpi, y_dpi], base type, precision, file path, dirty flag, and per-layer info (size, opacity, visible, has_alpha). `image` = id/basename, or omit for the active image. To inspect a file ON DISK (e.g. verify an export's pixels / DPI), open_image it first, then call this on the returned id.
get_profileRead the image's embedded ICC profile label (None = built-in sRGB). `image` = id/basename, or omit for the active image.
gimp_execRaw escape hatch: run Python inside GIMP. Returns the structured envelope {ok, result, stdout, warnings, error}; stdout is preserved even on error. Set a top-level `_result` for structured output. The persistent namespace has Gimp/Gegl/Gio/GLib/GObject/Babl, `pdb`, `find_image(spec)`, and `compat` (color/read_pixel/color_to_alpha/...). Runs arbitrary host code by design (same trust boundary as the local user); set GIMP_MCP_NO_EXEC=1 to skip registering this tool. See SECURITY.md.
gradientDraw a gradient from (x1,y1) to (x2,y2). `gradient` = named gradient (else fg->bg). gradient_type: linear|bilinear|radial|conical-symmetric|...
group_addMove an existing layer into a layer group at `position` (0=top).
group_createCreate an empty layer group, inserted at `position` (0=top) under optional `parent`.
group_ungroupDissolve a layer group: lift its children to the group's parent (in order) and remove the empty group. Destructive to the group structure.
halftone_separationApply a newsprint halftone screen. PREVIEW/APPROXIMATION ONLY — this is a visual halftone, NOT registration-accurate channel film separations.
histogramChannel statistics (value|red|green|blue|alpha|luminance). space='perceptual' (default) computes the stats from the drawable's own pixels in the same 0-255 sRGB values as color_at/get_bitmap, returning mean, std_dev, median, min, max (all 0-255) plus pixels/count. space='gimp' returns GIMP's native PDB histogram (mean/std_dev/median/percentile, no min/max). Very large drawables are point-sampled at reduced resolution (min/max are from the sample, flagged by `sampled`).
hue_saturationAdjust hue/lightness/saturation. range: all|red|yellow|green|cyan|blue| magenta. hue -180..180, lightness/saturation -100..100, overlap 0..100.
invertInvert colors. linear=True inverts in linear light, else perceptual.
knockout_backgroundOne-click DTF background / shirt-colour knockout. Auto-adds an alpha channel if the source is flat (no need to call add_alpha first). For a dead-simple crisp cutout of ONE flat colour, prefer `cutout_color` (hard) or `color_to_alpha` (soft) — this tool adds garment-aware auto-technique + presets on top. Colour to remove, by priority: explicit `color` (name/#hex) > `shirt=` garment preset (see list_shirt_presets) > `sample_xy=[x,y]` eyedropper > AUTO-DETECT from the image edges. (A `shirt=` preset still supplies the technique + tolerance defaults even when an explicit `color` overrides its hu…
layer_from_fileLoad an image file as a new layer in the image and insert it (top by default). Optional `name`/`parent`/`position`.
levelsAdjust levels on a drawable. channel: value|red|green|blue|alpha. Inputs/outputs are 0.0-1.0 floats in LINEAR light, not the 0-255 sRGB values color_at reports: a pixel color_at reads as 200 sits at about 0.58 here. gamma is the midtone exponent.
list_brushesList brush names, optionally filtered by substring.
list_checkpointsList live checkpoints: id, snapshot image_id, and whether it's still valid.
list_fontsList installed font names, optionally filtered by substring.
list_gegl_opsList available GEGL operation names, optionally filtered by substring.
list_gradientsList gradient names, optionally filtered by substring.
list_imagesList open images: id, name (basename), width, height, dirty flag.
list_palettesList palette names, optionally filtered by substring.
list_patternsList pattern names, optionally filtered by substring.
list_proceduresList PDB procedure names, optionally filtered by substring.
list_profilesNOT SUPPORTED: the libgimp API cannot enumerate installed ICC profiles — this ALWAYS fails. Returns ok=false with {supported: false, note}. Pass explicit .icc paths instead; get_profile reads an image's own profile.
list_shirt_presetsList the built-in garment / shirt-colour presets for knockout_background(shirt=...) — name, display, hex, technique, tolerance.
lock_alphaLock (or unlock) the layer's alpha channel against painting.
luminance_to_alphaMap luminance to transparency per-pixel (destructive): default makes dark pixels transparent and bright pixels opaque (white-art-on-black); invert=True makes bright pixels transparent (knock out white/highlights). Computed directly over the layer buffer (no dedicated GEGL op exists in GIMP 3.0.4).
merge_downMerge a layer down into the one below it (EXPAND_AS_NECESSARY). Destructive. Returns the resulting merged layer.
move_layerMove a layer to absolute canvas offsets (x, y).
new_imageCreate a new RGBA image. fill: white|transparent|background|foreground. Returns the new image id + size.
normalizeAuto-stretch tones to fill the full 0-255 range (like Colors > Auto > Stretch Contrast). keep_colors=False (default) stretches each channel independently — maximum contrast, but may shift colour balance; keep_colors=True stretches all channels uniformly to preserve hue (gegl:stretch-contrast).
offset_contentRoll a layer's PIXEL CONTENT by (dx, dy) — distinct from offset_layer, which repositions the layer on the canvas. wrap=True wraps edges around (use it to seam-check a tileable texture); wrap=False fills the vacated strip per fill: transparent|color (color uses the `color` name/hex, default clear).
offset_layerOffset a layer by a relative delta (dx, dy) from its current position.
open_imageOpen an image file (any format GIMP loads). Returns new image id + size.
outline_textAdd an outline beneath a text layer: alpha->selection, grow by `radius`, fill onto a new layer in `color`. Destructive (adds a layer).
paintbrushSoft paintbrush stroke. points = flat [x1,y1,x2,y2,...]. Optional `brush` name + `size`; uses `color` or current fg.
pencilHard-edged pencil stroke. points = flat [x1,y1,x2,y2,...]. Uses `color` or current fg.
posterizeReduce each channel to `levels` discrete tones (2..255).
print_geometrySet print resolution (dpi) and/or scale to a physical size in inches. Pass width_in and/or height_in to scale (aspect preserved if one given). Reports current inches @ dpi and warns on upscaling.
read_regionStructured 2D grid of [r,g,b,a] pixels for a rectangle. Capped at w*h<=4096 (raises if larger — use get_bitmap for big areas).
redoRedo the last undone operation — only if GIMP exposes scriptable redo, which GIMP 3.x does NOT, so this returns ok=false with {supported: false} and redoes nothing. Use checkpoint()/restore() for reliable rollback.
remove_maskDiscard the layer's mask without applying it (destructive).
rename_layerRename a layer.
reorder_layerMove a layer to absolute `position` (0=top) within its parent, or into a different `parent` group when given.
reset_namespaceReset the persistent namespace. scope='soft' (default): clear user-defined vars and re-seed the baseline; the canvas/open images are untouched. scope='scratch' (guarded HARD reset): soft + delete only bridge-created scratch images (checkpoint snapshots tagged in `_gimpmcp_scratch`); never touches user-opened or agent working images.
restoreRoll an image back to a checkpoint by rebuilding its layer stack from the snapshot. The checkpoint stays usable. `image` = which image to restore into.
seam_checkWrap-offset a layer's content by half its size so a tileable texture's seams land in the middle for inspection (pair with get_bitmap). axis: both|x|y. Destructive — undo to revert (re-running the same axis restores only when that dimension is even; for odd sizes floor(w/2) applied twice lands 1px off).
select_allSelect the entire image canvas.
select_borderReplace the selection with a border band `radius` pixels wide.
select_by_colorSelect all pixels matching a color (name/#rrggbb/(r,g,b[,a])) within threshold (0..1). op: replace|add|subtract|intersect.
select_ellipseElliptical selection inscribed in the x,y,w,h box. op: replace|add|subtract|intersect.
select_featherFeather (soften) the selection edge by `radius` pixels.
select_from_alphaSelect from a layer's alpha (opaque pixels). layer = id/name or omit for the active drawable. op: replace|add|subtract|intersect.
select_from_pathSelect the region enclosed by a path. path = id/name or omit for the active path. op: replace|add|subtract|intersect. If the image has no paths and none is named, returns {"supported": false} (nothing to do) rather than erroring.
select_growGrow the selection outward by `steps` pixels.
select_invertInvert the current selection.
select_noneClear the selection (select nothing).
select_rectRectangular selection. op: replace|add|subtract|intersect. Returns selection bounds.
select_shrinkShrink the selection inward by `steps` pixels.
selection_to_channelSave the current selection to a new channel. Returns the channel id.
set_active_imageSet the active image by integer id or basename string. Tools that take `image` act on the active image when it is omitted: the image last chosen here, opened or created, while it stays open; otherwise GIMP's first open image. A checkpoint copy is never the active image.
set_bgSet the background color. color = name|'#rrggbb'|(r,g,b[,a]).
set_blend_modeSet a layer's blend mode (NORMAL, MULTIPLY, SCREEN, OVERLAY, ...). Case/sep insensitive; unknown names fall back to NORMAL.
set_brushSet the active paint brush by name (e.g. '2. Hardness 050').
set_fgSet the foreground color. color = name|'#rrggbb'|(r,g,b[,a]).
set_opacitySet a layer's opacity (0-100 float).
set_paint_opacitySet the paint/context opacity (0-100).
set_text_propsMutate any subset of an existing text layer's properties (omitted args are left unchanged). `layer` = id/name of a text layer.
set_visibleShow/hide a layer.
soft_proofNOT SUPPORTED: soft-proofing is a VIEW-only display simulation in GIMP 3.x, not a scriptable pixel operation — this ALWAYS fails. Returns ok=false with {supported: false, note}; no pixels are changed. Use convert_profile to bake the conversion instead.
statusGIMP/bridge health: GIMP version, bridge version, mode, open-image count, and the names seeded into the persistent namespace. `warnings` reports a bridge in GIMP older than this package expects, and any timeout setting that is not a usable number of seconds.
stroke_selectionStroke the active selection's outline with `color`/`line_width` (current fg/line width if omitted).
substitute_fontBest-effort font-substitution report: whether `old` is missing and `new` is present (does not mutate global GIMP config).
thresholdBlack/white threshold: pixels in [low, high] -> white, else black. low/high are 0.0-1.0 on the same sRGB scale as color_at (divide its 0-255 values by 255). channel: value|red|green|blue|alpha.
threshold_alphaBinarize the alpha channel at `value` (0..1) for a clean print edge (destructive).
to_grayscaleConvert the image to GRAYSCALE mode (destructive).
to_rgbConvert the image to RGB mode (destructive).
trim_to_contentAutocrop the image to the artwork's alpha bounding box, plus optional padding (px). Removes empty transparent margins.
undoUndo the last operation — only if GIMP exposes scriptable undo, which GIMP 3.x does NOT (undo is interactive), so this returns ok=false with {supported: false} and rolls nothing back. Use checkpoint()/restore().
undo_group_beginBegin an undo group on an image: subsequent edits collapse into one undo step. Pair with undo_group_end. `image` = id/basename, or omit for active.
undo_group_endEnd the undo group started by undo_group_begin on this image.
unsharp_maskSharpen a layer via unsharp mask (gegl:unsharp-mask). std_dev = blur radius, scale = sharpen strength.
white_underbaseCore DTF op: create a white-ink layer BELOW the art, filled to the art's alpha shrunk inward by `choke` px at `opacity`. Returns new layer id.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 178
- Last commit
- Oct 20, 2026 (8 days ago)
- Last release
- Oct 20, 2026 (8 days ago)
- Last package publish
- Oct 20, 2026 (8 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
com.twelvetake/gimp-studio-mcp- Version
- 0.4.0
- Auth
- No auth
- Packages
- pypi twelvetake-gimp-studio-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from twelvetake.com
Cite this page
GIMP Studio MCP. Agent Mart. https://agentmart.dev/connectors/twelvetake-com-gimp-studio-mcp (last updated 2026-10-24)