Elementor MCP Server

Elementor page designs and WordPress data accessible for programmatic AI editing.

Data last scanned today · Reviewed yesterday

Overview

Elementor MCP Server acts as an extension for the WordPress MCP Adapter, exposing site elements, widgets, and design tools directly to MCP-compatible AI clients. It allows AI agents to read, search, and modify Elementor content through a specialized set of tools designed for programmatic site manipulation. Beyond basic integration, the server includes features for page snapshots, content mirroring to JSON, and natural-language search across templates and global styles. It also maintains a change history ledger, enabling AI agents to track and roll back modifications made to the database or filesystem.

Our verdict

This server carries a high-risk level with a security score of 33/100. The primary concern is the lack of any authentication method, meaning anyone with access to the configuration can execute commands on the target site. Additionally, the server lacks a read-only mode, providing full write access to all connected clients. Due to these significant security exposures, it is not recommended for use on production or sensitive WordPress environments.

  • Integrated change history and rollback functionality
  • Zero direct dependencies reduce supply-chain surface
  • Active development with commits within the last 24 hours
  • Supports natural-language searching of site content and styles
  • No authentication mechanism implemented
  • Full write access granted by default with no read-only option
  • Community-maintained rather than supported by the official vendor

Tools

ToolDescriptionRisk
list-widgetsAll registered widget types with names, titles, icons, categories, keywordslow
get-widget-schemaFull JSON Schema for a widget's settings (auto-generated from Elementor controls)low
get-page-structureElement tree for a page (containers, widgets, nesting)low
get-element-settingsCurrent settings for a specific element on a pagelow
list-pagesAll Elementor-enabled pages/postslow
list-templatesSaved Elementor templates from the template librarylow
get-global-settingsActive kit/global settings (colors, typography, spacing)low
list-post-typesList registered public post types (read-only)low
list-taxonomiesList registered taxonomies and their object types (read-only)low
create-postCreate a post/page/CPT — title, content (HTML or block markup), status, slug, author, terms, custom fields, featured imagemedium
get-postRead a single post by ID (read-only; includes is_elementor flag)low
update-postUpdate an existing post's fields, terms, custom fields, featured imagemedium
list-postsList/query posts of any type with filters (read-only)low
delete-postDelete a post — trashes by default; force:true permanently deleteshigh
set-post-termsAssign taxonomy terms to a postmedium
get-settingsRead allowlisted WordPress settings across all groups; doubles as discovery (read-only, manage_options)low
update-settingsBatch-update allowlisted settings; rejects reported in skipped[]; permalink changes auto-flush rewrite rules (manage_options)medium
list-pluginsList installed plugins with active/inactive status, version, update-available flag, and protected marker (read-only, activate_plugins)low
search-pluginsSearch the wordpress.org plugin directory by keyword — returns slug, name, version, rating, requirements (read-only, install_plugins)low
install-pluginInstall a plugin from wordpress.org by slug; optionally activate after install (install_plugins)high
activate-pluginActivate an installed plugin by file path or slug (activate_plugins)medium
deactivate-pluginDeactivate a plugin; refuses to deactivate EMCP Tools or Elementor (activate_plugins)medium
update-pluginUpdate an installed plugin to the latest wordpress.org version; reports up-to-date when no update is pending (update_plugins)high
delete-pluginPermanently delete an inactive, unprotected plugin (delete_plugins)high
list-themesList installed themes with active status, version, update-available flag, and whether it is protected (read-only, switch_themes)low
search-themesSearch the wordpress.org theme directory by keyword (read-only, install_themes)low
install-themeInstall a theme from wordpress.org by slug (install_themes)high
switch-themeSwitch the active theme by stylesheet slug (switch_themes)medium
update-themeUpdate an installed theme to the latest wordpress.org version (update_themes)high
delete-themePermanently delete an inactive, unprotected theme (delete_themes)high
get-mediaFull detail for one attachment — every registered image size (URL + dimensions), mime type, filesize, alt text, caption, description, and raw attachment metadata (read-only, edit_posts)low
update-mediaEdit an attachment's title, alt text, caption, and/or description — only the fields you pass change (edit_post on ID)medium
delete-mediaDelete an attachment; destructive and effectively permanent; disabled-by-default; requires confirm:true; pass force:true to skip Trash even when MEDIA_TRASH is defined (delete_post on ID)high
list-usersList WordPress users; filter by role or search text; paginated. Returns id, username, display name, email, roles, registration date, and post count. Never returns passwords or auth data (read-only, list_users)low
get-userFull profile detail for one user — adds first/last name, nickname, URL, description, and an is_admin flag (true users are off-limits to update-user) (read-only, list_users)low
create-userCreate a new non-admin WordPress user. A strong password is auto-generated and emailed; the password is never returned. Role defaults to subscriber; administrator and any admin-grade role are refused (create_users)medium
update-userUpdate a non-admin user's profile (email, first/last name, display name, nickname, URL, description). Cannot change roles or passwords; refuses any user with admin-level capabilities (edit_users)medium
list-acf-field-groupsList field groups: key, title, active state, field count, local flag; filter by search text, active state, or the post they apply to (read-only, edit_posts)low
get-acf-field-groupOne group's location rules and recursive field tree — names, keys, types, required, choices, sub_fields, flexible layouts. The schema-discovery step before writing values (read-only, edit_posts)low
list-acf-options-pagesRegistered ACF options pages with the post_id string to target them (ACF PRO; empty list with pro:false on free ACF) (read-only, edit_posts)low
get-acf-fieldsRead field values from a post (post_id) or options page (options_page) — formatted values, repeaters/flexible as nested arrays, images/posts as compact objects, unsaved fields as null/empty; optional fields[] filter (read-only, edit_post / manage_options for options)low
update-acf-fieldsWrite field values on a post or options page: repeater rows, flexible content rows (validated acf_fc_layout), galleries (attachment IDs), relationships. Unknown fields are skipped with a reason; results are confirmed by re-reading (edit_post / manage_options; disabled-by-default)medium
create-acf-field-groupCreate a field group with fields (including nested sub_fields/layouts) and location rules, persisted to the database (manage_options; disabled-by-default)medium
update-acf-field-groupEdit a database-stored group: settings, append new fields, or adjust existing fields' settings by key — no deletes, no renames, local groups refused (manage_options; disabled-by-default)medium
list-acf-post-typesList the Custom Post Types managed by ACF — slug, title, visibility, hierarchy, supports, attached taxonomies; search/active_only filters (read-only, manage_options)low
get-acf-post-typeOne ACF-managed CPT's full definition (labels, supports, REST, taxonomies) by key or ID (read-only, manage_options)low
create-acf-post-typeRegister a new CPT through ACF (saved as data, then registered by ACF — no code executed); slug validated (≤ 20 chars, not reserved/existing); labels auto-generated (manage_options; disabled-by-default)medium
update-acf-post-typeEdit an ACF-managed CPT (labels, visibility, supports, taxonomies); slug is immutable; native CPTs refused (manage_options; disabled-by-default)medium
list-acf-taxonomiesList the taxonomies managed by ACF — slug, title, hierarchy, and the post types each is attached to (object_type); search/active_only filters (read-only, manage_options)low
get-acf-taxonomyOne ACF-managed taxonomy's full definition (labels, hierarchy, REST, object_type) by key or ID (read-only, manage_options)low
create-acf-taxonomyRegister a new taxonomy through ACF; requires object_type (post type slugs); slug validated (≤ 32 chars); labels auto-generated (manage_options; disabled-by-default)medium
update-acf-taxonomyEdit an ACF-managed taxonomy (labels, hierarchy, attached post types); slug is immutable (manage_options; disabled-by-default)medium
metabox-readRead Meta Box field groups, field definitions, and values (posts + object_type passthrough)low
metabox-writeWrite Meta Box field values (disabled by default)medium
analyze-performanceAudit server config, WordPress internals (DB size,low
scan-securityScan across malware heuristics, WordPress core-file integrity, hardening, and outdated/abandoned software.low
read-fileReturn the contents of any file inside ABSPATHlow
list-directoryList the entries in a directory inside ABSPATHlow
search-filesSearch for files matching a pattern or containing a string within ABSPATHlow
write-fileWrite (create or overwrite) a file inside ABSPATHhigh
edit-fileApply a targeted find-and-replace or line-range edit to a file inside ABSPATHhigh
delete-fileDelete a file inside ABSPATHhigh
list-tablesList all tables in the WordPress database with row counts and sizeslow
describe-tableReturn the column definitions and indexes for a tablelow
queryRun a read-only SQL query (SELECT/SHOW/DESCRIBE/EXPLAIN only)low
insert-rowInsert a row into a table using $wpdbmedium
update-rowsUpdate rows matching a WHERE clausemedium
delete-rowsDelete rows matching a WHERE clausehigh
create-pageCreate a new WP page/post with Elementor enabledmedium
update-page-settingsUpdate page-level Elementor settings (background, padding, etc.)medium
delete-page-contentClear all Elementor content from a pagemedium
import-templateImport JSON template structure into a pagemedium
export-pageExport page's full Elementor data as JSONlow
add-containerAdd a flexbox container (top-level or nested)medium
update-containerUpdate settings on an existing containermedium
move-elementMove an element to a new parent/positionmedium
remove-elementRemove an element and all childrenmedium
duplicate-elementDuplicate element with fresh IDsmedium
get-container-schemaReturns the JSON schema for container settingslow
find-elementFind elements by type, settings, or CSS class within a pagelow
update-elementUpdate settings on any element (widget or container) by IDmedium
batch-updateApply multiple element updates in a single callmedium
reorder-elementsReorder child elements within a containermedium
add-free-widgetAdd any free/core widget by typemedium
add-pro-widgetAdd an Elementor Pro / WooCommerce widget by typemedium
update-widgetUpdate settings on an existing widgetmedium
detect-elementor-versionReturns Elementor version and whether atomic elements are supported.low
add-flexboxAtomic flexbox container (e-flexbox).medium
add-div-blockAtomic div-block container (e-div-block).medium
add-atomic-widgetUniversal: add any atomic widget by type with raw $$type settingsmedium
update-atomic-widgetUniversal: partial-merge update on an existing atomic widgetmedium
add-atomic-headingAtomic heading (e-heading).medium
add-atomic-paragraphAtomic paragraph (e-paragraph).medium
add-atomic-buttonAtomic button (e-button).medium
add-atomic-imageAtomic image (e-image).medium
add-atomic-svgAtomic SVG (e-svg).medium
add-atomic-youtubeAtomic YouTube embed (e-youtube).medium
add-atomic-videoAtomic self-hosted video (e-self-hosted-video).medium
add-atomic-dividerAtomic divider (e-divider).medium
save-as-templateSave a page or element as reusable templatemedium
apply-templateApply a saved template to a pagemedium
create-theme-templatePro: Create theme builder templatemedium
set-template-conditionsPro: Set display conditions on a theme builder templatemedium
list-dynamic-tagsPro: List all available dynamic tags with groups and categorieslow
set-dynamic-tagPro: Bind a dynamic tag to a specific element settingmedium
create-popupPro: Create a popup templatemedium
set-popup-settingsPro: Set triggers, display conditions, and timing on a popupmedium
update-global-colorsUpdate site-wide color palette in Elementor kitmedium
update-global-typographyUpdate site-wide typography in Elementor kitmedium
build-pageCreate complete page from declarative structure in one callmedium
search-imagesSearch Unsplash, Pexels or Pixabay for stock photos by keywordlow
sideload-imageDownload an external image URL into the WordPress Media Librarymedium
add-stock-imageSearch + sideload + add image widget to page in one callmedium
upload-svg-iconUpload an SVG icon (from URL or raw markup) for use with icon/icon-box widgetsmedium
add-custom-cssAdd custom CSS to an element or page-level with selector keyword support (Pro)medium
add-custom-jsInject JavaScript via HTML widget with automatic <script> wrappingmedium
add-code-snippetCreate site-wide Custom Code snippets for head/body injection (Pro)high
list-code-snippetsList all Custom Code snippets with location and status filters (Pro)low
list-control-typesList the supported control types + spec shape so agents build valid specslow
validate-widget-specSchema + generator dry-run; returns errors without persistinglow
create-custom-widgetGenerate + register a widget from a spec (auto-activates)high
update-custom-widgetReplace a widget's spec, regenerate, re-validatehigh
get-custom-widgetReturn a widget's spec + generated PHP + statuslow
list-custom-widgetsList generated widgets (id, title, name, status)low
set-widget-statusActivate or deactivate a widgetmedium
delete-custom-widgetDelete a widget (CPT + sandbox files)high
validate-php-snippetStatic parse + security scan; no store, no runlow
create-php-snippetCreate an inactive draft (critical findings rejected)medium
update-php-snippetUpdate a snippet's code/settings; re-validatesmedium
get-php-snippetReturn code, status, shortcode + validation reportlow
list-php-snippetsList snippets with status and run contextlow
delete-php-snippetDelete a snippet and its sandbox filehigh
list-global-classesResolve Class Manager g- IDs to their names and the CSS each defines, per breakpoint/state (read-only)low

Compatibility

ClientLocalDockerRemoteRead-only
Claude Desktop
Cursor
VS Code
Windsurf
ChatGPT

Frequently asked questions

What are the system requirements for installing this MCP server?

This server requires PHP 8.1 or higher, WordPress 6.9 or higher, and Elementor 3.20 or higher.

Are all available MCP tools active by default?

No, 39 of the available tools ship disabled-by-default, including those for filesystem and database management, to ensure a smaller active surface until you choose to opt in via the Tools tab.

How can I manage multiple WordPress installations with one connection?

You can use the multi-site proxy provided by @msrbuilds/emcp-proxy 1.9.0, which allows you to manage multiple sites using a site registry and the emcp_use_site command.

How does the server handle sensitive write operations?

Certain write operations for WooCommerce, such as refunds and deletions, require the confirm:true parameter to be set for execution.

Can I revert changes made by an AI agent?

Yes, the server includes a change history ledger that allows you to roll back changes either through MCP tools or via the new History admin tab.

How are Advanced Custom Fields (ACF) or Meta Box tools configured?

These tools are provided as dispatchers that can be toggled on or off under the Tools menu for each respective plugin, with read operations typically enabled by default and write operations disabled by default.

Alternatives

Changelog

Badge

Elementor MCP Server security score, rated on RepoAI

Maintain this server? Add the live badge to your README.