Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PIXEL_MCP_DATA_DIRNoOverride the data directory. Defaults to platform-specific data directory.
PIXEL_MCP_EXPORT_SCALENoDefault export scale factor. Default is 4.

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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_documentA

Create a new pixel art document. Palette is a preset name (gameboy, grayscale4, pico8, sweetie16, nes) or a list of hex colors; index 0 is always transparent.

open_documentA

Import a PNG image as a new document from exactly one of png_base64 or path, quantizing to at most max_colors colors. Max 256x256.

extract_paletteA

Extract a color palette from a PNG supplied as exactly one of png_base64 or path, with median-cut quantization, WITHOUT creating a document. Returns a list of hex colors ready to pass to create_document(palette=[...]) (or add_palette_color), plus a swatch render so the colors are visible. Use this to pull a palette from a reference image; use open_document when you also want its pixels.

exportA

Export the document to a real file and return its absolute path. png: one frame with true transparency. gif: all frames animated. aseprite_json: JSON with embedded spritesheet. This is delivery for humans — the response contains no rendered image; use view/view_frames for perception.

split_sprite_sheetA

Split a regular PNG sprite sheet into separate pixel-mcp documents in row-major order. Provide exactly one of png_base64 or path. Supports sheet margins and spacing between cells; transparent cells are skipped by default.

pack_sprite_sheetA

Pack document frames into a transparent PNG sprite sheet in row-major order and write it to disk. Sprites may have different sizes; cell dimensions default to the largest sprite. This is delivery output and returns no preview image.

resize_canvasA

Resize the canvas. Existing content is placed according to the anchor; new area is transparent. Clears saved selections.

undoB

Undo the last edit(s).

redoB

Redo previously undone edit(s).

describeB

Full document state: size, palette with usage counts, layers, frames, symmetry, stamps, selections.

list_documentsA

List all documents, including ones persisted by other sessions sharing the data dir.

delete_documentA

Permanently delete a document from memory and disk. Cannot be undone.

set_symmetryA

Set the document symmetry mode. While set, drawing and region tools mirror writes across the canvas center automatically.

set_tile_modeA

Set seamless-tiling mode. While set, drawing tools wrap across the tiling edges (a stroke off one side continues on the opposite side) and the tile_seams lint rule activates. 'horizontal' tiles left-right, 'vertical' top-bottom, 'both' for a full repeat. Use view_tiled to check seams.

set_active_layerB

Set the default target layer for editing tools.

set_active_frameC

Set the default target frame for editing tools.

checkpointB

Label the current state for later comparison with view_diff.

set_palette_colorB

Change the color (and optionally name) of a palette entry. All pixels using the index update visually.

add_palette_colorB

Append a color to the palette. Fails when the palette is full (64 entries).

remove_palette_colorA

Delete a palette entry, remapping its pixels to remap_to. Higher indices shift down by one.

swap_palette_indicesA

Swap two palette entries and all pixel references to them. The image looks unchanged.

generate_rampB

Append a shading ramp built around a base color (dark to light). Shadows hue-shift toward cool, highlights toward warm.

mix_palette_colorsA

Blend two palette colors and store the result. The indexed-color way to make an in-between shade: t interpolates from color a (0) to color b (1). Appends a new entry by default, or overwrites into_index.

adjust_palette_colorA

Nudge a palette color in HSL space: darken/lighten via lightness, shift saturation or hue. Saves the model from hand-computing hex. Edits in place (all pixels using it update), or appends a fresh variant with as_new.

replace_colorA

Replace every pixel of one palette index with another on a layer (palette untouched). Optionally restricted to a region.

set_pixelsC

Set individual pixels to palette indices.

lineB

Draw a Bresenham line. no_doubles removes L-shaped double pixels for pixel-perfect diagonals.

rectC

Draw a rectangle (outline or filled).

ellipseC

Draw an ellipse centered at (cx,cy) with radii rx,ry (outline or filled).

flood_fillA

Flood fill from a seed pixel. contiguous=false recolors every pixel that matches the seed color.

outlineB

Draw a 1px border around all non-transparent pixels of the layer (or region). 'outside' draws into transparent pixels; 'inside' onto the shape's edge.

paste_gridA

Bulk-write a region from grid text (one char per pixel, '.'=transparent, then 1-9, a-z, A-Z, '#', '@' for palette indices 1-63; rows top to bottom). The workhorse for blocking in shapes.

shadeA

Darken or lighten existing pixels. A pixel whose color is part of a ramp steps along that ramp; otherwise it snaps to the nearest palette color in that direction. mode 'ramp' only moves ramp colors, 'nearest' ignores ramps, 'auto' (default) does ramp-then-nearest. Operates on the whole layer unless a region is given.

dither_gradientA

