Repository navigation
Releases: msrbuilds/elementor-mcp
Release list
v3.21.2
Fixes for pulling settings from EMCP Cloud, for wp-admin errors that non-administrators saw on some sites, and corrected ChatGPT App connection steps.
- Fixed: Every wp-admin page showed "There has been a critical error" for users who are not administrators on sites where another plugin adds a menu item with no capability (reported in #174). WordPress passes that empty capability to every permission filter, and four EMCP filters only accepted text, so PHP stopped the page. They now pass anything that is not a capability name through unchanged. Administrators were not affected.
- Fixed: Pulling settings from EMCP Cloud did nothing or failed without saying why. With nothing pushed yet, the Connection screen said "try again or reconnect", which never helps: it now says to push from the site you want to copy first. A pull that applies nothing is reported as an error instead of a success, and a successful pull says how many settings it applied. Every other sync error gets its own message.
- Fixed: Pulling settings pushed from an older version switched on tools that newer versions ship switched off. Pushes now record their source and tool defaults, and a pull keeps the newer default-off tools off (unless new tools are set to turn on after updates).
- Improved: A settings pull is recorded in History, so one click undoes it.
- Fixed: The
cloud-config-syncMCP tool returned pulled settings without applying them, and its push stored whatever data the agent sent over the settings shared by every site. For settings it now pushes this site's own settings and applies pulls, like the Connection screen. - Fixed: The ChatGPT App steps on the Connection screen now match the app: Plugins, Add, Add custom MCP server, keep OAuth, Create as a plugin, then Approve on your site. The Application password guide uses Settings, Plugins, MCPs, Add and has no Restart step (#175).
EMCP Tools 3.21.1
Ten native plugin integrations, six of them free and also in EMCP Lite, plus fixes for the EMCP Cloud Gateway and for Safe Updates on MariaDB after 3.21.0.
- New: Six free plugin integrations: Redirection, Custom Post Type UI, Pods, WP Mail SMTP, LiteSpeed Cache and Wordfence. Each works through the plugin's own API and only on the plugin versions it was verified against. Wordfence is read-only; LiteSpeed cache invalidation needs a supported LiteSpeed server.
- New in Pro: FluentSMTP, Flamingo, Site Kit by Google and Ultimate Member. Site Kit reads local setup, authentication and module state, never connected Google reports.
- New write tools start disabled and check capabilities, confirmation, the plugin's own constraints and its supported version. Reversible writes go to History with conflict-aware undo; irreversible actions say what cannot be recovered.
- Improved: CPT UI keeps quoted labels and descriptions and refuses filtered storage during undo. Pods checks the saved schema and record values after its own hooks run.
- Security: Mail tests refuse to run next to a competing SMTP plugin, keep durable replay protection and report uncertain outcomes. Flamingo filters nested sensitive fields and reconciles failures after commit. Ultimate Member refuses ambiguous duplicate metadata before a write or an undo.
- Fixed: EMCP Cloud showed "Gateway unavailable" after updating to 3.21.0. The bundled MCP Adapter 0.7.1 refuses any request after
initializethat carries noMCP-Protocol-Versionheader, and the Gateway sent only the session id. EMCP now fills a missing header from the version the session negotiated, as the MCP specification allows, so the Gateway and other clients that omit it connect again. A header the client does send is never changed. The Gateway was also fixed on its side, so connected sites recovered without waiting for this update. - Fixed: Safe Updates showed "Blocked: Could not verify database table ownership" on MariaDB sites. When the database account has no role enabled, MariaDB lists one empty role, and readiness then asked for the grants of a role with no name, which failed. Readiness now skips it, so MariaDB sites (most shared hosts) can run Safe Updates again. MySQL sites were not affected.
- Fixed: With WP_DEBUG on and Elementor inactive, every MCP request logged a "list-pages not found" notice. The registry is now checked silently.
- Changed: The product name is now "MCP Tools for WordPress & Page Builders". It appears in the admin, the MCP server name and the docs. The plugin folder, slug, tool names and server address are unchanged, so connected AI clients keep working.
EMCP Tools 3.21.0
Incident-response tools for a hacked site, contributed by @Mrshahidali420 from a real reinfection case (#160): spot the signs of a compromise, pull a suspicious file out safely, close the usual doors, find the request that brought a hack back, and stop a process that keeps rewriting files. Plus a switch to keep new tools on after updates, binary file writes, OAuth on subdirectory multisites, backups without
wp-config.php, corrected ChatGPT and Codex connection steps, and five fixes from user reports: atomic text that rendered empty on Elementor 4.3, styles writes that dropped props, writes that an open editor's Force Save threw away, a wrong row id frominsert-row, and SVG icon uploads History could not undo.
- New: scan-security looks for an active compromise (#161). A fifth area,
compromise, checks for folders named like their parent that hold their own.htaccess(the hiding place of the back door in #160), PHP files written recently but dated much older, a homepage that shows Googlebot a different page than visitors, backup archives anyone can download (EMCP's own backup folder included), must-use plugins named like regular plugins, and scheduled tasks with re-infection names and no callback. Three malware rules were added: superglobal names split into pieces, a known injector marker, and includes from compressed or archive streams. The audit follows the scan'smax_seconds, and a walk that runs out of time says which checks it only partly covered instead of reporting them clean. Run it alone withchecks: ["compromise"]. - New: Quarantine a suspicious file instead of deleting it (#162).
quarantine-filemoves a file or folder out of the site, keeps a record of its path, size, hash and dates, andrestore-quarantined-file(or Undo in History) puts it back. Stored files are renamed so no web server can run them, the folder is denied to the web for Apache and IIS, and it goes above WordPress only when that folder is not itself public. Core files,wp-admin,wp-includesand EMCP itself are refused.list-quarantinelists the entries. - New: Harden the site from your AI agent (#163).
harden-siteswitches off XML-RPC, hides the WordPress version from page source and asset links (a per-site token keeps cache busting after updates), blocks user enumeration through the REST API and?author=N(author archives keep working), and hides PHP errors from visitors. Each change can be undone from History.get-hardening-statuschecks each one the way a visitor sees the site. Turning XML-RPC off stops Jetpack and the mobile apps, and the tool says so. - New: search-access-log (#164) searches the web server access logs the site can read, plain and
.gz, by text, IP, method, status, path and time, to find the request behind a hack. It reads only from a fixed list of log folders, removes query strings from results by default, and stops at its time, size and result limits. - New: list-processes and kill-process (#165) show the processes running as the site's own user on Linux, flag watcher scripts and other suspicious ones, and stop one with confirmation. Web server, PHP worker and database processes are never stopped, because on shared hosting they also serve the account's other sites. A stopped process cannot be restarted from History.
- New: Turn on new tools after updates. A switch on the Tools screen, off by default. Updates add some new tools switched off (file, database, plugin and user writes, and Pro batches); with the switch on they arrive switched on, so a site you manage gets them without a visit. Tools you turned off stay off, a new install still starts with the safe defaults, and the setting travels with Cloud settings sync. Requested by a customer managing many client sites.
- New:
write-filewrites binary files (#173). Passencoding: "base64"to write images, fonts or ZIP files byte for byte. The content is checked strictly (whitespace and missing padding are fine, anything else is refused with nothing written), the 5 MB limit applies to the decoded size, and the bytes are decoded by a stream filter as they are written. Requested by a customer; contributed by @amiriqbalmcs. Files over 5 MB are not supported yet. - The new tools that change the site, read server logs or list processes ship switched off: enable them on the Tools screen when you need them. The compromise audit,
list-quarantineandget-hardening-statusare on. - Fixed: Atomic headings, paragraphs and buttons rendered empty on Elementor 4.3 (#166). Elementor 4.3 stores their text as
escaped-html, butadd-atomic-heading,add-atomic-paragraphandadd-atomic-buttonwrote the olderhtml-v3format, so the element showed no text until Elementor happened to convert it. The tools now write whichever format the installed Elementor declares (escaped-htmlon 4.3,html-v3on 4.2), and any write to a page converts text already stored in the wrong format, in either direction. Translations through Polylang and TranslatePress now include 4.3 headings and paragraphs too. - Fixed: A
styleswrite replaced the whole variant (#169).update-elementandbatch-updatereplaced a style variant's props wholesale, so sending onlycolordeletedfont-size. Variants are now matched by breakpoint and state and merge prop by prop: a prop you send replaces the stored one, a prop set tonullis removed, props you leave out are kept, and a new breakpoint or state is added. A class set tonullis removed. - Fixed: Writes to a page open in your own Elementor editor were lost (#168). The 3.18.0 guard refused a write only while another user had the page open with unsaved changes. When the same administrator ran both the AI connection and the editor, the write went through and the editor's Force Save then threw it away. Elementor writes are now refused whenever the page is open in the editor with unsaved changes, by any user, yours included, and the answer says what to do. If the editor was closed without saving, retry with
ignore_open_editor: trueinstead of waiting a few minutes for the editor's lock to expire. An editor that is open with nothing unsaved does not block writes. - Fixed:
insert-rowreturned the wrong id (#167). It reported the id of its own History entry instead of the new row's, so a follow-up update by that id changed nothing, or on a small table could change an unrelated row. It now returns the new row's id. Anupdate-rowsordelete-rowsthat matches no rows now says so (undoable: false, emptychange_id) and adds nothing to History. - Fixed: OAuth sign-in failed on every subsite of a subdirectory multisite (#171). A subsite's issuer is
https://host/<path>, so AI clients ask the network root for/.well-known/oauth-authorization-server/<path>, which WordPress sends to the main site, and that answered 404. The main site now answers for the subsite when the subsite is live, has EMCP active with OAuth on, and its issuer matches, even when the main site's own OAuth is off. EMCP must be active on the main site for this; otherwise the nginx rewrite from the support docs still works. Contributed by @amiriqbalmcs. - Fixed: The Connection wizard sent ChatGPT users to a menu that no longer exists (#172). Codex joined the ChatGPT desktop app and its MCP settings moved: the steps now read Settings, MCP servers, Add server, Streamable HTTP, Save, Restart, Authenticate. Contributed by @amiriqbalmcs.
- Fixed: The Codex terminal command in the Connection wizard failed.
codex mcp addhas no--transportor--headerflag, so the command was refused. It is nowcodex mcp add <name> --url <endpoint>, followed by thehttp_headersline to add under the server in~/.codex/config.toml(checked with codex-cli 0.163). - Security: Full backups no longer include
wp-config.php. The rootwp-config.phpholds the database password and the auth keys and salts, and restore never writes it (the destination keeps its own), so it only put those secrets in every backup. Only the root file is left out:wp-config-sample.phpand files of the same name inside plugins are still archived. Reported by a customer. - Fixed:
upload-svg-iconwas not recorded in History (#170). It now returns achange_idlikeupload-media, and undo removes the attachment and its file. - Changed: EMCP Tools uses the official MCP Adapter plugin when it is active. The MCP Adapter became a standalone WordPress.org plugin (
mcp-adapter) with 0.7, and its migration guide asks plugins to stop bundling it. EMCP bundled 0.6.1 and its loader forced that copy over the standalone plugin, so plugins that need 0.7 broke and WordPress reported a duplicate copy. Now the official plugin, when active, serves the whole adapter, and EMCP's own copy (updated to 0.7.1) serves when it is not. The built-in copy stays as a permanent fallback, kept up to date with each adapter release, so nothing changes for sites without the official plugin. The Connection screen offers the official plugin as an option, with one button that installs it from WordPress.org and activates it; on hosts where WordPress needs FTP details, the button opens WordPress's own installer. A notice and a Dashboard...
EMCP Tools 3.20.0
Static Site generation through EMCP Cloud, backups kept out of the web root with retention for every backup, a Block Builder that honors block styles on the front end with a real repeater, and a fix for sites where another plugin took over EMCP's licence details.
- New: Static Site module. Turn your site into plain HTML files, download them as a ZIP, keep them in a folder, or serve them to visitors. Generations are counted by your EMCP Cloud account: 3 free, plus a monthly allowance with an EMCP Pro licence.
- New: GeneratePress theme settings are free. On a site running GeneratePress,
generatepress-readreads the global color palette, body and link colors, container width and layout, and body font size, andgeneratepress-writechanges them and refreshes GeneratePress's cached CSS. Both were Pro-only; the write tool still ships switched off. The Tools screen also showed them as available on free installs, where they never registered. GenerateBlocks stays in Pro. - Security: GeneratePress settings are checked before they are saved.
generatepress-writestored any value it was given, and GeneratePress prints these settings into the CSS on every page, so a value could close the style element and add a script. Each value is now checked the way GeneratePress's own Customizer checks it (colors as hex,rgb(),rgba()or a palette variable; layout and alignment from GeneratePress's own choices; whole-number sizes; palette slugs of letters, numbers and hyphens), and a refused value is reported inrejectedwith nothing written. The documented alignment value was wrong too: GeneratePress usesboxes, notboxed.astra-writeandkadence-writehad the same gap and get the same treatment: Astra values are checked like Astra's Customizer checks them (colors, font lists, responsive font sizes, whole-pixel widths, layout ids), and Kadence's settings objects may hold only identifier keys, numbers, palette slugs, colors, plain web URLs and plain text that cannot end a CSS rule. Real stored settings from two Astra sites and both themes' defaults all pass. - Fixed: GeneratePress body font size and the Kadence palette now take effect. On GeneratePress 3.1 and later,
body_font_sizewas written to a setting the theme ignores once dynamic typography is on (the default), so the size never changed; it now sets the body rule of GeneratePress's typography list, keeping that rule's font family, and still uses the old setting on sites without dynamic typography.kadence-writesavedglobal_paletteas a theme setting Kadence never reads; it now saves to Kadence's own palette option, accepts 9 to 15 colors per palette in order, keeps the palettes you do not send, and can switch the active palette. - Fixed: History can undo database changes again. Since 3.17.0 History recorded
insert-row,update-rowsanddelete-rows(and All in One SEO post changes) but could never undo them, because the old record could not tell rows apart safely. Each write now locks the rows it touches, and History records each row by its primary key with what it held before, in the same transaction as the write. Undo puts the rows back by key, deleted rows return under their original ids, and an inserted row is removed. If a row has changed since, the undo reports a conflict and only Undo anyway overwrites it. The tools say when a change cannot be undone and why: a table with no primary key, a table that is not InnoDB, or an update that changes primary key values. A write that would change more than 500 rows is refused, with nothing changed. Changes recorded by older versions stay not undoable. - New: Category, tag and custom taxonomy term tools. Five free WordPress tools:
list-terms(search, parent filter, paging),get-term(with term meta, children and archive link),create-term,update-term(only the fields you send) anddelete-term(confirm required, ships switched off). They work with any registered taxonomy, including WooCommerce product categories, and follow each taxonomy's own permissions. Every write can be undone from History: an undone delete brings the term back under its original id with its meta, its posts and its child terms, and takes off the default category WordPress gave posts left without one. The default category and terms a menu links to cannot be deleted. - Fixed: Account page showing another plugin's name and version. When EMCP was installed or activated by another plugin, for example ManageWP Worker deploying it across sites, Freemius could cache that plugin's main file as EMCP's. The Account page then showed the other plugin (such as "ManageWP Worker 4.9.38"), update checks compared against that plugin's version so no EMCP updates appeared, and the deactivation hook was registered on the wrong file, so deleting and reinstalling EMCP never cleared it. EMCP now checks the two cached paths before Freemius starts and corrects them if they point anywhere else, and seeds the correct path on a fresh install. Only EMCP's own Freemius entries are touched. Affected sites are corrected on the first page load after updating, but because they cannot see updates, they need this version installed once by hand or through the site manager. Reported and fixed by Amir Iqbal.
- Security: Backups are no longer reachable from the web. Backups (database dumps,
.emcparchives and restore uploads) were kept inwp-content/emcp-backups/behind an.htaccessdeny, which nginx hosts ignore, so a backup's files could be downloaded by anyone who knew the address. Backups now go outside the web root when the folder above WordPress is safe to use, or else to a folder in wp-content with a name derived from the site's secret keys that cannot be guessed, also protected by .htaccess (Apache) and web.config (IIS). SetEMCP_BACKUP_DIRin wp-config.php to choose the folder yourself. Existing backups move automatically. A weekly check fetches a test file from the folder and the Dashboard warns, with the nginx rule, if the web server serves it. Reported by a customer. - Security: The migration connector (1.4.0) keeps transfers private too. On the destination site, archives being received and the files unpacked during a restore lived in
wp-content/emcp-connector-inboxandwp-content/emcp-connector-work-*, protected only by.htaccess. They now live in one folder named from the destination's secret keys, protected for Apache and IIS, the unpacked files (including the database dump) are deleted when a restore fails as well as when it succeeds, and leftovers older than a day are removed, along with the old folders. Download the connector again from Backup & Migrate, Migrate to update it. - Fixed: Backups no longer fill the disk. Only scheduled backups had a limit. Backups made by hand or by an AI agent now keep the newest 10 by default, with an optional size limit, set on Backup & Migrate, History. A daily cleanup also removes failed partial backups, abandoned restore uploads and leftovers after a day. The History view shows the folder, whether the web check passed and the disk used.
- Improved: The admin sidebar's sections are divided by a line, their headers open and close, and each person's choice is remembered. Static Site sits under Build.
- Improved: Notifications look like cards. Each announcement shows its icon, a colour for its kind (info, success, warning, offer), its date, a New badge until read and a clear call to action. Icons were missing before.
- Fixed: Block Builder supports now reach the front end. A custom block that switched on
supportsshowed color, spacing and typography panels in the editor, but the generatedrender.phpnever printed WordPress's wrapper attributes, so every choice was silently dropped on the live page. Generated blocks now merge the wrapper attributes (support classes and inline styles, the "Additional CSS class" field and alignment) into the template's root element, with no extra wrapper element. The merge uses core APIs only, so it keeps working in a Sandbox plugin export. Inside the editor preview it is skipped, because the editor's own block wrapper already carries those styles. Existing blocks pick this up the next time they are updated. - New: More native style panels for custom blocks.
supportsalso acceptsborder(radius, width, color, style),shadow,dimensionsandbackground, alongsidealign,color,spacingandtypography. - New: Sidebar panels and help text for custom blocks. An attribute's optional
groupplaces it in a named, collapsible sidebar panel (the first opens by default), and itshelptext is now shown under the control. Previously every control sat in one "Settings" panel andhelpwas ignored. - New: Repeater attribute for custom blocks.
type: "repeater"with typedfieldsgives a list of rows that the person editing can add, remove, reorder and edit in the sidebar, each row opening on its own, with an optional row title field, starter rows,min_rows/max_rowsand custom button labels. Rows loop in the template with{{#each}}, each field escaped by its own type, and media fields in a row expose{{field_alt}}/{{field_id}}. Repeaters cannot nest. - Improved: Custom block color controls offer the theme palette. They previously showed an empty swatch list, so only a custom color could be picked.
- Improved: Custom block media controls show a thumbnail with Replace and Remove, instead of the file URL as button text, and store the alt text and media type.
media_typeswidens the picker to video, audio or documents. Templates can print{{name_alt}}and{{name_id}}, so images get their Media Library alt text. - Fixed: Block attribute names that collide with WordPress are refused. An attribute named
align,className,style,textColorand similar was silently overwritten by the core attribute of the same name. The create, update and validate tools now refuse...
EMCP Tools 3.19.3
Cloud Safe Updates compatibility, progress reporting and snapshot performance improvements for hosted WordPress sites, including Hostinger and WP Launcher.
-
Improved: Cloud Safe Updates reports drain time, snapshot file and database progress, and the latest site confirmation.
-
Improved: Snapshot scans resume across bounded requests, small database tables are batched, and unchanged files can reuse verified snapshots between update groups. Every group still gets a fresh database snapshot and the existing rollback protections.
-
Fixed: Database snapshots reuse one connection per batch to avoid connection bursts on shared hosting.
-
Fixed: Hostinger AI history tables no longer look like another WordPress installation. Recovery checks table structure as well as names, while keeping these history tables in snapshots and rollback. Genuine overlapping WordPress installations and unreadable database metadata still block updates.
-
Fixed: Standard writable must-use plugins are supported by Cloud Safe Updates. Their files are snapshotted and restored without loading WordPress, including when an MU plugin fails. Custom MU-plugin paths, drop-ins and external object caches remain blocked when automatic recovery cannot safely cover them.
-
Fixed: WP Launcher's provisioning marker is preserved. The root
.wp-launcher-readyfile no longer blocks recovery merely because it is host-owned. Other unwritable WordPress files and unsafe symlinks still block updates.
EMCP Tools 3.19.2
EMCP Tools 3.19.2
Security update with review hardening for OAuth, menus and loops, and Cloud Safe Updates for reviewing plugin, theme and WordPress updates with a snapshot and automatic restore.
-
New: Cloud Safe Updates. From Account → Safe updates on EMCP Cloud, workspace owners can review the plugin, theme and WordPress updates a connected site has waiting and run them in groups. Each group gets a file and database snapshot first; the site shows a short maintenance page while it runs, chosen pages are checked afterwards, and a failed group is restored from its snapshot. Nothing starts without the owner's maintenance consent, the plugin never accepts download links, and sites it cannot recover safely (no HTTPS, multisite, must-use plugins, custom content paths, files it cannot write, another WordPress install sharing the database table prefix) are refused before anything changes, and the files at fault are named. If EMCP Cloud stops responding before any update has run, the site reopens by itself at the job deadline; once an update may have run, it stays in maintenance until Cloud restores it. A restore interrupted by a host time limit resumes where it stopped, and a finished job keeps only its status receipt: its snapshots and database credentials are deleted, and uninstalling removes finished job folders. The new
cloud-safe-updatestool is under Tools → EMCP Modules → EMCP Cloud. -
Security: Restrict credentialed Unsplash requests to the exact trusted HTTPS origin and disable redirects, preventing API key disclosure through crafted image URLs.
-
Security: Require management authorization and a valid settings nonce before interpreting posted tool toggles, preventing unauthorized changes during pending defaults updates.
-
Security: OAuth and request handling are stricter. Request values are type checked before they are used, malformed bearer tokens, hosts and client addresses are refused instead of being reinterpreted, the sign-in return address uses the configured site origin, and the consent page can no longer be framed by another site.
-
Security: Menu output is filtered, Elementor notices only show on EMCP screens, and the consent, menu icon, SVG and loop styles load through WordPress's own queues. Loop pages load their scripts with WordPress's own printers.
-
Security (Pro): EMCP Themer's condition search checks its inputs and only returns posts you can read, and the Widget Builder's current page links are normalized.
Downloads and updating
- Free: download the attached
emcp-tools-3.19.2.zip, or update from your WordPress dashboard. The admin source is in this repository at tagv3.19.2. - Pro: update through Freemius with an active license.
- Cloud Safe Updates needs 3.19.2 on the site; once updated, a connected site appears under Account → Safe updates on EMCP Cloud.
Requires WordPress 6.9+ and PHP 8.1+.
EMCP Tools 3.19.1
EMCP Tools 3.19.1
Patch release: Cloud buttons on the Connection screen work again, and uninstalling the plugin now completes and removes everything it stored.
- Fixed: Cloud buttons no longer fail with "The link you followed has expired". The Connection screen's Cloud Connect, Disconnect, gateway and re-issue links carried an HTML-escaped
&, so the browser dropped the security token and every click was refused, however fresh the session. The links are now plain URLs (reported by a customer; #158 by @amiriqbalmcs). - Fixed: The v1 prompts download works again. The Prompts screen's download link had the same escaped
&. - Fixed: Deleting the plugin no longer stops with a fatal error. WordPress runs the uninstall without the plugin's normal startup, and the uninstaller did not load two classes it needed, so it stopped at the custom widget step: PHP snippets, Pro blocks, Project Memory and AI Chat conversations and keys were never removed.
- Fixed: Uninstalling removes everything EMCP stored. It now drops the OAuth client and token tables (#157 by @amiriqbalmcs), History, redirects, the search index and the Backup & Migrate tables (paired sites hold connector secrets), deletes every EMCP option, transient and user setting, and unschedules its tasks. Your pages, EMCP Themer templates, Brand Kit backups and backup archive files are kept.
Downloads and updating
- Free: download the attached
emcp-tools-3.19.1.zip, or update from your WordPress dashboard. The admin source is in this repository at tagv3.19.1. - Pro: update through Freemius with an active license.
- If the Cloud buttons on the Connection screen said "The link you followed has expired", update and try again; no reconnect is needed.
Requires WordPress 6.9+ and PHP 8.1+.
EMCP Tools 3.19.0
EMCP Tools 3.19.0
Ten Pro plugin integrations, from Polylang and Tutor LMS to Amelia and MailPoet, each with undo, plus security hardening, management access control and Cloud onboarding.
-
Security: MCP post writes check the post type's own capabilities. Creating a post checks that post type's create and publish capabilities (a WooCommerce product needs the product capabilities, not just
edit_posts), assigning another author checks itsedit_otherscapability, and changing a status to published, scheduled or private checks its publish capability.restore-contentand History undo also need edit rights on the post they write to. -
Security: Sitewide Elementor templates need theme-management rights. Editing or deleting an Elementor header, footer, single, archive, search, 404, popup or loop item template, or any template with display conditions or popup triggers, now needs
edit_theme_options, in Elementor's editor, the REST API and EMCP alike. Editors without that capability can no longer change those templates. EMCP's theme-template and popup tools check the same rule and confirm the target is the right kind of template. -
Security: EMCP Themer templates that run PHP are protected. Once a PHP template is attached, only administrators with
unfiltered_htmlcan edit or delete the Themer template, and only they can attach, swap or remove its PHP template. -
Security: OAuth tokens and the Cloud Gateway credential are changed one at a time per client. Code exchange, refresh rotation and revocation take a per-client lock, so a revoke cannot lose a race with a refresh, and a deleted client can no longer exchange a code. Gateway provisioning, re-issue and revocation are serialized the same way, a failed upload no longer leaves a live credential behind, and a lost response keeps the previous credential so a retry is safe. Databases that do not support MySQL named locks use an options-table lock instead, so sign-in keeps working there.
-
Fixed: Integration write arguments and recovery reports match the installed plugins. FluentCRM contact imports refuse unknown row and address keys before writing. LifterLMS quiz limits require their enabling switches. MailPoet block-editor newsletters accept a separate campaign name, default it to the subject, and restore it on undo. FunnelKit accepts scratch step types and JSON step designs, resolves checkout embed templates, and reports missing builders or incomplete imports. If a hook throws after a step is stored, the failure is recorded without replay; observed new step IDs are marked unverified until their ownership is checked.
-
Changed: Plugins and Themes tabs on the Tools screen are one compact row per integration. Each row shows the integration's Read and Write switches side by side with their operation counts and any requirement ("Needs Polylang"); opening a row shows each tool's description, slug and operations and the integration's note. Integrations that share a group sit under one heading, and the per-group Enable and Disable buttons are gone from these two tabs (Bulk Actions still applies). Other tabs keep the card grid.
-
New: Site-local management access policy. An optional administrator allowlist decides who may open EMCP's screens and use its admin endpoints, with the same checks on every screen, REST route, admin-post and AJAX action, protection against stale updates and self-lockout, and host WP-CLI recovery (
wp emcp management-access recover). While a list is set, EMCP Themer follows it too: templates have their own capabilities, so anyone off the list, administrators and editors alike, loses the Themer menu, list, editors, REST routes and Themer tools; with the default policy editors keep page-level access to Themer as before, and the Themer condition search works for them again. The list can also be set in wp-config.php withdefine( 'EMCP_TOOLS_MANAGEMENT_ADMINS', '1,5' );(or an array of IDs, or'all'to keep every administrator): the constant overrides the saved setting, the screen shows it read-only and flags listed IDs that are not administrators, saves and WP-CLI recovery refuse to change it, and an invalid value keeps management closed until it is fixed. Other MCP execution identities and permissions stay separate, and settings sync never overwrites the local policy. -
New: Managed configuration for Cloud profiles. Read-only inspection of a fixed settings allowlist (no credentials, licences or free-text context), confirmed apply with a durable receipt, and conflict-aware rollback, written atomically with before-images. Needs the matching Cloud and Gateway rollout; deployment is off by default in Cloud.
-
New: Unattended Cloud enrollment. Workspace owners can issue short-lived grants with a fixed site allowance.
wp emcp cloud onboard --phase=enrolland the manifest runner consume grants from the environment, preserve workspace and clone checks, and resume after transient failures. Enabling Gateway requires explicit consent. Requires bulk enrollment enabled in the matching Cloud deployment. -
Fixed: Connection step 3 with an existing application password. The chosen password stays selected while the setup opens, and the screen explains that WordPress keeps only a hash, so the saved password is pasted once and the configs fill in. The paste field is now a plain text field that appears only after a password is chosen, so browsers no longer fill it with the WordPress login password, and the configs fill only from text in WordPress's application password format (a login password filled in earlier ended up in the Basic header). The ChatGPT App form guide is laid out as an aligned table again, the "Copy it now" notice no longer runs into the steps below it, and the password list fills its field.
-
Changed: The Facebook community invitation moved into EMCP's announcement bar. It no longer appears as a banner on the WordPress Dashboard; it rotates with the other announcements on EMCP's own screens. The What's new announcement describes 3.19.0, and Management access sits below Page Builders in the sidebar.
-
Fixed: Meta Box and ACF switches on the Tools screen follow their plugin. Without Meta Box installed its Read and Write switches looked live, because a catalog entry with no availability flag counted as available (the tools themselves never registered). Both integrations now show "Needs Meta Box" or "Needs Advanced Custom Fields" and greyed-out switches until the plugin is active.
-
Fixed: Cloud refresh throttling no longer asks for reconnection. Temporary HTTP 408, 429 and server errors retain the saved connection and defer refresh using Retry-After, with a bounded fallback. Successful refresh clears the cooldown; rejected credentials still require reconnection.
-
New: Operator-run Cloud onboarding.
wp emcp cloud onboardprovides local preflight, workspace-pinned Cloud approval and resumable Gateway setup with a health check. The includedbin/cloud-onboard.mjsprocesses manifests one site at a time and reports partial results. The prepare flow requests browser approval for each site; unattended enrollment requires an owner-issued grant. Licence activation and WordPress Multisite are outside this workflow. Requires the matching Cloud service update. -
New: Cloud protection for cloned sites. Cloud connections record the WordPress home URL and block copied credentials when that URL changes. Connection > Cloud provides an explicit action to give the copy its own identity before reconnecting, preserving the source site's Cloud connection. Older connections without a recorded URL and copies using the same URL require manual separation. A legitimate URL move also requires reconnection.
Builds FunnelKit funnels and email automations over MCP (#143, #144), translates sites with Polylang and TranslatePress, builds TablePress tables, Tutor LMS and LifterLMS courses, The Events Calendar events, Amelia bookings, FluentCRM contacts, campaigns and automations, and MailPoet subscribers, newsletters and automations: new Pro tools drive each plugin through its own controllers, with confirm, dry run and History undo.
- New: FunnelKit Funnel Builder write tool (Pro, #143).
funnelkit-writecreates and changes funnels and steps, checkout products (with discounts) and fields, order bumps, upsells and downsells, opt-in and thank-you pages, A/B tests and the store checkout, and imports FunnelKit templates and funnel exports. Deletes needconfirm: true; creates and updates acceptdry_run: true, which reports the exact request and, for checkout products, the price a buyer pays. Every write is recorded in History and most can be undone there, including deleting a step with its order bumps. The tool ships disabled; enable it under Tools > Plugins > FunnelKit. - New: FunnelKit Automations read and write tools (Pro, #144).
funnelkit-automations-readlists automations and their stats, contacts (as compact rows: id, email, tags, lists), tags, lists, fields, audiences, broadcasts, templates, form feeds, link triggers, carts, email reports and allowlisted settings.funnelkit-automations-writebuilds automations step by step (event, delay, email, tag and other actions), manages contacts, tags, lists and fields, and drafts, schedules and sends broadcasts. Anything that sends or deletes needsconfirm: true; a broadcast's dry run reports how many contacts would receive it. API keys, connectors, licences and plugin installs are never reachable, and settings outside a short allowlist are refused. The write tool ships disabled. - New: History records actions it cannot undo, with the reason. Sending a broadcast, putting contacts into an automation, deleting automations with their contact runs and similar actions are listed in History with why they cannot be rolled back, and the tools say so before you confirm.
- Changed:
funnelkit-readcovers the whole funnel. Besides f...
EMCP Tools 3.18.1
EMCP Tools 3.18.1
Patch release: fixes a missing MCP endpoint on sites running Elementor 4.3.3 with Elementor's own MCP server switched off, keeps link buttons readable when clicked, and adds a Cloud connection status to the top bar.
- Fixed: The MCP endpoint no longer goes missing with Elementor 4.3.3. When Elementor's own MCP feature is off, Elementor 4.3.3 turns off the MCP adapter's default server. EMCP relied on that server to load the WordPress abilities, so it saw no tools and never registered
/wp-json/mcp/emcp-tools-server: AI clients got a 404rest_no_routewhile the Connection screen still reported the server as enabled and OAuth discovery looked healthy. EMCP now loads the abilities itself before registering its server. Verified on a live site with Elementor 4.3.3 over OAuth. - Fixed: Link buttons keep their colours when clicked. Buttons that are links (such as Export as plugin) turned blue on blue after a click, because WordPress's link styles overrode them. Every button style now keeps its text colour on hover, click and focus, and keyboard focus shows the admin's own focus ring.
- New: Cloud connection status in the top bar. While the Cloud module is on, a pill beside Server online shows Cloud connected, Cloud needs attention or Cloud not connected, and links to the Cloud section of the Connection screen.
- New: The free Prompts and Brand Kits screens show what Pro adds. A banner on each lists the Pro library (100+ prompts; 50 brand kits) with a link to upgrade. Pro sites do not see it.
- Changed: The free zip no longer includes the admin source files. The free download now holds only the files the plugin runs; the admin screens' source and build setup are in the public GitHub repository, tagged per release. The Pro download still includes its source.
Downloads and updating
- Free: download the attached
emcp-tools-3.18.1.zip, or update from your WordPress dashboard. The admin source is in this repository at tagv3.18.1. - Pro: update through Freemius with an active license.
- If an AI client could not connect (a 404 from
/wp-json/mcp/emcp-tools-server), update, then reconnect it.
Requires WordPress 6.9+ and PHP 8.1+.
EMCP Tools 3.18.0: A redesigned admin
EMCP Tools 3.18.0
A redesigned admin that shows what your AI did: a Dashboard, guided connection setup, History sessions with diffs and undo, and an MCP Log. Also adds the Themer Loop Builder, Sandbox Plugin Export, scheduled backups, OpenCode in AI Chat, and fixes for #151 and #152.
Release article: https://emcptools.com/blog/emcp-3-18-0/
-
New: Works alongside Elementor's own MCP server. Elementor 4.3 ships a built-in MCP server; both now run side by side on the same site. EMCP's Elementor tools follow the same safety rule as Elementor's: a write to a page that another user has open in the Elementor editor with unsaved changes is refused (nothing is written), and every successful write tells an open editor that the page changed. When Elementor's server is on, EMCP's server instructions tell a connected agent which server to use for which job. The admin bar item now reads EMCP instead of MCP, so it is not mistaken for Elementor's.
-
Fixed: Brand Kits tab missing. The Brand Kits tab was hidden whenever Elementor was not the selected page builder. It now follows its module switch only, like Templates, and explains on the page when Elementor is not active.
-
Fixed: The Skills tab follows the Agent Skills module. Switching the module off now removes Skills from the sidebar and the Dashboard, like the other module tabs.
-
Fixed: A restored backup no longer brings back its own "running" record (Pro). A backup stored its own in-progress backup and job rows, so after a full restore History listed a stale 0-byte backup. Backups now leave out EMCP's backup and job tables, and a restore keeps the site's own backup history, so archives made before this update restore cleanly too.
-
Fixed: Bricks 2.4 compatibility. The Bricks integration can be enabled on 2.4.x after native verification on 2.4.1. Updated the compatibility gate, admin requirements and bundled guidance.
-
New: Loop Items, Loop Grid and Loop Carousel in EMCP Themer (free). A new
looptemplate type holds one post card, and two new Elementor widgets and two new Gutenberg blocks repeat it. Loop Grid: responsive columns, masonry, equal height, a wider first card, hover and entrance effects, and pagination as numbers, previous/next, a load more button or infinite scroll, with a page reload or AJAX. Loop Carousel: slides per view, autoplay, loop, fade and coverflow effects, centered slides, peek offsets, arrows and three dot styles. The card is built with either builder and works in both: an Elementor card can be repeated by the Gutenberg block and the other way round. Every field inside a card shows that card's post, including Themer dynamic sources, Elementor dynamic tags, ACF fields and core post blocks. Queries cover posts of any type, the current archive, related posts, a manual selection and WooCommerce products. The free tier includes one Loop Item and every widget and block option; EMCP Pro adds unlimited Loop Items and, for the Loop Grid widget, alternate templates at chosen grid positions. The Themer MCP tools accepttype: loopand apreviewargument and the widgets are in the widget catalog, so an agent can build a card and place a grid end to end. No new MCP tools. -
Fixed: Themer dynamic images and links in Elementor. Binding the Featured Image, Site Logo or Author Avatar source to an Elementor image or background no longer crashes the page, and in a Loop Grid every card shows its own background again. The Featured Image size setting now takes effect, so a block binding that sets a size now shows that size. The Fallback setting works again on the Themer link sources, including fallbacks saved before this update. EMCP Pro: Author Avatar, Term Name and Term URL now show their values instead of staying empty; a card in a loop shows its own term. If a dynamic tag from another plugin fails, the page still renders without that tag's styles instead of breaking.
-
New: OpenCode Go and OpenCode Zen in AI Chat (Pro, #150). OpenCode's Go subscription and its pay-as-you-go Zen API join Anthropic, OpenAI, OpenRouter and Gemini as AI Chat providers, each with its own key. OpenCode's API does not accept requests from a browser, so AI Chat sends OpenCode turns through a server relay that only ever talks to OpenCode's fixed address, keeps your key on the server (it is never shown in the browser), and allows two replies at a time per user. Each model is routed to the API style OpenCode documents for it. Gemini models on Zen use Google's own format and are not offered there; use the Gemini provider for them. Zen's free models are hidden too: OpenCode limits them to its own client and says data sent to some of them may be used for training. A key is first checked on your first chat. OpenCode describes Go as designed for OpenCode and similar coding agents, so review its terms before using it for page building. Zen bills a prepaid balance and, by default, reloads $20 when it drops below $5.
-
Fixed: Blank padding and margin sides are no longer saved (#151). Sending a padding, margin, border radius or border width with one to three sides left blank used to save the blank value, and Elementor then dropped the whole rule, including the sides that were set. Now an update fills the blank sides from the saved value when it is complete and uses the same unit; otherwise the setting is not written and the saved value stays as it was. New elements, imported templates and page content leave the partial value out. The warning says exactly which of these happened. This covers every tool that writes element or page settings, widget spacing controls such as button padding, and tablet and mobile values.
-
Fixed: Curated widget settings match Elementor's real controls (#152). 55 of the curated widget parameters that get-widget-schema lists had names Elementor does not use (for example
object_fiton the image widget, which isobject-fit), so values sent under them were saved and ignored. All 55 are corrected or removed, and every catalog option list and default now uses values Elementor accepts: that fixes progress bars added with the default settings never showing their percentage, code blocks never showing line numbers or the copy button, and size defaults that rendered nothing. The bundled skill helpers send the real names too. The widget tools now warn when a setting is not a control of that widget, with the likely correct name. Values sent earlier under the old names never took effect; send them again under the new names. -
Changed: EMCP Themer is off by default on new installs. Turn it on from EMCP Tools > Modules to use the theme builder and the new Loop Items, Loop Grid and Loop Carousel. Sites that already have Themer on keep it on after updating.
-
New: Starter prompts in AI Chat (Pro). A new chat shows six suggested prompts above the message box, drawn from 20 site tasks on the AI Chat page (landing, About, Contact and FAQ pages, blog posts, brand colors and fonts, SEO, accessibility, speed and security checks) and 15 page tasks in the Elementor and block editor panels. Your most used prompt always comes first and the rest are shuffled from the ones you have not tried yet, so each new chat suggests something new. Usage is remembered per user. A click puts the prompt in the box for you to finish, with any [placeholder] selected. Developers can change the list with the
emcp_ai_chat_suggestionsfilter. -
New: Sandbox Plugin Export (Pro module, on by default). Sandbox > Export as plugin packages every ACTIVE Sandbox widget, block and PHP snippet as a standalone WordPress plugin ZIP that keeps working after EMCP Tools is deactivated. Widget types, block names, snippet functions, the
[emcp_snippet]shortcode, asset handles and theemcp-customcategory are preserved verbatim, so existing pages keep rendering. Widgets that use thequery,shortcodeorremotecontrols get the runtime they call bundled underincludes/lib/; remote API keys are read fromEMCP_TOOLS_REMOTE_KEY_*constants (placeholders inconfig.php, embedding is opt-in). The exported plugin decides ownership onplugins_loaded(priority 50): it stays dormant while EMCP Tools is active or another export owns the site, and takes over on the first request after EMCP is deactivated. The ZIP is built in a directory verified to sit outside every web-served path, streamed once and deleted. It is on by default for licensed sites and can be switched off on the Modules tab; while it is on, the Sandbox overview shows a fourth card. -
New: A redesigned admin. Every EMCP Tools screen was rebuilt inside one frame: a grouped sidebar with counts, a search palette (Ctrl or Cmd + K) over screens, tools, prompts and templates, a notifications drawer, a save bar that warns before you leave with unsaved changes, and a recovery panel if a screen fails to load. Tools, Modules, Page Builders, Connection, Prompts, Brand Kits, Templates, Marketplace, Context, Skills, Memory, the Sandbox screens, AI Chat, History, Backup & Migrate, Redirects, the MCP Log, the Dashboard and the Changelog are all new. The old screens, their scripts and the admin-ajax handlers only they used are removed. No MCP tools were added or removed.
-
New: Dashboard. What your AI did over the last 7, 14 or 30 days: changes kept and rolled back per day, tool calls and errors (Templates applied and Prompts copied on Pro), the most used tools, the five newest changes with Undo, and a health strip for the MCP server, connected clients, tools and version. Needs your attention lists what to act on: the MCP server switched off, changes History could not record, sandbox items awaiting review, disabled tools, plugin and theme updates, EMCP Cloud disconnected while Marketplace items depend on it, and on Pro no backup in 14 days or a failed scheduled backup. A dismissed item comes back when its situation changes.
-
New: Guided connection setup. The Connection screen walks y...