Skip to main content
Glama

gimp-mcp

Servidor MCP para controlar GIMP 3 con detalle desde un agente (Claude, OpenClaw, Claude Code, Claude Desktop...): capas, selecciones, pintura, texto, ajustes de color, filtros GEGL, cualquier procedimiento de la PDB y Python libre dentro de GIMP. Incluye una vista previa en imagen para que el agente vea el resultado de cada paso.

Cómo funciona

Agente ──MCP (stdio)──> gimp-mcp ──TCP 127.0.0.1:9877──> plugin mcp-bridge (dentro de GIMP)
  • mcp-bridge es un plugin Python de GIMP 3 que escucha solo en 127.0.0.1 y ejecuta las órdenes con la API de GIMP. Cada petición lleva un token aleatorio guardado en el perfil de GIMP (%APPDATA%\GIMP\3.x\mcp-bridge.token), así que otros programas no pueden usarlo sin él.

  • gimp-mcp instala/actualiza el plugin automáticamente y arranca GIMP si no está abierto. Si GIMP ya está abierto, le pasa la orden de activar el puente a esa misma ventana.

  • GIMP se lanza fuera del job del cliente MCP, así que no se cierra (ni pierdes trabajo) cuando el cliente reinicia el servidor.

Related MCP server: Editmamei

Requisitos

  • GIMP 3.0 o posterior (probado con 3.2.6 en Windows 11)

  • Python 3.10+ y uv

Instalación

git clone https://github.com/EdvardKS/mcp-gimp.git
cd mcp-gimp
uv sync
uv run gimp-mcp --install-plugin   # opcional: se hace solo al primer uso

Si GIMP estaba abierto al instalar el plugin por primera vez, ciérralo y vuelve a abrirlo para que lo registre.

OpenClaw

openclaw mcp set gimp '{"command":"C:/ruta/a/mcp-gimp/.venv/Scripts/gimp-mcp.exe","args":[],"env":{"GIMP_MCP_MODE":"gui"}}'
openclaw mcp probe

Para que el agente sepa cuándo y cómo usar todo esto (flujo de trabajo, recetas de calidad y entrega del archivo por Telegram/WhatsApp con MEDIA:), copia la skill incluida a tu workspace:

Copy-Item -Recurse openclaw/skills/gimp-studio ~/.openclaw/workspace/skills/
openclaw skills list   # debe aparecer "gimp-studio ✓ ready"

La skill combina el MCP de GIMP con la generación de imágenes nativa de OpenClaw (image_generate). Para activarla configura un proveedor de imagen, por ejemplo Gemini (requiere facturación activa en Google AI Studio):

openclaw config patch --file imagegen.json5
# imagegen.json5:
# { agents: { defaults: { mediaModels: { image: { primary: "google/gemini-3.1-flash-image" } } } } }

Claude Code / Claude Desktop

{
  "mcpServers": {
    "gimp": {
      "command": "C:/ruta/a/mcp-gimp/.venv/Scripts/gimp-mcp.exe",
      "env": { "GIMP_MCP_MODE": "gui" }
    }
  }
}

Configuración (variables de entorno)

Variable

Por defecto

Uso

GIMP_MCP_MODE

gui

gui abre GIMP con ventana (ves lo que hace el agente); headless lo usa sin ventana

GIMP_MCP_PORT

9877

Puerto local del puente

GIMP_MCP_AUTOSTART

1

0 para no arrancar GIMP automáticamente

GIMP_MCP_GIMP_DIR

autodetectado

Carpeta bin de GIMP si no está en la ruta estándar

GIMP_MCP_TIMEOUT

300

Segundos máximos por operación

GIMP_MCP_STARTUP_TIMEOUT

240

Segundos de espera al arrancar GIMP

GIMP_MCP_FORWARD_TIMEOUT

20

Si GIMP ya está abierto y no activa el puente en este tiempo (p. ej. tiene un diálogo abierto), se levanta un GIMP oculto sin ventana como plan B

