Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Before writing, call nucleo-guide and follow the phases in order. It reads the state of the site and returns the rules, the tools and the exit conditions of the current phase. nucleo-site-describe describes the site, the design tokens and the document constraints. Everything goes through Nucleo: no mu-plugins, no code in functions.php or in the theme, no CSS or scripts in wp_head. When Nucleo cannot do something, tell the user it is a Nucleo gap; site PHP goes only in a component (nucleo component new), with the user's consent.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
nucleo-site-describeA

Name, URL, language, date and time formats, environment type, Nucleo version, breakpoints, tokens, available blocks, number of documents, and the content types and taxonomies with registeredBy: nucleo-model (declared with model-set), wordpress, plugin-or-theme (registered by another plugin or the theme; modeled = true when a Nucleo field group targets it), or conflict (declared in the model but registered first by other code). Only the types the current user can edit. warnings lists site settings that make the pages look wrong (language pack missing, English date format on a site in another language). cache.empty is true when the Nucleo cache misses tokens or layouts: run cache-rebuild. layouts lists the published layouts with area and number of conditions. plugins lists the detected integrations (woocommerce, polylang, wpml, yoast, rankmath, acf).

nucleo-catalog-listA

List of Nucleo blocks with title, category and short description. The full manifest, with style keys, HTML and base CSS, is read with nucleo/catalog-get {name}. Rules that no manifest holds are read with nucleo/catalog-get {topic}: documents (node format, ids, section parameters), tokens, styles (with the style groups of every block), bindings, visibility, data, theme, site-files, acknowledge, components.

nucleo-catalog-getA

With name: full manifest of a Nucleo block (content, settings, supports, allowed children, hints for the AI), the style keys of its groups with CSS property and allowed values, its HTML markup, its base CSS and an example node built from its required content and settings. With names (up to 20): a compact entry per block, without base CSS; the style keys of all their groups appear once in styleKeys. The response stays under 25,000 characters: names that do not fit are listed in remaining, to request in a second call. With topic: reference rules that are not in any manifest: documents, tokens, styles, bindings, visibility, data, theme, site-files, acknowledge, components, model, layouts, woocommerce.

nucleo-doc-listA

List of Nucleo documents with id, title, status, revision, link and quality (last check). Filters: post type, text search, status, quality, page.

nucleo-doc-getA

Nucleo document in compact form (default) or in full (format "full": the stored document unchanged), whole or only a subtree (nodeId), with a maximum depth (depth, compact only). Also returns the revision: pass it as baseRevision to doc-patch, which refuses with conflict if the document changed since.

nucleo-doc-validateA

Validates a document without saving it: schema errors and, if the document is valid, a quality report. A page or post is checked inside the site layouts it will receive (header, footer, single/product layout of postType), as doc-create does: a duplicate h1 in the header counts.

nucleo-quality-checkA

Quality report (SEO, accessibility, performance) of a saved document (postId or url of its page) or of one passed as input (document). A document without postId is checked inside the site layouts of postType (default page), as doc-create does. Issues acknowledged with acknowledge do not block.

nucleo-doc-revisionsA

List of a document's revisions: number, time, author (WordPress user), client (agent id, "" for people) and summary of the nodes changed from the previous revision ("+added ~changed -removed"). The content of the revisions is included only with withDocs. To go back to a revision, use nucleo/doc-rollback.

nucleo-tokens-getA

Current design tokens of the site (colors, typography, spacing, etc.), grouped by category.

nucleo-statusA

Nucleo, PHP and WordPress version, artifact store driver, number of documents, artifacts (count and total bytes of the current artifact folder), queue (pending rebuilds), failed (rebuilds that failed, with attempts and error), stale (ids of documents with a stale section or quality issues, max 50) and lastBuild (time of the newest artifact, null when there are none). After a plugin update every document is queued once, so queue counts all of them until the rebuild ends; a document that cannot be rebuilt (invalid, or blocking quality issues on a published post) keeps its previous HTML and appears in stale or failed.

nucleo-doc-previewA

