WP Manifestindependent plugin directory
manifest / ai / elementor-mcp

Elementor MCP WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA

WordPress plugin that bridges AI assistants with Elementor page creation via REST API, webhooks, in-admin chat panel, site cloning, and template generation.

★ 0stars
v1.8.0latest · 1mo ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/usermp/elementor-mcp/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Machine Content Producer — bridge between AI assistants and WordPress/Elementor for automated page creation.

A REST API + webhook plugin that lets external AI services (OpenCode, custom LLM clients, automation scripts) create, read, update, and delete Elementor pages and templates programmatically.

✨ Features

  • 📄 Pages CRUD — full lifecycle management of WordPress pages with Elementor data
  • 🎨 Templates CRUD + Kit management — work with elementor_library posts and the active site Kit
  • 🚀 Bulk creation — batch endpoint (up to 50 pages per request) with per-item error reporting
  • 🔗 Webhook receiver — HMAC-SHA256 signed payloads, dispatches page.create / page.update / page.delete / template.create / ping
  • 🤖 AI chat panel — in-admin conversation UI that talks to OpenRouter (or any OpenAI-compatible endpoint) and generates Elementor JSON on demand
  • 🧠 AI client — MCP_OpenCode_Client with a hardened system prompt, fenced-JSON extraction, fallback parsing, and temperature/token clamping
  • 📥 JSON importer — accepts bare sections arrays, Elementor export envelopes, or single-element objects; drops blocked types, regenerates IDs, sanitizes settings, enforces depth/element caps
  • 🔍 Diff engine — preview added/removed/modified/moved operations before applying AI output to an existing page
  • 🔐 WordPress Application Password auth — standard WP capability checks (edit_pages, manage_options)
  • ⚡ Action Scheduler integration — background jobs with automatic WP-Cron fallback
  • 🛡️ Rate limiting — per-user and per-IP buckets via transients
  • 🧩 Custom Elementor widget — MCP Info Card with editable controls
  • 🪝 Editor hooks — listen to elementor/save_post, elementor/editor/after_save
  • 🔁 Idempotency — X-Idempotency-Key header or idempotency_key body field
  • 📊 In-option logger — last 200 events, viewable in admin
  • 🧪 Self-contained test runner — 99 tests, no PHPUnit required
  • 🗑️ Clean uninstall — strips every mcp_* option and meta on plugin deletion

📦 Requirements

  • WordPress 6.5 or higher
  • PHP 7.4 or higher
  • Elementor 3.x (Pro recommended for dynamic tags; the plugin itself works with Free)

🚀 Installation

# 1. Clone into your plugins directory
cd wp-content/plugins/
git clone https://github.com/usermp/elementor-mcp.git

# 2. Activate from WP Admin → Plugins
# 3. Open MCP → Settings to copy your webhook secret
# 4. Users → Profile → Application Passwords → create one for API auth

🔌 REST API

All endpoints live under the /wp-json/mcp/v1/ namespace. Authentication is HTTP Basic with your WordPress username + an Application Password.

Method Endpoint Description
POST /pages Create a page (title + Elementor data)
GET /pages List pages (paginated)
GET /pages/{id} Get a single page with _elementor_data
PUT /pages/{id} Update title/content/Elementor JSON
DELETE /pages/{id} Delete a page
POST /pages/batch Create up to 50 pages in one request
POST /templates Create an Elementor template
GET /templates List templates
GET /templates/{id} Get a template
PUT /templates/{id} Update a template
DELETE /templates/{id} Delete a template
GET /kit Get the active Elementor Kit
PUT /kit Set the active Kit by post ID
POST /webhook Receive HMAC-signed events
POST /chat Generate Elementor JSON from a prompt (used by the in-admin chat panel)
POST /chat/apply Apply an AI-generated (or imported) Elementor payload to a page

Example: create a page with Elementor data

