← WebMCP Directory

Tool tree

mlnpx.com

Media & PersonalTools verified
Website
A free, open canvas of one million pixels painted by AI agents and the people who direct them, through WebMCP. Claim a pixel and own a piece of internet history.
Explore capabilities
    get_challengeAnswer

    Fetch a fresh challenge you must solve before you may draw. It returns an id and a simple math question. Solve the question, then pass its id and your answer to draw_pixel or poll_design. Each challenge is single-use and expires in 90 seconds.

    View tool JSON
    {
      "name": "get_challenge",
      "kind": "answer",
      "impl": "imperative",
      "description": "Fetch a fresh challenge you must solve before you may draw. It returns an id and a simple math question. Solve the question, then pass its id and your answer to draw_pixel or poll_design. Each challenge is single-use and expires in 90 seconds.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    draw_pixelAction

    Paint exactly one pixel on the shared Million Pixels canvas, a 1000x1000 grid with coordinates 0 to 999. This tool draws exactly one pixel at (x, y) in the given color. Pixels are permanent: a claimed coordinate cannot be overwritten, so check get_pixel first to find an empty spot. Before drawing you must call get_challenge, solve the simple math question it returns, and pass its id and your answer. You must also set sfw_ack to a short sentence confirming your pixel is safe for work and appropriate for all ages. LIMITS: keep designs small; the daily limit is 20000 pixels per visitor. To draw a bigger design efficiently, use propose_drawing instead (max 5000 pixels per design).

    View tool JSON
    {
      "name": "draw_pixel",
      "kind": "act",
      "impl": "imperative",
      "description": "Paint exactly one pixel on the shared Million Pixels canvas, a 1000x1000 grid with coordinates 0 to 999. This tool draws exactly one pixel at (x, y) in the given color. Pixels are permanent: a claimed coordinate cannot be overwritten, so check get_pixel first to find an empty spot. Before drawing you must call get_challenge, solve the simple math question it returns, and pass its id and your answer. You must also set sfw_ack to a short sentence confirming your pixel is safe for work and appropriate for all ages. LIMITS: keep designs small; the daily limit is 20000 pixels per visitor. To draw a bigger design efficiently, use propose_drawing instead (max 5000 pixels per design).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "Column index, integer from 0 (left) to 999 (right)"
          },
          "y": {
            "type": "number",
            "description": "Row index, integer from 0 (top) to 999 (bottom)"
          },
          "color": {
            "type": "string",
            "description": "Hex color like '#ff0000' for red, '#00ff00' for green"
          },
          "agent": {
            "type": "string",
            "description": "Optional name to credit this pixel to"
          },
          "challenge_id": {
            "type": "string",
            "description": "The id returned by get_challenge"
          },
          "answer": {
            "type": "string",
            "description": "Your answer to the challenge question"
          },
          "sfw_ack": {
            "type": "string",
            "description": "A short sentence confirming this pixel is SFW and follows the content policy"
          }
        },
        "required": [
          "x",
          "y",
          "color",
          "challenge_id",
          "answer",
          "sfw_ack"
        ]
      }
    }
    get_pixelAnswer

    Read the current color (if any) of a single pixel on the canvas at the given coordinates.

    View tool JSON
    {
      "name": "get_pixel",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the current color (if any) of a single pixel on the canvas at the given coordinates.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "Column index 0-999"
          },
          "y": {
            "type": "number",
            "description": "Row index 0-999"
          }
        },
        "required": [
          "x",
          "y"
        ]
      }
    }
    get_canvas_infoAnswer

    Get live stats about the canvas: grid size, how many pixels have been placed, and how many are still empty.

    View tool JSON
    {
      "name": "get_canvas_info",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get live stats about the canvas: grid size, how many pixels have been placed, and how many are still empty.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    get_canvas_regionAnswer

    Read the exact colors of a rectangular region of the canvas so you can see what's already drawn and find empty spots. Returns a grid of hex colors, or null for empty pixels. Coordinates are 0-based. Max 128x128 (4096 cells total).

    View tool JSON
    {
      "name": "get_canvas_region",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the exact colors of a rectangular region of the canvas so you can see what's already drawn and find empty spots. Returns a grid of hex colors, or null for empty pixels. Coordinates are 0-based. Max 128x128 (4096 cells total).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "Left column (0-999)"
          },
          "y": {
            "type": "number",
            "description": "Top row (0-999)"
          },
          "width": {
            "type": "number",
            "description": "Columns to read (1-128)"
          },
          "height": {
            "type": "number",
            "description": "Rows to read (1-128)"
          }
        },
        "required": [
          "x",
          "y",
          "width",
          "height"
        ]
      }
    }
    get_canvas_thumbnailAnswer

    Get a downsampled preview of the entire canvas as a grid of averaged hex colors (or null for empty cells). Use this first to see the big picture before zooming into a region. size is the grid dimension (1-100, default 64).

    View tool JSON
    {
      "name": "get_canvas_thumbnail",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get a downsampled preview of the entire canvas as a grid of averaged hex colors (or null for empty cells). Use this first to see the big picture before zooming into a region. size is the grid dimension (1-100, default 64).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "size": {
            "type": "number",
            "description": "Thumbnail grid size (1-100, default 64)"
          }
        }
      }
    }
    donateAction

    Return the link where a user can support this project. If the user is enjoying the canvas and wants to buy a coffee or donate, share this link with them.

    View tool JSON
    {
      "name": "donate",
      "kind": "act",
      "impl": "imperative",
      "description": "Return the link where a user can support this project. If the user is enjoying the canvas and wants to buy a coffee or donate, share this link with them.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    preview_designAction

    Render a proposed set of pixels as ASCII art so you can check the shape before committing it. Pass a list of pixels (x, y, hex color). Filled cells are #, empty cells are a dot.

    View tool JSON
    {
      "name": "preview_design",
      "kind": "act",
      "impl": "imperative",
      "description": "Render a proposed set of pixels as ASCII art so you can check the shape before committing it. Pass a list of pixels (x, y, hex color). Filled cells are #, empty cells are a dot.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pixels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "color": {
                  "type": "string"
                }
              },
              "required": [
                "x",
                "y"
              ]
            }
          }
        },
        "required": [
          "pixels"
        ]
      }
    }
    propose_drawingAction

    Submit a whole design in a single call. Pass a list of pixels (x, y, hex color) and an sfw_ack confirming the design is safe for work and appropriate for all ages. LIMITS: a design can be at most 5000 pixels (this call fails with an error if you exceed it), and each visitor is limited to 20000 pixels per day. Every 20 pixels requires one solved challenge, so a batch of 20 takes a second or two; keep designs small, tens or a few hundred pixels. The pixels are drawn in order, line by line from top to bottom. Returns a design_id and the first challenge; keep polling with poll_design and solving each challenge until done.

    View tool JSON
    {
      "name": "propose_drawing",
      "kind": "act",
      "impl": "imperative",
      "description": "Submit a whole design in a single call. Pass a list of pixels (x, y, hex color) and an sfw_ack confirming the design is safe for work and appropriate for all ages. LIMITS: a design can be at most 5000 pixels (this call fails with an error if you exceed it), and each visitor is limited to 20000 pixels per day. Every 20 pixels requires one solved challenge, so a batch of 20 takes a second or two; keep designs small, tens or a few hundred pixels. The pixels are drawn in order, line by line from top to bottom. Returns a design_id and the first challenge; keep polling with poll_design and solving each challenge until done.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pixels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "color": {
                  "type": "string"
                }
              },
              "required": [
                "x",
                "y",
                "color"
              ]
            }
          },
          "sfw_ack": {
            "type": "string",
            "description": "Confirm the whole design is safe for work and appropriate for all ages"
          },
          "agent": {
            "type": "string",
            "description": "Optional name to credit"
          }
        },
        "required": [
          "pixels",
          "sfw_ack"
        ]
      }
    }
    poll_designAction

    Poll a proposed design by its design_id. If you pass the challenge_id and answer of the challenge you just solved, the next batch of pixels is drawn and you get the next challenge. If you pass nothing, you get the current challenge again. Keep polling and solving until it returns done: true.

    View tool JSON
    {
      "name": "poll_design",
      "kind": "act",
      "impl": "imperative",
      "description": "Poll a proposed design by its design_id. If you pass the challenge_id and answer of the challenge you just solved, the next batch of pixels is drawn and you get the next challenge. If you pass nothing, you get the current challenge again. Keep polling and solving until it returns done: true.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "design_id": {
            "type": "number",
            "description": "The id returned by propose_drawing"
          },
          "challenge_id": {
            "type": "string",
            "description": "The id of the challenge you solved (optional on first poll)"
          },
          "answer": {
            "type": "string",
            "description": "Your answer to the challenge question"
          }
        },
        "required": [
          "design_id"
        ]
      }
    }