Skip to main content
Glama
heaventree

elementor-mcp

by heaventree

Elementor MCP

Ein MCP-Server für die Arbeit an mit Elementor erstellten WordPress-Seiten – Lesen der Seitenstruktur, Bearbeiten von Widgets, Verwalten globaler Design-Tokens – und das, ohne etwas zu beschädigen.

Elementor speichert das gesamte Seitenlayout als JSON-Blob in einem geschützten Postmeta-Schlüssel (_elementor_data). Die WordPress-REST-API kann diesen weder lesen noch schreiben, weshalb generische WordPress-MCP-Server zwar deine Seiten auflisten, aber nicht auf deren Inhalt zugreifen können. Dieses Projekt schließt diese Lücke.

Was du bekommst

  • 50 Tools für Seitenstruktur, Element-Operationen, Widget-Schemas, globales Design, Vorlagen, Verlauf und seitenweite Suche.

  • Live-Widget-Schemas. Steuerungsdefinitionen werden aus dem eigenen Elementor-Registry der Zielseite gelesen, sodass das Schema genau die Widgets beschreibt, die auf dieser Seite installiert sind – Core, Pro und jede Drittanbieter-Erweiterung – statt einer fest codierten Liste, die veraltet.

  • Sichere gleichzeitige Schreibvorgänge. Jeder Schreibvorgang trägt den Inhalts-Hash, mit dem die Seite gelesen wurde, und wird abgelehnt, wenn sich die Seite in der Zwischenzeit geändert hat. Keine stillen Überschreibungen.

  • Rückgängig machen. Jeder Schreibvorgang erstellt zuerst einen Snapshot des Layouts. elementor_restore_snapshot macht die letzte Änderung rückgängig.

  • Atomare Stapel. Mehrstufige Umstrukturierungen werden als ein Vorgang angewendet oder gar nicht – eine Seite wird nie halb bearbeitet zurückgelassen.

  • Multi-Site. Ein Server kann viele WordPress-Installationen bedienen, jede über einen Namen adressierbar, jede unabhängig als schreibgeschützt markierbar.

Related MCP server: elementor-mcp-agent

Architektur

Zwei Komponenten, weil keine allein funktioniert:

MCP client  ──stdio──▶  elementor-mcp (Node)  ──REST──▶  WordPress
                                                          ├── Elementor MCP Bridge (this repo)
                                                          └── Elementor

plugin/elementor-mcp-bridge/ – ein WordPress-Plugin, das einen REST-Namespace elementor-mcp/v1 bereitstellt. Es liest und schreibt Elementor-Dokumente über Elementors eigene Document::save()-Methode (derselbe Pfad, den auch der Editor verwendet, sodass Bereinigung, Revisionen und CSS-Regenerierung korrekt ablaufen) und untersucht das Live-Widget-Registry für Schemas.

src/ – der MCP-Server. Er hält den Elementbaum in seinem eigenen Prozess und erledigt die strukturelle Arbeit dort, sodass eine 400-KB-Seite bearbeitet werden kann, ohne dass dieses JSON jemals in den Kontext des Modells gelangt.

Diese Aufteilung ist bewusst gewählt. Die Baum-Operationen liegen in TypeScript, wo sie mit 59 Testfällen unit-getestet werden; die PHP-Seite bleibt schlank und delegiert an Elementor.

Installation

1. Das Bridge-Plugin

Erstelle ein installierbares ZIP und lade es über Plugins → Neu hinzufügen → Plugin hochladen in wp-admin hoch:

./scripts/package-plugin.sh
# build/elementor-mcp-bridge-1.0.0.zip

Das Skript weigert sich zu bauen, wenn eine Datei php -l nicht besteht, sodass ein defektes Plugin nicht verpackt werden kann.

Oder installiere es direkt:

rsync -a plugin/elementor-mcp-bridge/ user@host:/var/www/site/wp-content/plugins/elementor-mcp-bridge/
wp plugin activate elementor-mcp-bridge     # or activate in wp-admin

Erfordert WordPress 5.9+, PHP 7.4+ und Elementor 3.x oder 4.x.

Bestätige, dass es aktiv ist:

curl -u 'user:app password' https://example.com/wp-json/elementor-mcp/v1/status

Unter Windows ist curl ein Alias für Invoke-WebRequest und akzeptiert kein -u. Verwende stattdessen das mitgelieferte Diagnose-Tool, das nacheinander Erreichbarkeit, REST-API, Plugin-Aktivierung und Anmeldedaten prüft, sodass ein Fehler dir sagt, welcher Teil fehlgeschlagen ist:

