Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
pixel_create_canvasA

Create a new pixel art canvas saved as a PNG file.

The canvas is true-size (one canvas pixel = one image pixel); keep sprites small (e.g. 16x16, 32x32, 64x64) and upscale later with pixel_export_png. Parent directories are created automatically. Refuses to replace an existing file unless overwrite=true.

Returns: JSON {"canvas", "width", "height", "background"}; plus a rendered image of the canvas when preview=true. On failure returns "Error: ...".

pixel_draw_pixelsA

Set individual pixels on a canvas in one batch.

Each point may carry its own color; points without one use the batch default color. Drawing 'transparent' erases pixels. Out-of-bounds points are skipped and counted, not fatal. Batch as many points per call as possible — one call per sprite region, not one call per pixel.

Returns: JSON {"canvas", "pixels_drawn", "skipped_out_of_bounds"?}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_draw_lineA

Draw a straight line between two points on a canvas.

Endpoints may lie outside the canvas; the visible segment is drawn. Drawing 'transparent' erases. Returns JSON {"canvas", "line", "color"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_draw_rectA

Draw a filled or outlined rectangle on a canvas.

(x, y) is the top-left corner; width/height are in pixels. Drawing 'transparent' erases the region. Returns JSON {"canvas", "rect", "color", "filled"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_draw_ellipseA

Draw a filled or outlined ellipse inside a bounding box on a canvas.

(x, y) is the bounding box's top-left corner; equal width and height give a circle. Drawing 'transparent' erases. Returns JSON {"canvas", "ellipse", "color", "filled"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_flood_fillB

Flood-fill the contiguous region containing (x, y), like a paint bucket.

Fills all connected pixels that exactly match the seed pixel's color. Returns JSON {"canvas", "seed", "color"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_replace_colorB

Replace every pixel of one exact color with another across the canvas.

Useful for palette swaps and recoloring sprites. Matching is exact RGBA. Returns JSON {"canvas", "find", "replace", "pixels_changed"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_transform_canvasA

Flip or rotate the entire canvas in place.

Operations: flip_horizontal, flip_vertical, rotate_90_cw, rotate_90_ccw, rotate_180. 90-degree rotations swap the canvas dimensions. Returns JSON {"canvas", "operation", "width", "height"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_view_canvasA

Render a canvas as an image so you can see its current state.

Small canvases are upscaled with nearest-neighbor (crisp pixels) to about 512px on the long edge unless an explicit scale is given. Use this after a series of edits to check your work. Returns a text summary plus the rendered image. On failure returns "Error: ...".

pixel_canvas_infoA

Report a canvas's dimensions and color palette without rendering it.

Returns JSON: {"canvas", "width", "height", "unique_colors", "has_transparency", "top_colors": [{"color", "count"}, ...]} with the up to 16 most-used colors (fully transparent pixels reported as 'transparent'). On failure returns "Error: ...".

pixel_export_pngA

Export a canvas as an upscaled PNG with crisp nearest-neighbor pixels.

The source canvas is untouched; the export is written to out_path (parent directories are created). Use scale 1 for game-ready true-size assets and larger scales for display or sharing. Returns JSON {"source", "exported", "scale", "width", "height"}. On failure returns "Error: ...".

pixel_export_gifA

Combine same-size canvas PNGs into a looping animated GIF.

Frames play in the order given at duration_ms per frame (or per-frame durations_ms). ping_pong=true plays forward then backward for seamless bounce/idle loops. Transparency is preserved as GIF binary transparency (alpha <= 128 becomes transparent). Source canvases are untouched. Returns JSON {"exported", "frames", "frames_played", "scale", "width", "height"}. On failure returns "Error: ...".

pixel_export_spritesheetA

Pack same-size canvas PNGs into a single spritesheet PNG grid.

Frames are placed left-to-right, top-to-bottom, columns per row (all in one row if omitted), with no padding — ideal for game engines. Source canvases are untouched. Returns JSON {"exported", "frames", "columns", "rows", "frame_width", "frame_height", "width", "height"}. On failure returns "Error: ...".

pixel_duplicate_canvasA

Copy a canvas to a new file — the standard way to start the next animation frame from the current one, then edit only what moves.

Refuses to replace an existing file unless overwrite=true. Returns JSON {"source", "canvas", "width", "height"}. On failure returns "Error: ...".

pixel_copy_regionA

Copy a rectangular region from one canvas onto another (or within the same canvas) — for moving limbs between frames, stamping repeated parts, or compositing a sprite onto a background.

mode='over' (default) respects transparency like layering; mode='replace' overwrites the destination rect including alpha. Destination coordinates may be negative or overhang; the region clips to the destination canvas. Returns JSON {"source", "canvas", "region", "pasted_at", "mode"}; plus a rendered image of the destination when preview=true. On failure returns "Error: ...".

pixel_shift_canvasA

Shift the whole canvas by (dx, dy) pixels — quick motion between animation frames (bobbing, jumping, sliding).

Without wrap, pixels shifted past the edge are lost and vacated space is transparent; with wrap=true they re-enter from the opposite edge (good for scrolling backgrounds). Returns JSON {"canvas", "shift", "wrap"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_resize_canvasA

Change the canvas bounds without scaling the art — grow the canvas (new space is transparent) or crop it, with the existing art held at the chosen anchor.

Pixel sizes are unchanged; use pixel_scale_canvas to actually rescale art. Example: after squashing a sprite, resize back to the original height with anchor='bottom' to keep it grounded. Returns JSON {"canvas", "width", "height", "anchor"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_scale_canvasA

Rescale the canvas and its art to new dimensions with nearest-neighbor sampling (no blurring).

Integer multiples or divisors keep pixels perfectly crisp; other ratios will distort — useful deliberately for squash-and-stretch animation frames. Returns JSON {"canvas", "width", "height"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_apply_paletteA

Snap every opaque pixel to the nearest color in a given palette — enforce a consistent game palette across sprites or clean up stray colors.

Nearest match is by RGB distance; each pixel's alpha is preserved and fully transparent pixels are untouched. Returns JSON {"canvas", "palette_size", "pixels_changed"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_outline_spriteA

Draw a 1px outline around all opaque art on the canvas — the classic finishing pass that makes sprites pop against any background.

The outline occupies transparent pixels adjacent to the art; the art itself is untouched. If the sprite touches the canvas edge, grow the canvas first with pixel_resize_canvas so the outline has room. Returns JSON {"canvas", "color", "pixels_outlined"}; plus a rendered image when preview=true. On failure returns "Error: ...".

pixel_onion_viewA

Render the current frame over faded ghosts of up to 3 earlier frames — onion-skinning, the standard way to judge motion between animation frames.

List previous_paths most-recent first; ghosts fade with distance (35%, 20%, 12% opacity). Pass a tint color to show ghosts as silhouettes when frame colors overlap too much. Nothing is written to disk. Returns a text summary plus the rendered image. On failure returns "Error: ...".

pixel_view_framesA

Render several same-size canvases side by side as one filmstrip image — review a whole animation or sprite set at a glance.

Frames are laid out left-to-right, top-to-bottom on a neutral gray backdrop with thin separators, in the order given. Nothing is written to disk. Returns a text summary naming each frame position plus the rendered image. On failure returns "Error: ...".

pixel_slice_spritesheetA

Split a spritesheet PNG into individual frame canvases — the way to bring existing game assets in for editing or re-animation.

Tiles are read left-to-right, top-to-bottom on a strict frame_width x frame_height grid (partial tiles at the right/bottom edges are ignored) and written to out_dir as '_f00.png', '_f01.png', .... Fully transparent tiles are skipped unless skip_empty=false. Returns JSON {"source", "out_dir", "frames_written", "skipped_empty", "frame_paths"}. On failure returns "Error: ...".

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/light-vp/pixelart-mcp'

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