Layout & Structure
EMCP Tools is container-first. Every layout tool operates on modern Elementor flexbox containers, not the legacy section/column system. Existing pages built with sections still work, but new builds should use containers.
All eleven are on by default. Their switches are in the Layout & Structure section of the Elementor tab on EMCP Tools → Tools, which appears while Elementor is the builder selected on EMCP Tools → Page Builders.
Container tools
Section titled “Container tools”See the tested existing-page editing tutorial for a practical batch update, mobile container settings and a verified CSS ID correction.
emcp-tools/add-container
Section titled “emcp-tools/add-container”Adds a new flexbox container, either top-level (direct child of the page) or nested inside an existing container.
Input:
post_idparent_id: omit for top-levelposition: child index,-1to append (default)settings, partial container settings:flex_direction,content_width,padding,gap, etc.full_bleed: (new in v3.2.1) whentrue, seed an edge-to-edge recipe (full content width, 100% width, zero padding, zero flex/gap, column + stretch). Use for the top-level container on Elementor Canvas pages, where the boxed defaults otherwise leave white strips around headers, footers and full-width sections. Any explicitsettingsyou pass still override the preset.
Returns: { element_id }.
emcp-tools/update-container
Section titled “emcp-tools/update-container”Updates settings on an existing container. Same shape as add-container minus position/parent.
emcp-tools/get-container-schema
Section titled “emcp-tools/get-container-schema”Returns the JSON Schema for container settings. Use this before constructing complex layout settings to know which keys are valid.
Element tools
Section titled “Element tools”emcp-tools/move-element
Section titled “emcp-tools/move-element”Moves an element to a new parent and/or position.
Input: post_id, element_id, new_parent_id, new_position.
emcp-tools/remove-element
Section titled “emcp-tools/remove-element”Removes an element and all its children. Destructive. Capability check is edit_post on the parent.
Input: post_id, element_id.
emcp-tools/duplicate-element
Section titled “emcp-tools/duplicate-element”Deep-copies an element with fresh IDs and inserts it right after the original.
Input: post_id, element_id.
Returns: { new_element_id }.
emcp-tools/find-element
Section titled “emcp-tools/find-element”Searches a page for elements matching a query: by type, settings value, or CSS class.
Input:
post_idelType:container,widgetwidgetType: whenelTypeiswidgetcss_class: match elements with this class in their CSS classes settingsettings_match: partial object that must be present in the element’s settings
Returns: array of { element_id, elType, widgetType?, path }.
emcp-tools/update-element
Section titled “emcp-tools/update-element”Updates settings on any element (container or widget) by ID. Generic write tool: the AI’s go-to for “change setting X on element Y.”
Input: post_id, element_id, settings (partial, merged into existing).
emcp-tools/batch-update
Section titled “emcp-tools/batch-update”Applies multiple update-element operations in a single MCP call. Significant token savings when an AI is refining many elements after a build-page.
Input:
post_idupdates: array of{ element_id, settings }pairs
emcp-tools/reorder-elements
Section titled “emcp-tools/reorder-elements”Reorders the direct children of a container.
Input:
post_idcontainer_idchild_order: array of child element IDs in the new desired order
Navigator labels
Section titled “Navigator labels”In v3.15.0, set-element-label persists and reads back the Navigator name using the correct storage for each element type:
set-element-label({ post_id: 42, element_id: "abc1234", title: "Hero wrapper" })Classic containers, sections, columns, and widgets use settings._title; atomic elements use root editor_settings.title. update-element and batch-update apply the same type-aware mapping when settings.editor_settings.title is supplied. Prefer the dedicated label tool when changing only the name.
Dimension and grid warnings
Section titled “Dimension and grid warnings”Since v3.15.0, creation/update responses warn when margin, padding, border width, or radius mixes blank and specified sides. Elementor can omit the entire CSS rule in this case. EMCP preserves the supplied values rather than turning inherited blanks into zero. Provide all four explicit values when that is the intended design:
{ "margin": { "unit": "px", "top": 40, "right": 0, "bottom": 80, "left": 0, "isLinked": false } }Classic grids default to two rows in Elementor. Discovery explains this and creation warns if rows are omitted. For one row, include the setting explicitly:
{ "settings": { "container_type": "grid", "grid_columns_grid": { "unit": "fr", "size": 4 }, "grid_rows_grid": { "unit": "fr", "size": 1 } } }Row-layout rules (important)
Section titled “Row-layout rules (important)”Container behavior for row layouts (children laid out side-by-side) has a few rules that trip up agents otherwise. The plugin enforces these automatically:
- Don’t set
flex_wrapon any container. It’s stripped at save time. Elementor’s defaults handle wrapping. - Don’t set
_flex_size: 'grow'on row children: causes overflow. Use percentage widths instead. - Row children get
content_width: 'full'automatically, with calculated percentage widths (e.g. 25% for 4 columns, 33.33% for 3, 50% for 2). - Top-level containers default to
content_width: 'boxed', row children to'full'.
If you’re constructing settings by hand (rare), these defaults match what build-page produces.
