← WebMCP Directory

Tool tree

pixelforge-webmcp.netlify.app

Media & PersonalTools verified
Website
PixelForge — an agent-native pixel art studio where humans and AI agents collaborate on the same canvas via WebMCP.
Explore capabilities
    get_editor_stateAnswer

    Inspect the PixelForge pixel-art editor: canvas size, frames, layers, active selections, palette, and per-layer pixel counts. Call this first before any editing to understand the current artwork.

    View tool JSON
    {
      "name": "get_editor_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Inspect the PixelForge pixel-art editor: canvas size, frames, layers, active selections, palette, and per-layer pixel counts. Call this first before any editing to understand the current artwork.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    get_regionAnswer

    Read the pixel colors of a rectangular region of the active frame. Returns a compact legend + row grid of palette indexes (0 = transparent). Use this to inspect existing artwork before modifying it.

    View tool JSON
    {
      "name": "get_region",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the pixel colors of a rectangular region of the active frame. Returns a compact legend + row grid of palette indexes (0 = transparent). Use this to inspect existing artwork before modifying it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "integer",
            "description": "Left edge (0-based)"
          },
          "y": {
            "type": "integer",
            "description": "Top edge (0-based)"
          },
          "width": {
            "type": "integer",
            "description": "Width in pixels"
          },
          "height": {
            "type": "integer",
            "description": "Height in pixels"
          },
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          },
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        },
        "required": [
          "x",
          "y",
          "width",
          "height"
        ]
      }
    }
    draw_pixelsAction

    Draw one or many pixels at once on the pixel canvas. Each pixel is {x, y, color} where color is a hex string like '#38b764'. Coordinates outside the canvas are rejected. Batch all pixels of a shape into one call.

    View tool JSON
    {
      "name": "draw_pixels",
      "kind": "act",
      "impl": "imperative",
      "description": "Draw one or many pixels at once on the pixel canvas. Each pixel is {x, y, color} where color is a hex string like '#38b764'. Coordinates outside the canvas are rejected. Batch all pixels of a shape into one call.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pixels": {
            "type": "array",
            "description": "Pixels to draw (batch in one call)",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer"
                },
                "y": {
                  "type": "integer"
                },
                "color": {
                  "type": "string",
                  "description": "Hex color, e.g. '#38b764'"
                }
              },
              "required": [
                "x",
                "y",
                "color"
              ]
            }
          },
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          },
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        },
        "required": [
          "pixels"
        ]
      }
    }
    erase_pixelsAction

    Erase (make transparent) one or many pixels at once. Each point is {x, y}.

    View tool JSON
    {
      "name": "erase_pixels",
      "kind": "act",
      "impl": "imperative",
      "description": "Erase (make transparent) one or many pixels at once. Each point is {x, y}.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pixels": {
            "type": "array",
            "description": "Pixels to erase",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer"
                },
                "y": {
                  "type": "integer"
                }
              },
              "required": [
                "x",
                "y"
              ]
            }
          },
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          },
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        },
        "required": [
          "pixels"
        ]
      }
    }
    fill_regionAction

    Flood fill: starting at (x, y), replace the contiguous region of identical color with the given hex color (like the paint-bucket tool).

    View tool JSON
    {
      "name": "fill_region",
      "kind": "act",
      "impl": "imperative",
      "description": "Flood fill: starting at (x, y), replace the contiguous region of identical color with the given hex color (like the paint-bucket tool).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "integer",
            "description": "Start pixel x"
          },
          "y": {
            "type": "integer",
            "description": "Start pixel y"
          },
          "color": {
            "type": "string",
            "description": "Hex fill color, e.g. '#38b764'"
          },
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          },
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        },
        "required": [
          "x",
          "y",
          "color"
        ]
      }
    }
    replace_colorAction

    Recolor existing artwork: replace every pixel of hex color `from` with hex color `to`. Defaults to the active layer; use scope 'all-layers' for the whole frame or 'all-frames' to recolor an animation at once. Idempotent — repeating the call affects zero pixels.

    View tool JSON
    {
      "name": "replace_color",
      "kind": "act",
      "impl": "imperative",
      "description": "Recolor existing artwork: replace every pixel of hex color `from` with hex color `to`. Defaults to the active layer; use scope 'all-layers' for the whole frame or 'all-frames' to recolor an animation at once. Idempotent — repeating the call affects zero pixels.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "description": "Hex color to replace"
          },
          "to": {
            "type": "string",
            "description": "Replacement hex color"
          },
          "scope": {
            "type": "string",
            "enum": [
              "active-layer",
              "all-layers",
              "all-frames"
            ],
            "description": "How far the replacement reaches (default: active layer)"
          }
        },
        "required": [
          "from",
          "to"
        ]
      }
    }
    create_layerAction

    Create a new empty layer on the active frame (e.g. 'Eyes', 'Outline') and make it active. New layers stack on top.

    View tool JSON
    {
      "name": "create_layer",
      "kind": "act",
      "impl": "imperative",
      "description": "Create a new empty layer on the active frame (e.g. 'Eyes', 'Outline') and make it active. New layers stack on top.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Layer name, e.g. 'Eyes'"
          }
        }
      }
    }
    select_layerAction

    Make a layer active by id or exact name (case-insensitive). Subsequent pixel operations default to this layer.

    View tool JSON
    {
      "name": "select_layer",
      "kind": "act",
      "impl": "imperative",
      "description": "Make a layer active by id or exact name (case-insensitive). Subsequent pixel operations default to this layer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          }
        },
        "required": [
          "layer"
        ]
      }
    }
    set_layer_visibilityAction

    Show or hide a layer by id or name, on the active frame.

    View tool JSON
    {
      "name": "set_layer_visibility",
      "kind": "act",
      "impl": "imperative",
      "description": "Show or hide a layer by id or name, on the active frame.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "description": "Target layer. Accepts the layer id (e.g. \"layer-ab12cd\") OR the layer name (e.g. \"Eyes\", case-insensitive). Defaults to the active layer."
          },
          "visible": {
            "type": "boolean",
            "description": "true to show, false to hide"
          }
        },
        "required": [
          "layer",
          "visible"
        ]
      }
    }
    create_frameAction

    Append a new empty frame to the animation timeline (same layer structure) and make it active.

    View tool JSON
    {
      "name": "create_frame",
      "kind": "act",
      "impl": "imperative",
      "description": "Append a new empty frame to the animation timeline (same layer structure) and make it active.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    duplicate_frameAction

    Duplicate a frame (copying all of its artwork) and insert the copy right after it. Target defaults to the active frame.

    View tool JSON
    {
      "name": "duplicate_frame",
      "kind": "act",
      "impl": "imperative",
      "description": "Duplicate a frame (copying all of its artwork) and insert the copy right after it. Target defaults to the active frame.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        }
      }
    }
    select_frameAction

    Make a frame active by 1-based number or id. Subsequent operations default to this frame.

    View tool JSON
    {
      "name": "select_frame",
      "kind": "act",
      "impl": "imperative",
      "description": "Make a frame active by 1-based number or id. Subsequent operations default to this frame.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "frame": {
            "type": "integer",
            "description": "Target frame as a 1-based frame number (1 = first frame). Defaults to the active frame."
          }
        },
        "required": [
          "frame"
        ]
      }
    }
    select_regionAction

    Select a rectangular region on the active layer. The selection is used by move_region, flip_region and clear_region.

    View tool JSON
    {
      "name": "select_region",
      "kind": "act",
      "impl": "imperative",
      "description": "Select a rectangular region on the active layer. The selection is used by move_region, flip_region and clear_region.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "integer",
            "description": "Left edge, pixels, 0-based from top-left"
          },
          "y": {
            "type": "integer",
            "description": "Top edge, pixels, 0-based from top-left"
          },
          "width": {
            "type": "integer",
            "description": "Width in pixels (min 1)"
          },
          "height": {
            "type": "integer",
            "description": "Height in pixels (min 1)"
          }
        },
        "required": [
          "x",
          "y",
          "width",
          "height"
        ]
      }
    }
    move_regionAction

    Shift the selected region's pixels by (dx, dy) on the active layer. Select a region with select_region first.

    View tool JSON
    {
      "name": "move_region",
      "kind": "act",
      "impl": "imperative",
      "description": "Shift the selected region's pixels by (dx, dy) on the active layer. Select a region with select_region first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "dx": {
            "type": "integer",
            "description": "Horizontal shift (+right / -left)"
          },
          "dy": {
            "type": "integer",
            "description": "Vertical shift (+down / -up)"
          }
        },
        "required": [
          "dx",
          "dy"
        ]
      }
    }
    flip_regionAction

    Mirror the selected region horizontally or vertically on the active layer. Select a region with select_region first.

    View tool JSON
    {
      "name": "flip_region",
      "kind": "act",
      "impl": "imperative",
      "description": "Mirror the selected region horizontally or vertically on the active layer. Select a region with select_region first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "direction": {
            "type": "string",
            "enum": [
              "horizontal",
              "vertical"
            ]
          }
        },
        "required": [
          "direction"
        ]
      }
    }
    clear_regionAction

    Erase every pixel inside the selected region on the active layer (make them transparent). Select a region with select_region first.

    View tool JSON
    {
      "name": "clear_region",
      "kind": "act",
      "impl": "imperative",
      "description": "Erase every pixel inside the selected region on the active layer (make them transparent). Select a region with select_region first.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    set_paletteAction

    Replace the editor's color palette with a list of hex colors. Also updates the palette swatches shown to the human.

    View tool JSON
    {
      "name": "set_palette",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace the editor's color palette with a list of hex colors. Also updates the palette swatches shown to the human.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "colors": {
            "type": "array",
            "description": "Hex colors, e.g. ['#1a1c2c', '#38b764']",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "colors"
        ]
      }
    }
    export_sprite_sheetAction

    Export all animation frames as a single sprite-sheet PNG (row-major, N columns) and trigger a browser download. Returns sheet metadata and a data URL of the generated image.

    View tool JSON
    {
      "name": "export_sprite_sheet",
      "kind": "act",
      "impl": "imperative",
      "description": "Export all animation frames as a single sprite-sheet PNG (row-major, N columns) and trigger a browser download. Returns sheet metadata and a data URL of the generated image.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "columns": {
            "type": "integer",
            "description": "Frames per row in the sheet (default: all frames in one row)"
          },
          "scale": {
            "type": "integer",
            "description": "Output scale factor per pixel (default 8)"
          }
        }
      }
    }
    export_animation_gifAction

    Export the whole animation as an animated GIF file and trigger a browser download. Frames play at their configured durations. Returns file metadata.

    View tool JSON
    {
      "name": "export_animation_gif",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the whole animation as an animated GIF file and trigger a browser download. Frames play at their configured durations. Returns file metadata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "scale": {
            "type": "integer",
            "description": "Output scale factor per pixel (default 4)"
          },
          "background": {
            "type": "string",
            "description": "Hex background color the animation is flattened onto (default '#ffffff')"
          }
        }
      }
    }