Herramientas (42)

Área

Herramientas

Estado e imágenes

gimp_status, gimp_list_images, gimp_image_info, gimp_new_image, gimp_open_image, gimp_save_image (XCF), gimp_export_image (png/jpg/webp/gif/tif/pdf…), gimp_close_image, gimp_duplicate_image, gimp_preview

Imagen completa

gimp_scale_image, gimp_resize_canvas, gimp_crop (rectángulo, selección o autocrop), gimp_rotate_flip_image, gimp_convert_mode

Capas

gimp_new_layer (y grupos), gimp_add_layer_from_file, gimp_set_layer (opacidad, modo de fusión, posición…), gimp_layer_order, gimp_duplicate_layer, gimp_delete_layer, gimp_merge_layers, gimp_transform_layer, gimp_layer_mask

Selección

gimp_select (rectángulo, elipse, redondeada, polígono, desde alfa, todo/nada/invertir, con difuminado), gimp_select_by_color (color o varita mágica), gimp_modify_selection

Pintura

gimp_set_colors, gimp_fill, gimp_stroke_selection, gimp_draw (pincel, lápiz, aerógrafo, goma, dedo, clonar, sobreexponer/subexponer), gimp_gradient

Texto

gimp_add_text, gimp_edit_text, gimp_list_resources (fuentes, pinceles, degradados, patrones, paletas)

Color

gimp_adjust: brillo/contraste, tono/saturación, niveles, auto-niveles, desaturar, invertir, umbral, posterizar, colorear, balance de color, curvas, exposición, temperatura, sombras/luces

Filtros

gimp_apply_filter (cualquier operación GEGL, destructiva o no destructiva), gimp_filter_info

Acceso total

gimp_pdb_search, gimp_pdb_info, gimp_pdb_call, gimp_run_python

Las operaciones de edición se agrupan en un único paso de deshacer de GIMP, y las herramientas llevan anotaciones MCP (readOnlyHint / destructiveHint) para que el cliente sepa cuáles solo leen y cuáles pueden borrar o sobrescribir.

Pruebas

Con GIMP sin ventana y en otro puerto para no tocar tu sesión:

$env:GIMP_MCP_MODE="headless"; $env:GIMP_MCP_PORT="9878"
uv run python tests/smoke_test.py      # ejecuta todas las herramientas
uv run python tests/mcp_client_test.py # prueba por el protocolo MCP real

Seguridad

gimp_run_python y gimp_pdb_call permiten ejecutar código arbitrario dentro de GIMP (que puede leer y escribir archivos del usuario). El puente solo acepta conexiones locales con token, pero da al agente el mismo poder que tendría un script de GIMP: actívalo solo para agentes de confianza.

Licencia

MIT

Available Tools

42 tools
gimp_add_layer_from_fileB

Inserta otra imagen (logo, foto...) como capa nueva. Sin x/y queda centrada. width/height opcionales para escalarla (si das uno, mantiene proporción).

Inputs: path (required), x, y, name, +4 more.

gimp_add_textA

Añade una capa de texto editable. (x,y) es la ESQUINA SUPERIOR IZQUIERDA de la capa de texto, no su centro: para centrar usa align='center' (ambos ejes) o 'center_x' (centrado horizontal a la altura y). size en px. box_width fija el ancho de caja para que el texto haga saltos de línea. Usa gimp_list_resources('fonts') para ver fuentes. Comprueba en la respuesta que x+width y y+height no superan el tamaño de la imagen (si no, el texto sale cortado).

Inputs: text (required), x, y, font, +8 more.

gimp_adjustA

