{"name":"io.github.SarutobiSasuke8/gimp-agent-mcp","slug":"sarutobisasuke8-gimp-agent-mcp","title":"GIMP Agent MCP","description":"Edit in GIMP 3 with AI agents: live previews, grouped edits, pixel measurements and recipes.","url":"https://mcp.market/server/sarutobisasuke8-gimp-agent-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":35,"stars":4,"forks":0,"downloads_week":104,"last_push_at":"2026-10-15T13:06:13.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/SarutobiSasuke8/gimp-agent-mcp","website":"https://pypi.org/project/gimp-agent-mcp/","version":"0.5.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"gimp-agent-mcp","version":"0.5.0","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"serve","type":"positional"}],"environmentVariables":[{"description":"Set to 0 to remove the gimp_run_python tool","format":"string","name":"GIMP_AGENT_ALLOW_PYTHON"}]}],"tools":[{"name":"gimp_adjust","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_apply_filter","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_batch_recipe","description":"Run a recipe over every file matching input_glob, writing to output_dir. Recipes must accept input_path and output_path.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_canvas","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_close_image","description":"Close an image without saving.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_context","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_draw","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_drop_snapshot","description":"Release a stored comparison snapshot. At most 16 may be retained per bridge; snapshots are also cleaned up when the bridge closes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_edit_batch","description":"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 n","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_export","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_filter_describe","description":"Describe a GEGL operation's properties (names, types, ranges, defaults).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_filter_search","description":"Search the GEGL operations available as filters (e.g. 'blur', 'shadow', 'levels', 'noise').","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_help","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_image_info","description":"Full structure of one image: layer tree with item ids, channels, paths, selection bounds, resolution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_launch","description":"Start GIMP 3 with the bridge running. mode='gui' opens the normal window; 'headless' runs gimp-console with no UI.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_layer","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_layer_effect","description":"Edit or delete a non-destructive layer effect (ids from gimp_layer_effects). action='set' updates params/visible/opacity/blend_mode; 'delete' removes it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_layer_effects","description":"List the non-destructive filters currently attached to a layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_layer_mask","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_list_fonts","description":"List installed font names, optionally filtered by a regex.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_list_images","description":"List open images with ids, dimensions, file path, and layer count.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_list_recipes","description":"List tested multi-step recipes and their parameters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_measure","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_new_image","description":"Create an RGB image with one layer. fill: 'transparent', 'white', 'black', 'foreground', 'background' or any colour.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_open","description":"Open an image file (PNG, JPEG, WebP, XCF, PSD, SVG, ...) and return its structure.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_path","description":"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'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_pdb_call","description":"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_pd","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_pdb_describe","description":"Describe a PDB procedure: arguments with types, defaults and enum choices, plus return values.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_pdb_search","description":"Search GIMP's Procedure Database by words in the procedure name (e.g. 'image scale', 'layer text', 'file png').","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_remove_background","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_render","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_render_compare","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_run_python","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_run_recipe","description":"Run a recipe by name with parameters. Recipes are Python jobs executed inside GIMP with defaults applied.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gimp_select","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_shutdown","description":"Stop the bridge. quit_gimp defaults to True for headless sessions and False for the GUI (unsaved work is not prompted for).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_snapshot","description":"Take a hidden snapshot of an image's current state so gimp_render_compare can show before/after later.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_status","description":"Check whether GIMP and the agent bridge are reachable. Returns GIMP version, mode, and open images.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gimp_text","description":"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.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-10-15T17:29:40.369Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-15T17:29:40.343Z","components":{"code":{"score":20,"max":25,"notes":["28 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"gimp_agent_mcp-0.5.0/src/gimp_agent_mcp/plugin/gimp-agent-bridge.py: … else: result = eval(compiled, self.ns) finally: …"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"gimp-agent-mcp","version":"0.5.0","found":true,"weeklyDownloads":104,"license":"Apache-2.0","dependencyCount":6,"publishedAt":"2026-09-08T13:35:24.925830Z","repositoryUrl":"https://github.com/SarutobiSasuke8/gimp-agent-mcp"}],"repo":{"found":true,"owner":"SarutobiSasuke8","repo":"gimp-agent-mcp","archived":false,"pushedAt":"2026-10-15T13:06:13Z","stars":4,"forks":0,"openIssues":5,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/35200840?v=4","ownerCreatedAt":"2018-01-07T19:41:23Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/35200840?v=4&s=128","source":"registry"},"presence":{"stars":4,"forks":0,"downloadsWeek":104,"license":"Apache-2.0","lastPushAt":"2026-10-15T13:06:13.000Z","score":35}}}},"grade_history":[],"reviews":[]}