❯ Abilities
175 abilities. 46 of them will not say what they do.
Captured from a live Bricks 2.4-beta2 installation, not transcribed from documentation. An ability may declare itself readonly, destructive or idempotent— and 46 declare none of the three.
Silence is not a licence. cwp treats every undeclared ability as a write, which means the full guard set applies to it: a protected environment refuses it, and it needs a source in the repository like anything else going upward.
Where the 175 come from
Two numbers get conflated constantly and they are not the same one. 145 is the Bricks integration surface — what Bricks itself registers. 175 is what a call actually reaches on a real site, because the theme is not the only thing registering abilities.
bricks/145snn/24core/3mcp-adapter/3
Both figures are correct and neither replaces the other. Anything that calls an ability has to reckon with 175; anything describing what Bricks ships means 145.
The list
71
readonly
declares that it only reads
27
destructive
declares that it destroys something
46
declares nothing
cwp treats every one of these as a write
31
partial
some annotation, but not enough to be sure
Showing all 175.
bricks/add-elementdeclares nothingAdd one or more elements at a specific position. Supports nested children format and component instances.
bricks/audit-design-systemreadonlyRead-only scan for design-system rot: orphan references (errors), theme styles without conditions (warnings), unused resources and palette fragmentation (infos). Scans all Bricks posts + templates in one pass. Pass `scope` to narrow, or `skipPostScan: true` for a fast config-only check.
bricks/batch-update-elementspartialPartial-merge update multiple existing elements in one save/revision. Applies the same validation, permission checks, and `null`/`""` deletion sentinels as update-element. Supports dryRun and compact response options.
bricks/cleanup-orphaned-elementsdestructiveStrip orphan rows from the Bricks postmeta of every affected post. Destructive. Mirrors the admin "Clean up orphaned elements" button.
bricks/convert-html-css-to-bricks-datareadonlyConvert raw HTML and/or CSS into Bricks element data, global classes, variables, and CSS-only update suggestions. Read-only: returns converted data without saving. Use element and design abilities to persist the result.
bricks/create-colordeclares nothingAppend a builder-shaped color to an existing palette. Root colors require `light`; `raw` is normalized to `var(--name)` or generated as `var(--bricks-color-{id})`. Set `darkModeEnabled:true` to derive the root dark pair from light, or provide root `dark` to enable dark mode with an explicit value. Shade rows require `parent` and `type`; dark shade rows require a dark-mode parent.
bricks/create-color-palettedeclares nothingCreate a new color palette, optionally seeded with builder-shaped colors. Supplied color IDs are preserved so shade parent relationships survive imports; missing IDs/raw values are generated. Palette names should be unique; duplicates are accepted but make the UI ambiguous.
bricks/create-componentdeclares nothingCreate a new component from an elements subtree. Labels must be unique (`bricks_conflict_duplicate_component_name` on collision). Incoming element ids are regenerated, property connections and parent-property references are remapped, and builder metadata is stamped so the component is not treated as a beta component.
bricks/create-custom-fontdeclares nothingCreate a `bricks_fonts` family from `family`. Returns `{ font: { id, family, fontFaces } }`. Attach face files via `bricks/upload-custom-font-file` and `bricks/update-custom-font`.
bricks/create-custom-icon-setdeclares nothingCreate a new custom icon set so `upload-custom-icon` has a `setId` target. Appends a row to `BRICKS_DB_ICON_SETS` with a generated `set_<hex>` ID.
bricks/create-global-classdeclares nothingCreate a new global class with CSS settings and optional responsive overrides. Class names must be unique; duplicates return `bricks_conflict_duplicate_global_class_name`. Returns the new class with its generated ID.
bricks/create-global-querydeclares nothingSave a new reusable query. Use a unique label and a `query` object that mirrors an element's inline `query` setting (for example `{ objectType: "post", postType: ["post"], posts_per_page: 10 }`). Any optional `category` must already exist; create it first via `bricks/create-global-query-category`.
bricks/create-global-query-categorydeclares nothingCreate a new category that global queries can be grouped under. Returns the generated `{ id, name }` category row.
bricks/create-postdeclares nothingCreate a new page or post. Optionally seed a Bricks element tree atomically with creation. Returns the new post ID, builder URL, and revision ID.
bricks/create-sidebardeclares nothingRegister a new custom sidebar. The ID is derived from `name` (lowercased, spaces to underscores, stripped of other characters). Names must be unique. Once created, the sidebar shows up in the Bricks "Sidebar" element dropdown and accepts widgets via Appearance > Widgets.
bricks/create-templatedeclares nothingCreate a new Bricks template (`bricks_template` post type). Pass `type` (header / footer / content / section / popup / archive / search / error / password_protection, or a WooCommerce type such as wc_product), optional initial `elements` tree, and optional `status` (`draft`, `publish`, or `private`; default `draft`). Returns `templateId`, `editUrl`, and `status`. Note: header and footer templates are automatically wrapped in `<header>` / `<footer>` landmarks at render time. Do NOT set `tag: "header"` (or `customTag: "header"`) on the template root, because that produces nested landmarks. Use `section` / `block` / `container` with their default tag.
bricks/create-theme-styledeclares nothingCreate a new theme style. Settings groups (typography, general, and so on) match the shape used in the Bricks builder. Pass `conditions: [{ main: "any" }]` for site-wide defaults. By default, Bricks applies the highest-scoring matching style; if the Theme styles loading method setting collects all matches, matching styles load in score order.
bricks/delete-builder-capabilitydestructiveDelete one custom builder capability definition and remove that WordPress capability from all roles. Built-in Bricks capabilities cannot be deleted.
bricks/delete-colordestructiveRemove a single color from a palette. Destructive and unrecoverable: colors live in a site option, not in a post, so there is no revision path to undo. Any setting that references the deleted palette color id will lose that palette value. Returns a `beforeDelete` snapshot of the removed color.
bricks/delete-color-palettedestructivePermanently delete a color palette and every color inside it. Destructive and unrecoverable: palettes are stored in a site option, not in a post, so there is no revision path to undo. Returns a `beforeDelete` snapshot (id, name, color count) so you can show what was removed.
bricks/delete-componentdestructiveRemove a component from the global store. Requires expectedDesignSystemVersion and expectedUsageCount from a recent read. Destructive and blocked when the component is used unless `allowOrphans=true` is explicitly passed. Returns a `beforeDelete` snapshot with label, element count, usage count, and usedOnPosts.
bricks/delete-custom-fontdestructiveDelete a custom font family post. Face attachments stay in the media library; remove them separately if they are no longer needed. Destructive: pages using the font will fall back to their next available choice.
bricks/delete-custom-icondestructiveRemove a custom icon by ID from the `BRICKS_DB_CUSTOM_ICONS` option. Destructive.
bricks/delete-custom-icon-setdestructiveRemove a custom icon set from `BRICKS_DB_ICON_SETS`. Cascades to drop every custom icon row in `BRICKS_DB_CUSTOM_ICONS` assigned to that set. SVG attachments stay in the Media Library. Destructive.
bricks/delete-global-classdestructivePermanently delete a global class. Destructive and unrecoverable: classes are stored in a site option, not in a post, so there is no revision path to undo. Any element that references the class will lose its styling. Locked classes cannot be deleted. Returns a `beforeDelete` snapshot (id, name, category, selector count) so you can show what was removed.
bricks/delete-global-querydestructiveDelete a global query by ID. Elements referencing the deleted query will fall back to their inline query settings (if any) or show no loop.
bricks/delete-global-query-categorydestructiveDelete a global-query category. Queries inside the category are kept; their `category` field is cleared.
bricks/delete-global-variabledestructiveDelete one global CSS variable by ID. Destructive and not revision-backed. Returns a beforeDelete snapshot of the removed variable.
bricks/delete-mediadestructiveDelete a media library attachment by ID. Use after upload-media QA runs or when replacing unused assets. Destructive: returns a beforeDelete snapshot and respects WordPress attachment trash behavior.
bricks/delete-postdestructiveMove a post or page to trash (recoverable) or permanently delete it. Lock-aware: refuses to delete a post that another user is currently editing.
bricks/delete-sidebardestructiveDelete a custom sidebar by ID. Widgets placed in the sidebar are removed from `sidebars_widgets` (same behavior as the admin UI). Destructive.
bricks/delete-templatedestructivePermanently delete a Bricks template. Destructive and unrecoverable: this calls `wp_delete_post` with `force=true` and there is no Bricks revision path to undo. The response includes a `beforeDelete` snapshot (title, type, element count) so you can show what was removed.
bricks/delete-theme-styledestructiveDelete a theme style from the global theme-style option. Destructive and not revision-backed. Returns a beforeDelete snapshot so callers can show or restore the removed row manually if needed.
bricks/duplicate-postdeclares nothingClone a post/page including its Bricks element tree, page settings, and featured image. The duplicate is created as a draft by default.
bricks/export-transfer-packagereadonlyCreate a unified Bricks import/export ZIP package and return it as base64 for MCP transport. Call `bricks/list-transfer-items` first and pass explicit item IDs for every selected type. Sensitive settings tabs (`api-keys`, `custom-code`) require `allowSensitiveSettings: true`.
bricks/extract-component-from-elementsdestructiveLift an existing element subtree out of a post and into a new global component, replacing the original subtree with a component instance. External references inside the subtree (global class names, CSS variables) are preserved as-is, so the component stays coupled to whatever tokens the original elements used. A revision is captured before the post write.
bricks/find-mediareadonlySearch the media library by filename, title, or alt text. Filter by MIME type. Supports compact results or full media objects with all size variants.
bricks/find-postreadonlySearch posts, pages, and templates by slug, title, or free-text fragment. Returns only the records the current user can edit, annotated with Bricks metadata (`bricksEnabled`, `hasBricksData`, `locked`, `builderUrl`).
bricks/generate-color-shadesdeclares nothingGenerate light, dark, or transparent shades from a base color, using the same algorithm as the builder's Color Shades popup (TinyColor mix in linear RGB). Pass `paletteId` and `colorId` to target an existing palette color, plus `save: true` to persist; persisting replaces existing shades of the same type/mode. Dark-mode shade generation requires the parent color to have `darkModeEnabled`, matching the builder UI. Alternatively, pass `baseColor` and optionally `baseVariable` for preview-only generation.
bricks/generate-scale-variablesdeclares nothingGenerate fluid clamp() CSS variables for a typographic or spacing scale. Ports the builder's Scale Generator (Popup Styles > Scale). Pass an existing `categoryId` to use its configured scale, or pass an inline `category` object for preview-only generation. Returns variable objects ready to upsert via set-global-variables, or pass `save: true` to persist directly. Math is identical to the builder, so round-trip preview matches what the Generate button produces.
bricks/get-builder-guidereadonlyReference documentation for generating valid Bricks element JSON. Requires a topic: elements, layout, styling, dynamic-data, query-loops, or components.
bricks/get-componentreadonlyFull component data: elements tree, property definitions with connections, variants, slots, and designSystemVersion for safe follow-up writes.
bricks/get-custom-fontreadonlyFetch a single custom font family by post ID. Returns `{ font: { id, family, fontFaces } }`.
bricks/get-design-contextreadonlyOne-call summary of the site design context: color palettes, global classes, theme styles, components, global variables, and responsive breakpoints. Pass `responseFormat: "summary"` for capped orientation output, or `includeUsage: true` to add `usedOnPosts` per component.
bricks/get-element-conditionsreadonlyRead the `_conditions` array stored on an element's settings. Conditions are OR groups containing AND items: the element renders when any group matches and every item inside that group matches. Read-only.
bricks/get-element-interactionsreadonlyRead an element's own `_interactions` rows plus inherited global-class interactions in frontend order. Each interaction has a trigger (such as `click`, `enterView`, `scroll`, `formSubmit`) and an action (such as `show`, `hide`, `setAttribute`, `startAnimation`, `toggleOffCanvas`, `javascript`, `storageAdd`). `target` is optional and defaults to `self` at runtime; valid explicit values are `self`, `custom`, and `popup`. Read-only.
bricks/get-element-schemareadonlyFull settings schema (controls, groups, defaults) for a specific element type.
bricks/get-filter-elementreadonlyRead a single Query Filter element's full settings (source, field, label, style, filterQueryId, etc.). Read-only.
bricks/get-form-configreadonlyRead a Form element's fields, actions, and settings for a given post + elementId. Read-only. Use before update-form-fields / update-form-actions to see current shape.
bricks/get-global-queryreadonlyRead a single global query by ID. Returns the full stored row, including `id`, `name`, optional `category`, and `settings` using the same shape as an element's inline `query` setting.
bricks/get-global-settingsreadonlyRead current values for every allow-listed Bricks global setting. Excluded keys (credentials and code-execution settings) are never returned even if set. Remote template source passwords are redacted to passwordConfigured booleans. Pair with `bricks/list-settings-schema` to know what each key means.
bricks/get-mcp-versionreadonlyReport the Bricks plugin version, the Bricks abilities contract version, the WordPress MCP Adapter version, and the WordPress core version. Call once at the start of a session to detect version drift mid-conversation. `disabledAbilityCount` includes both admin-disabled and default-off abilities; `adminDisabledAbilityCount` and `defaultDisabledAbilityCount` split those states.
bricks/get-page-elementsreadonlyFull element data for a page/template with all settings. Optionally filter to a specific element and its children.
bricks/get-page-settingsreadonlyPage settings for a post (SEO, body classes, header/footer disable, custom CSS, etc.).
bricks/get-page-structurereadonlyLightweight tree view of page elements for understanding layout without full settings data. Optionally filter to a specific element and/or descendant depth.
bricks/get-popup-configreadonlyRead a popup template's configuration: the template conditions (where it can appear), the popup-specific settings (`popupCloseOn`, `popupBodyScroll`, `popupAjax`, `popupLimit*`), and the interaction triggers that reference it (elements whose target is `popup` with `templateId` pointing at this popup). Read-only.
bricks/get-reading-settingsreadonlyRead WordPress Reading settings: whether the front page shows latest posts or a static page, the selected homepage, and the selected posts page.
bricks/get-revisionreadonlyFetch the full Bricks element tree from a specific revision. Read-only; use `bricks/restore-revision` to roll back.
bricks/get-style-managerreadonlyReturn the `BRICKS_DB_STYLE_MANAGER` option verbatim, or null if unset. Common keys: `htmlFontSize`, `minScreenWidth`, `maxScreenWidth`, `defaultMode` (light|dark|auto).
bricks/get-system-informationreadonlyRead-only environment snapshot covering theme, Bricks, WordPress, server, and active plugins. Mirrors Settings > Bricks > System Information. License and API key values are never included.
bricks/get-templatereadonlyFetch a single Bricks template by ID. Returns title, type, status, edit URL, and by default settings plus the element tree for the rendered template area. Pass includeElements=false or includeSettings=false for a lighter response; use get-page-elements when you need scoped element-tree reads.
bricks/get-template-settingsreadonlyTemplate settings including conditions, header sticky/popup config, password protection, preview.
bricks/get-theme-stylesreadonlyTheme styles configuration. Without a filter returns lightweight summaries; with a style ID returns full settings.
bricks/get-woo-setup-optionsreadonlyRead the safe WooCommerce core options that Bricks setup needs: assigned shop/cart/checkout/account pages, coupon/login/registration checkout settings, and native archive AJAX add-to-cart behavior. Bricks-owned Woo toggles remain in bricks/get-global-settings. Credentials and payment/shipping gateway settings are not exposed.
bricks/get-woo-setup-statusreadonlyInspect Bricks/WooCommerce setup readiness for shop, single product, cart, checkout, and account areas. Returns assigned pages, existing Bricks data/content risks, available classic/v2 presets, Bricks Woo settings, and WooCommerce core page/account/checkout settings. Read this before planning or running Woo setup.
bricks/import-transfer-packagedestructiveImport selected items from an inspected unified transfer ZIP. Requires explicit `types`, exact manifest item IDs, and `expectedZipHash` from `bricks/inspect-transfer-package`. Defaults to keeping existing data on conflicts. Any replacement requires `allowOverwrite: true`; sensitive settings tabs require `allowSensitiveSettings: true`.
bricks/insert-remote-templatedeclares nothingFetch a template from a remote template-library source such as `wireframes` or `design-sets`, optionally import missing design assets, and insert its element tree into a target post. Uses the same placement options as `bricks/insert-template`. Existing local design assets are preserved and the target post receives a pre-save revision.
bricks/insert-templatedeclares nothingCopy a local Bricks template's element tree into a target post at a chosen position. Supported positions: `replace` (overwrite everything), `start` and `end` (root-level top or bottom; defaults to `end`), `before` and `after` (sibling of `anchorElementId`), and `append` and `prepend` (child of `anchorElementId`). Every source element ID is regenerated to avoid collisions. A revision is captured before the write, so `replace` is destructive but reversible via `bricks/restore-revision`. For remote library templates use `bricks/insert-remote-template`.
bricks/inspect-transfer-packagereadonlyInspect a base64 unified transfer ZIP without writing. Returns the manifest filtered by current user permissions plus conflicts, warnings, `zipHash`, and size. Call this before `bricks/import-transfer-package` and pass the returned `zipHash` as `expectedZipHash`.
bricks/list-ability-statusreadonlyEvery Bricks ability known to this site, each with an `enabled` flag, category, and `destructive` / `readonly` / `idempotent` annotations. Disabled abilities stay inspectable through adapter discovery/get-info but execution returns `bricks_ability_disabled`, so if an expected tool is missing, call this first: a false `enabled` means the site admin turned it off under Bricks > Settings > AI. When Bricks abilities are enabled, this ability bypasses the deny-list so it can diagnose drift even when other abilities are locked down.
bricks/list-breakpointsreadonlyRead the site's responsive breakpoints. Returns `{ baseKey, baseWidth, customEnabled, isMobileFirst, breakpoints, defaults }`, with `breakpoints` sorted by width for the active paradigm. `customEnabled` reflects the `customBreakpoints` master toggle.
bricks/list-builder-permissionsreadonlyRead the real builder-access model: permission sections, default and custom capability definitions, and the current WordPress role assignments. Custom definitions live in `BRICKS_DB_CAPABILITIES_PERMISSIONS`; role access lives on WordPress roles, not in `bricks_global_settings`.
bricks/list-cms-sourcesreadonlyIntrospect the site's content model. Pass a `source` (one of `wp`, `acf`, `jetengine`, `metabox`, `cmb2`, `pods`, `toolset`, `woo`) to fetch its schema, or omit to receive only the availability directory. Read-only: Bricks does not expose CRUD for third-party field providers. Use this to understand what data the site already carries so you can reference it correctly in templates and dynamic-data tags.
bricks/list-color-palettesreadonlyAll palettes with colors including IDs, raw CSS variable references, light/dark values, and shade relationships. Supports pagination and single-palette filter.
bricks/list-componentsreadonlyList all components with labels, descriptions, property summaries, variant names, slot counts, and the current designSystemVersion. Use before building new page sections to see whether an existing component should be reused. Supports pagination.
bricks/list-credential-statusreadonlyRead whether Bricks credentials are configured without returning secret values. Covers the license key, API/site/secret keys, access tokens, and template passwords. Every row returns configured/readable/writable flags; readable and writable are false because credential values stay admin-UI-only for now.
bricks/list-custom-fontsreadonlyEnumerate custom font families registered via the `bricks_fonts` CPT. Returns paginated rows with `id`, `family`, and `faceCount`; call `bricks/get-custom-font` for the full `fontFaces` map.
bricks/list-custom-iconsreadonlyEnumerate uploaded custom SVG icon rows from `BRICKS_DB_CUSTOM_ICONS`, optionally filtered by `setId`. Rows use the builder icon-manager shape: `id`, `setId`, `name`, `url`, and `attachment_id`. Paginated.
bricks/list-dynamic-data-tagsreadonlyList available dynamic-data tags with syntax, labels, and provider groups. Pass `postId` to scope results to tags applicable on that post (ACF groups, Woo product tags, JetEngine CCTs). Pass `includeModifiers: true` to include the modifier grammar (positional `:plain`, `:link`, `:image`, `:{number}` and key-value `@fallback`, `@sanitize`, `@date`). Paginated.
bricks/list-element-typesreadonlyAll registered Bricks element types with metadata (name, label, category, nestable).
bricks/list-form-submissionsreadonlyRead stored submissions for a Form element from the `{prefix}bricks_form_submissions` table. Paginated. When the table is missing (the Save Submission action has never run), returns an empty list with an explanatory `note` rather than a hard error.
bricks/list-global-classesreadonlyAll global classes with their settings. Supports pagination and category filter.
bricks/list-global-queriesreadonlyEnumerate the reusable query-loop configurations saved in Bricks. Supports search, category filter, and pagination. Returns a summary row per query (`id`, `label`, `category`, and a `summary` object with fields such as `objectType`, `postType`, and `posts_per_page`) plus the category list. Call `bricks/get-global-query` to fetch the full stored row.
bricks/list-global-variablesreadonlyAll global CSS variables. Supports pagination and category filter.
bricks/list-icon-setsreadonlyEnumerate custom icon sets (`BRICKS_DB_ICON_SETS`) and the list of disabled built-in or custom icon-set IDs (`BRICKS_DB_DISABLED_ICON_SETS`).
bricks/list-orphaned-elementsreadonlyScan every post that uses Bricks meta for elements whose parent no longer exists in the same tree. Read-only: returns what `bricks/cleanup-orphaned-elements` would remove without touching anything.
bricks/list-popupsreadonlyList all popup templates (`bricks_template` posts whose template type is `popup`). Returns id, title, status, and conditions summary. Read-only. Equivalent to list-templates with type=popup plus extra popup-specific meta.
bricks/list-pseudo-classesreadonlyReturn the list of pseudo-class selectors available in the builder style panel. `isDefault` is true when the option is unset and Bricks is using the built-in fallback (`:hover`, `:active`, `:focus`).
bricks/list-query-filtersreadonlyEnumerate Query Filter elements across posts/templates (filter-checkbox, filter-radio, filter-select, filter-range, filter-search, filter-datepicker, filter-submit, filter-active-filters). Returns post/location + filter target (filterQueryId). Read-only.
bricks/list-query-loop-typesreadonlyList the exact runtime query loop objectType values after Bricks core, dynamic-data providers, WooCommerce, and custom filters have registered them. Use before building provider-backed loops such as ACF repeaters, Meta Box groups, JetEngine relations, or WooCommerce cart loops.
bricks/list-remote-templatesreadonlyList templates available in a built-in source (`wireframes` or `design-sets`) or an admin-configured remote template URL. Use a source `id` or `url` from `bricks/list-template-sources`. Returns paginated template metadata by default; request a specific page/perPage and use `mode: "full"` only for targeted inspection.
bricks/list-revisionsreadonlyList Bricks-aware revisions for a post. Shows which areas (content/header/footer) each revision has data for.
bricks/list-settings-schemareadonlyDiscover which Bricks global-settings keys are writable via MCP. Returns an allow-list registry: each entry declares `key`, `type`, `category` (general/performance/maintenance/builder/templates/forms), `label`, and validation hints. Call this before `bricks/set-global-settings` to know what you can touch. Credentials, code-execution toggles, and builder role data are excluded from this surface; use list-credential-status to check whether credentials are configured.
bricks/list-sidebarsreadonlyEnumerate custom sidebars registered via Bricks > Settings > Sidebars. Read-only. Returns `[{ id, name, description }]`.
bricks/list-template-sourcesreadonlyList remote template-library sources: Bricks built-ins (`wireframes`, `design-sets`), admin-configured remote template URLs, and group rows. Returns the raw source records used by the builder source picker. Use a returned `id` or `url` with `bricks/list-remote-templates` to inspect remote templates or `bricks/insert-remote-template` to insert one.
bricks/list-templatesreadonlyList all Bricks templates with type, status, and condition summary. Supports pagination and type filter.
bricks/list-theme-stylesreadonlyPaginated list of theme style summaries (id, label, conditions, settings group counts). Use get-theme-styles with an id for full settings.
bricks/list-transfer-itemsreadonlyRead the unified import/export selector for the current site. Returns exportable transfer types and exact item IDs for color palettes, theme styles, classes, variables, custom fonts, breakpoints, global queries, components, templates, settings tabs, and custom capabilities, filtered by the current user permissions.
bricks/plan-woo-setupreadonlyDry-run Bricks WooCommerce setup. Produces a planId plus page creation/reuse/assignment operations, selected classic or advanced presets, template-drafting side effects, blockers, warnings, and confirmation requirements. Defaults to classic mode because modular v2 Woo elements are experimental.
bricks/preview-dynamic-tagreadonlyRender a dynamic-data expression against a real post so you can verify the output before committing it to a template. Accepts full expressions with modifiers (for example `{post_title:plain}` or `Hello {user_first_name @fallback:'there'}`). Returns the rendered value alongside an `isEmpty` flag, which catches tags that would silently disappear in production. Read-only.
bricks/regenerate-css-filespartialMirror of Settings > Bricks > General > "Regenerate CSS files". Rebuilds the per-post CSS files served when `cssLoading` is `file`. When `cssLoading` is `inline`, the regenerated files act only as a fallback; the live output is still inline `<style>` tags.
bricks/reindex-filtersdeclares nothingDrop/recreate the query-filter index table and queue index jobs. Use after bulk filter changes, schema changes, or to recover from a corrupted index. The background job may continue after this call returns. Equivalent to clicking Regenerate filter index in Bricks > Settings > Query filters.
bricks/remove-elementdestructiveRemove an element and, optionally, all of its children. Destructive: a pre-save revision is captured automatically. Pass the returned `revisionId` to `bricks/restore-revision` to undo.
bricks/render-elementsreadonlyRender HTML + CSS for a proposed Bricks element tree without saving. Useful for verifying JSON before committing it via element-write abilities. Read-only.
bricks/restore-revisiondestructiveRoll back a post to a previous revision. Copies Bricks postmeta (element tree + page settings) from the revision onto the current post. Takes a new snapshot first so the restore itself is reversible.
bricks/run-woo-setupdestructiveApply a reviewed Woo setup plan: create only missing Woo pages, reuse matching pages only when empty or shortcode-only, assign Woo page options, optionally enable experimental advanced modular elements, and run the shared Woo setup wizard for selected areas. Existing Bricks/non-empty/block page content requires explicit overwriteExistingPageContent and destructive confirmation.
bricks/set-breakpointspartialFull-replacement write of the breakpoint list. Pass `{ breakpoints: [{ key, label, width, icon?, base? }, ...], customEnabled?: boolean }`; exactly one row must have `base: true`, and keys must be unique. The writer stores rows descending by width to match core Bricks. When `cssLoading` is set to `file`, follow up with `bricks/regenerate-css-files` so on-disk caches pick up the new widths.
bricks/set-builder-role-accesspartialAssign existing builder access capabilities to WordPress roles. Empty string means no builder access. The administrator role is intentionally not writable here because Bricks always treats administrators as full access.
bricks/set-disabled-icon-setspartialFull-replacement write of the disabled-icon-set list. Use this to hide built-in libraries or custom icon sets from the builder picker. Pass an empty array to re-enable all.
bricks/set-filter-target-querypartialBind a filter element to a target query-loop element via `filterQueryId`. Filter elements that lack this binding never fire. Pass an empty string to unbind. A pre-save revision is taken.
bricks/set-global-settingspartialPartial-merge write to Bricks global settings. Pass `{ settings: { key: value, ... } }`; only the keys you send are touched, and everything else is preserved. Keys outside the registry return `bricks_setting_unknown`, and excluded keys return `bricks_setting_excluded`. Every value is validated against the registry schema before write.
bricks/set-global-variablespartialUpsert global CSS variables. Variables with matching IDs are updated, new ones are appended. Existing variables not in the input are preserved. For spacing and typography scales, use bricks/generate-scale-variables; static values targeting a configured scale prefix are rejected.
bricks/set-page-elementsdestructiveReplace the entire element tree on a page or template. Destructive: every existing element is overwritten. A pre-save revision is captured automatically; pass the returned `revisionId` to `bricks/restore-revision` to undo. Granular alternatives: `bricks/add-element`, `bricks/update-element`, `bricks/remove-element`.
bricks/set-page-settingspartialSet page settings via partial merge. Only provided keys are updated.
bricks/set-pseudo-classespartialFull-replacement write of the pseudo-class selector list. Each selector must start with `:` and match `/^:[a-z][a-z0-9-]*(\(.+\))?$/i`. Empty/null input resets to the built-in defaults.
bricks/set-reading-settingspartialSet WordPress Reading settings for site builds. Covers `show_on_front`, `page_on_front`, and `page_for_posts` only. Requires manage_options.
bricks/set-style-managerpartialFull-replacement write of the style-manager option. Pass null or empty object to reset to defaults.
bricks/set-template-conditionspartialReplace the `templateConditions` array on a template. Each condition has a `main` kind (`any`, `frontpage`, `postType`, `archiveType`, `search`, `error`, `terms`, or `ids`) plus kind-specific fields. Section templates can also include `hookName` and optional `hookPriority` to render on a WordPress hook. Legacy `main=hook` input is normalized to `any` when `hookName` is present. Full replacement, not a merge.
bricks/set-template-settingspartialSet template settings via partial merge. Covers conditions, header sticky/popup config, password protection.
bricks/set-woo-setup-optionspartialPartial-merge write to the small allow-list of WooCommerce core options Bricks setup needs. Page IDs must reference existing non-trashed pages or 0 to clear, boolean values are stored as WooCommerce yes/no options, and unrelated Woo settings are preserved. Bricks-owned Woo toggles remain in bricks/set-global-settings.
bricks/start-herereadonlyReturns the canonical Bricks workflow rules clients should read once per session: orient via `bricks-get-design-context` before design writes, never force duplicate names, capture `revisionId` on element writes, structured-error-code dispatch, multi-identifier post addressing. Skill-pack users see the same content via their installed skill; skill-less clients get the rules in-band by calling this once on connection.
bricks/update-colorpartialPartial-merge update of a single palette color. Accepts top-level or nested `color` fields: `light`, `dark`, `raw`, `darkModeEnabled`, `parent`, `type`, `index`, and `utilityClasses`. Raw renames update child shade variables and global references; disabling dark mode removes dark values and dark-mode shades.
bricks/update-color-palettepartialRename a color palette. Does not modify its colors. Use create-color / update-color / delete-color for individual color management.
bricks/update-componentdestructiveUpdate an existing component. Requires expectedDesignSystemVersion from a recent read. Only provided fields are changed, but `elements` replaces the entire component tree, so read the component first with `bricks/get-component` before editing one element. Slot IDs are preserved where possible, and removing slots with instance content is blocked unless `allowSlotOrphans=true` is explicit. Property connections, variants, property groups, block fields, and missing builder metadata are validated.
bricks/update-custom-fontpartialUpdate a custom font family. Accepts `family` for renaming and `fontFaces` for full replacement of the face map, keyed by weight/style strings such as `400` or `400italic`. Every file value must reference an attachment ID.
bricks/update-elementpartialPartial-merge update of an existing element's settings. Only provided keys are updated. Pass `null` or `""` for a key to delete it (matches the builder, which removes a key when its control is cleared). Supports dryRun and compact response options.
bricks/update-element-conditionspartialReplace the `_conditions` array on an element. Conditions are full-replacement ordered repeaters, never a merge. Missing row IDs are generated. Pass an empty array to clear all conditions. A pre-save revision is taken.
bricks/update-element-interactionspartialReplace the element-level `_interactions` array. Order is significant, so this is always a full replacement, never a merge. Missing row IDs are generated. Trigger, action, target, JavaScript function references, and action/trigger-specific required fields are validated. Global-class interactions are read-only here; update the class to change inherited rows. A pre-save revision is taken.
bricks/update-filter-elementpartialPartial-merge update of a filter element's settings. Use to change source (taxonomy/customField/wpField), field mapping, labels, or UI options without touching filterQueryId. For retargeting to a different loop, use set-filter-target-query. A pre-save revision is taken.
bricks/update-form-actionspartialUpdate the actions list and/or partial-merge per-action settings (emailTo, webhookUrl, redirectUrl, etc.). Built-in actions are validated against the same runtime list the Form element uses, so `save-submission` and `unlock-password-protection` require their global settings. Custom action keys are accepted only when a matching `bricks/form/action/{key}` hook is registered. Provide at least one of `actions` or `settings`. A pre-save revision is taken.
bricks/update-form-fieldspartialReplace the entire `fields` array on a Form element. Order is significant, so this is always a full replacement, never a merge. Each field needs at least `{ id, type }`, and `type` must be one of the 18 supported field types (see `skills/forms`). A pre-save revision is taken.
bricks/update-global-classpartialUpdate an existing global class. Settings are deep-merged (only provided keys are updated). Selectors are fully replaced.
bricks/update-global-querypartialPartial-merge update of a global query's label, category, or inline query object. When the `query` field is sent it is replaced in full (no deep merge inside), so always pass the complete query-settings object.
bricks/update-popup-settingspartialPartial-merge update of popup-specific template settings: popupCloseOn (esc/backdrop), popupBodyScroll, popupAjax, popupLimitWindow, popupLimitSessionStorage, popupLimitLocalStorage, and popupLimitTimeStorage. Does NOT manage template display conditions (use set-template-conditions) or interaction triggers on opener elements (use update-element-interactions on the caller).
bricks/update-sidebarpartialPartial-merge update of a sidebar's `name` and/or `description`. The `id` is immutable; to change it, delete and recreate the sidebar.
bricks/update-theme-stylepartialUpdate an existing theme style. By default `settings` is deep-merged into existing settings (only provided keys change). Pass `replace: true` to fully replace the settings object instead. `label` and `conditions` are always replaced when provided.
bricks/upload-custom-font-filedeclares nothingUpload a font face file (woff2, woff, ttf, otf, or eot) as a private attachment. Enforces an extension allow-list, MIME sniffing via `wp_check_filetype_and_ext`, and an 8 MB size cap (filterable via `bricks/abilities/fonts/max_bytes`). Returns the new attachment ID; pass it to `bricks/update-custom-font` to bind it to a weight and style.
bricks/upload-custom-icondeclares nothingAdd an SVG icon to an existing custom icon set. The raw SVG is sanitized server-side, stored as a Media Library attachment, then saved in `BRICKS_DB_CUSTOM_ICONS` with `url` and `attachment_id` so the builder icon manager can use it.
bricks/upload-mediadeclares nothingUpload a media file from a URL or base64 data. Returns the attachment object with all size variants, ready to use in Bricks image elements.
bricks/upsert-builder-capabilitypartialCreate or update one custom builder access capability. The capability grants a validated list of builder permission keys and then appears in the Builder access role selector. Built-in Bricks capability ids cannot be overwritten.
core/get-environment-inforeadonlyGibt wichtige Details zum Laufzeitkontext der Website für Diagnose- und Kompatibilitätszwecke zurück (Umgebung, PHP-Runtime, Datenbank-Serverinformationen, WordPress-Version).
core/get-site-inforeadonlyGibt die in WordPress konfigurierten Website-Informationen zurück. Standardmäßig werden alle Felder oder optional ein gefilterter Teilsatz ausgegeben.
core/get-user-inforeadonlyGibt grundlegende Profildetails des aktuell authentifizierten Benutzers zurück, um Personalisierung, Überwachung und Zugriffsverhalten zu unterstützen.
mcp-adapter/discover-abilitiesreadonlyDiscover all available WordPress abilities in the system. Returns a list of all registered abilities with their basic information.
mcp-adapter/execute-abilitydestructiveExecute a WordPress ability with the provided parameters. This is the primary execution layer that can run any registered ability.
mcp-adapter/get-ability-inforeadonlyGet detailed information about a specific WordPress ability including its input/output schema, description, and usage examples.
snn/active-theme-infodeclares nothingRetrieves comprehensive information about the active WordPress theme including version, author, requirements, template files, theme modifications, and supported features. Returns child theme and parent theme data if applicable. Can optionally include all installed themes, template file list, and theme customizer settings. Use this when you need to understand the current theme setup, check compatibility, analyze theme structure, or investigate theme-related issues.
snn/analyze-post-seodeclares nothingPerforms comprehensive SEO analysis on a WordPress post or page. Checks title length, meta description, keyword usage, content length, heading structure, image alt text, internal/external links, readability score, and provides actionable recommendations. Use this to optimize content for search engines and improve rankings.
snn/check-seo-quality-title-and-contentdeclares nothingPerforms comprehensive SEO analysis on posts (including custom post types) and taxonomy terms. Analysis includes: title optimization (length, power words, numbers), meta description quality, content analysis (word count, readability score, sentence/paragraph structure), keyword density analysis with focus keyword support, heading hierarchy (H1-H6 structure), internal/external link analysis, image alt text audit, URL/slug optimization, duplicate content detection, taxonomy term SEO analysis, and overall weighted SEO scoring. Supports any registered post type (post, page, product, portfolio, etc.) and taxonomy (category, tag, custom taxonomies). Returns detailed scores across multiple categories with actionable recommendations prioritized by impact. Use this to audit content quality, identify SEO issues, and get specific improvement suggestions.
snn/create-postdeclares nothingCreates a new WordPress post or page with specified title, content (HTML supported), excerpt, status (draft/publish/pending/private), categories, and tags. Automatically sanitizes input and sets the current user as author. Returns the new post ID, permalink, and edit URL. Use this when you need to programmatically create content, import posts, generate articles, or add new pages to the site. Always create as draft first unless explicitly instructed to publish immediately. CRITICAL: Content must be valid HTML with ALL tags properly closed to prevent broken blocks: - Good: <h2>Title</h2><p>Introduction text.</p><ul><li>Point 1</li><li>Point 2</li></ul><p>Conclusion.</p> - Bad: <p>Text without closing <h2>Title</h2> More loose text (will break) - Lists must use: <ul><li>Item</li></ul> or <ol><li>Item</li></ol> - No empty blocks: <p></p> (remove these) See includes/ai/docs/block-generation-rules.md for complete guidelines.
snn/create-post-summariesdeclares nothingAnalyzes long-form content and automatically generates TL;DR summaries by extracting key sentences, identifying main points, and creating concise overviews. Detects posts exceeding minimum word count threshold (default 500 words), extracts first paragraph and key sentences, calculates reading time, and suggests summary lengths (short/medium/long). Returns posts needing summaries with suggested content for excerpts. Use this to identify posts missing meta descriptions, generate excerpt suggestions for long articles, improve content accessibility, and help readers quickly understand post topics.
snn/create-termsdeclares nothingCreates a new term (category, tag, or custom taxonomy term) with name, slug, description, and optional parent (for hierarchical taxonomies). CRITICAL: You MUST provide a valid taxonomy slug. Call list-taxonomies FIRST if you don't know the exact taxonomy slugs available on this site. Common built-in taxonomies: "category" (hierarchical post categories), "post_tag" (flat post tags). Custom taxonomies vary by site (e.g., "product_cat", "course_category"). Returns the new term ID, slug, and URL. Validates taxonomy exists before creation and provides helpful error messages with available taxonomies if invalid slug provided.
snn/edit-block-contentdeclares nothingSurgically edit existing block content with precision. Use this for targeted modifications without affecting other blocks. WHEN TO USE THIS ABILITY: - User wants to update/modify a SPECIFIC section or block (e.g., "update the pricing section", "change the hero button text") - User wants to insert content BETWEEN existing blocks (e.g., "add a testimonial after the services section") - User wants to delete specific blocks (e.g., "remove the third FAQ item") - User wants to find and replace text/blocks (e.g., "replace all Read More buttons with Get Started") CRITICAL: POST_ID AUTO-DETECTION - post_id is OPTIONAL when user is in block editor - The ability will automatically detect post_id from context - Only provide post_id manually if editing a different post than the current one - Accepts both integer (123) and string ("123") formats ABSTRACT TARGETING SYSTEM (Priority Order): 1. anchor (BEST) - Target by HTML ID (e.g., "snn-section-hero-x92") - Most reliable, survives text changes - Use when available from pattern generation 2. section_identifier - Target by heading text (e.g., "About Us") - Fuzzy match fallback - Less reliable if user changes text 3. block_index - Target by position (e.g., 0 = first, -1 = last) - Use when other methods unavailable - Changes if blocks are added/removed AVAILABLE EDIT ACTIONS: 1. INSERT_AT_INDEX - Insert new blocks at a specific position - Use when user says: "add X after/before Y", "insert X at position N" - Parameters: insert_index (required), content (required) - Example: Insert testimonial after services section 2. REPLACE_BLOCK_RANGE - Replace a range of blocks - Use when user says: "replace the X section", "change blocks 3-5" - Parameters: start_index (required), end_index (required), content (required) - Example: Replace pricing table with new one 3. DELETE_BLOCKS - Delete blocks by index range - Use when user says: "remove X section", "delete the third item" - Parameters: start_index (required), end_index (optional, defaults to start_index) - Example: Remove FAQ item 4. FIND_AND_REPLACE_SECTION - Find section by heading/anchor and replace it - Use when user says: "update the About Us section", "change the Services heading" - Parameters: anchor OR section_identifier (required), content (required) - Example: Update "Who We Are" section content - NOTE: This finds the heading block matching identifier and replaces it + all blocks until next heading 5. FIND_AND_REPLACE_TEXT - Find and replace text within blocks - Use when user says: "change all mentions of X to Y", "replace the word X" - Parameters: find_text (required), replace_text (required), block_types (optional array) - Example: Replace "Read More" with "Learn More" in all buttons PARAMETERS: - post_id: (integer|string, optional) Post ID to edit - auto-detects from context if omitted - action: (string, required) Edit action type - anchor: (string, optional) HTML anchor/ID for abstract targeting (MOST RELIABLE) - section_identifier: (string, optional) Heading text or fuzzy match string - block_index: (integer, optional) Target by position (0=first, -1=last) - content: (string) Block markup to insert/replace - insert_index: (integer) Position to insert blocks - start_index: (integer) Start index for range operations - end_index: (integer) End index for range operations - find_text: (string) Text to find for replacement - replace_text: (string) Text to replace with - block_types: (array) Optional: limit operations to specific block types - fallback_to_append: (boolean) If target not found, append instead of failing (default: false) - save_immediately: (boolean) Save post after edit (default: false) RETURN FORMAT: Returns client_command for real-time editor updates with: - type: "edit_block_content" - action: the edit action performed - All relevant parameters for JavaScript execution - requires_client_update: true EXAMPLES: 1. Update hero section by anchor (BEST METHOD): { "action": "find_and_replace_section", "anchor": "snn-section-hero-a7f", "content": "<!-- wp:heading --><h1>Shorter Title</h1><!-- /wp:heading -->" } 2. Update hero section by text (FALLBACK): { "action": "find_and_replace_section", "section_identifier": "Hero", "content": "<!-- wp:heading --><h1>Shorter Title</h1><!-- /wp:heading -->" } 3. Insert testimonial after services (auto-detect post_id): { "action": "insert_at_index", "insert_index": 1, "content": "<!-- wp:quote -->...</quote><!-- /wp:quote -->" } 4. Replace pricing section: { "post_id": 123, "action": "replace_block_range", "start_index": 5, "end_index": 8, "content": "<!-- wp:group -->...new pricing...<!-- /wp:group -->" } 5. Delete third FAQ item: { "action": "delete_blocks", "start_index": 2 } 6. Replace button text across all buttons: { "action": "find_and_replace_text", "find_text": "Read More", "replace_text": "Learn More", "block_types": ["core/button"] } CRITICAL WORDPRESS BLOCK RULES: - All HTML tags must be properly closed - Block comments must have opening and closing pairs - JSON attributes must be valid (no trailing commas) - Escape % symbols as %% in inline styles - See generate-block-pattern ability for full block syntax rules
snn/generate-block-patterndeclares nothingGenerates rich, detailed block patterns using WordPress core blocks. Creates complete sections from scratch with professional styling. Use for rapid prototyping and structured layouts. PATTERN TYPES (pattern_type): - hero: Hero banners with headings, descriptions, CTAs (large text, centered, buttons) [ALIGN: full] [CLASS: hero-section] - about: About sections with text + imagery (2-column, lists, professional) [ALIGN: wide] [CLASS: about-section] - services: Service grids (1-4 columns, titles, descriptions) [ALIGN: wide] [CLASS: services-section] - cta: Call-to-action sections (centered, prominent buttons, conversion-focused) [ALIGN: full] [CLASS: cta-section] - testimonials: Customer reviews (quotes in columns, attribution) [ALIGN: wide] [CLASS: testimonials-section] - team: Team member grids (images, names, positions, configurable columns) [ALIGN: wide] [CLASS: team-section] - stats: Statistics showcase (large numbers, labels, multi-column) [ALIGN: wide] [CLASS: stats-section] - faq: FAQ sections (accordion/details blocks, expandable Q&A) [ALIGN: wide] [CLASS: faq-section] - custom: Generic flexible pattern [ALIGN: none] [CLASS: custom-section] ALIGNMENT BEHAVIOR: Patterns automatically apply appropriate alignment based on type: - "full" (alignfull): Full-width edge-to-edge sections for maximum impact (hero, cta) - "wide" (alignwide): Wide but contained sections for most content (services, about, team, testimonials, stats, faq) - "none": Default constrained width for generic content STYLE OPTIONS (style_preference): modern (clean/contemporary), minimal (essential only), bold (attention-grabbing), elegant (refined), playful (creative/fun), professional (corporate), creative (artistic/unique) KEY PARAMETERS: - content_description: BE SPECIFIC about headings, text, items, layout. Good: "Hero with heading 'Transform Business', subtext about digital services, 'Get Started' button". Bad: "Make a hero" - layout_columns: 1-4 columns for grids (services, team, testimonials, stats) - color_scheme: {background: "#fff", text: "#000", accent: "#0066cc"} - spacing: compact (40/16/8px), normal (80/24/12px), spacious (120/40/20px) - action_type: replace (all content), append (add to end), prepend (add to start) - semantic_class: Optional custom semantic class name. If not provided, defaults to pattern-type-based class (hero-section, services-section, etc.) USAGE EXAMPLES: 1. Hero: {pattern_type: "hero", content_description: "Heading 'Welcome to Our Agency', description about creative services, 'Start Project' button", style_preference: "modern", color_scheme: {background: "#000", text: "#fff", accent: "#00ff88"}, semantic_class: "agency-hero"} 2. Services: {pattern_type: "services", content_description: "3 services: Web Dev (custom sites), Mobile Apps (iOS/Android), Cloud (scalable)", layout_columns: 3, semantic_class: "our-services"} 3. Stats: {pattern_type: "stats", content_description: "500+ projects, 50+ team, 98% satisfaction", spacing: "spacious", semantic_class: "company-stats"} 4. Team: {pattern_type: "team", content_description: "4 leadership members", layout_columns: 4, include_images: true, semantic_class: "leadership-team"} AVAILABLE CORE BLOCKS: Layout: group, columns, column, cover, media-text, spacer, separator | Content: paragraph, heading, list, list-item, quote, pullquote, table | Media: image, gallery, video, audio | Interactive: button, buttons, accordion, details, social-links CRITICAL WORDPRESS BLOCK RULES (prevent broken blocks): 1. HTML STRUCTURE: - Close ALL tags: <p>Text</p> NOT <p>Text - Proper nesting: <p><strong>Bold</strong></p> NOT <strong><p>Bold</p></strong> - Lists need containers: <ul><li>Item 1</li><li>Item 2</li></ul> - No loose text outside block elements - Escape % symbols in inline styles: 50%% NOT 50% 2. BLOCK COMMENT SYNTAX: - Opening: <!-- wp:block-name {JSON_attributes} --> - Closing: <!-- /wp:block-name --> - Self-closing NOT allowed - always use opening/closing pair - JSON must be valid: {"key":"value"} with proper quotes - No trailing commas in JSON objects 3. BLOCK ATTRIBUTES (JSON structure): - metadata: {"categories":["category"],"patternName":"name","name":"Display Name"} - style: {"spacing":{},"color":{},"typography":{},"border":{},"elements":{}} - layout: {"type":"constrained|flex","contentSize":"1180px","justifyContent":"left|center|right"} - Spacing: {"padding":{"top":"80px","right":"26px","bottom":"80px","left":"26px"},"margin":{"top":"0","bottom":"0"},"blockGap":"24px"} - Border: Individual sides {"top":{"color":"#e0e0e0","width":"1px","style":"solid"},"radius":"24px"} 4. CSS CLASSES (WordPress conventions): - Color classes: has-text-color, has-background, has-link-color, has-{slug}-color - Typography: has-custom-font-size (required when using inline font-size styles) - Border: has-border-color - Alignment: has-text-align-center, aligncenter, alignleft, alignright - Always include semantic classes when using colors/backgrounds/typography 5. SEMANTIC CLASS NAMES: - ALWAYS include semantic className in root group: "className":"pattern-section" - Pattern type defaults: hero-section, about-section, services-section, cta-section, etc. - Use descriptive, kebab-case names: agency-hero, our-services, company-stats - Class appears in HTML: class="wp-block-group alignfull hero-section has-text-color..." - Allows for easy CSS targeting and styling customization 6. INLINE STYLES (format strictly): - Format: style="property:value;property:value" - Colors: color:#000000;background-color:#ffffff - Spacing: margin-top:24px;padding-top:80px (include units) - Typography: font-size:48px;line-height:1.2;font-weight:500 - Borders: border-radius:24px;border-color:#e0e0e0;border-width:1px - No spaces around colons/semicolons 7. COLUMN LAYOUTS: - Parent: <!-- wp:columns {"style":{}} --> - Child: <!-- wp:column {"width":"50%%"} --> (escape % as %%) - Use flex-basis in inline style: style="flex-basis:50%%" - Equal columns: omit width attribute - Column gaps: blockGap:{"top":"34px","left":"24px"} 8. COLOR INHERITANCE: - Elements for link colors: "elements":{"link":{"color":{"text":"#000"}}} - Apply to parent groups to cascade to children - Use both class and inline style for reliability 9. IMAGE BLOCKS: - Structure: <!-- wp:image {"sizeSlug":"large","align":"center"} --> - Wrap in <figure>: <figure class="wp-block-image"><img src="" alt=""/></figure> - Always include alt text (can be empty: alt="") - Include size classes: size-large, aligncenter - For sized images: {"width":"161px","height":"auto"} 10. BUTTON BLOCKS: - Always wrap button in buttons: <!-- wp:buttons --> with <!-- wp:button --> - Structure: <div class="wp-block-button"><a class="wp-block-button__link">Text</a></div> - Include wp-element-button class on link - CRITICAL: When using custom font size, add has-custom-font-size class - Example: class="wp-block-button__link has-text-color has-background has-custom-font-size wp-element-button" - Colors: {"style":{"color":{"background":"#000","text":"#fff"}}} 11. SPACING CONSISTENCY: - Section padding: 80px (normal), 40px (compact), 120px (spacious) - Block gaps: 24px (normal), 16px (compact), 40px (spacious) - Element margins: 12px (normal), 8px (compact), 20px (spacious) - Always use margin:{top:"0",bottom:"0"} on containers to prevent double spacing 12. METADATA REQUIREMENTS: - Root group must have: {"metadata":{"categories":["type"],"patternName":"unique-slug","name":"Display Name"}} - Categories match pattern type: hero, about, services, cta, testimonials, team, stats, faq - patternName should be unique and descriptive 13. VALIDATION CHECKLIST: - Every opening block comment has matching closing comment - All HTML tags are properly closed and nested - JSON attributes are valid (no trailing commas, proper quotes) - All % symbols in styles are escaped as %% - Color values are valid hex codes (#000000 not #000) - Spacing values include units (24px not 24) - Classes match WordPress conventions - Semantic className is included in root group and appears in HTML class attribute BEST PRACTICES: - Always include semantic class names (hero-section, services-section, custom-hero, etc.) for easy CSS targeting - Be descriptive in content_description (specific headings, exact text, structure details) - Match colors to brand (use color_scheme with hex codes, always 6 digits: #000000 not #000) - Choose appropriate spacing (compact for dense info, spacious for emphasis) - Layer patterns with action_type: "append" to build complete pages - Use layout_columns based on content: 1 (detailed), 2 (balanced), 3 (standard grid), 4 (dense grid) - Maintain consistent contentSize: 1180px for full width, 900px for centered content, 800px for narrow (CTA/FAQ) - Apply margin:{top:"0",bottom:"0"} to container groups to prevent unwanted spacing - Use semantic heading levels: h2 for section titles, h3 for subsection titles - Include both CSS classes AND inline styles for maximum compatibility - Test color contrast: ensure text is readable against backgrounds (WCAG AA minimum) - Use blockGap instead of individual margins where possible for consistency - Group related elements in nested groups for better structure and maintainability
snn/get-commentsdeclares nothingRetrieves comments with full details including comment ID, post ID, author name, email, content, date, and approval status. Can filter by specific post ID to get post-specific comments or retrieve site-wide comments. Supports filtering by status (approved, pending, spam) and limiting results (max 100 for performance). Returns array of comment objects. Use this to moderate comments, analyze engagement, find spam comments, check specific post discussions, or export comment data.
snn/get-mediadeclares nothingRetrieves media library items (images, videos, documents, audio) with complete details including attachment ID, title, file URL, MIME type, file size in bytes, upload date, and alt text. Can filter by MIME type (e.g., "image/jpeg", "image/png", "application/pdf", "video/mp4") to get specific file types. Limited to 100 items per request for performance. Use this to audit media library, find unused images, check file sizes, locate specific media types, export media data, or analyze media usage patterns.
snn/get-post-by-iddeclares nothingRetrieves complete details for a specific post by ID including title, full content (unfiltered HTML), excerpt, status, post type, permalink, edit URL, author information (ID and display name), publication date, last modified date, assigned categories (with IDs, names, slugs), and tags (with IDs, names, slugs). Use this when you need full post data for a known post ID, to read specific content, analyze post details, check metadata, or prepare content for editing. More detailed than get-posts which returns summarized data.
snn/get-post-contentdeclares nothingRetrieves the full content and metadata of a WordPress post or page. Returns title, content (both raw HTML and plain text), excerpt, status, author, dates, categories, tags, featured image, word count, and block information. Use this to analyze or read existing content, check what's in a post before editing, or gather information for SEO analysis.
snn/get-post-metadeclares nothingRetrieves custom fields and metadata for a specific post by ID. Can fetch a specific meta key value or all metadata at once. Automatically filters out WordPress internal/protected fields (those starting with underscore) when retrieving all meta. Returns clean key-value pairs of post metadata. Use this to access custom field values, ACF fields, post metadata added by plugins, custom post settings, or any data stored in the postmeta table. Essential for reading custom data attached to posts.
snn/get-postsdeclares nothingRetrieves a list of posts with filtering and sorting options. By default includes both published and draft posts since users are in dashboard context. Returns post ID, title, permalink, excerpt (30 words), publication date, post status, and author display name. Supports filtering by post type (post/page/custom), post status, category slug, ordering (date/title/modified/random), sort direction (ASC/DESC), and limiting results (max 100 for performance). Returns summarized data - use get-post-by-id for full content. Use this to list recent posts, browse by category, get post overviews, create content listings, or analyze publication patterns.
snn/get-site-infodeclares nothingPREFERRED SYSTEM INFO TOOL: Retrieves comprehensive WordPress site health report including: WordPress version/config/theme, server details (software/OS/hostname/IP), PHP version/settings/memory limits/extensions/opcache status, database version/charset/table count, complete content statistics (posts/pages/media/comments/users by type and status), active plugin list with versions, security settings (SSL/file editing/auto-updates/user registration), performance metrics (object cache/cron/disk space/writable directories), and important WordPress constants. Use this as your FIRST call for system diagnostics, troubleshooting, compatibility checks, or getting a complete site overview. Most comprehensive system information available.
snn/get-tagsdeclares nothingRetrieves post tags (post_tag taxonomy) with ID, name, slug, post count, tag archive URL, and description. Can show/hide empty tags and limit result count. Returns flat list of all tags. This is a convenience wrapper for get-terms with taxonomy="post_tag". Use this for quick tag listings, tag clouds, or when you specifically need post tags. For more advanced filtering, custom taxonomies, or hierarchical terms, use get-terms or list-taxonomies instead.
snn/get-termsdeclares nothingRetrieves terms from any taxonomy with advanced filtering options. Returns term ID, name, slug, taxonomy, post count, URL, parent ID, and description. Supports filtering by taxonomy (REQUIRED - call list-taxonomies first if unknown), show/hide empty terms, limit count (max 100), ordering (name/slug/count/ID), sort direction, parent ID (for hierarchical taxonomies), and search. CRITICAL: Must provide valid taxonomy slug - built-in ones are "category" and "post_tag", but custom taxonomies vary by site. Validates taxonomy and provides helpful errors. Use this for advanced term queries, building category trees, filtered term lists, or working with custom taxonomies.
snn/get-usersdeclares nothingRetrieves WordPress users with complete details including user ID, username (login), display name, email address, assigned roles (administrator/editor/author/contributor/subscriber), registration date/time, and total authored post count. Can filter by specific role and limit results (max 100 for performance). Use this when you need user lists, want to find users by role, need email addresses for notifications, analyze author activity, check user registrations, or export user data. Returns all public user information.
snn/installed-plugin-list-and-infosdeclares nothingRetrieves comprehensive information about all installed plugins including: plugin file path, name, version, description, author, URIs, text domain, WordPress/PHP requirements, active/inactive status, and available updates with version numbers. Can filter by status (all/active/inactive/update_available), search by name/description, and optionally include must-use plugins and drop-ins. Returns counts, update information, and sorted lists (active first). Use this to audit plugins, check for updates, find inactive plugins, troubleshoot conflicts, document site setup, or analyze plugin requirements.
snn/list-taxonomiesdeclares nothingCRITICAL DISCOVERY TOOL: Lists all registered taxonomies on the site with slug (required for get-terms/create-terms), singular/plural names, hierarchical status (true for category-like, false for tag-like), public visibility, associated post types, and term count. Can filter by public taxonomies only or by post type association. ALWAYS call this FIRST when working with taxonomies if you don't know the exact taxonomy slugs - never guess taxonomy names. Built-in taxonomies are "category" and "post_tag", but sites often have custom ones like "product_cat", "course_category", "portfolio_tag". Returns sorted list by label.
snn/search-contentdeclares nothingPerforms full-text search across WordPress content (posts, pages, custom post types) matching query against titles and content. Returns post ID, title, post type, permalink, excerpt (20 words), publication date, plus total found count and returned count. Can limit to specific post type or search all ("any"), supports pagination with limit/offset (max 100 per request), searches any post status. Use this to find posts by keyword, locate specific content, search across all content types, or build search functionality. Returns relevance-ordered results matching WordPress default search behavior.
snn/suggest-content-ideasdeclares nothingAnalyzes existing categories and tags to identify content gaps and generate strategic content suggestions. Finds empty or underutilized categories/tags (below threshold), identifies popular topics, suggests cross-referencing popular categories with underused tags, and prioritizes opportunities. Returns gap analysis (empty vs underutilized), suggestion list with priority levels (high/medium), popular topics rankings, and analysis summary. Use this for content strategy planning, editorial calendar ideas, identifying neglected topics, balancing content coverage, or finding new angles by combining popular and underused topics.
snn/update-postdeclares nothingUpdates an existing post by ID with new title, content (HTML supported), status (draft/publish/pending/private), or excerpt. All fields are optional - only provided fields will be updated. Automatically sanitizes input and preserves unchanged fields. Returns post ID, success status, updated permalink, and last modified timestamp. Use this to edit existing content, change post status, update excerpts, revise posts, or programmatically modify content. Requires post ID - use get-posts or search-content to find posts first if ID unknown. CRITICAL: When updating content, use valid HTML with ALL tags properly closed to prevent broken blocks: - Good: <h2>Updated Section</h2><p>New content here.</p><ul><li>Item 1</li><li>Item 2</li></ul> - Bad: <p>Unclosed tag <h2>Title (will cause block recovery errors) See includes/ai/docs/block-generation-rules.md for guidelines.
snn/update-post-metadatadeclares nothingUpdates metadata (title, excerpt, status, categories, tags, featured image) for a WordPress post or page. Does not modify the main content. Use this to change post settings, update SEO excerpts, change publication status, assign categories/tags, or set the featured image. Supports both post and page types.
Nothing matches. The filters are combined, not alternatives.
Captured 2026-08-02 with cwp abilities --json against Bricks 2.4-beta2 on WordPress 7.0.2. The classification is computed from the annotations rather than stored, so the counts above and the badges below cannot disagree.