Blocks and site designPro
GenerateBlocks MCP: compose valid blocks from the live schema
This GenerateBlocks MCP layer is deliberately narrow. It tells an agent which generateblocks/* and generateblocks-pro/* blocks this install registers and what attributes, parents and block context each one expects. The blocks themselves are written by GoBuildWP's Gutenberg review queue and validated in your browser, and the page's stylesheet is something the agent has to check afterwards, because a structurally perfect block can still render with no styles.
GoBuildWP Pro supplies these reads. GenerateBlocks Free or Pro supplies the installed blocks; its own edition gates remain separate.
Add a six-post grid of our latest articles under the intro on the Resources page, using GenerateBlocks, with the headline and excerpt of each post.
wppilot/generateblocks-check-setupReadReports both plugins' presence and the block count per namespace; with Pro absent, per-item fields come from shortcodes rather than dynamic tags.
wppilot/generateblocks-get-block-schemaReadRead for query, looper and loop-item: looper must sit inside query, loop-item inside looper, and the query block exposes a WP_Query args object.
wppilot/gutenberg-get-contentReadReturns the Resources page's current tree so the loop can be placed after the intro block without disturbing it.
wppilot/gutenberg-add-pending-changeConfirm firstQueues the nested spec with posts_per_page set to 6, each block carrying css computed from its styles.
wppilot/gutenberg-enable-batch-finalizationConfirm firstMarks the batch ready; opening the queue page lets Gutenberg validate and save the blocks.
wppilot/execute-phpConfirm firstOne isolated call regenerates the Resources page's GenerateBlocks stylesheet, because finalising does not rebuild it. execute-php needs the Developer Full Access profile, the WordPress capability behind it and its own confirmation; where that is not allowed, re-saving the page once in the block editor is the manual route.
wppilot/verify-rendered-pageReadFetches the page as a visitor and reports the items that rendered and the colours and fonts the served HTML carries. That shows the styles reached the page, not how it looks; check it in a browser at desktop and mobile widths before calling it done.
- Edition
- Pro
- Abilities
- 3
- Requires
- WordPress 6.9+, PHP 8.0+
Data model
Blocks in post_content, styles compiled to a file
GenerateBlocks has no settings bag of its own worth editing: a section is a generateblocks/element block with its attributes serialised into the post's post_content, like any core block. The vendor describes the output as static HTML and CSS, with minimal CSS generated only for the blocks a page uses. Free blocks sit in the generateblocks/ namespace; GenerateBlocks Pro registers its accordion, tabs, carousel, navigation and site-header families under a separate generateblocks-pro/ namespace, which is how the check-setup ability can count the two editions apart.
Styling is the part that catches agents out. Each block carries a styles object, and only the GenerateBlocks editor compiles that into the css attribute. The GoBuildWP skill therefore tells the agent to compute css itself, because a block queued without it saves correctly and renders bare. Finalising a batch also does not rebuild the per-post stylesheet under uploads/generateblocks/, so the skill regenerates it with one isolated execute-php call per post; batching several posts in one run leaks CSS between them through GenerateBlocks' per-request state.
Worked example
A latest-posts grid built as a GenerateBlocks query loop
Expected outcome to verify on the installed stack; this sequence has not been recorded as a runtime test.
The page gains a native GenerateBlocks loop that editors can keep changing in the block editor. It stops at finalisation if the queue page is not open, and it can finish looking unstyled if the stylesheet was not regenerated, which is why regeneration and a rendered check come last.
After browser finalization, regenerate each post’s GenerateBlocks stylesheet separately and inspect rendered styles. If using execute-php, review its separate WordPress capability, Developer Full Access profile and confirmation requirements; this is outside the three GenerateBlocks module reads.
generateblocks-check-setupReports both plugins' presence and the block count per namespace; with Pro absent, per-item fields come from shortcodes rather than dynamic tags.
generateblocks-get-block-schemaRead for query, looper and loop-item: looper must sit inside query, loop-item inside looper, and the query block exposes a WP_Query args object.
gutenberg-get-contentReturns the Resources page's current tree so the loop can be placed after the intro block without disturbing it.
gutenberg-add-pending-changeQueues the nested spec with posts_per_page set to 6, each block carrying css computed from its styles.
gutenberg-enable-batch-finalizationMarks the batch ready; opening the queue page lets Gutenberg validate and save the blocks.
execute-phpOne isolated call regenerates the Resources page's GenerateBlocks stylesheet, because finalising does not rebuild it. execute-php needs the Developer Full Access profile, the WordPress capability behind it and its own confirmation; where that is not allowed, re-saving the page once in the block editor is the manual route.
verify-rendered-pageFetches the page as a visitor and reports the items that rendered and the colours and fonts the served HTML carries. That shows the styles reached the page, not how it looks; check it in a browser at desktop and mobile widths before calling it done.
Abilities
Three read-only lookups, and the queue that does the writing
| Ability | What it does here | Undo and limits |
|---|---|---|
generateblocks-check-setupgenerateblocks-list-blocks | Confirms the free plugin and Pro are active, then lists every registered block with its title, family, whether it is dynamic and its parent or ancestor hints, so the agent picks names that exist on this version instead of from memory. | Read-only and side-effect free. If GenerateBlocks is inactive, its blocks are unavailable; inspect the other registered blocks before composing the page body. |
generateblocks-get-block-schema | Returns one block's attribute map straight from WP_Block_Type, with defaults, nesting constraints and the context keys it reads, such as a loop-item reading the query context. | Types and defaults only; allowed string values are not enumerated, so the skill prefers a block's declared default over a guess. |
gutenberg-get-contentgutenberg-add-pending-changegutenberg-enable-batch-finalization | Snapshot the post's block tree, queue the composed block_spec, and mark the batch ready so the Block Editor Queue page runs Gutenberg's own validator on it in a browser. | The server checks only the spec's shape. A wrong block name or attribute type surfaces at browser finalisation, not when the change is queued. |
Reference: /docs/reference/generateblocks
Documented source abilities; live registration can be narrower. Edition and effect labels describe the source catalogue. The installed schema, dependency versions, licence, WordPress capability, safety profile and per-ability policy determine availability; labels alone do not prove confirmation or recovery.
Read example: wppilot/generateblocks-get-block-schema
Discover this ability and its live schema first. The input below illustrates a bounded read from the source declaration; replace the example ID or name with an object returned by your site. It is not a recorded execution result.
| Parameter | Type and meaning |
|---|---|
name required | string. Full block name, e.g. "generateblocks/element" or "generateblocks-pro/accordion-toggle". Must be in the `generateblocks/*` or `generateblocks-pro/*` namespace. |
{
"name": "replace-with-a-block-name-from-list-blocks"
}Input and output schema from the plugin source
1 input field. Required: name. Optional parameters can affect response size and object selection.
{
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Full block name, e.g. \"generateblocks/element\" or \"generateblocks-pro/accordion-toggle\". Must be in the `generateblocks/*` or `generateblocks-pro/*` namespace."
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"family": {
"type": "string",
"enum": [
"free",
"pro"
]
},
"category": {
"type": "string"
},
"is_dynamic": {
"type": "boolean"
},
"attributes": {
"type": "object",
"description": "Map of attribute name -> JSON Schema as declared by the block. Pass the values you want under this key when building the `attributes` field of a block_spec for gutenberg-add-pending-change."
},
"parent": {
"type": "array",
"items": {
"type": "string"
},
"description": "Allowed direct parents. Empty list = no constraint."
},
"ancestor": {
"type": "array",
"items": {
"type": "string"
},
"description": "Required ancestor (anywhere up the tree). Empty list = no constraint."
},
"uses_context": {
"type": "array",
"items": {
"type": "string"
},
"description": "Block-context keys consumed from ancestors."
},
"provides_context": {
"type": "object",
"description": "Block-context keys this block exposes to its descendants. Map of context-key -> attribute-name."
},
"supports": {
"type": "object",
"description": "WP block supports map (align, anchor, etc.)."
},
"error": {
"type": "string"
}
},
"required": [
"name",
"title",
"family",
"category",
"is_dynamic",
"attributes"
]
}
}Source: wppilot-pro/includes/wppilot-abilities/wppilot-generateblocks/wppilot-get-block-schema.php
A successful read should identify the requested object and expose the structure described by the output schema. Compare it with the native editor before proposing a change. Troubleshoot missing or refused operations.
Limits
What the GenerateBlocks module will not do
- The module has no GenerateBlocks write ability. Free Gutenberg composition needs the authorized browser finalizer; server-rendered checks are distinct from actual browser layout and interaction checks. A working-copy publish has recovery only when a supported before-image was captured.
- There are no write abilities in this module. Global styles, the pattern library and plugin settings are not read or changed; composition goes only through the Gutenberg queue.
- Pro blocks lose their own css attribute when GenerateBlocks builds the dynamic stylesheet, so the skill styles the nearest generateblocks/element wrapper instead.
- Two shapes are recorded validation caveats requiring a supported-release fixture check: a text block given a custom className inside htmlAttributes, and an element with a heading tagName plus inner blocks.
- Custom properties can reach the stylesheet as a literal u002du002d instead of two hyphens; inspect the generated stylesheet for this release-scoped diagnostic. A repair is separate authorized developer work, not a guaranteed action by the skill.
- Queued block content has no before-image in the change ledger. For a published page, use a working copy and inspect the publish recovery contract; supported before-image capture can provide undo, while accept_irreversible explicitly permits publishing without usable recovery. Shared site-wide settings remain separate.
Other plugins
Themes and GenerateBlocks
- The vendor says GenerateBlocks works hand in hand with GeneratePress but is built for any theme. On a GeneratePress site, theme chrome, Elements and hooks belong to the separate GeneratePress module, and its setup check reports whether GenerateBlocks is present.
- GenerateBlocks stores ordinary post content under other themes too. Inspect theme-specific styles, templates, palette and font presets, then verify the rendered page and interactions on the installed stack.
Questions
GenerateBlocks questions
Can Claude build a GenerateBlocks page without me opening WordPress?
Not entirely. Static third-party blocks are serialised by their own editor JavaScript, so the batch finalises in the Block Editor Queue page in a logged-in browser. The agent can watch that page's status and tell you when to open it.
Why did my AI-built GenerateBlocks section render with no styling?
Usually because the block was queued with styles but no compiled css, or the per-post stylesheet was not rebuilt after finalisation. Finalisation proves the tree saved, not that it looks right.
Does the agent see GenerateBlocks Pro blocks?
Yes, when Pro is active: list-blocks can filter by family, and the Pro namespace is separate from the free one, so the two never get confused.
Will it reuse the global classes from my GenerateBlocks design system?
The skill tells it to read existing blocks first and reuse the classes and style tokens you already defined, and to avoid inline style except for genuine one-offs.
Where these facts come from
GoBuildWP behaviour is taken from the plugin source and the ability reference; third-party details from the vendor documentation below, checked by the GoBuildWP team.
GenerateBlocks is a separate product; no partnership or endorsement is implied.