Fill a region with an ordered-dither gradient between two palette colors. The indexed-color way to blend a smooth-looking transition: from_index at one end, to_index at the other. axis horizontal/vertical/radial; pattern bayer (4x4, smoother) or checker (2x2, coarser). Either index may be 0 to fade to/from transparent.

scatterA

Randomly scatter pixels from a set of palette indices across a region, at the given coverage density (0-1). For grain and noise: stone, dirt, wood texture. Deterministic for a given seed, so the same call reproduces the same grain. weights biases which indices are picked.

import_imageA

Import an external PNG supplied as exactly one of png_base64 or path onto the canvas. Resamples to width x height (default native size), maps to the document palette ('document') or extends the palette with median-cut colors ('extend'), then writes it to a layer at (x,y). With as_stamp it is stored as a named stamp instead (place later with paste_stamp). Unlike open_document (new doc) this drops pixels into the current canvas.

copy_regionB

Copy a region into a named stamp for later paste_stamp.

cut_regionB

Copy a region into a named stamp and clear it from the layer.

paste_stampA

Paste a named stamp with optional flips and rotation. Transparent stamp pixels are skipped by default. Unlike other tools, paste_stamp ignores document symmetry by default: stamps are placed content, and mirroring would silently flip deliberate asymmetry.

copy_from_documentA

Copy a region of pixels from another document into this one, lossless in palette-index space — the assembly tool for multi-agent fan-out: subagents draw parts in their own documents, then a parent composes them. Source colors map to identical destination palette entries where they exist; the rest are appended ('extend', default) or snapped to the perceptually nearest existing entry ('nearest'). Placed content: ignores symmetry by default, like paste_stamp.

move_regionB

Move a region by (dx,dy), clearing its old location.

mirror_regionB

Mirror a region in place across its own bounding-box axis.

shift_layerB

Translate the whole layer by (dx,dy), optionally wrapping around the edges.

clear_regionB

Set every pixel in a region to transparent.

save_selectionC

Store a named selection that region parameters can reference later.

add_layerB

Add a new transparent layer (becomes the active layer).

remove_layerB

Delete a layer and its pixels on every frame.

rename_layerC

Rename a layer.

reorder_layerB

Move a layer to a new position in the stack (0 = bottom).

set_layer_visibilityC

Show or hide a layer.

set_layer_lockC

Lock or unlock a layer against edits.

merge_downA

Merge a layer into the one below it. Non-transparent top pixels replace bottom pixels; partial layer opacity is discarded.

viewA

Render the canvas (or a region) as a PNG. The primary perception tool: call it after every couple of edits.

view_textA

Read pixels as grid text (max 64x64; use view_window or a region for bigger canvases).

view_diffB

Compare the current state against a checkpoint: before, after, and changed-pixels panels.

view_windowA

Zoomed view of a 16 or 32 px window plus a whole-canvas thumbnail with the window marked. The intended workflow for 64px+ canvases.

view_tiledA

Render the canvas repeated reps x reps so tiling seams are visible, with the tile boundaries marked in faint red. The perception tool for seamless textures — a tile only reads as seamless when you see it tiled. Pairs with set_tile_mode and the tile_seams lint rule.

load_referenceA

Store a reference PNG supplied as exactly one of png_base64 or path under an id for quantizing or side-by-side viewing.

quantize_referenceA

Downsample a reference to the given size and map it to the document palette ('document') or to a fresh median-cut palette appended to the document ('auto'). Optionally write the result into a layer.

view_referenceB

Render a reference image, optionally beside the current canvas at matched display size.

add_frameA

Append a frame (optionally duplicating an existing one). The new frame becomes active.

remove_frameC

Delete a frame.

reorder_frameC

Move a frame to a new position on the timeline.

set_frame_durationC

Set how long a frame displays (ms).

copy_celC

Copy one layer's pixels from one frame to another.

view_framesA

Render frames as a horizontal strip. With onion, each frame shows the previous frame at 40% opacity beneath it. This (plus per-frame view) is the perception tool for animation — use it to verify motion, not preview_gif.

preview_gifA

Render the animation as a GIF (on checkerboard background). Human-facing output only: most clients show a GIF as a single still in model context, so it verifies nothing — use view_frames to check motion.

lintA

Run pixel-art quality checks and return findings with a render circling them. Rules: orphans, doubles, banding, pillow_shading, unused_colors, near_duplicates, broken_outline, symmetry_drift, stray_alpha, tile_seams. Findings are advisory; nothing is auto-fixed.

lint_waiveA

Persistently waive lint findings so they stay waived on every future pass (reported only as a count). Scope to a region to waive only there; omit the region to waive the whole rule.

lint_unwaiveA

Remove a lint waiver by id, or all waivers for the document when no id is given.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ehm-93/pixel-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server