Ajustes de color sobre la capa (respetando la selección):

  • brightness_contrast: brightness, contrast (-1..1)

  • hue_saturation: hue (-180..180), saturation y lightness (-100..100)

  • levels: low, high (0..1), gamma (0.1..10) · auto_levels / white_balance: automáticos

  • desaturate, invert · threshold: low, high (0..1) · posterize: levels (2..256)

  • colorize: color (tono) · color_balance: cyan_red, magenta_green, yellow_blue (-100..100)

  • curves: curve_points=[x1,y1,x2,y2,...] en 0..1 (valor) · exposure: exposure (EV)

  • color_temperature: temperature (K, <6500 enfría, >6500 calienta)

  • shadows_highlights: shadows, highlights (-100..100)

Inputs: operation (required), hue, low, high, +17 more. Returns: result

gimp_apply_filterA

Aplica cualquier filtro GEGL a una capa (respeta la selección). Ejemplos: gegl:gaussian-blur {std-dev-x, std-dev-y} · gegl:unsharp-mask {std-dev, scale} · gegl:dropshadow {x, y, radius, color, opacity} · gegl:pixelize {size-x, size-y} · gegl:noise-reduction {iterations} · gegl:vignette {radius, softness, color} · gegl:cartoon · gegl:emboss · gegl:edge-sobel · gegl:mosaic · gegl:waves · gegl:ripple · gegl:lens-distortion · gegl:bloom · gegl:high-pass · gegl:oilify · gegl:motion-blur-linear {length, angle} · gegl:sepia {scale} · gegl:mono-mixer · gimp:threshold-alpha... Usa gimp_filter_info para ver las propiedades de una operación. non_destructive=True lo deja como filtro editable en vez de fusionarlo con la capa.

Inputs: operation (required), image_id, layer_id, properties, +1 more. Returns: result

gimp_close_imageA
Destructive

Cierra una imagen. Por seguridad falla si tiene cambios sin guardar, salvo discard_changes=True.

Inputs: image_id, discard_changes. Returns: result

gimp_convert_modeC

Convierte el modo de color de la imagen. Para indexed, colors = nº de colores de la paleta.

Inputs: mode (required), colors, image_id.

gimp_cropA

Recorta la imagen: a un rectángulo (x,y,width,height), a la selección actual (to_selection) o quitando bordes uniformes (autocrop).

Inputs: x, y, width, height, +3 more.

gimp_delete_layerC
Destructive

Elimina una capa.

Inputs: layer_id (required). Returns: result

gimp_drawB

Pinta un trazo que pasa por points=[x1,y1,x2,y2,...] (coordenadas de imagen) con la herramienta indicada. closed=True cierra el trazo volviendo al primer punto.

Inputs: points (required), size, tool, color, +4 more. Returns: result

gimp_duplicate_imageB

Duplica una imagen completa (con capas) en una imagen nueva.

Inputs: image_id.

gimp_duplicate_layerC

Duplica una capa (queda justo encima de la original).

Inputs: layer_id (required), name.

gimp_edit_textC

Modifica una capa de texto existente.

Inputs: layer_id (required), font, size, text, +2 more.

gimp_export_imageA
Destructive

Exporta la imagen al formato que indique la extensión (png, jpg, webp, gif, tif, bmp, pdf...).

quality (1-100) aplica a jpg/webp. flatten=True une las capas antes de exportar (sobre una copia, la imagen original no cambia).

Inputs: path (required), flatten, quality, image_id. Returns: result

gimp_fillB

Rellena la selección (o la capa entera si no hay selección). fill: 'foreground', 'background', 'white', 'transparent', 'pattern' o un color concreto ('#ff0000').

Inputs: fill, image_id, layer_id. Returns: result

gimp_filter_infoA
Read-only

Sin operation: lista las operaciones GEGL disponibles que contengan query. Con operation: muestra sus propiedades (nombre, tipo, valor por defecto, rango, descripción).

Inputs: query, operation.

gimp_gradientC

Rellena con degradado de (x1,y1) a (x2,y2). Por defecto va de start_color a end_color (o frente→fondo); gradient permite usar un degradado de GIMP por nombre.

Inputs: x1 (required), x2 (required), y1 (required), y2 (required), +7 more. Returns: result

gimp_image_infoB
Read-only