.\scripts\Test-Bridge.ps1 -SiteUrl https://example.com -Username admin -AppPassword 'abcd efgh ijkl mnop'

Oder erzwinge echtes curl mit curl.exe statt des Alias.

2. Ein Anwendungspasswort

Gehe in wp-admin zu Benutzer → Profil → Anwendungspasswörter, füge eines mit dem Namen elementor-mcp hinzu und kopiere den generierten Wert. Dies ist nicht das Login-Passwort des Kontos; es kann unabhängig widerrufen werden.

Das Bridge-Plugin prüft bei jeder Route eine echte WordPress-Fähigkeit, sodass der Agent nur das tun kann, was dieser Benutzer von Hand tun könnte. Gib ihm ein Konto mit der geringsten Rolle, die deinen Anwendungsfall abdeckt – Editor reicht normalerweise, Administrator nur, wenn du seitenweite Design-Einstellungen ändern musst.

3. Der Server

npm install
npm run build

Konfiguration

Einzelne Seite:

WORDPRESS_URL=https://example.com
WORDPRESS_USERNAME=your-user
WORDPRESS_APP_PASSWORD="abcd efgh ijkl mnop qrst uvwx"

Mehrere Seiten – setze ELEMENTOR_MCP_SITES auf ein JSON-Array:

[
  { "name": "live",    "url": "https://example.com",         "username": "u", "appPassword": "..." },
  { "name": "staging", "url": "https://staging.example.com", "username": "u", "appPassword": "...", "readOnly": true }
]

Variable

Zweck

WORDPRESS_URL / WORDPRESS_USERNAME / WORDPRESS_APP_PASSWORD

Anmeldedaten für eine einzelne Seite

ELEMENTOR_MCP_SITES

JSON-Array oder nach Namen verschlüsseltes Objekt von Seitenprofilen

ELEMENTOR_MCP_CONFIG

Pfad zu einer JSON-Datei mit derselben Struktur

ELEMENTOR_MCP_DEFAULT_SITE

Welches Profil die Tools verwenden, wenn site weggelassen wird

ELEMENTOR_MCP_READ_ONLY

true verweigert jeden Schreibvorgang, auf allen Seiten

ELEMENTOR_MCP_TIMEOUT_MS

Zeitüberschreitung pro Anfrage, Standard 30000

Einen Client verbinden

Claude Code:

claude mcp add elementor -- node /path/to/elementor-mcp/dist/index.js

Oder durch direktes Bearbeiten einer MCP-Client-Konfiguration:

{
  "mcpServers": {
    "elementor": {
      "command": "node",
      "args": ["/path/to/elementor-mcp/dist/index.js"],
      "env": {
        "WORDPRESS_URL": "https://example.com",
        "WORDPRESS_USERNAME": "your-user",
        "WORDPRESS_APP_PASSWORD": "abcd efgh ijkl mnop qrst uvwx"
      }
    }
  }
}

So verwendest du es richtig

Die Tool-Beschreibungen weisen darauf hin, aber hier die Kurzfassung:

  1. elementor_site_status einmal pro Seite – Versionen, Widget-Anzahl, was der authentifizierte Benutzer tun darf.

  2. elementor_get_outline, um Element-IDs zu erhalten. Greife nicht zu elementor_get_page_tree, es sei denn, du brauchst wirklich jede Einstellung; Outlines sind nur ein Bruchteil der Größe.

  3. elementor_get_widget_schema, bevor du unbekannte Widget-Einstellungen setzt. Steuerungsnamen sind nicht erratbar, und ein falscher Schlüssel wird still gespeichert ohne sichtbaren Effekt – das ist der häufigste Grund, warum Elementor-Automatisierung schiefgeht.

  4. elementor_batch_edit für alles Mehrstufige.

  5. elementor_render_page, um das Ergebnis zu bestätigen.

Responsive Einstellungen verwenden _tablet- und _mobile-Suffixe (padding, padding_tablet, padding_mobile); das Schema markiert, welche Steuerungen responsiv sind, und nennt die genauen Schlüssel.

Sicherheitsmodell

Anliegen

Wie es gehandhabt wird

Gleichzeitige Bearbeitung

Schreibvorgänge tragen den Hash, der beim Laden gelesen wurde; eine geänderte Seite gibt 409 zurück und der Server versucht es einmal mit frischen Daten erneut

Fehler

Jeder Schreibvorgang erstellt zuerst einen Snapshot des Layouts; elementor_restore_snapshot macht die letzte Änderung rückgängig

Halbfertige Bearbeitung

