{
  "$comment": "GENERATED by wp/tests/wp-integration/mcp_abilities.sh from the abilities a running site registers (Pro on). Do not edit: WRITE_REGISTRY=1 regenerates it, and the harness fails when this file differs from the site.",
  "plugin": "page-builder-sandwich",
  "category": "page-builder-sandwich",
  "mcp": {
    "http_endpoint": "/wp-json/pbs/v1/mcp",
    "stdio": "wp mcp-adapter serve --server=page-builder-sandwich --user=<login>",
    "auth": "a WordPress application password (HTTP) or --user (WP-CLI); the user needs the capability each ability names",
    "switch": "Settings: Allow AI agents (MCP), on by default"
  },
  "rest": {
    "list": "/wp-json/wp-abilities/v1/abilities?category=page-builder-sandwich",
    "run": "/wp-json/wp-abilities/v1/abilities/<name>/run  (GET with ?input= for read-only abilities, POST {\"input\": {...}} otherwise)"
  },
  "docs": {
    "user_guide": "https://zinndigital.com/wordpress-plugins/page-builder-sandwich/mcp",
    "developers": "https://zinndigital.com/wordpress-plugins/page-builder-sandwich/mcp-api"
  },
  "abilities": [
    {
      "name": "pbs/activate-custom-font",
      "label": "Turn on an uploaded font (Pro)",
      "description": "Makes an uploaded custom font (a font file in the media library, by id) available in the font pickers.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/activate-custom-font/run"
      },
      "mcp_tool": "pbs-activate-custom-font"
    },
    {
      "name": "pbs/add-local-font",
      "label": "Self-host a font",
      "description": "Downloads a Google font family (family, weights, italic) and serves it from this site.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "family": {
            "type": "string"
          },
          "weights": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "default": [
              400,
              700
            ]
          },
          "italic": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [
          "family"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/add-local-font/run"
      },
      "mcp_tool": "pbs-add-local-font"
    },
    {
      "name": "pbs/add-section",
      "label": "Add a section to a page",
      "description": "Adds a ready-made section to a page: at the start, at the end, or after the section at a given position.",
      "edition": "free",
      "capability": "edit_post on that page",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "section": {
            "type": "string",
            "description": "The name of a section in this site's section library."
          },
          "position": {
            "type": "string",
            "enum": [
              "start",
              "end",
              "after"
            ],
            "default": "end"
          },
          "after": {
            "type": "integer",
            "minimum": 0,
            "description": "With position \"after\": the 0-based position of the section to insert after."
          }
        },
        "required": [
          "id",
          "section"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "link": {
            "type": "string"
          },
          "edit_link": {
            "type": "string"
          }
        }
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/add-section/run"
      },
      "mcp_tool": "pbs-add-section"
    },
    {
      "name": "pbs/add-shop-block",
      "label": "Add a product block or mini cart (Pro)",
      "description": "Adds a WooCommerce block at the end of a post: a product element (part: title, gallery, image, price, rating, excerpt, description, add_to_cart, meta, tabs, related, upsells, sale_badge, stock; productId, or 0 for the product being viewed) or a mini cart (label).",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "integer",
            "minimum": 1
          },
          "block": {
            "type": "string",
            "enum": [
              "product-element",
              "mini-cart"
            ]
          },
          "part": {
            "type": "string",
            "enum": [
              "title",
              "gallery",
              "image",
              "price",
              "rating",
              "excerpt",
              "add_to_cart",
              "meta",
              "tabs",
              "related",
              "upsells",
              "sale_badge",
              "stock",
              "description"
            ]
          },
          "productId": {
            "type": "integer",
            "minimum": 0
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "post",
          "block"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/add-shop-block/run"
      },
      "mcp_tool": "pbs-add-shop-block"
    },
    {
      "name": "pbs/ai-check-accessibility",
      "label": "Check a page's accessibility",
      "description": "Lists a page's accessibility problems: images without alt text, headings that skip a level, links whose text says nothing on its own, and links with no text. Each says whether it can be fixed automatically.",
      "edition": "pro",
      "capability": "edit_post on the page",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "post_id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-check-accessibility/run"
      },
      "mcp_tool": "pbs-ai-check-accessibility"
    },
    {
      "name": "pbs/ai-create-block",
      "label": "Create a custom block with AI",
      "description": "Designs a reusable component from a description (a pricing card, a team card, a banner) and saves it as a synced pattern in the editor's \"My patterns\", with each text overridable per placement. Returns its id and the block that places it.",
      "edition": "pro",
      "capability": "edit_posts and publish_posts; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "minLength": 5,
            "maxLength": 2000
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "description"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-create-block/run"
      },
      "mcp_tool": "pbs-ai-create-block"
    },
    {
      "name": "pbs/ai-css-help",
      "label": "Explain, write or fix CSS with AI",
      "description": "Explains, writes or fixes the custom CSS of one element, where `selector` stands for the element. Returns the CSS and an explanation; nothing is saved.",
      "edition": "pro",
      "capability": "edit_posts and the builder's code permission",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "explain",
              "write",
              "fix"
            ]
          },
          "css": {
            "type": "string",
            "maxLength": 20000
          },
          "instruction": {
            "type": "string",
            "maxLength": 2000
          },
          "block": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-css-help/run"
      },
      "mcp_tool": "pbs-ai-css-help"
    },
    {
      "name": "pbs/ai-design-from",
      "label": "Design a page from a screenshot or a link with AI",
      "description": "Recreates the layout of a screenshot (an image in the media library) or of a public web page (its address) as editable blocks in a new draft page: the same sections, columns, headings, text, lists and buttons. Logos and images are not copied.",
      "edition": "pro",
      "capability": "edit_pages (edit_post on the screenshot); the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "attachment_id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "instruction": {
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [],
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-design-from/run"
      },
      "mcp_tool": "pbs-ai-design-from"
    },
    {
      "name": "pbs/ai-edit-page",
      "label": "Edit a page with the AI assistant",
      "description": "Changes a page as asked in plain words (\"make the hero text shorter\", \"add an FAQ about delivery after the pricing\", \"translate the page into German\"). AI answers with edit operations that are checked against the page's blocks and their settings before anything is applied; refused operations are listed with the reason. A revision is saved first and its id returned as undo_revision.",
      "edition": "pro",
      "capability": "edit_post on the page; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1
          },
          "instruction": {
            "type": "string",
            "minLength": 3,
            "maxLength": 2000
          }
        },
        "required": [
          "post_id",
          "instruction"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-edit-page/run"
      },
      "mcp_tool": "pbs-ai-edit-page"
    },
    {
      "name": "pbs/ai-fix-accessibility",
      "label": "Fix a page's accessibility with AI",
      "description": "Fixes the accessibility problems that can be fixed (all, or the listed issue ids): alt text written by looking at each image, heading levels corrected, vague link texts rewritten. A revision is saved first and its id returned as undo_revision.",
      "edition": "pro",
      "capability": "edit_post on the page; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1
          },
          "issues": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "post_id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-fix-accessibility/run"
      },
      "mcp_tool": "pbs-ai-fix-accessibility"
    },
    {
      "name": "pbs/ai-generate-image",
      "label": "Generate an image with AI",
      "description": "Creates an image from a description with the site's image model (OpenAI or Google) and saves it to the media library with alt text. Returns its id and address.",
      "edition": "pro",
      "capability": "upload_files; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 5,
            "maxLength": 4000
          },
          "size": {
            "type": "string",
            "enum": [
              "square",
              "landscape",
              "portrait"
            ]
          },
          "alt": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "post_id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-generate-image/run"
      },
      "mcp_tool": "pbs-ai-generate-image"
    },
    {
      "name": "pbs/ai-generate-section",
      "label": "Generate a section with AI",
      "description": "Turns a one-sentence description into a ready-designed section (real, editable blocks in the site's brand style) with text written for it. Returns the block markup, and adds it to the start or end of a page when a post_id is given (a revision keeps what was there before).",
      "edition": "free",
      "capability": "edit_posts; edit_post to add it to a page; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "minLength": 5,
            "maxLength": 2000
          },
          "section": {
            "type": "string"
          },
          "post_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The post or page ID."
          },
          "position": {
            "type": "string",
            "enum": [
              "start",
              "end"
            ]
          }
        },
        "required": [
          "description"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-generate-section/run"
      },
      "mcp_tool": "pbs-ai-generate-section"
    },
    {
      "name": "pbs/ai-plan-site",
      "label": "Plan a website with AI",
      "description": "From a description of the business, lists the pages a website needs (home first, contact last), each with a title and a brief for that page. Nothing is created; each page can then be built from its brief.",
      "edition": "pro",
      "capability": "edit_pages; the AI settings' role and spending rules",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "brief": {
            "type": "string",
            "minLength": 10,
            "maxLength": 4000
          }
        },
        "required": [
          "brief"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-plan-site/run"
      },
      "mcp_tool": "pbs-ai-plan-site"
    },
    {
      "name": "pbs/ai-save-seo-meta",
      "label": "Save an SEO title and description",
      "description": "Saves a meta title and description into the SEO plugin the site uses (Yoast SEO, Rank Math, SEOPress or All in One SEO) and says which ones were written.",
      "edition": "free",
      "capability": "edit_post on the page",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The post or page ID."
          },
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "description": {
            "type": "string",
            "maxLength": 500
          }
        },
        "required": [
          "post_id",
          "title",
          "description"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-save-seo-meta/run"
      },
      "mcp_tool": "pbs-ai-save-seo-meta"
    },
    {
      "name": "pbs/ai-suggest-seo-meta",
      "label": "Suggest an SEO title and description with AI",
      "description": "Reads a page and suggests a meta title (up to 60 characters) and meta description (up to 155), optionally around a focus keyword. Nothing is saved.",
      "edition": "free",
      "capability": "edit_post on the page; the AI settings' role and spending rules",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The post or page ID."
          },
          "keyword": {
            "type": "string",
            "maxLength": 100
          }
        },
        "required": [
          "post_id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-suggest-seo-meta/run"
      },
      "mcp_tool": "pbs-ai-suggest-seo-meta"
    },
    {
      "name": "pbs/ai-undo",
      "label": "Undo an AI change",
      "description": "Puts a page back the way it was before an AI change, from the undo_revision that change returned.",
      "edition": "free",
      "capability": "edit_post on the page",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The post or page ID."
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "post_id",
          "revision"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-undo/run"
      },
      "mcp_tool": "pbs-ai-undo"
    },
    {
      "name": "pbs/ai-write-alt-text",
      "label": "Write image alt text with AI",
      "description": "Looks at images and saves alt text for them: one image (attachment_id), or every image on a page that has none (post_id). At most 20 images per call; the answer says how many remain.",
      "edition": "free",
      "capability": "upload_files and edit_post on the image or page; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "attachment_id": {
            "type": "integer",
            "minimum": 1
          },
          "post_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The post or page ID."
          },
          "only_missing": {
            "type": "boolean"
          },
          "language": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-write-alt-text/run"
      },
      "mcp_tool": "pbs-ai-write-alt-text"
    },
    {
      "name": "pbs/ai-write-text",
      "label": "Write or rewrite text with AI",
      "description": "Writes new text, or improves, shortens, expands, changes the tone of or fixes the grammar of a piece of text, with the site's own AI provider. Returns the new text; nothing on the site is changed.",
      "edition": "free",
      "capability": "edit_posts (edit_post when post_id is given); the AI settings' role and spending rules",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "write",
              "improve",
              "shorten",
              "expand",
              "tone",
              "fix",
              "custom"
            ]
          },
          "text": {
            "type": "string",
            "maxLength": 8000
          },
          "tone": {
            "type": "string",
            "enum": [
              "professional",
              "friendly",
              "confident",
              "playful",
              "formal",
              "simple"
            ]
          },
          "instruction": {
            "type": "string",
            "maxLength": 2000
          },
          "context": {
            "type": "string",
            "maxLength": 4000
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/ai-write-text/run"
      },
      "mcp_tool": "pbs-ai-write-text"
    },
    {
      "name": "pbs/apply-brand-kit",
      "label": "Apply the brand kit (Pro)",
      "description": "Applies the saved brand kit's colours and fonts to the site design.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/apply-brand-kit/run"
      },
      "mcp_tool": "pbs-apply-brand-kit"
    },
    {
      "name": "pbs/apply-kit",
      "label": "Import a website kit",
      "description": "Imports a website kit's pages (all of them, or the ones named), optionally publishing them, setting the home page and adding them to a menu. Importing again updates the same pages.",
      "edition": "free",
      "capability": "edit_pages and publish_pages; manage_options to set the home page",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]{1,60}$"
          },
          "pages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "publish": {
            "type": "boolean",
            "default": false
          },
          "front": {
            "type": "boolean",
            "default": false
          },
          "menu": {
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/apply-kit/run"
      },
      "mcp_tool": "pbs-apply-kit"
    },
    {
      "name": "pbs/apply-replace",
      "label": "Apply a find-and-replace (Pro)",
      "description": "Applies a previewed job. Every changed post keeps a backup, so the job can be undone.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]{10}$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/apply-replace/run"
      },
      "mcp_tool": "pbs-apply-replace"
    },
    {
      "name": "pbs/build-landing-page",
      "label": "Build a landing page",
      "description": "A guided workflow: the agent picks sections that fit your business, builds the page as a draft and writes its text.",
      "edition": "free",
      "capability": "edit_pages",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "business": {
            "type": "string",
            "description": "The business, its offer and its audience."
          }
        },
        "required": [
          "business"
        ],
        "additionalProperties": false
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/build-landing-page/run"
      },
      "mcp_tool": "pbs-build-landing-page"
    },
    {
      "name": "pbs/build-pages",
      "label": "Build several pages",
      "description": "Creates up to 50 pages in one call, each from sections and/or block content. Each page is checked and created on its own; the answer lists every page made and every one refused, with the reason.",
      "edition": "pro",
      "capability": "edit_pages; each page is checked on its own (publish_pages to publish)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "pages": {
            "type": "array",
            "minItems": 1,
            "maxItems": 50,
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "draft",
                    "pending",
                    "publish",
                    "private"
                  ]
                },
                "sections": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Names of sections in this site's section library, in page order. They come before any content given."
                },
                "content": {
                  "type": "string",
                  "description": "Block markup (the format the block editor saves)."
                }
              },
              "required": [
                "title"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "pages"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/build-pages/run"
      },
      "mcp_tool": "pbs-build-pages"
    },
    {
      "name": "pbs/check-performance",
      "label": "Check a page's performance",
      "description": "Reports what a page's content adds to its weight: its images (bytes, oversized ones and the smaller size that would do), the stylesheets of the blocks it uses and its third-party embeds, each problem with its fix.",
      "edition": "pro",
      "capability": "edit_post on the page",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "post_id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/check-performance/run"
      },
      "mcp_tool": "pbs-check-performance"
    },
    {
      "name": "pbs/connect-adobe-fonts",
      "label": "Connect Adobe Fonts (Pro)",
      "description": "Connects an Adobe Fonts (Typekit) web project by its kit id, so its fonts appear in the font pickers.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "kit": {
            "type": "string",
            "pattern": "^(?:|[A-Za-z0-9]{5,12})$"
          }
        },
        "required": [
          "kit"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/connect-adobe-fonts/run"
      },
      "mcp_tool": "pbs-connect-adobe-fonts"
    },
    {
      "name": "pbs/connect-marketing-service",
      "label": "Connect a mailing-list service (Pro)",
      "description": "Connects a mailing-list service with its API key (service, key; account where the service needs one), or disconnects it with an empty key.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "service": {
            "type": "string",
            "pattern": "^[a-z0-9]{2,32}$"
          },
          "key": {
            "type": "string"
          },
          "account": {
            "type": "string"
          }
        },
        "required": [
          "service"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/connect-marketing-service/run"
      },
      "mcp_tool": "pbs-connect-marketing-service"
    },
    {
      "name": "pbs/connect-support",
      "label": "Connect to support",
      "description": "Connects this site to Zinn Digital® support (name, email, consent).",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "email": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "consent": {
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "consent"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/connect-support/run"
      },
      "mcp_tool": "pbs-connect-support"
    },
    {
      "name": "pbs/convert-builder-export",
      "label": "Convert an export from another builder (Pro)",
      "description": "Converts an export (builder: elementor, divi, beaver or wpbakery; content: the exported text) into a new draft page made of blocks, optionally copying its images into the media library (media). Answers with the draft and a conversion report.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "builder": {
            "type": "string",
            "enum": [
              "elementor",
              "divi",
              "beaver",
              "wpbakery"
            ]
          },
          "content": {
            "type": "string"
          },
          "title": {
            "type": "string",
            "default": ""
          },
          "media": {
            "type": "boolean",
            "default": true
          },
          "dryRun": {
            "type": "boolean",
            "default": false
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "private",
              "publish"
            ],
            "default": "draft"
          }
        },
        "required": [
          "builder",
          "content"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/convert-builder-export/run"
      },
      "mcp_tool": "pbs-convert-builder-export"
    },
    {
      "name": "pbs/convert-builder-page",
      "label": "Convert a page from another builder (Pro)",
      "description": "Converts one page built with Elementor, Divi, Beaver Builder or WPBakery (id) into a new draft made of blocks, keeping its layout, typography, colours and images; the original page is not changed. Answers with the draft and a report of what was converted, approximated or not converted. dryRun converts without saving.",
      "edition": "pro",
      "capability": "edit_pages and edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "dryRun": {
            "type": "boolean",
            "default": false
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "private",
              "publish"
            ],
            "default": "draft"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/convert-builder-page/run"
      },
      "mcp_tool": "pbs-convert-builder-page"
    },
    {
      "name": "pbs/convert-post",
      "label": "Convert one legacy page",
      "description": "Converts one 5.x page to blocks (backed up first).",
      "edition": "free",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/convert-post/run"
      },
      "mcp_tool": "pbs-convert-post"
    },
    {
      "name": "pbs/create-ab-test",
      "label": "Create an A/B test (Pro)",
      "description": "Adds a test of two versions of a section to the end of a post (post, name, a, b; split and goal optional).",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string"
          },
          "a": {
            "type": "string"
          },
          "b": {
            "type": "string"
          },
          "split": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 50
          },
          "goal": {
            "type": "string"
          }
        },
        "required": [
          "post",
          "a",
          "b"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-ab-test/run"
      },
      "mcp_tool": "pbs-create-ab-test"
    },
    {
      "name": "pbs/create-class",
      "label": "Create a global class (Pro)",
      "description": "Creates a reusable global style class: label, slug and its styles (s).",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "label": {
            "type": "string"
          },
          "slug": {
            "type": "string",
            "pattern": "^(?:|[a-z][a-z0-9-]{0,39})$"
          },
          "s": {
            "type": "object"
          }
        },
        "required": [
          "label"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-class/run"
      },
      "mcp_tool": "pbs-create-class"
    },
    {
      "name": "pbs/create-cookie-banner",
      "label": "Create a starter cookie banner (Pro)",
      "description": "Creates a ready-made consent banner design to start from.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-cookie-banner/run"
      },
      "mcp_tool": "pbs-create-cookie-banner"
    },
    {
      "name": "pbs/create-form",
      "label": "Create a form (Pro)",
      "description": "Creates a form (contact, quote, signup or multi-step: fields, steps, settings and actions such as email, save, webhook or a mailing list), on a new page or at the end of an existing post (post).",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "title": {
            "type": "string"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "email",
                    "tel",
                    "url",
                    "number",
                    "date",
                    "textarea",
                    "select",
                    "radio",
                    "checkbox",
                    "consent",
                    "file",
                    "hidden"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{0,40}$"
                },
                "required": {
                  "type": "boolean"
                },
                "placeholder": {
                  "type": "string"
                },
                "help": {
                  "type": "string"
                },
                "options": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "defaultValue": {
                  "type": "string"
                },
                "width": {
                  "type": "string",
                  "enum": [
                    "full",
                    "half"
                  ]
                },
                "min": {
                  "type": "number"
                },
                "max": {
                  "type": "number"
                },
                "maxLength": {
                  "type": "integer"
                },
                "accept": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "jpg",
                      "jpeg",
                      "png",
                      "gif",
                      "webp",
                      "pdf",
                      "txt",
                      "csv",
                      "doc",
                      "docx",
                      "xls",
                      "xlsx",
                      "zip"
                    ]
                  }
                },
                "maxMb": {
                  "type": "integer"
                },
                "condition": {
                  "type": "object",
                  "description": "Show this field only when another field (fieldId: its name) matches: eq, neq, contains, empty or notempty, against value.",
                  "properties": {
                    "fieldId": {
                      "type": "string"
                    },
                    "matchType": {
                      "type": "string",
                      "enum": [
                        "eq",
                        "neq",
                        "contains",
                        "empty",
                        "notempty"
                      ]
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                "step": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 20
                }
              },
              "required": [
                "type",
                "label"
              ],
              "additionalProperties": false
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 120
            }
          },
          "actions": {
            "type": "object",
            "properties": {
              "email": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "to": {
                    "type": "string"
                  },
                  "subject": {
                    "type": "string"
                  }
                }
              },
              "store": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  }
                }
              },
              "webhook": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              "list": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "service": {
                    "type": "string",
                    "pattern": "^[a-z0-9]{2,32}$"
                  },
                  "list": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{0,64}$"
                  }
                }
              }
            }
          },
          "submitText": {
            "type": "string"
          },
          "successMessage": {
            "type": "string"
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri"
          },
          "trackEvent": {
            "type": "string",
            "pattern": "^([a-z][a-z0-9_]{0,39})?$"
          },
          "post": {
            "type": "integer",
            "minimum": 1
          },
          "pageTitle": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "publish",
              "private"
            ],
            "default": "draft"
          }
        },
        "required": [
          "fields"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-form/run"
      },
      "mcp_tool": "pbs-create-form"
    },
    {
      "name": "pbs/create-page",
      "label": "Create a page",
      "description": "Creates a page from library sections and/or block content. A new page is a draft unless another status is asked for.",
      "edition": "free",
      "capability": "edit_pages; publish_pages to publish or make private",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "publish",
              "private"
            ]
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of sections in this site's section library, in page order. They come before any content given."
          },
          "content": {
            "type": "string",
            "description": "Block markup (the format the block editor saves)."
          }
        },
        "required": [
          "title"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "link": {
            "type": "string"
          },
          "edit_link": {
            "type": "string"
          }
        }
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-page/run"
      },
      "mcp_tool": "pbs-create-page"
    },
    {
      "name": "pbs/create-popup",
      "label": "Create a popup (Pro)",
      "description": "Creates a popup, slide-in or bar: its content, trigger (exit intent, scroll, time, click), frequency and the pages it shows on.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "title": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "publish"
            ]
          },
          "settings": {
            "type": "object"
          }
        },
        "required": [
          "title",
          "content"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-popup/run"
      },
      "mcp_tool": "pbs-create-popup"
    },
    {
      "name": "pbs/create-query-loop",
      "label": "Add a query loop (Pro)",
      "description": "Adds a query loop with a ready-made card, on a new page (pageTitle, status) or at the end of a post (post): source posts|users|terms|field, postType (product for a shop grid), perPage, columns, orderBy, order, pagination, and live filters [{type: search|taxonomy|meta|sort|price|onsale|instock, taxonomy, key, label, ui}].",
      "edition": "pro",
      "capability": "edit_post and edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "integer",
            "minimum": 1
          },
          "pageTitle": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "publish",
              "private"
            ]
          },
          "source": {
            "type": "string",
            "enum": [
              "posts",
              "users",
              "terms",
              "field"
            ]
          },
          "postType": {
            "type": "string"
          },
          "perPage": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "columns": {
            "type": "integer",
            "minimum": 1,
            "maximum": 6
          },
          "orderBy": {
            "type": "string"
          },
          "order": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ]
          },
          "pagination": {
            "type": "string",
            "enum": [
              "none",
              "numbers",
              "prevnext"
            ]
          },
          "taxonomy": {
            "type": "string"
          },
          "fieldKey": {
            "type": "string"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-query-loop/run"
      },
      "mcp_tool": "pbs-create-query-loop"
    },
    {
      "name": "pbs/create-team",
      "label": "Create a library team (Agency)",
      "description": "Creates a team library (name) that other sites can join with an invite code.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-team/run"
      },
      "mcp_tool": "pbs-create-team"
    },
    {
      "name": "pbs/create-theme-template",
      "label": "Create a theme template (Pro)",
      "description": "Creates a template (title, type) that replaces that part of every matching page, on classic and block themes. Without content it starts from a ready-made design for its type. include/exclude are display-condition rules ({kind, values, key, value, from, to, days}, the kinds this site's theme builder offers); priority breaks ties; status publish (live) or draft.",
      "edition": "pro",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "pattern": "^[a-z_]{2,30}$"
          },
          "content": {
            "type": "string"
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "priority": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000
          },
          "status": {
            "type": "string",
            "enum": [
              "publish",
              "draft"
            ]
          }
        },
        "required": [
          "title",
          "type"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/create-theme-template/run"
      },
      "mcp_tool": "pbs-create-theme-template"
    },
    {
      "name": "pbs/deactivate-custom-font",
      "label": "Turn off an uploaded font (Pro)",
      "description": "Removes a custom font (by slug) from the font pickers.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "slug": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
          }
        },
        "required": [
          "slug"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/deactivate-custom-font/run"
      },
      "mcp_tool": "pbs-deactivate-custom-font"
    },
    {
      "name": "pbs/delete-class",
      "label": "Delete a global class (Pro)",
      "description": "Deletes a global class. Elements that used it keep their content and lose its styles.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^c[a-z0-9]{7}$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-class/run"
      },
      "mcp_tool": "pbs-delete-class"
    },
    {
      "name": "pbs/delete-icon",
      "label": "Delete an uploaded icon",
      "description": "Removes an uploaded icon; blocks that used it keep their own copy.",
      "edition": "free",
      "capability": "delete_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-icon/run"
      },
      "mcp_tool": "pbs-delete-icon"
    },
    {
      "name": "pbs/delete-library-item",
      "label": "Delete a cloud library design (Pro)",
      "description": "Deletes a design from the cloud library.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "item": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          },
          "team": {
            "type": "string",
            "default": "",
            "pattern": "^([0-9a-f-]{36})?$"
          }
        },
        "required": [
          "item"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-library-item/run"
      },
      "mcp_tool": "pbs-delete-library-item"
    },
    {
      "name": "pbs/delete-page",
      "label": "Move a page to the trash",
      "description": "Moves a page to the trash. It can be restored from Pages, Trash for 30 days.",
      "edition": "free",
      "capability": "delete_post on that page",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-page/run"
      },
      "mcp_tool": "pbs-delete-page"
    },
    {
      "name": "pbs/delete-team",
      "label": "Delete a library team (Agency)",
      "description": "Deletes a team and every design in its library.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          }
        },
        "required": [
          "team"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-team/run"
      },
      "mcp_tool": "pbs-delete-team"
    },
    {
      "name": "pbs/delete-theme-template",
      "label": "Delete a theme template (Pro)",
      "description": "Moves one template (id) to the trash; the theme's own design shows again where it applied. Restorable from the trash.",
      "edition": "pro",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/delete-theme-template/run"
      },
      "mcp_tool": "pbs-delete-theme-template"
    },
    {
      "name": "pbs/disconnect-support",
      "label": "Disconnect from support",
      "description": "Disconnects this site from support.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/disconnect-support/run"
      },
      "mcp_tool": "pbs-disconnect-support"
    },
    {
      "name": "pbs/duplicate-class",
      "label": "Duplicate a global class (Pro)",
      "description": "Copies a global class under a new id.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^c[a-z0-9]{7}$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/duplicate-class/run"
      },
      "mcp_tool": "pbs-duplicate-class"
    },
    {
      "name": "pbs/duplicate-page",
      "label": "Duplicate a page",
      "description": "Copies a page (its title, content and template) into a new draft.",
      "edition": "free",
      "capability": "edit_post on the page and edit_pages",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/duplicate-page/run"
      },
      "mcp_tool": "pbs-duplicate-page"
    },
    {
      "name": "pbs/export-designs",
      "label": "Export designs and settings",
      "description": "Exports the chosen templates and patterns (ids) and, optionally, settings as one package for another site.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "default": []
          },
          "settings": {
            "type": "boolean",
            "default": true
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/export-designs/run"
      },
      "mcp_tool": "pbs-export-designs"
    },
    {
      "name": "pbs/find-builder-pages",
      "label": "Find pages built with other builders (Pro)",
      "description": "Lists the pages and posts built with Elementor, Divi, Beaver Builder or WPBakery (page, per_page), each with its builder and, when it was converted before, the converted draft.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 50
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/find-builder-pages/run"
      },
      "mcp_tool": "pbs-find-builder-pages"
    },
    {
      "name": "pbs/generate-page",
      "label": "Write a page with AI",
      "description": "Builds a page from sections (given, or chosen by AI from the section library) and has AI rewrite all of its text for your brief, keeping the design. Uses the AI provider set up in the plugin's AI settings. The page is a draft unless another status is asked for.",
      "edition": "pro",
      "capability": "edit_pages; publish_pages to publish; the AI settings' role and spending rules",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "brief": {
            "type": "string",
            "minLength": 10,
            "maxLength": 4000,
            "description": "What the page is for: the business, the offer, the audience and the tone."
          },
          "title": {
            "type": "string"
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 8
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "publish",
              "private"
            ]
          }
        },
        "required": [
          "brief"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/generate-page/run"
      },
      "mcp_tool": "pbs-generate-page"
    },
    {
      "name": "pbs/get-block",
      "label": "Describe a builder block",
      "description": "Returns one block's settings (attributes with their types, choices and defaults), what it supports, which blocks it may contain, and a ready-to-use example in block markup.",
      "edition": "free",
      "capability": "edit_posts",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^pbs/[a-z0-9-]+$"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-block/run"
      },
      "mcp_tool": "pbs-get-block"
    },
    {
      "name": "pbs/get-breakpoints",
      "label": "Read the responsive breakpoints",
      "description": "Returns the tablet and mobile widths (and custom breakpoints in Pro) the responsive controls use.",
      "edition": "free",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-breakpoints/run"
      },
      "mcp_tool": "pbs-get-breakpoints"
    },
    {
      "name": "pbs/get-conversion-tracking",
      "label": "Read the conversion tracking (Pro)",
      "description": "Returns the Google Analytics 4, Google Tag Manager and Meta Pixel settings and which clicks and form submissions are sent.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-conversion-tracking/run"
      },
      "mcp_tool": "pbs-get-conversion-tracking"
    },
    {
      "name": "pbs/get-cookie-banner",
      "label": "Read the cookie consent banner (Pro)",
      "description": "Returns the consent banner: whether it is on, its text and design, the categories, and where it applies.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-cookie-banner/run"
      },
      "mcp_tool": "pbs-get-cookie-banner"
    },
    {
      "name": "pbs/get-design-globals",
      "label": "Read the site design",
      "description": "Returns the site-wide colours and fonts (heading and body) every block uses, as the Site design screen shows them.",
      "edition": "free",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-design-globals/run"
      },
      "mcp_tool": "pbs-get-design-globals"
    },
    {
      "name": "pbs/get-design-system",
      "label": "Read the design system (Pro)",
      "description": "Returns the Pro design system: global classes, variables, design tokens, dark mode, brand kit and custom fonts.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-design-system/run"
      },
      "mcp_tool": "pbs-get-design-system"
    },
    {
      "name": "pbs/get-diagnostics",
      "label": "Read the site diagnostics",
      "description": "Returns the diagnostics a support ticket would carry: versions, active plugins, limits and recent errors.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-diagnostics/run"
      },
      "mcp_tool": "pbs-get-diagnostics"
    },
    {
      "name": "pbs/get-figma-connection",
      "label": "Read the Figma connection (Pro)",
      "description": "Returns whether the site has a Figma personal access token, the Figma account it belongs to and its last four characters. The token itself is never returned.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-figma-connection/run"
      },
      "mcp_tool": "pbs-get-figma-connection"
    },
    {
      "name": "pbs/get-library-account",
      "label": "Read the cloud library account (Pro)",
      "description": "Returns the cloud library's storage use, plan quota and team facts.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-library-account/run"
      },
      "mcp_tool": "pbs-get-library-account"
    },
    {
      "name": "pbs/get-library-item",
      "label": "Get a cloud library design (Pro)",
      "description": "Returns one saved design, ready to insert on this site (its images brought into the media library).",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "item": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          },
          "team": {
            "type": "string",
            "default": "",
            "pattern": "^([0-9a-f-]{36})?$"
          }
        },
        "required": [
          "item"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-library-item/run"
      },
      "mcp_tool": "pbs-get-library-item"
    },
    {
      "name": "pbs/get-library-storage",
      "label": "Read the own-storage settings (Pro)",
      "description": "Returns the bring-your-own R2/S3 storage settings (the secret is never returned).",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-library-storage/run"
      },
      "mcp_tool": "pbs-get-library-storage"
    },
    {
      "name": "pbs/get-licence",
      "label": "Read the licence",
      "description": "Returns this site's Page Builder Sandwich plan, licence state, renewal date and what the plan includes.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-licence/run"
      },
      "mcp_tool": "pbs-get-licence"
    },
    {
      "name": "pbs/get-maintenance",
      "label": "Read maintenance mode (Pro)",
      "description": "Returns maintenance / coming-soon mode: mode, page, retry-after and which roles still see the site.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-maintenance/run"
      },
      "mcp_tool": "pbs-get-maintenance"
    },
    {
      "name": "pbs/get-migration",
      "label": "Read the legacy migration",
      "description": "Returns the 5.x content conversion's progress and report.",
      "edition": "free",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-migration/run"
      },
      "mcp_tool": "pbs-get-migration"
    },
    {
      "name": "pbs/get-motion-options",
      "label": "List the animation and interaction settings (Pro)",
      "description": "Returns every motion setting (entrance animation, its length and delay, scroll effect, hover effect, stay in view, parallax, follow the pointer) with its choices or range, and the site's breakpoints.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-motion-options/run"
      },
      "mcp_tool": "pbs-get-motion-options"
    },
    {
      "name": "pbs/get-newsletter-keys",
      "label": "Read the newsletter connection (Pro)",
      "description": "Says whether a Mailchimp key is saved (the key itself is never returned).",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-newsletter-keys/run"
      },
      "mcp_tool": "pbs-get-newsletter-keys"
    },
    {
      "name": "pbs/get-page",
      "label": "Read a page",
      "description": "Returns a page's title, status, links and block content, and the sections (top-level blocks) it is made of.",
      "edition": "free",
      "capability": "edit_post on that page",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-page/run"
      },
      "mcp_tool": "pbs-get-page"
    },
    {
      "name": "pbs/get-replace-job",
      "label": "Preview a find-and-replace (Pro)",
      "description": "Returns a job's matches, page by page, to review before applying.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]{10}$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-replace-job/run"
      },
      "mcp_tool": "pbs-get-replace-job"
    },
    {
      "name": "pbs/get-reviews-sources",
      "label": "Read the reviews sources (Pro)",
      "description": "Returns the Google and Trustpilot sources the Reviews block shows.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-reviews-sources/run"
      },
      "mcp_tool": "pbs-get-reviews-sources"
    },
    {
      "name": "pbs/get-roles",
      "label": "Read builder permissions (Pro)",
      "description": "Returns which roles may use the builder, design, code and templates (client mode).",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-roles/run"
      },
      "mcp_tool": "pbs-get-roles"
    },
    {
      "name": "pbs/get-settings",
      "label": "Read the plugin settings",
      "description": "Returns the front-end class prefix, the beta-updates state and whether AI agents (MCP) are allowed.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-settings/run"
      },
      "mcp_tool": "pbs-get-settings"
    },
    {
      "name": "pbs/get-structured-data",
      "label": "Read a page's structured data",
      "description": "Lists the schema.org structured data a page's blocks print (FAQ, How-To, Product, Review, Breadcrumb) and which types are left to the site's SEO plugin so nothing is printed twice.",
      "edition": "pro",
      "capability": "edit_post on the page",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "post_id": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "post_id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-structured-data/run"
      },
      "mcp_tool": "pbs-get-structured-data"
    },
    {
      "name": "pbs/get-support-connection",
      "label": "Read the support connection",
      "description": "Says whether this site is connected to Zinn Digital® support, and as whom.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "refresh": {
            "type": "boolean",
            "default": false
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-support-connection/run"
      },
      "mcp_tool": "pbs-get-support-connection"
    },
    {
      "name": "pbs/get-theme-builder-options",
      "label": "Read the theme builder's choices (Pro)",
      "description": "Returns the template types, the display-condition kinds (page, post type, term, archive, search, 404, logged in, role, device, date, time, URL parameter, referrer, language, cart) with their choices on this site (roles, languages, post types, taxonomies), and the block attribute (pbswConditions: {match, rules}) that shows or hides any block.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-theme-builder-options/run"
      },
      "mcp_tool": "pbs-get-theme-builder-options"
    },
    {
      "name": "pbs/get-white-label",
      "label": "Read white label (Agency)",
      "description": "Returns the white-label settings: on or off, the name shown and which users still see the original.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/get-white-label/run"
      },
      "mcp_tool": "pbs-get-white-label"
    },
    {
      "name": "pbs/import-designs",
      "label": "Import designs and settings",
      "description": "Imports a Page Builder Sandwich design package (dryRun first to see what would change; mode: skip or replace; media; settings).",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "package": {
            "type": "object"
          },
          "mode": {
            "type": "string",
            "enum": [
              "skip",
              "replace",
              "duplicate"
            ],
            "default": "skip"
          },
          "settings": {
            "type": "boolean",
            "default": true
          },
          "media": {
            "type": "boolean",
            "default": false
          },
          "dryRun": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [
          "package"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/import-designs/run"
      },
      "mcp_tool": "pbs-import-designs"
    },
    {
      "name": "pbs/import-figma-frame",
      "label": "Import a Figma frame (Pro)",
      "description": "Imports one Figma frame (url: the frame's link, with its node-id) into a new draft page made of blocks: auto layout becomes flex and grid containers, text keeps its fonts and sizes, images are copied into the media library. Uses the site's own Figma token. Answers with the draft and a conversion report.",
      "edition": "pro",
      "capability": "edit_pages and upload_files (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "url": {
            "type": "string"
          },
          "title": {
            "type": "string",
            "default": ""
          },
          "dryRun": {
            "type": "boolean",
            "default": false
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "private",
              "publish"
            ],
            "default": "draft"
          }
        },
        "required": [
          "url"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/import-figma-frame/run"
      },
      "mcp_tool": "pbs-import-figma-frame"
    },
    {
      "name": "pbs/invite-team-member",
      "label": "Invite a site to a team (Agency)",
      "description": "Creates a single-use invite code (role: read or write; label; days valid). The code is shown once.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          },
          "role": {
            "type": "string",
            "enum": [
              "read",
              "write"
            ],
            "default": "read"
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 30,
            "default": 7
          },
          "label": {
            "type": "string",
            "default": ""
          }
        },
        "required": [
          "team"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/invite-team-member/run"
      },
      "mcp_tool": "pbs-invite-team-member"
    },
    {
      "name": "pbs/join-team",
      "label": "Join a team (Pro)",
      "description": "Joins a team library with an invite code.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "code": {
            "type": "string",
            "pattern": "^zpi_[A-Za-z0-9_-]{8,80}$"
          }
        },
        "required": [
          "code"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/join-team/run"
      },
      "mcp_tool": "pbs-join-team"
    },
    {
      "name": "pbs/leave-team",
      "label": "Leave a team (Pro)",
      "description": "Leaves the team library this site joined.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/leave-team/run"
      },
      "mcp_tool": "pbs-leave-team"
    },
    {
      "name": "pbs/list-ab-tests",
      "label": "List the A/B tests and their results (Pro)",
      "description": "Lists the A/B tests with each version's visitors and conversions, and which one is winning.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-ab-tests/run"
      },
      "mcp_tool": "pbs-list-ab-tests"
    },
    {
      "name": "pbs/list-blocks",
      "label": "List the builder blocks",
      "description": "Lists every Page Builder Sandwich block this site can use (Pro blocks too when Pro is active): name, title, category and description.",
      "edition": "free",
      "capability": "edit_posts",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-blocks/run"
      },
      "mcp_tool": "pbs-list-blocks"
    },
    {
      "name": "pbs/list-dynamic-sources",
      "label": "List the dynamic content sources (Pro)",
      "description": "Returns what a block can be filled from (post, author, site, archive, custom field, product) with each source's fields, the field plugins on this site (ACF, Meta Box, Pods, JetEngine, Toolset, post meta) and a post type's fields (postType). A block is bound to a source through its attributes.metadata.bindings, one {source, args} per attribute.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "postType": {
            "type": "string",
            "pattern": "^[a-z0-9_\\-]{1,20}$"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-dynamic-sources/run"
      },
      "mcp_tool": "pbs-list-dynamic-sources"
    },
    {
      "name": "pbs/list-extensions",
      "label": "List the builder's add-on extensions",
      "description": "Lists what other plugins have added to Page Builder Sandwich through its developer API: blocks, dynamic data sources, display conditions and form actions, each with its name, label and plugin.",
      "edition": "free",
      "capability": "edit_posts",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": [],
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-extensions/run"
      },
      "mcp_tool": "pbs-list-extensions"
    },
    {
      "name": "pbs/list-form-submissions",
      "label": "Read form submissions (Pro)",
      "description": "Lists what visitors sent through the forms that save submissions (form narrows it), a page at a time.",
      "edition": "pro",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "form": {
            "type": "string",
            "default": "",
            "pattern": "^([a-z0-9]{8})?$"
          },
          "per_page": {
            "type": "integer",
            "default": 20,
            "minimum": 1,
            "maximum": 100
          },
          "page": {
            "type": "integer",
            "default": 1,
            "minimum": 1
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-form-submissions/run"
      },
      "mcp_tool": "pbs-list-form-submissions"
    },
    {
      "name": "pbs/list-forms",
      "label": "List forms",
      "description": "Lists the forms built with the Form block and the form plugins it can embed.",
      "edition": "free",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-forms/run"
      },
      "mcp_tool": "pbs-list-forms"
    },
    {
      "name": "pbs/list-kits",
      "label": "List website kits",
      "description": "Lists the website kits (a set of ready-made pages for one kind of business) this site can import.",
      "edition": "free",
      "capability": "edit_pages and publish_pages",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "refresh": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-kits/run"
      },
      "mcp_tool": "pbs-list-kits"
    },
    {
      "name": "pbs/list-library-items",
      "label": "List cloud library designs (Pro)",
      "description": "Lists the designs saved to the cloud library (kind: section, page or pattern; team: a team's library).",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "default": "",
            "pattern": "^([0-9a-f-]{36})?$"
          },
          "kind": {
            "type": "string",
            "default": "",
            "enum": [
              "",
              "section",
              "page",
              "style"
            ]
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-library-items/run"
      },
      "mcp_tool": "pbs-list-library-items"
    },
    {
      "name": "pbs/list-local-fonts",
      "label": "List self-hosted fonts",
      "description": "Lists the Google fonts this site hosts itself (downloaded once, served from the site, no request to Google).",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-local-fonts/run"
      },
      "mcp_tool": "pbs-list-local-fonts"
    },
    {
      "name": "pbs/list-lottie",
      "label": "List Lottie animations (Pro)",
      "description": "Lists the uploaded Lottie animations.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-lottie/run"
      },
      "mcp_tool": "pbs-list-lottie"
    },
    {
      "name": "pbs/list-marketing-connections",
      "label": "List the mailing-list connections (Pro)",
      "description": "Lists the mailing-list services (Mailchimp, Brevo, MailerLite, Kit, ActiveCampaign) and which are connected. Keys are never returned.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-marketing-connections/run"
      },
      "mcp_tool": "pbs-list-marketing-connections"
    },
    {
      "name": "pbs/list-marketing-forms",
      "label": "List the form-builder forms (Pro)",
      "description": "Lists every form made with the form builder: the page it is on, its fields and what happens when it is sent.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-marketing-forms/run"
      },
      "mcp_tool": "pbs-list-marketing-forms"
    },
    {
      "name": "pbs/list-marketing-lists",
      "label": "List a service's mailing lists (Pro)",
      "description": "Lists the audiences or lists of a connected mailing-list service, for a form's subscribe action.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "service": {
            "type": "string",
            "pattern": "^[a-z0-9]{2,32}$"
          }
        },
        "required": [
          "service"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-marketing-lists/run"
      },
      "mcp_tool": "pbs-list-marketing-lists"
    },
    {
      "name": "pbs/list-pages",
      "label": "List pages",
      "description": "Lists the pages you can edit, newest first, with an optional search.",
      "edition": "free",
      "capability": "edit_pages; only pages the user can edit are listed",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Words to search for in the title and content."
          },
          "status": {
            "type": "string",
            "enum": [
              "any",
              "draft",
              "pending",
              "publish",
              "private"
            ]
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "pages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "title": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "link": {
                  "type": "string"
                },
                "edit_link": {
                  "type": "string"
                }
              }
            }
          },
          "total": {
            "type": "integer"
          }
        }
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-pages/run"
      },
      "mcp_tool": "pbs-list-pages"
    },
    {
      "name": "pbs/list-popups",
      "label": "List the popups (Pro)",
      "description": "Lists the popups, slide-ins and bars with their triggers, frequency rules and where they show.",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-popups/run"
      },
      "mcp_tool": "pbs-list-popups"
    },
    {
      "name": "pbs/list-replace-jobs",
      "label": "List find-and-replace jobs (Pro)",
      "description": "Lists the site-wide find-and-replace jobs and their state.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-replace-jobs/run"
      },
      "mcp_tool": "pbs-list-replace-jobs"
    },
    {
      "name": "pbs/list-sections",
      "label": "List sections",
      "description": "Lists the ready-made sections (hero, features, FAQ, testimonials, call to action and more) that can be added to a page.",
      "edition": "free",
      "capability": "edit_pages",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Words to match in a section's name or keywords."
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "sections": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-sections/run"
      },
      "mcp_tool": "pbs-list-sections"
    },
    {
      "name": "pbs/list-team-members",
      "label": "List team members (Pro)",
      "description": "Lists the sites in a team and their access.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          }
        },
        "required": [
          "team"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-team-members/run"
      },
      "mcp_tool": "pbs-list-team-members"
    },
    {
      "name": "pbs/list-teams",
      "label": "List library teams (Pro)",
      "description": "Lists the teams this site belongs to or owns.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-teams/run"
      },
      "mcp_tool": "pbs-list-teams"
    },
    {
      "name": "pbs/list-theme-templates",
      "label": "List the theme templates (Pro)",
      "description": "Lists the theme builder's templates (header, footer, single, archive, search, 404 and, with WooCommerce, product, shop, cart, checkout, thank-you and My Account): each one's type, where it shows (include/exclude rules), priority, status and blocks.",
      "edition": "pro",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-theme-templates/run"
      },
      "mcp_tool": "pbs-list-theme-templates"
    },
    {
      "name": "pbs/list-transferable",
      "label": "List what can be exported",
      "description": "Lists the templates, patterns and settings that can be exported to another site.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-transferable/run"
      },
      "mcp_tool": "pbs-list-transferable"
    },
    {
      "name": "pbs/list-uploaded-icons",
      "label": "List uploaded icons",
      "description": "Lists the SVG icons uploaded to the icon library, newest first.",
      "edition": "free",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 100
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/list-uploaded-icons/run"
      },
      "mcp_tool": "pbs-list-uploaded-icons"
    },
    {
      "name": "pbs/move-section",
      "label": "Move a section",
      "description": "Moves a section of a page from one position to another (0-based, in the order the page lists them).",
      "edition": "free",
      "capability": "edit_post on that page",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "integer",
            "minimum": 0
          },
          "to": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "id",
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/move-section/run"
      },
      "mcp_tool": "pbs-move-section"
    },
    {
      "name": "pbs/open-support-ticket",
      "label": "Open a support ticket",
      "description": "Files a support ticket (subject, message, kind, email), with this site's diagnostics when the administrator agreed. It never creates a login or sends one.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "subject": {
            "type": "string",
            "description": "The ticket subject (up to 200 characters)."
          },
          "message": {
            "type": "string",
            "description": "What happened, or the question."
          },
          "kind": {
            "type": "string",
            "enum": [
              "help",
              "bug",
              "feedback",
              "feature_request"
            ],
            "description": "The kind of request; help when omitted."
          },
          "email": {
            "type": "string",
            "description": "Reply address; the connected support email when omitted."
          },
          "name": {
            "type": "string",
            "description": "Name to reply to."
          },
          "diagnostics": {
            "type": "boolean",
            "description": "True attaches this site's diagnostics (needs the administrator's consent)."
          }
        },
        "required": [
          "subject",
          "message"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/open-support-ticket/run"
      },
      "mcp_tool": "pbs-open-support-ticket"
    },
    {
      "name": "pbs/preview-dynamic-value",
      "label": "Preview a dynamic value (Pro)",
      "description": "Returns what a binding shows on one post (post, source, and field or provider + key, as text|url), to check a binding before or after adding it.",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": true,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "integer",
            "minimum": 1
          },
          "source": {
            "type": "string",
            "pattern": "^pbsw/[a-z]{2,20}$"
          },
          "field": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "as": {
            "type": "string",
            "enum": [
              "text",
              "url"
            ]
          }
        },
        "required": [
          "post",
          "source"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "GET",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/preview-dynamic-value/run"
      },
      "mcp_tool": "pbs-preview-dynamic-value"
    },
    {
      "name": "pbs/record-support-consent",
      "label": "Consent to support diagnostics",
      "description": "Records the administrator's consent to send diagnostics with support tickets.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "consent": {
            "type": "boolean",
            "description": "True records the administrator's consent to send diagnostics with support tickets."
          }
        },
        "required": [
          "consent"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/record-support-consent/run"
      },
      "mcp_tool": "pbs-record-support-consent"
    },
    {
      "name": "pbs/refresh-reviews",
      "label": "Refresh reviews now (Pro)",
      "description": "Fetches the latest Trustpilot reviews now instead of waiting for the daily refresh.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/refresh-reviews/run"
      },
      "mcp_tool": "pbs-refresh-reviews"
    },
    {
      "name": "pbs/remove-block",
      "label": "Remove a block from a page",
      "description": "Removes one block (a whole section, or a block inside one) from a page, found by its path. The page's previous version stays in its revisions.",
      "edition": "free",
      "capability": "edit_post on that page",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "path": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            },
            "minItems": 1,
            "description": "Where the block is: its position among the page's sections, then among that block's inner blocks, and so on (0-based), in the order the page lists them."
          }
        },
        "required": [
          "id",
          "path"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/remove-block/run"
      },
      "mcp_tool": "pbs-remove-block"
    },
    {
      "name": "pbs/remove-library-storage",
      "label": "Stop using your own storage (Pro)",
      "description": "Removes the bring-your-own storage settings; the plan storage is used again.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/remove-library-storage/run"
      },
      "mcp_tool": "pbs-remove-library-storage"
    },
    {
      "name": "pbs/remove-local-font",
      "label": "Remove a self-hosted font",
      "description": "Deletes a self-hosted font family's files.",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "family": {
            "type": "string"
          }
        },
        "required": [
          "family"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/remove-local-font/run"
      },
      "mcp_tool": "pbs-remove-local-font"
    },
    {
      "name": "pbs/remove-team-member",
      "label": "Remove a team member (Agency)",
      "description": "Removes a site from a team.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          },
          "member": {
            "type": "string",
            "pattern": "^[0-9a-f-]{36}$"
          }
        },
        "required": [
          "team",
          "member"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/remove-team-member/run"
      },
      "mcp_tool": "pbs-remove-team-member"
    },
    {
      "name": "pbs/reset-ab-test",
      "label": "Reset an A/B test's results (Pro)",
      "description": "Clears a test's counts and starts it again (test).",
      "edition": "pro",
      "capability": "edit_pages (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "test": {
            "type": "string",
            "pattern": "^[a-z0-9]{8}$"
          }
        },
        "required": [
          "test"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/reset-ab-test/run"
      },
      "mcp_tool": "pbs-reset-ab-test"
    },
    {
      "name": "pbs/save-library-item",
      "label": "Save a design to the cloud library (Pro)",
      "description": "Saves block markup (title, kind, markup, styles, tags) to your cloud library or a team's; images are packed with it.",
      "edition": "pro",
      "capability": "edit_posts (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "team": {
            "type": "string",
            "default": "",
            "pattern": "^([0-9a-f-]{36})?$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "section",
              "page",
              "style"
            ]
          },
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "markup": {
            "type": "string",
            "default": ""
          },
          "styles": {
            "type": "object",
            "default": {}
          }
        },
        "required": [
          "kind",
          "title"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/save-library-item/run"
      },
      "mcp_tool": "pbs-save-library-item"
    },
    {
      "name": "pbs/set-block-motion",
      "label": "Animate a block (Pro)",
      "description": "Sets or removes (null) motion settings on one block of a page, found by its path, at a breakpoint (base by default). Works on any block, including core blocks whose HTML is saved in the page. Visitors who ask for reduced motion never see the movement.",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "string",
            "pattern": "^\\d+$"
          },
          "path": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            }
          },
          "breakpoint": {
            "type": "string",
            "default": "base",
            "pattern": "^[a-z0-9-]{1,32}$"
          },
          "motion": {
            "type": "object"
          }
        },
        "required": [
          "post",
          "path",
          "motion"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-block-motion/run"
      },
      "mcp_tool": "pbs-set-block-motion"
    },
    {
      "name": "pbs/set-library-storage",
      "label": "Use your own storage (Pro)",
      "description": "Saves bring-your-own storage: provider (r2 or s3), bucket, region, endpoint, prefix, key_id, secret, enabled.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "True stores the cloud library in this bucket."
          },
          "provider": {
            "type": "string",
            "enum": [
              "r2",
              "s3",
              "other"
            ],
            "description": "Storage provider: Cloudflare R2, Amazon S3 or another S3-compatible service."
          },
          "endpoint": {
            "type": "string",
            "description": "S3-compatible endpoint URL."
          },
          "region": {
            "type": "string",
            "description": "Bucket region."
          },
          "bucket": {
            "type": "string",
            "description": "Bucket name."
          },
          "prefix": {
            "type": "string",
            "description": "Folder inside the bucket."
          },
          "keyId": {
            "type": "string",
            "description": "Access key ID."
          },
          "secret": {
            "type": "string",
            "description": "Secret access key; never returned, and empty keeps the saved one."
          },
          "pathStyle": {
            "type": "boolean",
            "description": "True uses path-style bucket URLs."
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-library-storage/run"
      },
      "mcp_tool": "pbs-set-library-storage"
    },
    {
      "name": "pbs/set-maintenance",
      "label": "Change maintenance mode (Pro)",
      "description": "Turns maintenance (503) or coming-soon mode on or off (mode), with the page to show (page_id), retry_after and the roles that bypass it.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "off",
              "maintenance",
              "coming_soon"
            ]
          },
          "page_id": {
            "type": "integer"
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "retry_after": {
            "type": "integer"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-maintenance/run"
      },
      "mcp_tool": "pbs-set-maintenance"
    },
    {
      "name": "pbs/set-newsletter-keys",
      "label": "Connect Mailchimp (Pro)",
      "description": "Saves (or, with an empty value, removes) the Mailchimp API key the newsletter block uses.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "mailchimp": {
            "type": "string"
          }
        },
        "required": [
          "mailchimp"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-newsletter-keys/run"
      },
      "mcp_tool": "pbs-set-newsletter-keys"
    },
    {
      "name": "pbs/set-reviews-sources",
      "label": "Change the reviews sources (Pro)",
      "description": "Sets the Google place and Trustpilot business the Reviews block reads.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "google": {
            "type": "object"
          },
          "trustpilot": {
            "type": "object"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-reviews-sources/run"
      },
      "mcp_tool": "pbs-set-reviews-sources"
    },
    {
      "name": "pbs/set-roles",
      "label": "Change builder permissions (Pro)",
      "description": "Sets per role what the builder allows (roles), e.g. a content-only client role.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "roles": {
            "type": "object"
          }
        },
        "required": [
          "roles"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-roles/run"
      },
      "mcp_tool": "pbs-set-roles"
    },
    {
      "name": "pbs/set-white-label",
      "label": "Change white label (Agency)",
      "description": "Turns white label on or off and sets the name clients see (enabled, name, agency_users).",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "True turns white label on."
          },
          "name": {
            "type": "string",
            "description": "The builder's name shown to clients."
          },
          "studio_name": {
            "type": "string",
            "description": "The agency's name."
          },
          "author": {
            "type": "string",
            "description": "Author shown on the Plugins screen."
          },
          "author_url": {
            "type": "string",
            "description": "Author website URL."
          },
          "description": {
            "type": "string",
            "description": "Plugin description shown to clients."
          },
          "menu_icon": {
            "type": "string",
            "description": "Menu icon: a dashicons-* name or an image URL."
          },
          "hide_plugin": {
            "type": "boolean",
            "description": "True hides the plugin from clients' Plugins screen."
          },
          "agency_users": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "IDs of the users who always see the real plugin."
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/set-white-label/run"
      },
      "mcp_tool": "pbs-set-white-label"
    },
    {
      "name": "pbs/site-health-clean",
      "label": "Clean up what the site health report found",
      "description": "Cleans one kind of finding: revisions (keeps each post's newest 5, deletes older ones), patterns (moves unused synced patterns to the trash), images (a scaled copy WordPress uses; the original is kept), classes (removes unused design classes, kept for restoring). Each run cleans one batch; \"more\" is true while findings remain.",
      "edition": "pro",
      "capability": "manage_options",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "what": {
            "type": "string",
            "enum": [
              "revisions",
              "patterns",
              "images",
              "classes"
            ]
          }
        },
        "required": [
          "what"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/site-health-clean/run"
      },
      "mcp_tool": "pbs-site-health-clean"
    },
    {
      "name": "pbs/site-health-report",
      "label": "Run the site health report",
      "description": "Finds old revisions, synced patterns nothing uses, heavy original images and design classes no page uses. Works in short steps: each run continues where the last one stopped while the status is \"scanning\"; restart starts over.",
      "edition": "pro",
      "capability": "manage_options",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "restart": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "default": {}
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/site-health-report/run"
      },
      "mcp_tool": "pbs-site-health-report"
    },
    {
      "name": "pbs/start-migration",
      "label": "Convert legacy content",
      "description": "Starts (or restarts) converting every 5.x page to blocks; each post is backed up first.",
      "edition": "free",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/start-migration/run"
      },
      "mcp_tool": "pbs-start-migration"
    },
    {
      "name": "pbs/start-replace",
      "label": "Find and replace across the site (Pro)",
      "description": "Starts a block-safe find-and-replace (find, replace, kind: text, link or colour; match_case; types). Nothing changes until the previewed job is applied.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "find": {
            "type": "string"
          },
          "replace": {
            "type": "string",
            "default": ""
          },
          "kind": {
            "type": "string",
            "enum": [
              "text",
              "link",
              "colour"
            ],
            "default": "text"
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "match_case": {
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "find"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/start-replace/run"
      },
      "mcp_tool": "pbs-start-replace"
    },
    {
      "name": "pbs/start-trial",
      "label": "Start the free Pro trial",
      "description": "Starts the 14-day Page Builder Sandwich Pro trial for this site (no payment needed).",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/start-trial/run"
      },
      "mcp_tool": "pbs-start-trial"
    },
    {
      "name": "pbs/test-library-storage",
      "label": "Test your own storage (Pro)",
      "description": "Writes, reads and deletes a test object in your own storage and reports each step.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/test-library-storage/run"
      },
      "mcp_tool": "pbs-test-library-storage"
    },
    {
      "name": "pbs/undo-convert-post",
      "label": "Undo one conversion",
      "description": "Restores one converted page from its backup.",
      "edition": "free",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/undo-convert-post/run"
      },
      "mcp_tool": "pbs-undo-convert-post"
    },
    {
      "name": "pbs/undo-migration",
      "label": "Undo the legacy migration",
      "description": "Restores every converted post from its backup.",
      "edition": "free",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/undo-migration/run"
      },
      "mcp_tool": "pbs-undo-migration"
    },
    {
      "name": "pbs/undo-replace",
      "label": "Undo a find-and-replace (Pro)",
      "description": "Restores the posts a job changed (a post edited since keeps its edit).",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]{10}$"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/undo-replace/run"
      },
      "mcp_tool": "pbs-undo-replace"
    },
    {
      "name": "pbs/update-block",
      "label": "Change one block's settings",
      "description": "Changes the settings (attributes) of one block inside a page, found by its path; attributes you send are merged over the current ones. Works on blocks the site renders from their settings; a block whose HTML is saved in the page is changed by replacing the page's markup.",
      "edition": "free",
      "capability": "edit_post on that page",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "path": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            },
            "minItems": 1,
            "description": "Where the block is: its position among the page's sections, then among that block's inner blocks, and so on (0-based), in the order the page lists them."
          },
          "attributes": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "path",
          "attributes"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object"
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-block/run"
      },
      "mcp_tool": "pbs-update-block"
    },
    {
      "name": "pbs/update-brand-kit",
      "label": "Change the brand kit (Pro)",
      "description": "Saves the brand kit: name, logo, colours, heading and body fonts, and the brand voice AI writing uses.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": {
            "type": "string"
          },
          "logo": {
            "type": "integer",
            "minimum": 0
          },
          "colors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              }
            }
          },
          "headingFont": {
            "type": "string"
          },
          "bodyFont": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-brand-kit/run"
      },
      "mcp_tool": "pbs-update-brand-kit"
    },
    {
      "name": "pbs/update-breakpoints",
      "label": "Change the responsive breakpoints",
      "description": "Changes the tablet and mobile widths in pixels; with Pro, custom extra breakpoints.",
      "edition": "free",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "tablet": {
            "type": "integer"
          },
          "mobile": {
            "type": "integer"
          },
          "custom": {
            "type": "array"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-breakpoints/run"
      },
      "mcp_tool": "pbs-update-breakpoints"
    },
    {
      "name": "pbs/update-class",
      "label": "Change a global class (Pro)",
      "description": "Changes a global class's label, slug or styles; every element using it updates.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^c[a-z0-9]{7}$"
          },
          "label": {
            "type": "string"
          },
          "slug": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9-]{0,39}$"
          },
          "s": {
            "type": "object"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-class/run"
      },
      "mcp_tool": "pbs-update-class"
    },
    {
      "name": "pbs/update-conversion-tracking",
      "label": "Change the conversion tracking (Pro)",
      "description": "Changes the Google Analytics 4, Google Tag Manager and Meta Pixel settings and which events are sent.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "ga4": {
            "type": "string",
            "description": "Google Analytics 4 measurement ID (G-…)."
          },
          "gtm": {
            "type": "string",
            "description": "Google Tag Manager container ID (GTM-…)."
          },
          "pixel": {
            "type": "string",
            "description": "Meta Pixel ID."
          },
          "loadTags": {
            "type": "boolean",
            "description": "True loads these tags on the site."
          },
          "formEvent": {
            "type": "string",
            "description": "Event name sent when a form is submitted; generate_lead by default."
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-conversion-tracking/run"
      },
      "mcp_tool": "pbs-update-conversion-tracking"
    },
    {
      "name": "pbs/update-cookie-banner",
      "label": "Change the cookie consent banner (Pro)",
      "description": "Changes the consent banner. While it is on, tracking scripts wait for the visitor's consent.",
      "edition": "pro",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "True shows the cookie banner."
          },
          "popup": {
            "type": "integer",
            "description": "ID of the popup used as the banner."
          },
          "handles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Script handles held back until a visitor consents."
          },
          "cookieDays": {
            "type": "integer",
            "minimum": 1,
            "description": "How many days a visitor's choice is remembered."
          },
          "optOutOutsideEu": {
            "type": "boolean",
            "description": "True: outside the EU, tracking runs until a visitor opts out."
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-cookie-banner/run"
      },
      "mcp_tool": "pbs-update-cookie-banner"
    },
    {
      "name": "pbs/update-dark-mode",
      "label": "Change dark mode (Pro)",
      "description": "Sets dark mode (mode: off, auto or toggle) and its colours.",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "device",
              "light",
              "dark"
            ]
          },
          "colors": {
            "type": "object"
          }
        },
        "required": [
          "mode"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-dark-mode/run"
      },
      "mcp_tool": "pbs-update-dark-mode"
    },
    {
      "name": "pbs/update-design-globals",
      "label": "Change the site design",
      "description": "Changes the site-wide colours (colors), fonts (fonts, headingFont, bodyFont). Every page picks the change up; the theme's theme.json is kept in sync.",
      "edition": "free",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "colors": {
            "type": "object",
            "properties": {
              "theme": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "slug": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
                    },
                    "name": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "color": {
                      "type": "string",
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "slug",
                    "color"
                  ]
                }
              },
              "custom": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "slug": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
                    },
                    "name": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "color": {
                      "type": "string",
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "slug",
                    "color"
                  ]
                }
              }
            }
          },
          "fonts": {
            "type": "object",
            "properties": {
              "theme": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "slug": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
                    },
                    "name": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "fontFamily": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "hasFiles": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "slug",
                    "fontFamily"
                  ]
                }
              },
              "custom": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "slug": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
                    },
                    "name": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "fontFamily": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "hasFiles": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "slug",
                    "fontFamily"
                  ]
                }
              }
            }
          },
          "bodyFont": {
            "type": "string",
            "pattern": "^(?:|[a-z0-9][a-z0-9-]{0,47})$"
          },
          "headingFont": {
            "type": "string",
            "pattern": "^(?:|[a-z0-9][a-z0-9-]{0,47})$"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-design-globals/run"
      },
      "mcp_tool": "pbs-update-design-globals"
    },
    {
      "name": "pbs/update-form",
      "label": "Change a form (Pro)",
      "description": "Changes one form (post, form): settings and actions merge with what is there; fields (and steps) replace the fields.",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "post": {
            "type": "string",
            "pattern": "^\\d+$"
          },
          "form": {
            "type": "string",
            "pattern": "^[a-z0-9]{8}$"
          },
          "title": {
            "type": "string"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "email",
                    "tel",
                    "url",
                    "number",
                    "date",
                    "textarea",
                    "select",
                    "radio",
                    "checkbox",
                    "consent",
                    "file",
                    "hidden"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{0,40}$"
                },
                "required": {
                  "type": "boolean"
                },
                "placeholder": {
                  "type": "string"
                },
                "help": {
                  "type": "string"
                },
                "options": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "defaultValue": {
                  "type": "string"
                },
                "width": {
                  "type": "string",
                  "enum": [
                    "full",
                    "half"
                  ]
                },
                "min": {
                  "type": "number"
                },
                "max": {
                  "type": "number"
                },
                "maxLength": {
                  "type": "integer"
                },
                "accept": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "jpg",
                      "jpeg",
                      "png",
                      "gif",
                      "webp",
                      "pdf",
                      "txt",
                      "csv",
                      "doc",
                      "docx",
                      "xls",
                      "xlsx",
                      "zip"
                    ]
                  }
                },
                "maxMb": {
                  "type": "integer"
                },
                "condition": {
                  "type": "object",
                  "description": "Show this field only when another field (fieldId: its name) matches: eq, neq, contains, empty or notempty, against value.",
                  "properties": {
                    "fieldId": {
                      "type": "string"
                    },
                    "matchType": {
                      "type": "string",
                      "enum": [
                        "eq",
                        "neq",
                        "contains",
                        "empty",
                        "notempty"
                      ]
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                "step": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 20
                }
              },
              "required": [
                "type",
                "label"
              ],
              "additionalProperties": false
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 120
            }
          },
          "actions": {
            "type": "object",
            "properties": {
              "email": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "to": {
                    "type": "string"
                  },
                  "subject": {
                    "type": "string"
                  }
                }
              },
              "store": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  }
                }
              },
              "webhook": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              "list": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "service": {
                    "type": "string",
                    "pattern": "^[a-z0-9]{2,32}$"
                  },
                  "list": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{0,64}$"
                  }
                }
              }
            }
          },
          "submitText": {
            "type": "string"
          },
          "successMessage": {
            "type": "string"
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri"
          },
          "trackEvent": {
            "type": "string",
            "pattern": "^([a-z][a-z0-9_]{0,39})?$"
          }
        },
        "required": [
          "post",
          "form"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-form/run"
      },
      "mcp_tool": "pbs-update-form"
    },
    {
      "name": "pbs/update-page",
      "label": "Update a page",
      "description": "Changes a page's title, status or block content. Content you send replaces the page's content.",
      "edition": "free",
      "capability": "edit_post on that page; publish_pages to publish or make private",
      "annotations": {
        "readonly": false,
        "destructive": true,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "pending",
              "publish",
              "private"
            ]
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of sections in this site's section library, in page order. They come before any content given."
          },
          "content": {
            "type": "string",
            "description": "Block markup (the format the block editor saves)."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "link": {
            "type": "string"
          },
          "edit_link": {
            "type": "string"
          }
        }
      },
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-page/run"
      },
      "mcp_tool": "pbs-update-page"
    },
    {
      "name": "pbs/update-popup",
      "label": "Change a popup (Pro)",
      "description": "Changes a popup, slide-in or bar (id): content, trigger, frequency or where it shows.",
      "edition": "pro",
      "capability": "edit_post (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          },
          "title": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "publish"
            ]
          },
          "settings": {
            "type": "object"
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-popup/run"
      },
      "mcp_tool": "pbs-update-popup"
    },
    {
      "name": "pbs/update-settings",
      "label": "Change the plugin settings",
      "description": "Changes the front-end class prefix (1 to 8 lowercase letters or digits, starting with a letter) and/or turns AI agents (MCP) on or off (mcp: false removes every ability and the MCP endpoint).",
      "edition": "free",
      "capability": "manage_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "prefix": {
            "type": "string"
          },
          "mcp": {
            "type": "boolean"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-settings/run"
      },
      "mcp_tool": "pbs-update-settings"
    },
    {
      "name": "pbs/update-theme-template",
      "label": "Change a theme template (Pro)",
      "description": "Changes one template (id): any of title, type, content (block markup), include, exclude, priority, status. Only what you send changes.",
      "edition": "pro",
      "capability": "the REST route's own per-item permission check",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "pattern": "^[a-z_]{2,30}$"
          },
          "content": {
            "type": "string"
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "priority": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000
          },
          "status": {
            "type": "string",
            "enum": [
              "publish",
              "draft"
            ]
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-theme-template/run"
      },
      "mcp_tool": "pbs-update-theme-template"
    },
    {
      "name": "pbs/update-tokens",
      "label": "Change the design tokens (Pro)",
      "description": "Changes the spacing, radius and shadow scales (space, radius, shadow), or resets them (reset).",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "space": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              },
              "required": [
                "slug",
                "value"
              ]
            }
          },
          "radius": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              },
              "required": [
                "slug",
                "value"
              ]
            }
          },
          "shadow": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              },
              "required": [
                "slug",
                "value"
              ]
            }
          },
          "reset": {
            "type": "boolean"
          }
        },
        "default": {}
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-tokens/run"
      },
      "mcp_tool": "pbs-update-tokens"
    },
    {
      "name": "pbs/update-variables",
      "label": "Change the CSS variables (Pro)",
      "description": "Replaces the site's design variables (variables: a list of name and value).",
      "edition": "pro",
      "capability": "edit_theme_options (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": true
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              },
              "required": [
                "slug",
                "value"
              ]
            }
          }
        },
        "required": [
          "variables"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/update-variables/run"
      },
      "mcp_tool": "pbs-update-variables"
    },
    {
      "name": "pbs/upload-icon",
      "label": "Upload an icon",
      "description": "Adds an SVG icon (name, svg markup) to the icon library; the SVG is sanitised first.",
      "edition": "free",
      "capability": "upload_files (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": {
            "type": "string"
          },
          "svg": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "svg"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/upload-icon/run"
      },
      "mcp_tool": "pbs-upload-icon"
    },
    {
      "name": "pbs/upload-lottie",
      "label": "Upload a Lottie animation (Pro)",
      "description": "Validates a Lottie JSON document (json, name) and publishes it as a static file for the Lottie block.",
      "edition": "pro",
      "capability": "upload_files (the REST route's own check)",
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": false
      },
      "input_schema": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": {
            "type": "string"
          },
          "json": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "json"
        ]
      },
      "output_schema": {},
      "rest": {
        "method": "POST",
        "path": "/wp-json/wp-abilities/v1/abilities/pbs/upload-lottie/run"
      },
      "mcp_tool": "pbs-upload-lottie"
    }
  ]
}