Compiles a document without saving it and returns HTML and CSS. Accepts document or postId. With contextPostId the dynamic slots (woo/*, bindings) are filled as on the page of that post: use it to see a product layout on a real product.

nucleo-doc-textsA

All translatable texts of a document, as node id, field path and text, without structure. Also returns the revision to pass to nucleo/doc-texts-set.

nucleo-layout-listB

Nucleo layouts with area, conditions and status, plus priority conflicts in the map.

nucleo-layout-explainA

For a URL, shows for each area the resolved layout and the key that chose it (matched) with a readable rule, or null. If a layout is excluded for that URL, the area reports excluded with the layout and the rule (by). Areas product and product-archive exist only with WooCommerce, on a product and on the Shop or a product archive; elsewhere they are null. They win over single and archive (search also wins over archive): the losing area reports superseded with the winning area. applied is what the page really prints, area → layout id, after the page settings and document layout "none": read it before editing a layout. postId is the post of the URL (url_to_postid, 0 if none), keys are the request keys tried, conflicts are the priority conflicts of the map (as in layout-list).

nucleo-audit-listB

Latest writes performed by the abilities, with ability, outcome and summary.

nucleo-mail-logA

Emails of Nucleo (one-time codes, form emails) written to the development mail log instead of being sent: on local sites, or on development sites with NUCLEO_DEV_MAIL true; never on staging or production. Other WordPress emails are not logged. Newest first; empty when the log is off. Entries older than 24 hours are dropped. body is cut to 5000 characters.

nucleo-bind-fieldsA

Fields of the content type a block can bind to: Nucleo model fields, WordPress meta, ACF, Meta Box and sources added by the filter. "writable" says whether content-upsert can write the field: only source nucleo (fields of the Nucleo content model) is writable; the others are read-only for Nucleo and "readOnly" says why. Edit those fields in the plugin that owns them: declaring the same key in model-set would replace its registration and value format.

nucleo-section-listA

Reusable sections with their parameters and the number of documents that use them. Check here before creating a section.

nucleo-docs-searchA

Searches the reference topics (nucleo/catalog-get with topic) and the block manifests by terms, and returns the best matches ranked by term matches: topic or block, title and excerpt. Use it when the topic or block name is unknown.

nucleo-doc-createA

Creates a page, post, layout or section from a Nucleo document; without postType the type follows document.kind (layout and popup: nucleo_layout, section: nucleo_section). With postId it attaches the document to an existing content without a Nucleo document; on a published content an OAuth token also needs the scope nucleo:publish. The slug comes from slug, document.wp.slug or document.meta.slug, then from the title, also for drafts; a taken slug gets a suffix and a warning. Quality is checked on the page composed with the site layouts it will receive (header, footer, single or product layout), also for a new content: an h1 in the header counts. With publish true it publishes, but blocking quality issues require acknowledge. With dryRun true it does not save. Returns postId, revision and slug.

nucleo-doc-patchA

Applies patch operations to an existing document. baseRevision must match the current revision, otherwise it returns conflict. With dryRun true it does not save.

nucleo-doc-publishB

Publishes the current document. Blocking quality issues require acknowledge.

nucleo-doc-rollbackA

Restores a previous revision of the document. The restore creates a new revision: the history is not lost.

nucleo-tokens-setA

Edits the design tokens (groups color, space, text, font, radius, shadow, container). Only the values to change are sent; they are merged with the saved tokens and the defaults; null removes a key (back to the default, or gone if the key is new). A new key extends a scale: {"space": {"20": 6}} creates $space.20 (keys: lowercase letters, digits and -, at most 48 per group). Units: space and text in rem, text as [minRem, maxRem], container as integer px. Invalid values or unknown groups return invalid_tokens. The result lists the contrast problems the new tokens cause in published documents (up to 50). Full rules: nucleo/catalog-get {"topic": "tokens"}.

nucleo-cache-rebuildA

Rebuilds the documents listed in postIds, or all documents. Up to 20 are rebuilt right away, the rest goes to the background queue. Creates no new revisions. Also republishes tokens, asset rules, layouts and the content model from the database: use it when site-describe reports an empty Nucleo cache. A document that cannot be rebuilt (invalid, or blocking quality issues on a published post) keeps its previous output: see nucleo/status stale and failed.

nucleo-media-importA

Downloads a public image from an https URL and adds it to the media library, with alt text. Accepts only jpeg, png, webp, gif and avif, up to 10 MB.

nucleo-doc-texts-setA

Rewrites in bulk the texts of a document, identified by node id and path received from nucleo/doc-texts. Other fields and the structure do not change. baseRevision must match the current revision, otherwise it returns conflict.

nucleo-fonts-importA

Downloads a Google Fonts family locally (woff2 in uploads) and makes it available to the tokens. Replaces the same family already imported. Network or format errors return ok false.

nucleo-assets-rules-setB

Replaces the asset deduplication rules (dequeue, defer, replace) and republishes the table. Invalid rules are ignored.

nucleo-quality-scanB

Checks all published documents in batches: duplicate title and h1, orphan pages without internal links, breadcrumbs duplicated by the SEO plugin, sections repeated with different visibility. Returns the site issues, the SEO, accessibility and performance scores of the pages in the batch, the rules with their severity (rules), the number of pages with blocking errors (errorPages) and the next page (next).

nucleo-site-exportA

Returns the site as a map of JSON files: site.json, pages, posts, layouts, sections, rules. References between documents are readable symbols (page:slug, section:slug).

nucleo-site-importA

Imports the files produced by nucleo/site-export: creates or updates tokens, sections, pages, posts, layouts, rules, media, menus and site settings (title, tagline, homepage, language). With dryRun true it validates every document like a real import (schema and blocking quality issues) without writing. With force true it also imports the posts, tokens and site settings modified on the site after the export; with force as a list of file paths (e.g. ["pages/home.json"], "site.json" for tokens and settings) only those files. acknowledge carries the blocking issues a human has accepted, per file. The report returns the new base (base, tokensBase) to write into site.json. Quality is checked on the page composed with the site layouts it will receive (header, footer, single or product), also for new pages. Pages and posts are imported before layouts, because layout conditions refer to them (page:): a page is checked against the layouts already on the site, not those of the same import. content/ and terms/ files are not handled here: they go to content-upsert and terms-set.

nucleo-critical-setA

Saves the critical CSS of a template. The CSS is stripped of "</style" and limited to 50 KB.

nucleo-layout-conditions-setA

Replaces the include, exclude and priority conditions of a layout. The rest of the document does not change. Each condition is {"type", ...keys of the type}, e.g. {"type": "post_type", "value": "prodotto"} or {"type": "post", "value": 12}; unknown types or keys are refused with code layout_condition and the expected format. All types: nucleo/catalog-get topic layouts. baseRevision, if provided, must match the current revision, otherwise it returns conflict. On a published layout an OAuth token also needs the scope nucleo:publish, besides nucleo:design.

nucleo-settings-getB

Nucleo settings: editor, performance, CSS purge mode, font subsets, quality rules, captcha of the native forms (provider, siteKey, secretSet, threshold), onboarding state of the current user, and the detected integrations.

nucleo-settings-setA

Saves Nucleo settings. Partial: groups and keys left out are kept. Every value is checked before anything is written. The captcha secret is write-only and is never returned.

nucleo-model-getA

Returns the saved content model (post types, taxonomies, field groups), how many items use each part, and "unmodeled": the post types and taxonomies of the site that the model does not declare, with registeredBy (wordpress, or plugin-or-theme: registered by another plugin or the theme, so model-set cannot declare that slug; it can add a field group to it). Model format: catalog-get {topic: model}.

nucleo-model-validateA

Checks a content model without saving it, with the same rules as model-set (postTypes, taxonomies or fieldGroups not sent keep their saved value). Returns the errors and the differences from the saved model. Nothing is written. Format: catalog-get {topic: model}.

nucleo-model-setA

Saves the content model. Format: {"schema": 1, "postTypes": [{"slug", "singular", "plural", "public"?, "hasArchive"?, "rewrite"?, "supports"?, "icon"?}], "taxonomies": [{"slug", "singular", "plural", "postTypes"?, "hierarchical"?, "public"?}], "fieldGroups": [{"id", "title", "location": {"postType"} or {"taxonomy"}, "fields": [{"key", "type", "label", ...}]}]}. "singular" and "plural" are the labels. Partial save: postTypes, taxonomies and fieldGroups that you do not send stay as saved; a key you send replaces the whole list (send [] to empty it). Slugs: lowercase, post types max 20 characters, taxonomies max 32; reserved_slug = a WordPress slug (post, page, category, wp_...) or a type registered by another plugin or the theme (model-get "unmodeled" shows them: add a field group to them instead). Every rule is checked before anything is written. Destructive changes need their ids in "confirm". With "dryRun" nothing is written. Full rules and field types: catalog-get {topic: model}.

nucleo-fields-getA

Returns the field definitions and the saved values of a post (postId) or a term (termId). A field without a value is null. "hash" is the hash of the values: pass it as "base" to fields-set, which then saves only if the values did not change since.

nucleo-fields-setA

Saves field values of a post (postId) or a term (termId). Partial: keys left out are kept. An empty value clears the field. Every value is checked before anything is written. With "base" (the hash from fields-get), nothing is written if the values changed since: error code "conflict". Success returns the new "hash".

nucleo-media-uploadA

Uploads an image sent as base64 to the media library, with alt text. Accepts only jpeg, png, webp, gif and avif, up to 10 MB. An identical file already in the library is returned without uploading it again.

nucleo-menu-listA

Lists the navigation menus with their items. Items use the same format as nucleo/menu-set: {label, page | post | url | ref, children}; ref is "home", "archive:", ":" or "term:/". Read only.

nucleo-menu-setA

Creates or updates a navigation menu by slug and replaces all its items. Each item is {label, page | post | url | ref, children}: page and post take the slug of a published page or post; ref points to other targets: "home", "archive:", ":" (a published post, hierarchical slugs as paths), "term:/"; url is only for external links; children are nested items, up to 3 levels deep. Existing items are removed. If a target is not found, nothing changes.

nucleo-site-options-setB

Saves the site title, tagline, homepage, posts page, date and time formats, the business shown in the structured data, the site icons and the modern image formats (avif, webp). Pages are given by slug and must be published. Every value is checked before anything is written.

nucleo-icons-setA

Adds, replaces or removes site icons for nc/icon and leaves the others as they are. set: name (a-z, 0-9, -) → SVG markup; remove: names. A site icon with the name of a built-in icon (phone, close, chevron-down...) replaces it everywhere, also inside nc/menu and nc/list. Colors become currentColor; scripts, styles, links and unknown elements are removed. At most 300 icons. To import a folder of SVG files or icons of a library (mdi:car, lucide:truck) use the CLI: nucleo icons import , nucleo icons add prefix:name.

nucleo-gap-reportA

Call this whenever Nucleo cannot do what the design needs, before any workaround. need: what is missing (1-500 characters). block: the nc/... block concerned, if any. workaround: what you did instead (at most 1000 characters); the workaround goes in style.custom of the node, never in mu-plugins, theme code or wp_head. page: the page concerned (at most 200 characters). Repeating the same block and need increases the count.

nucleo-media-formatsA

Generates the modern image formats (avif, webp) enabled in the site options for images already uploaded, the originals and their intermediate sizes. Images uploaded after the option was turned on get them automatically. Without ids it works on the image attachments in ID order, up to limit. Use missing to process only the images without formats. Returns the images done and how many images are still without formats.

nucleo-gap-listA

Things the design needed that Nucleo could not do, reported with gap-report: need, block, workaround, page, count (times reported), first and last date (Y-m-d). Newest first.

nucleo-components-listA

Lists the data sources and actions registered by site plugins (hook nucleo/register_components): names and schemas, never code. Use them in nc/collection (source "component") and nc/native-form (action "component"). Component blocks are registered with nucleo/register_blocks and appear in catalog-get. To write a component: nucleo component new data-source|action|block.

nucleo-content-listA

Lists content items of the allowed content types, paginated. Without "full" each item is a summary with id (pass it as contextPostId to doc-preview). With full each item is complete and has "hash": pass it as "base" to content-upsert, which then saves only if the item did not change since; the item can be sent back as it is (hash, id and protected are ignored). product items are listed read-only: content-get and content-upsert do not handle them. Trashed items are never listed.

nucleo-content-getA

Returns one content item by type and slug, with all its keys and "hash": pass it as "base" to content-upsert, which then saves only if the item did not change since. The item can be sent back to content-upsert as it is (hash, id and protected are ignored). Returns not_found when no item has that slug, read_only_type for product (listed by content-list, never read or written here).

nucleo-content-upsertA

Creates or updates content items by type and slug, and trashes items with status "trash". An item identical to the saved one is not written and reports action "unchanged" (counted in unchanged). An item with errors writes nothing; the others go on. With "dryRun" nothing is written.

nucleo-terms-getA

Returns the taxonomies the content API manages. With "taxonomy", also returns its terms, parents before children. Each term has a "hash" of its content: pass it as "base" to terms-set, which then saves only if the term did not change since.

nucleo-terms-setA

Creates or updates the terms of a taxonomy by slug. Partial: keys left out are kept. Terms are never deleted. A term identical to the saved one is not written and reports action "unchanged". A term with errors writes nothing; the others go on. A term with "base" (the hash from terms-get) that changed since is not saved: error code "conflict".

nucleo-guideC

Phase of the site guide: state of the site, rules of the phase, open tasks and exit conditions. Call it before writing, then follow next.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 56 tools

Disambiguation3/5

Individual descriptions are unusually detailed and often disambiguate neighbours, but real boundaries are fuzzy in several clusters: doc-validate / quality-check / quality-scan / doc-preview all answer 'is this document OK?', and settings-get vs site-describe vs site-options-set overlap on site configuration readout. The parallel 'documents' vs 'content items' APIs (doc-list/get/patch vs content-list/get/upsert) also force an agent to know which layer to use.

Naming Consistency4/5

Nearly everything follows nucleo-<resource>-<verb> (doc-list, layout-conditions-set, tokens-set, media-formats), which is predictable. Minor deviations exist: bind-fields is verb-first, status has no verb, and assets-rules-set nests two nouns, but the pattern stays readable throughout.

Tool Count2/5

56 tools is far above the sensible band, even for a full site-building platform. Most families are individually justified (tokens, model, layouts, media, menus, content), but the surface is broad enough that an agent must navigate many near-adjacent entry points to accomplish one task.

Completeness4/5

Coverage of the domain is strong: documents with revisions and rollback, publish gating, layouts/conditions, content model, fields, terms, menus, media, icons, settings and import/export are all present. The notable gap is deletion: there is no doc-delete or trash operation for documents or menus (only content-upsert's status 'trash'), leaving a lifecycle dead end.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues