pedit
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GEMINI_API_KEY | No | Google Gemini API key, used for online image models (Nano Banana) and image-to-text. Can be set instead of pasting the key in the 'AI models' dialog. | |
| OPENAI_API_KEY | No | OpenAI API key, used for online image models (GPT Image) and image-to-text. Can be set instead of pasting the key in the 'AI models' dialog. | |
| ANTHROPIC_API_KEY | No | Anthropic API key, used for the built-in assistant (Claude with a key) and image-to-text. Can be set instead of pasting the key in the 'AI models' dialog. | |
| STABILITY_API_KEY | No | Stability AI API key, used for online image models. Can be set instead of pasting the key in the 'AI models' dialog. | |
| OPENROUTER_API_KEY | No | OpenRouter API key, used for online image models. Can be set instead of pasting the key in the 'AI models' dialog. | |
| REPLICATE_API_TOKEN | No | Replicate API token (FLUX and other models), used for online image models. Can be set instead of pasting the key in the 'AI models' dialog. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| project_createA | Create a document. preset: 1080p, 4k, square, instagram_post, story, youtube_thumbnail, a4_300dpi, a4_150dpi, web_banner, og_image; or width/height; or from_image= to start from a photo (canvas = photo size). path=<file.json> saves it (autosave after every edit). background can be 'transparent'. |
| project_openB | Open a pedit .json document, or a photo (becomes a new unsaved document of its size). |
| project_infoB | Document state: size, layers (top first) with ids, boxes, effects, masks. detail='full' adds all params. |
| project_saveC | Save the document (.json). With path: save as. |
| project_settingsD | Document name, background color ('transparent' allowed), dpi. |
| undoC | Undo the last edit. |
| redoC | Redo the last undone edit. |
| add_imageB | Image layer from a file (path) or an imported asset. fit: contain, cover, width, height, none (ignored if scale given). Without x/y it is centered. above= to insert right above it. |
| add_textB | Text layer. font: sans, serif, mono, display, handwriting, or a system font name/file. max_width>0 wraps lines. Without x/y it is centered; then align_layer to place it. |
| add_shapeC | Vector shape: rect (radius = rounded corners), ellipse, line, polygon (points relative to x,y). Colors accept #rrggbbaa for transparency. |
| add_fillB | Full-canvas fill: solid, linear gradient (angle 90 = left->right, 180 = top->bottom) or radial (center cx, cy as fractions). index=0 puts it at the bottom (a background). |
| add_adjustmentB | Adjustment layer on top: its filters change everything below it, non-destructively. One filter (type + params) or a chain effects=[{type, params}, ...]. See list_effects. |
| paint_strokeA | Brush stroke: polyline [[x,y],...] in document px on a paint layer (created if missing). erase=true erases previous strokes of that layer. Clone stamp: source=[x,y] is where to copy from for the first point (copies everything below the layer); heal=true = healing brush (matches the light and color of the destination). |
| set_layerC | Layer name, visibility, lock, opacity 0..1, clip (clipping mask onto the layer below), blend mode: normal, dissolve, darken, multiply, color_burn, linear_burn, darker_color, lighten, screen, color_dodge, add (linear dodge), lighter_color, overlay, soft_light, hard_light, vivid_light, linear_light, pin_light, hard_mix, difference, exclusion, subtract, divide, hue, saturation, color, luminosity; groups also pass_through. |
| set_transformB | Move/scale/rotate (degrees, clockwise)/flip a layer. width or height = target size on the canvas (keeps proportions). crop=[x,y,w,h] in SOURCE pixels of an image layer ([] removes it). |
| align_layerC | Align to the canvas: h left/center/right, v top/middle/bottom (null = leave), margin in px. |
| set_textC | Change a text layer's text or style. |
| set_shapeC | Change a shape layer (fill/stroke 'none' removes them). |
| set_fillC | Change a fill/gradient layer. |
| move_layerA | Reorder within its list: to=up/down/top/bottom, or index (0 = bottom). into= moves it inside a group; into="root" takes it out of its group. |
| group_layersC | Put layers (same level) into a new group. Groups have their own opacity, blend (default pass_through), mask and effects; an adjustment inside a non pass-through group affects only the group. |
| ungroupC | Dissolve a group: its layers go back in its place. |
| duplicate_layerC | Copy a layer (placed right above it). |
| remove_layerB | Delete a layer (undoable). |
| rasterize_layerB | Turn a text/shape/paint layer (with its effects and mask) into pixels. |
| merge_downC | Merge a layer into the one below. |
| flattenC | All visible layers into one image layer. |
| list_effectsA | Effect catalogue. Without name: names and one line each. With name: its parameters. |
| add_effectC | Filter or layer style on one layer (filters before the mask, styles after: shadow, stroke, glow). |
| update_effectC | Change an effect's params or switch it off/on. index = position in the layer's effects. |
| remove_effectC | Remove an effect from a layer. |
| move_effectC | Reorder effects (order matters: denoise before sharpen). |
| list_looksC | Ready-made looks for apply_look. |
| apply_lookB | Apply a look: as an adjustment layer on top (default) or as effects on one layer. |
| set_maskB | Layer mask (white = visible). kind rect/ellipse with box=[x,y,w,h] in document px, image with path (grayscale or alpha file, aligned to the layer content), or paint (to paint with mask_stroke; hide_all=true starts fully hidden). feather = soft edge px. |
| mask_strokeA | Paint on a layer's mask: mode hide or reveal, polyline [[x,y],...] in document px. Works on any mask (refine an AI cut-out); a layer without a mask gets a paint mask. |
| update_maskC | Invert, soften, weaken or move an existing mask. |
| remove_maskC | Remove a layer's mask. |
| crop_canvasB | Crop the canvas to a box (document px). Layers are kept whole: undoable without loss. |
| resize_canvasC | Change canvas size without scaling content. anchor: center, top, bottom_left, ... |
| expand_canvasB | Generative expand: add px on each side and fill the new borders (a new top layer masked to them). No prompt = classic fill (fine for sky, walls, plain backgrounds); with prompt or an AI service = generative. |
| resize_imageB | Scale the whole document (canvas and content), proportions kept: pass one side. |
| previewC | LOOK at the result: the real rendered image. box=[x,y,w,h] zooms on a detail (document px). layer= shows that layer alone. grid=true overlays a 10% grid labelled in document px. |
| analyze_imageB | Numbers about the image (or one layer, or a box): brightness, contrast, clipped shadows/ highlights, saturation, color cast, sharpness, dominant colors. Measure before correcting. |
| review_imageC | Check the document: text off-canvas or with low contrast, layers outside, blown highlights, upscaled images... each warning names the tool that fixes it. Not done while it warns. |
| ai_statusB | What AI is available here: background removal, inpaint backend, ComfyUI (generation, upscale), online services with a key (online.ready: service -> tasks) and the default one. |
| ai_servicesB | Online AI services (OpenAI, Gemini, Stability, OpenRouter, Replicate, Anthropic, Ollama, custom): which are ready, for which tasks (generate, edit, inpaint, describe, upscale, cutout), with which models. With service: set its models {task: model}, url, or default=true (used by backend="auto"). API keys are pasted by the user in the editor (AI models) or set as env vars, never here. |
| remove_backgroundB | AI cut-out as a layer MASK (the photo stays intact). keep=background inverts it. Models: isnet-general-use, u2net, u2net_human_seg (people), birefnet-general (best, slow). backend=stability uses the online service instead of the local model. |
| subject_boxC | Bounding box [x,y,w,h] of the main subject of an image layer, in document px. |
| inpaintA | Remove an object / fill an area: box=[x,y,w,h] document px, mask_path, or points=[[x,y],...] + size (a brush stroke: spot healing). No prompt = remove (classic fill). With prompt = generative fill (ComfyUI or an online service: backend=openai, gemini, stability, ...). The result is a patch on a NEW layer with a soft mask: move, fade or delete it like any layer. |
| generate_imageA | Text-to-image with the local ComfyUI or an online service (backend=openai, gemini, stability, openrouter, replicate), placed on a new layer (fit cover/contain). |
| edit_imageB | Image-to-image: redo an image layer (or a box of the picture, or all of it) following the prompt ("make it winter", "watercolor style"). strength 0..1: low keeps it, high reinvents it. The result is a NEW layer above, same place and mask; the original stays below. |
| describe_imageB | Image-to-text with a vision model (online with a key, or Ollama): describes the picture, a layer or a box, or answers question about it. Does not change the document. |
| upscaleB | More real pixels for an image layer (ComfyUI model, or backend=stability online, else Lanczos+sharpen). Its size on the canvas does not change. |
| auto_enhanceC | Measure and correct levels, white balance, vibrance, contrast. Adds normal, editable filters (an adjustment layer on top, or effects on layer=). |
| match_colorC | Make a layer's colors and tones match another layer (e.g. a pasted subject vs the background). |
| comfy_settingsC | Point pedit at a ComfyUI and choose its checkpoint/upscaler. Without args: current settings. |
| export_imageB | Write the image file (.png .jpg .webp .avif .tif). ONLY when the user asks for it. transparent=true keeps alpha (png/webp). box exports a region. |
| batchA | Many edits in ONE call and ONE undo step, all or nothing: [{"tool": "set_transform", "args": {...}}, ...]. look=true returns the preview too. |
| open_uiB | Open the web editor on THIS document (same in-memory document, live updates). |
| close_uiA | Stop the web editor started with open_ui. |
| report_issueC | Log what is broken/clumsy/missing (kind: bug, scomodo, sbagliato, manca, lento), then go on. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 62 tools
Each tool targets a distinct resource or action, with clear separation between layer operations, effects, masks, canvas, AI, and project management. Overlaps are minimal and descriptions clarify usage (e.g., add_adjustment vs add_effect vs apply_look). Agents can reliably select the right tool.
Mostly consistent snake_case with verb_noun or verb patterns (add_image, set_layer, list_effects). A few noun phrases (project_info, ai_status) and single verbs (undo, flatten) deviate slightly but remain readable and predictable.
62 tools far exceed the typical 3-15 range and the 25+ threshold for 'too many', representing an extreme mismatch for a single MCP server despite the complex domain. The surface is overly broad and likely to overwhelm agents.
The tool set covers the full image editing lifecycle: project management, layers, effects, masks, canvas, AI features, export, and batch operations. Minor gaps like listing fonts or blend modes are negligible; core CRUD and advanced workflows are complete.