{
  "schema_version": "2025-06-18",
  "name": "paint-box",
  "description": "MCP server for the PaintBox canvas editor. External agents compose image edits (selection, fill, layers, opacity, transform, text, filters) and submit proposals for human review. The first fully agentic Photoshop-class editing experience.",
  "servers": [
    {
      "name": "paint-box",
      "transport": "streamable-http",
      "url": "https://paintbox.erikbethke.com/api/mcp",
      "authentication": "bearer-jwt",
      "install": "claude mcp add --transport http paint-box https://paintbox.erikbethke.com/api/mcp --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'"
    }
  ],
  "tools": [
    { "name": "list_documents", "description": "List documents the user has open in the editor." },
    { "name": "set_active_document", "description": "Load a document by ID — the editor pushes state automatically." },
    { "name": "set_document_context", "description": "Provide document state manually for headless operation." },
    { "name": "get_proposal", "description": "Retrieve the accumulated proposal and send it to the editor inbox." },
    { "name": "describe_document", "description": "Get the current document summary — canvas size, layers, nodes." },
    { "name": "create_layer", "description": "Create a new empty layer." },
    { "name": "set_selection", "description": "Set a selection (rectangle or ellipse) for subsequent operations." },
    { "name": "clear_selection", "description": "Remove the current selection." },
    { "name": "fill", "description": "Fill the current selection with a color on a specified layer." },
    { "name": "set_opacity", "description": "Set a layer's opacity." },
    { "name": "set_blend_mode", "description": "Set a layer's blend mode." },
    { "name": "finish", "description": "Mark the editing session complete with an interpretation." }
  ],
  "workflow": [
    "1. Authenticate: POST /api/auth/refresh with a refresh token to get an access token.",
    "2. Initialize: POST /api/mcp with JSON-RPC 'initialize' method.",
    "3. Discover: Call list_documents to see what the user has open.",
    "4. Load: Call set_active_document with a document ID.",
    "5. Edit: Call editor tools (set_selection, fill, create_layer, etc.) to compose edits.",
    "6. Finish: Call finish with an interpretation of what you did.",
    "7. Deliver: Call get_proposal — this deposits the proposal in the editor's inbox.",
    "8. The user sees the proposal in their browser and clicks Accept or Reject."
  ],
  "related": {
    "openapi": "https://paintbox.erikbethke.com/openapi.json",
    "for_agents": "https://paintbox.erikbethke.com/for-agents",
    "llms_txt": "https://paintbox.erikbethke.com/llms.txt",
    "llms_full_txt": "https://paintbox.erikbethke.com/llms-full.txt"
  },
  "discovery_help": {
    "note": "PaintBox requires authentication. Get a refresh token from the editor's MCP Connection panel (Account menu). The refresh token is valid for 30 days; exchange it for a 15-minute access token via POST /api/auth/refresh.",
    "claude_code": "claude mcp add --transport http paint-box https://paintbox.erikbethke.com/api/mcp --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'"
  }
}