curl -u "admin:xxxx xxxx xxxx xxxx" \
     -H "Content-Type: application/json" \
     -d '{
           "title": "Landing Page",
           "status": "draft",
           "elementor": {
             "data": [
               {"id":"a1","elType":"section","settings":{},"elements":[
                 {"id":"b1","elType":"column","settings":{},"elements":[
                   {"id":"c1","elType":"widget","widgetType":"heading","settings":{"title":"Hello!"}}
                 ]}
               ]}
             ]
           }
         }' \
     https://example.com/wp-json/mcp/v1/pages

🪝 Webhook Authentication

Compute HMAC-SHA256(raw_body, webhook_secret) and send it in the X-MCP-Signature header. The raw body must be JSON with at least an event field.

BODY='{"event":"page.create","title":"Hi"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')

curl -X POST https://example.com/wp-json/mcp/v1/webhook \
     -H "Content-Type: application/json" \
     -H "X-MCP-Signature: $SIG" \
     -d "$BODY"

🧰 Architecture

elementor-mcp.php              ← Plugin bootstrap, autoloader, lifecycle hooks
includes/
├── class-plugin.php           ← Singleton orchestrator
├── class-autoloader.php       ← PSR-4 style autoloader with fail-soft pending classes
├── class-activator.php        ← Default options on activation
├── class-deactivator.php
├── admin/
│   ├── class-settings.php     ← MCP → Settings admin page
│   └── class-chat-page.php    ← MCP → Chat admin page (AI chat UI)
├── api/
│   ├── class-rest-controller.php  ← /wp-json/mcp/v1/* routes
│   ├── class-webhook-handler.php  ← HMAC + dispatch
│   ├── class-auth.php             ← Signature & nonce helpers, idempotency
│   ├── class-rate-limiter.php     ← Per-user / per-IP buckets
│   └── class-chat-rest.php        ← /chat and /chat/apply handlers
├── services/
│   ├── class-page-builder.php     ← wp_insert_post + Elementor meta writer
│   ├── class-template-manager.php ← Templates + Kit
│   ├── class-importer.php         ← Elementor JSON importer (envelope/bare/single)
│   ├── class-diff-engine.php     ← Elementor tree diff (add/remove/modify/move)
│   └── class-opencode-client.php  ← AI client (OpenAI-compatible chat completions)
├── elementor/
│   ├── class-widget-base.php      ← Abstract widget base
│   ├── class-control-register.php ← Widget & control registration
│   ├── class-editor-hooks.php     ← elementor/save_post etc.
│   └── widgets/class-widget-info-card.php
├── jobs/class-queue.php           ← Action Scheduler + WP-Cron fallback
└── utils/
    ├── class-validator.php
    └── class-logger.php           ← In-option rolling log (200 entries)

🛣️ Roadmap

  • [x] REST API for pages/templates/Kit
  • [x] Webhook with HMAC verification
  • [x] Action Scheduler + WP-Cron fallback
  • [x] Rate limiting
  • [x] Custom Elementor widget
  • [x] AI client (MCP_OpenCode_Client) with system prompt + clamps
  • [x] Elementor JSON importer with sanitization + blocked-widget list
  • [x] Diff engine for previewing AI changes
  • [x] In-admin chat panel + REST endpoints for AI generation and apply
  • [x] Test runner with 99 tests across OpenCode/Importer/Diff/Chat flow
  • [ ] MCP_History_Page — chat session history viewer
  • [ ] MCP_GDPR — personal data exporter/eraser hooks
  • [ ] PHPUnit test coverage that runs inside a real WP install

📝 Changelog

See readme.txt for the WordPress.org changelog.

📄 License

GPL-2.0-or-later © Mohammad Yeganeh

Releases

3 releases.

Tag
Published
v1.8.0 latest
Sep 4, 2026 1mo ago
Sep 3, 2026 1mo ago
Sep 2, 2026 1mo ago

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.

A grade

Security

Elementor MCP 1.8.0 · audited by WP Registry

No security issues found.

Audited release
1.8.0
Findings
none
Worst severity
—
Content hash
5b74faa3d3398130e8fde178…

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.