Stapel werden im Speicher angewendet und validiert, bevor ein einziger Schreibvorgang erfolgt; ein fehlgeschlagener Vorgang schreibt nichts

Beschädigte Bäume

Doppelte IDs, Widgets mit Kindern und Widgets ohne widgetType werden vor dem Schreiben abgelehnt

Destruktive Operationen

Dauerhaftes Löschen und seitenweites Ersetzen benötigen EMCP_ALLOW_DESTRUCTIVE auf der Seite und confirm: true

Seitenweites Ersetzen

Standardmäßig ein Probelauf, der jede betroffene Seite meldet

Berechtigungen

Jede Route prüft eine echte WordPress-Fähigkeit für den authentifizierten Benutzer

Veraltetes CSS

Elementors gecachtes CSS wird nach jedem Schreibvorgang geleert, sodass Änderungen tatsächlich sichtbar werden

Um dauerhaftes Löschen und festgeschriebene seitenweite Ersetzungen zu erlauben, füge in wp-config.php hinzu:

define( 'EMCP_ALLOW_DESTRUCTIVE', true );

Tools

Vollständige Referenz in docs/TOOLS.md. Nach Bereichen:

  • Seitenelementor_list_sites, elementor_site_status, elementor_native_mcp_call

  • Seiten – Liste, Abruf, Outline, Erstellen, Duplizieren, Löschen, Rendern, Metadaten aktualisieren, vollständiger Baum

  • Elemente – Abruf, Suche, Widget hinzufügen, Container hinzufügen, Aktualisieren, Verschieben, Duplizieren, Löschen, Neu anordnen, Umwickeln, Stapelbearbeitung, Baum ersetzen

  • Widgets – Liste, Schema, Elementtypen, dynamische Tags

  • Design – Globals, globale Farbe setzen, Globals aktualisieren, benutzerdefiniertes CSS, globale Klassen, CSS leeren

  • Vorlagen – Liste, Abruf, Speichern, Anwenden, Exportieren, Importieren

  • Verlauf – Snapshots (Liste/Erstellen/Wiederherstellen), Revisionen (Liste/Wiederherstellen)

  • Inhalt – Suche, Suchen und Ersetzen, Widget-Nutzung, Medienliste, Bild-Upload

Elementors eigenes MCP-Modul

Elementor 4.3 enthält ein eingebautes MCP-Modul, das hinter der WordPress-Abilities-API liegt und sich auf v4-Atomfunktionen konzentriert – globale Klassen, Variablen, Komponenten, Kompositionen. Wo es vorhanden ist, leitet elementor_native_mcp_call direkt dorthin weiter, sodass du diese Fähigkeiten zusätzlich zu allem hier erhältst.

Es ist kein Ersatz für diesen Server: Es erfordert Elementor 4.3+ mit installierten optionalen Abhängigkeiten und deckt nicht das klassische Abschnitt/Spalte/Widget-Modell ab, auf dem die überwältigende Mehrheit der aktiven Elementor-Seiten basiert. elementor_site_status meldet, ob es verfügbar ist.

Entwicklung

npm run build            # compile
npm test                 # 59 unit tests
npm run typecheck        # source and tests
npm run smoke            # boot the server and exercise the MCP handshake
npm run docs             # regenerate docs/TOOLS.md from the running server
php tests/plugin-load.php   # load the plugin and register all 32 routes
./scripts/package-plugin.sh # build the installable zip

tests/plugin-load.php lädt das Bridge-Plugin gegen gestubbte WordPress-Funktionen und stellt sicher, dass jede Route einen aufrufbaren Handler und einen Berechtigungs-Callback hat. Es ist kein Ersatz für eine echte Seite, aber es fängt die Aktivierungsfehler ab, die ein ZIP sonst bis zum Upload verbergen würde.

Lizenz

MIT. Siehe LICENSE.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for AI-assisted WordPress editing across 12 page builders. 172 tools for content management, page builder editing, WooCommerce, SEO analysis, accessibility scanning, and site intelligence. Edits native builder formats (Elementor, Bricks, Divi, Gutenberg, Beaver Builder, and 7 more) with duplicate-before-edit safety, optimistic locking, and surgical element-level operations
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Agency-grade MCP server for WordPress Elementor — multi-site management for 120+ WordPress sites with safe edits (backup + auto-rollback + post-write verification), template export/import, global widget detection, CSS flush, WP-CLI escape hatch, and headless Chrome screenshots. 34 tools across pages, widgets, templates, bulk find/replace, and fleet operations.
    34
    90
    3
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/heaventree/elementor-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server