Browse documentation +
Getting startedInstallationConnect a clientSafety profilesWordPress ChatPro licensingAntigravity CLIAntigravity IDETroubleshootingOAuth 2.1 setupApplication PasswordsPage builder workflowsLedger and rollbackApprovals and memoryAbility reference
Pro module33 abilities

Elementor

These abilities register when Elementor is detected on the site and a Pro licence is active. If either is missing the module stays absent rather than failing at call time.

At a glance

Elementor registers 33 abilities: 10 that only read, 15 that write, and 8 marked destructive. That split is the practical answer to how much of this module can run unattended. Reads cost nothing and are safe to repeat, so discovery is the part to be generous with; the writes are where review belongs, and the destructive calls stop for an explicit confirmation every single time regardless of which profile is active.

What this module is for

Let an AI client inspect Elementor documents and work with elements, schemas, dynamic tags, global classes, variables, and design tokens through WPPilot Pro.

Before you rely on it: Preview responsive behavior and clear only the relevant document cache after a reviewed edit.

Typical workflows

  • Audit a landing page before changing its structure
  • Apply a shared class or design token across related elements
  • Build a section from schema-aware Elementor elements

The Elementor integration page covers the same module from the workflow side, with the capability map and the questions worth asking before a first write.

Availability on your site

The Elementor module needs three things at once: WPPilot Free as the MCP foundation, an active Pro licence, and the companion plugin detected on the site. Miss any one and the module does not register, which is deliberate: an ability that appears in the tool list but fails at call time is worse than an ability that was never offered. What the connected agent can actually call is then narrowed twice more: by the safety profile active on the site, and by the WordPress capabilities of the user behind the credential. A read that succeeds for an administrator can be absent entirely for an editor.

Every write these abilities perform is recorded in the change ledger, and destructive calls can be routed through the approval queue so a person signs off before anything is applied. A successful tool result means the operation returned, not that the front end, the cache, and every dependent template are correct: that still needs a look.

Reads

Available in every safety profile, including Read Only. Inspection costs nothing and is not rate limited.

AbilityWhat it does
wppilot/elementor-check-setupCheck Elementor SetupReports the Elementor environment: core version, Pro version, whether the v4 atomic runtime is available (and its sub-features: style schema, global classes, variables, interactions), active kit values (container_width, container_padding, enabled breakpoints), and a list of detected configuration issues. Call this BEFORE a conversion so you know which features to rely on.
wppilot/elementor-get-contentGet Elementor ContentReads the Elementor document tree for a post. Output is COMPACT by default — a structural skeleton with only element ids, types, widget types, and children (no settings). The skeleton is small (typically a few hundred tokens) and is the right first call for tasks like "remake this page", "edit a widget", "understand the layout". After the skeleton, drill into the widget you care about with element_id:"<id>" — you get back that subtree (plus children) with full settings, cheaply. Do NOT pass full_dump:true unless you genuinely need every widget's settings at once (e.g. cloning the entire page verbatim or running a full audit); for every other use case it wastes thousands of tokens on data you will not use.
wppilot/elementor-get-dynamic-tagGet Elementor Dynamic TagReads the configuration of a single Elementor Dynamic Tag by name. Returns its controls (the parameters the tag accepts) so the caller can know what to pass in tag_settings when applying it.
wppilot/elementor-get-style-schemaGet Elementor v4 Style SchemaReturns the authoritative Elementor v4 atomic-widgets Style Schema — CSS property → prop-type descriptor. v4-ONLY: governs Global Classes, atomic widget base styles, and style variants. Does NOT apply to legacy v3 widgets (use wppilot/elementor-get-schema for those). Progressive disclosure: the full schema is ~35KB (60+ properties); prefer overview:true for a flat {property: prop_kind} discovery view, or properties:["gap","padding",...] to get detailed descriptors only for the props you plan to write. Per property, lists the prop kind (size, color, string, number, union, dimensions, background, box-shadow, …), the enum values when applicable, and for union / object props the nested alternatives.
wppilot/elementor-get-variableGet Elementor Global VariableReads a single Elementor v4 Global Variable by its id. Returns id, label, type, and value.
wppilot/elementor-list-dynamic-tagsList Elementor Dynamic TagsLists Elementor Dynamic Tags registered on this site (core, Pro, third-party). Each entry includes name, title, group, categories, content_type, and a flag whether the tag requires settings. Returns the list of tag groups too so you can pick a group and drill into its tags by name. Progressive disclosure: the full list is ~4KB (38+ tags); prefer group: "post" (or any registered group) or categories: ["url"] to filter server-side when you know what you're looking for.
wppilot/elementor-list-global-classesList Elementor Global ClassesLists every Elementor v4 Global Class registered on this site. Returns each class's id, label, type, and style variants.
wppilot/elementor-list-interactionsList Elementor InteractionsLists every interaction (animation, hover effect, scroll effect) attached to a specific atomic widget on a page. Returns each interaction with its trigger, effect, type, direction, duration, delay, and easing.
wppilot/elementor-list-v3-stylesList Elementor v3 Global StylesLists every Elementor v3 Global Color and Global Typography stored in the active Kit. Returns four arrays: system_colors, custom_colors, system_typography, custom_typography.
wppilot/elementor-list-variablesList Elementor Global VariablesLists every Elementor v4 Global Variable (design token) defined on this site. Each entry includes id, label, type (color / font / size), and value.