Detalle de una imagen: tamaño, modo, resolución, selección y árbol de capas con ids.

Inputs: image_id.

gimp_layer_maskB

Máscaras de capa: add (white=todo visible, black=todo oculto, selection=desde la selección, alpha, copy, grayscale), apply (aplica y elimina la máscara) o remove (la descarta).

Inputs: layer_id (required), action, mask_type.

gimp_layer_orderB

Mueve una capa en la pila: raise/lower (un paso), top/bottom, o position (0 = arriba).

Inputs: action (required), layer_id (required), position.

gimp_list_imagesB
Read-only

Lista las imágenes abiertas en GIMP (id, nombre, archivo, tamaño).

Inputs: no named parameters.

gimp_list_resourcesB
Read-only

Lista recursos de GIMP (fuentes, pinceles, degradados, patrones, paletas) filtrando por texto.

Inputs: kind (required), limit, query.

gimp_merge_layersA
Destructive

Combina capas: merge_down (la capa con la de debajo), merge_visible (todas las visibles) o flatten (todo en una capa sin transparencia).

Inputs: action (required), image_id, layer_id.

gimp_modify_selectionB

Modifica la selección actual: grow/shrink/border (px), feather (radio px), sharpen (quita difuminado).

Inputs: action (required), amount, image_id.

gimp_new_imageC

Crea una imagen nueva. background: color, 'transparent', 'foreground' o 'background'.

Inputs: width (required), height (required), mode, name, +1 more.

gimp_new_layerC

Crea una capa (o un grupo de capas si group=True). fill: 'transparent' o un color. position 0 = arriba del todo. parent_id: grupo donde meterla.

Inputs: x, y, fill, mode, +8 more.

gimp_open_imageB

Abre un archivo de imagen (png, jpg, xcf, psd, webp, tif, pdf...) y devuelve su info.

Inputs: path (required).

gimp_pdb_callA
Destructive

Llama a cualquier procedimiento PDB por nombre con argumentos por nombre. Valores especiales: 'image' se rellena con image_id, 'drawable' con layer_id y 'drawables' con [layer_id]; 'run-mode' es NONINTERACTIVE por defecto; 'file' acepta una ruta; colores como texto. Consulta antes gimp_pdb_info.

Inputs: name (required), image_id, layer_id, arguments.

gimp_pdb_infoB
Read-only

Muestra los argumentos y valores de retorno de un procedimiento PDB.

Inputs: name (required).

gimp_previewB
Read-only

Devuelve una vista previa PNG de la imagen (o de una sola capa) para VER el resultado.

Úsala tras cada cambio importante para comprobar que ha quedado bien.

Inputs: image_id, layer_id, max_size.

gimp_resize_canvasB

Cambia el tamaño del lienzo sin escalar el contenido. fill: color para rellenar el espacio nuevo (si no, queda transparente).

Inputs: width (required), height (required), fill, anchor, +1 more.

gimp_rotate_flip_imageA

Gira la imagen entera 90/180/270 grados (sentido horario) y/o la voltea.

Inputs: flip, rotate, image_id.

gimp_run_pythonB
Destructive

Ejecuta código Python dentro de GIMP 3 (API GObject: Gimp, Gegl, Gio, GLib ya importados). Asigna la respuesta a la variable result (o usa print). Helpers disponibles: _img(id) imagen, _item(id) capa, _drawable(img, id) capa activa, _color('#hex'), _gegl(drawable, 'gegl:op', {props}), _pdb_run('proc', **args), _image_info(img), _undo(img). Las variables persisten entre llamadas.

Inputs: code (required).

gimp_save_imageA
Destructive

Guarda en formato XCF de GIMP (con capas). Sin path, guarda sobre su archivo .xcf actual.

Inputs: path, image_id. Returns: result

gimp_scale_imageB

Escala la imagen entera. Indica width y/o height (mantiene proporción si falta uno) o percent.

Inputs: width, height, percent, image_id, +1 more.

gimp_selectA

