{
  "protocolVersion": "0.3.0",
  "name": "21 Million Pixels",
  "description": "A shared 5000x4200 pixel canvas that anyone can paint on. People paint free, one pixel every 15 seconds. AI agents skip the wait by paying $0.005 a pixel in USDC on Base over x402 -- no account, no API key, no gas. This agent answers questions about the canvas -- what it is, where there is blank space, what is at a coordinate -- and sells pixels: ask it to paint and it quotes you, you sign, and it paints. Paid pixels go on at 60 a minute rather than all at once, so whoever painted underneath can see it happening.",
  "supportedInterfaces": [
    {
      "url": "https://21millionpixels.art/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "url": "https://21millionpixels.art/a2a",
  "preferredTransport": "JSONRPC",
  "version": "0.1.0",
  "documentationUrl": "https://21millionpixels.art/llms.txt",
  "iconUrl": "https://21millionpixels.art/favicon-32.png",
  "provider": {
    "organization": "21 Million Pixels",
    "url": "https://21millionpixels.art"
  },
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://github.com/google-a2a/a2a-x402/v0.1",
        "description": "Paying for pixels: a task comes back in input-required carrying the x402 payment requirement, and the signature is sent back on a message naming that task. Needed only for the paint_pixels skill; the other three are free and need no extension.",
        "required": false
      }
    ]
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "describe_canvas",
      "name": "Describe the canvas",
      "description": "What this canvas is and how to paint on it: its size, the palette, what a plot is, what a pixel costs an agent, how quickly paint is applied, and the endpoints to paint at.",
      "tags": [
        "canvas",
        "x402",
        "pricing",
        "getting-started"
      ],
      "examples": [
        "What is this canvas and how do I paint on it?"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "find_space",
      "name": "Find blank space",
      "description": "Find places where a rectangle of a given size fits on unpainted canvas, so a design can go there without covering somebody else's work. Send width and height in a data part, and optionally near_x and near_y to search elsewhere than the middle.",
      "tags": [
        "canvas",
        "placement",
        "search"
      ],
      "examples": [
        "Where can I put a 32x32 logo?",
        "Find space for 64x16 near 1200, 900."
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "look_at_spot",
      "name": "Look at a spot",
      "description": "What is at a coordinate: whether it is painted, which plot it belongs to, and whether that plot is locked by its owner. A locked plot refuses paid paint before any money moves, so it is worth asking before paying.",
      "tags": [
        "canvas",
        "inspect"
      ],
      "examples": [
        "What is at 2500, 2100?",
        "Is the plot at 400, 400 locked?"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "paint_pixels",
      "name": "Paint pixels",
      "description": "Buy pixels and have them painted. One payment covers one 10x10 plot, so up to 100 pixels at $0.005 each in USDC on Base. Say which pixels either as a list of tiles ({x, y, color}) or as x, y, width, height and a palette colour. The answer is a task in input-required whose x402.payment.required holds what to sign; send the signature back in x402.payment.payload on a message naming that task, and the pixels are queued and painted at 60 a minute. Follow it with tasks/get. Colours 1-32 are open to everyone; above that needs a wallet that owns a plot. Paint is permanent and anyone can paint over it afterwards.",
      "tags": [
        "canvas",
        "paint",
        "x402",
        "payment"
      ],
      "examples": [
        "Paint a 4x4 block of colour 3 at 2500, 2100.",
        "Buy the pixel at 2500, 2100 in colour 5."
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    }
  ]
}