Writes

Gated by the active profile and your WordPress capabilities. Rate limited to 120 per minute per credential.

AbilityWhat it does
wppilot/elementor-add-interactionAdd Elementor InteractionAdds an interaction (animation, hover effect, scroll effect) to an atomic widget. Required: trigger (load/scrollIn/scrollOut/scrollOn/hover/click) and effect (fade/slide/scale/custom). Optional: type (in/out), direction, duration, delay, easing.
wppilot/elementor-apply-dynamic-tagApply Elementor Dynamic TagAttaches an Elementor Dynamic Tag to a specific setting on a widget on a page. Validation runs server-side: if the target element does not exist, its widget type is unknown, or setting_name is not a real control on the widget the call fails HARD with the compact schema of the target widget INLINE in the error so you can correct and retry. Auto-detects v3 vs v4 atomic format and writes the appropriate shape.
wppilot/elementor-apply-global-classApply Elementor Global ClassAttaches an existing Elementor v4 Global Class to an atomic widget on a page. Validation runs server-side: if the target element does not exist, is not an atomic widget, or does not expose a "classes" control the call fails HARD with the compact schema of the target widget INLINE in the error so you can correct and retry. Global Classes are a v4-only concept; v3 widgets cannot accept them.
wppilot/elementor-clear-document-cacheClear Elementor Document CacheClears Elementor Pro's rendered-element cache (the _elementor_element_cache post meta) for one or more documents, so the next front-end view rebuilds the HTML from the live element tree and dynamic content instead of serving stale cached output. Elementor checks this cache before applying render filters, so a template cached in one context can otherwise keep showing on other pages. Pass post_ids as the document ids to clear, including any nested template ids (each template caches independently of its parent). Use after editing a template or its dynamic bindings when a change is not appearing on the front end. Elementor rebuilds the cache on the next render, so this is non-destructive.
wppilot/elementor-create-atomic-widgetCreate Elementor Atomic WidgetCreates or regenerates an Elementor v4 ATOMIC widget (PHP class + Twig template + loader) as a mu-plugin. This ability only targets atomic (v4) widgets — it does not generate legacy v3 widgets. IMPORTANT: before creating a new widget, use wppilot/elementor-get-schema action "list" to check if a similar widget already exists in Elementor core, Pro, or third-party plugins. Styling surfaces: "base_styles" emits Style-tab-editable defaults (maps to define_base_styles() — same shape as wppilot/elementor-create-global-class's "styles", validated against the v4 Style Schema); "css" emits static shell CSS as a linked stylesheet. Default is no base styles and no CSS — the widget renders as bare content. Do NOT inline <style> blocks in the Twig — they duplicate on every render. To iterate on an existing widget, pass overwrite:true — regenerates every file from the input and destroys any hand edits to wppilot-widget.php, the Twig, the loader, or the JS/CSS assets. Callers must re-supply the full props/twig/js/css/base_styles each time since this is a full regeneration, not a patch.
wppilot/elementor-create-global-classCreate Elementor Global ClassCreates a new Elementor v4 Global Class. The "styles" payload is a map of CSS property name → value. Scalar values are auto-wrapped against the v4 Style Schema (e.g. color:"#111" → {$$type:"color",value:"#111"}; padding:24 → {$$type:"size",value:{size:24,unit:"px"}}; padding:{block-start:24, inline-end:24, ...} → wrapped dimensions); long-form {$$type, value} shapes also work. After wrapping, the payload is validated against the authoritative Style Schema and rejected fail-hard with the list of valid properties on any mismatch. Call wppilot/elementor-get-style-schema to discover which CSS properties exist and their exact shapes. Example (ergonomic): {"color":"#111", "padding":{"block-start":24,"inline-end":24,"block-end":24,"inline-start":24}}. Returns the new class id on success.
wppilot/elementor-create-v3-colorCreate Elementor v3 Global ColorCreates a new custom Global Color in the active Elementor v3 Kit. Provide title and color (hex).
wppilot/elementor-create-v3-typographyCreate Elementor v3 Global TypographyCreates a new custom Global Typography in the active Elementor v3 Kit. Provide title and any of font_family, font_size, font_weight, text_transform, font_style, text_decoration, line_height, letter_spacing. Size-based fields take {size, unit}: numeric size + standard unit (px/em/rem/vw/vh/%), OR string size + unit:"custom" for raw CSS like clamp(1rem, 2vw, 2.5rem).
wppilot/elementor-create-variableCreate Elementor Global VariableCreates a new Elementor v4 Global Variable (design token). Provide a label (no spaces, max 50 chars), a type (color / font / size), and a value. The value format depends on the type: hex like "#ff0000" for color, font family name like "Inter" for font, and for size either a CSS dimension like "24px" / "1.5rem" or a CSS expression like "clamp(1rem, 2vw, 2rem)" / "calc(100vh - 4rem)" / "min(...)" / "max(...)" / "var(--token)".
wppilot/elementor-edit-elementEdit Elementor ElementUpdates the settings of an existing element (widget or container) on an Elementor document. Settings are merged on top of existing settings by default — pass replace=true to overwrite the whole settings object. Validation runs server-side on every call: unknown control IDs or invalid enum values abort the write and return the compact content-only schema of the target element INLINE in the error, so you can correct and retry in a single roundtrip. wppilot/elementor-get-schema is an OPTIONAL discovery tool for unfamiliar widgets — it is NOT required before writing. Shape rules: use only keys present in the element's "controls" map; select/choose values MUST come from the control's "opts"; switchers use "rv" for on and "" for off; typography requires typography_typography="custom" first; dimensions are {unit,top,right,bottom,left,isLinked}; sliders are {size,unit}; colors are #RRGGBB; v3 controls carrying an "r" flag in the schema accept responsive overrides via the suffixed key <key>_<breakpoint> (e.g. typography_font_size_tablet, padding_mobile, _padding_widescreen) — r:1 means every breakpoint is allowed, while r:{min:<bp>} / r:{max:<bp>} / r:{min,max} restrict the suffix to a closed window in the canonical size order (mobile < mobile_extra < tablet < tablet_extra < laptop < desktop < widescreen). Breakpoint names are the v4 ones listed in check-setup.kit.active_breakpoints and the same value shape applies to every variant; ATOMIC (v4) widgets accept ergonomic scalar values which the server auto-wraps into {"$$type": "<prop_key>", "value": <scalar>} — for both settings AND inside the styles map's props (e.g. color:"#FFFFFF", font-size:72, padding:{block-start:16,...}); or you can pass the wrapped shape directly; v4 atomic responsive uses the styles map's variants[] with meta.breakpoint (NOT suffixed keys); CONTENT FIELDS — single-line text controls (heading.title, button.text, icon-list[].text, image.caption, …) take plain text only; wysiwyg controls (text-editor.editor, testimonial.testimonial_content, …) take inline formatting only (<strong>, <em>, <a>, <br>); NEVER wrap content in inline-styled <p style="…">…</p> or other layout markup — alignment goes in align, font sizing/weight/family in typography_*, max-width in _element_custom_width, spacing in _padding/_margin (all responsive via the suffix shape above); the dedicated html widget IS the place for arbitrary HTML; do not emit controls whose "if" condition is not satisfied.
wppilot/elementor-edit-global-classEdit Elementor Global ClassEdits an existing Elementor v4 Global Class in place. Pass class_id and at least one of label (rename) or styles (replace the BASE variant's CSS — tablet/mobile/widescreen/state variants of this class are preserved). The class id is preserved so widgets that already reference it keep their binding. The "styles" payload follows the same auto-wrap + fail-hard validation as create-global-class: scalar values are wrapped against the Style Schema (e.g. color:"#111", padding:24), or pass the long-form {$$type, value} shape. Call wppilot/elementor-get-style-schema to discover valid property names and shapes.
wppilot/elementor-edit-v3-colorEdit Elementor v3 Global ColorEdits an existing v3 Global Color in place. Pass color_id and any of title or color (hex) to update. The color id is preserved.
wppilot/elementor-edit-v3-typographyEdit Elementor v3 Global TypographyEdits an existing v3 Global Typography preset in place. Pass typography_id and any of the typography fields you want to change. The id is preserved. Size-based fields take {size, unit}: numeric size + standard unit (px/em/rem/vw/vh/%), OR string size + unit:"custom" for raw CSS like clamp(1rem, 2vw, 2.5rem).
wppilot/elementor-edit-variableEdit Elementor Global VariableEdits an existing Elementor v4 Global Variable in place. Pass variable_id and at least one of label or value to change. The variable id is preserved so widgets and classes that reference it keep their binding. Type cannot be changed (delete and recreate if you need to switch type).
wppilot/elementor-get-schemaGet Elementor Widget SchemaDiscovery and exploration tool for Elementor widgets (v3 and v4) and the container element. Use this to understand what widgets exist, what controls they expose, and what enum values they accept. NOT required before writing — set-content / add-element / edit-element validate server-side on every call and return the compact schema of the affected widget INLINE in any error response. Two actions: "list" (discover) and "get" (describe). LIST without filters returns a minimal overview: {categories (alphabetically sorted list of category names — use these as "category" filter values), sources (map of package → widget count — use these as "source" filter values)}. No widget names are returned in the overview — drill into a subset with filters. LIST with any filter (name_contains, is_atomic, source, category — combined with AND) returns a flat widget list with {name, title, is_atomic, categories, source} per entry. For v4 atomic widgets use is_atomic:true. For keyword search use name_contains. GET takes widget_types (a list of strings, "__container__" allowed) and returns compact schemas {t, opts?, def?, rv?, if?, arr?, fields?} by default. For style checks, prefer include_styles:true with control_names:["padding","margin",...] or tab/section narrowing; broad include_styles:true on common v3 widgets can be very large. Use verbose:true only when labels / widget metadata are needed. The compact output shape is exactly what set-content / add-element / edit-element expect, so feed it back verbatim when you do use it.

Destructive

Marked destructive in the source, so each call needs an explicit confirmation flag, every time.

AbilityWhat it does
wppilot/elementor-delete-elementDelete Elementor ElementDeletes an element (widget or container) and all its children from an Elementor document. Permanent — there is no trash for Elementor elements.
wppilot/elementor-delete-element-styleDelete Elementor Element StyleRemoves a single per-element style entry (identified by style_id) from an atomic v4 element. Surgical tool for pruning one style without rewriting the full styles map. Use wppilot/elementor-edit-element with replace=true and styles={} if you want to clear every style on the element. Idempotent: deleting a style_id that is not present returns success with deleted=false.
wppilot/elementor-delete-global-classDelete Elementor Global ClassDeletes an Elementor v4 Global Class by id. Widgets that still reference it will lose the styling but will not break — Elementor ignores missing class references at render.
wppilot/elementor-delete-interactionDelete Elementor InteractionDeletes an interaction from an atomic widget by its zero-based index in the widget's interactions array. Use list-interactions first to discover the indices.
wppilot/elementor-delete-v3-colorDelete Elementor v3 Global ColorDeletes a v3 Global Color from the active Kit by _id. System colors cannot be deleted.
wppilot/elementor-delete-v3-typographyDelete Elementor v3 Global TypographyDeletes a v3 Global Typography preset from the active Kit by _id. System typography presets cannot be deleted.
wppilot/elementor-delete-variableDelete Elementor Global VariableDeletes an Elementor v4 Global Variable by id. Soft delete — the entity is marked as removed but the underlying record remains in the kit for audit purposes.
wppilot/elementor-set-contentSet Elementor ContentWrites a full Elementor document tree to a post, invalidates Elementor's internal CSS caches, and fires WordPress's clean_post_cache so third-party optimization plugins (Perfmatters, WP Rocket, LiteSpeed, etc.) that listen for post changes can purge their per-post caches and the frontend reflects the change immediately. Validation runs server-side on every call: unknown control IDs or invalid enum values abort the write (nothing is persisted) and return the compact content-only schemas of the affected widget types INLINE in the error, so you can correct and retry in a single roundtrip. wppilot/elementor-get-schema is an OPTIONAL discovery tool for learning what widgets exist and what their controls look like — it is NOT required before writing, validation is automatic. Shape rules: use only keys present in the widget's "controls" map; select/choose values MUST come from the control's "opts"; switchers use "rv" for on and "" for off; typography requires typography_typography="custom" first; dimensions are {unit,top,right,bottom,left,isLinked}; sliders are {size,unit}; colors are #RRGGBB; scalars for "arr: true" v3 controls are auto-wrapped into a one-element array; v3 controls carrying an "r" flag in the schema accept responsive overrides via the suffixed key <key>_<breakpoint> (e.g. typography_font_size_tablet, padding_mobile, _padding_widescreen) — r:1 means every breakpoint is allowed, while r:{min:<bp>} / r:{max:<bp>} / r:{min,max} restrict the suffix to a closed window in the canonical size order (mobile < mobile_extra < tablet < tablet_extra < laptop < desktop < widescreen). Breakpoint names are the v4 ones listed in check-setup.kit.active_breakpoints and the same value shape applies to every variant; ATOMIC (v4) widgets accept ergonomic scalar values which the server auto-wraps into {"$$type": "<prop_key>", "value": <scalar>} — for both settings AND inside the styles map's props (e.g. color:"#FFFFFF", font-size:72, padding:{block-start:16,...}); or you can pass the wrapped shape directly; v4 atomic responsive uses the styles map's variants[] with meta.breakpoint (NOT suffixed keys); CONTENT FIELDS — single-line text controls (heading.title, button.text, icon-list[].text, image.caption, …) take plain text only; wysiwyg controls (text-editor.editor, testimonial.testimonial_content, …) take inline formatting only (<strong>, <em>, <a>, <br>); NEVER wrap content in inline-styled <p style="…">…</p> or other layout markup — alignment goes in align, font sizing/weight/family in typography_*, max-width in _element_custom_width, spacing in _padding/_margin (all responsive via the suffix shape above); the dedicated html widget IS the place for arbitrary HTML; do not emit controls whose "if" condition is not satisfied.