Crea o modifica la selección. rectangle/ellipse/rounded_rectangle usan x,y,width,height (radius para las esquinas); polygon usa points=[x1,y1,x2,y2,...]; from_alpha selecciona lo opaco de layer_id. operation combina con la selección previa. feather difumina el borde (px).

Inputs: shape (required), x, y, width, +7 more.

gimp_select_by_colorC

Selecciona por color. Con color: todos los píxeles de ese color. Con x,y: la varita mágica (contiguous=True) o el color de ese punto en toda la imagen. threshold 0-255.

Inputs: x, y, color, image_id, +5 more.

gimp_set_colorsB

Ajusta el contexto de pintura: color de frente/fondo, pincel (nombre), tamaño, opacidad y modo. Sin argumentos devuelve los valores actuales.

Inputs: brush, opacity, background, brush_size, +2 more.

gimp_set_layerA

Cambia propiedades de una capa: nombre, visibilidad, opacidad (0-100), modo de fusión (normal, multiply, screen, overlay, soft-light, hard-light, difference, addition, subtract, darken-only, lighten-only, hue, saturation, color, value...), posición x/y, bloqueo de alfa, o la marca como capa activa (select=True).

Inputs: layer_id (required), x, y, mode, +5 more.

gimp_statusA
Read-only

Comprueba la conexión con GIMP (lo arranca si hace falta) y lista las imágenes abiertas.

Inputs: no named parameters.

gimp_stroke_selectionC

Dibuja el contorno de la selección actual con el grosor (px) y color indicados.

Inputs: color, width, image_id, layer_id. Returns: result

gimp_transform_layerB

Transforma una capa: escalar (px o %), rotar (grados, sentido horario, sobre su centro), voltear, mover a x/y absolutos (esquina superior izquierda), centrar en la imagen (align), o ajustar el tamaño del borde de la capa al de la imagen.

Inputs: flip, align, move_x, move_y, +7 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 42 tools

    Disambiguation4/5

    Most tools map to a distinct resource+action pair (image, layer, selection, color, filter, text). There is some overlap: gimp_status and gimp_list_images both report open images, and gimp_pdb_call and gimp_run_python are broad escape hatches that can accomplish many of the same things, but descriptions clarify intent well.

    Naming Consistency5/5

    Every tool uses the gimp_ prefix followed by a consistent snake_case verb_noun pattern (gimp_open_image, gimp_delete_layer, gimp_create_*, gimp_list_resources). Naming is highly predictable throughout.

    Tool Count3/5

    42 tools is heavy and pushes into the lower band, but GIMP is a genuinely large domain (images, layers, selections, color, filters, PDB, scripting) so most tools are justified. A few, like the overlapping status/list and pdb/run_python pairs, could be consolidated.

    Completeness5/5

    The surface covers the full image lifecycle: create/open/close/save/export/duplicate, layer CRUD and ordering, selection creation and modification, color/context, drawing, text, filters, PDB introspection and Python escape hatches. No obvious domain gaps remain.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server that bridges GIMP 3.0 with natural language commands, enabling conversational image editing through Claude Desktop and other MCP clients. Exposes GIMP's full PyGObject API for AI-powered image manipulation.
      292
      GPL 3.0
    • A
      license
      A
      quality
      B
      maintenance
      Editmamei provides a natural-language interface for Adobe Photoshop, running as a local MCP server. Rather than focusing on generative AI, it acts as an AI orchestration layer that plans edits and executes them with native Photoshop tools.
      65
      698 npm
      20
      Functional Source , Version 1.1, MIT Future
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI agents to operate GIMP 3 end-to-end: open and inspect images, call every PDB procedure, apply GEGL filters destructively or as layer effects, measure pixels, render before/after/diff comparisons, cut out subjects with AI segmentation, and run multi-step recipes across folders.
      32
      76 PyPI
      5
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to create, paint, edit, inspect, and export images in a running GIMP 3.2 instance via MCP.
      178 PyPI
      GPL 3.0