Skip to main content

siteagent-elementor-studio

Helps with WordPress + Elementor work via the elementor-mcp MCP server — building new pages, editing existing ones, inspecting site state, or exploring what's possible. Auto-detects Elementor Pro (native Form, Theme Builder, Loop Grid, Popups, Dynamic Tags, Sticky/Motion vs free-tier workarounds) AND the page engine (classic vs Elementor 4 atomic/V4 — atomic uses add-flexbox/add-atomic-* tools since classic writes don't persist on a V4 page). Detects ACF + Crocoblock/JetEngine for dynamic-data binding (Tier-0; bind ACF via Pro dynamic tags, place Jet widgets via add-widget with runtime-verified types). On atomic (V4) sites, authors the Elementor 4 design system — Global Classes, Variables (design tokens), and per-element Interactions — and recovers from the fork's schema-in-error and governance responses. Asks what the user wants before acting. Use when the user references the Elementor MCP, invokes `/siteagent-elementor-studio`, or runs `mcp__elementor__elementor-mcp-*` tools. Also covers initial install of

ソース情報

リポジトリ
Digitizers/siteagent-elementor-studio
ソースの最終更新活動
2026年9月14日 23:03
検出された SKILL.md の言語
英語
スター
4
フォーク
1

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
19 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
siteagent-elementor-studio
version
1.7.1
license
MIT
description
Helps with WordPress + Elementor work via the elementor-mcp MCP server — building new pages, editing existing ones, inspecting site state, or exploring what's possible. Auto-detects Elementor Pro (native Form, Theme Builder, Loop Grid, Popups, Dynamic Tags, Sticky/Motion vs free-tier workarounds) AND the page engine (classic vs Elementor 4 atomic/V4 — atomic uses add-flexbox/add-atomic-* tools since classic writes don't persist on a V4 page). Detects ACF + Crocoblock/JetEngine for dynamic-data binding (Tier-0; bind ACF via Pro dynamic tags, place Jet widgets via add-widget with runtime-verified types). On atomic (V4) sites, authors the Elementor 4 design system — Global Classes, Variables (design tokens), and per-element Interactions — and recovers from the fork's schema-in-error and governance responses. Asks what the user wants before acting. Use when the user references the Elementor MCP, invokes `/siteagent-elementor-studio`, or runs `mcp__elementor__elementor-mcp-*` tools. Also covers initial install of the MCP Adapter + elementor-mcp plugins, app-password auth wiring, schema-loading discipline, and the widget-vs-HTML decision tree. SKIP for Bricks, Divi, Beaver Builder, or non-Elementor WordPress builds.
permissions
{"shell":"Runs the bundled setup script (files/setup-elementor-mcp.sh) — only on explicit user confirmation. It shells out to curl/unzip/zip/python3 and, for Local sites, drives Local by Flywheel's bundled WP-CLI (plugin install/activate) against the running site's PHP + MySQL socket.","network":["GitHub release download over HTTPS from the trusted Digitizers/elementor-mcp repo (api.github.com + release asset host) — the elementor-mcp plugin zip. By default the release this kit pins (EMCP_DEFAULT_VERSION in the setup script), checked before it is unpacked or installed against the sha256 recorded beside the pin — out of band from the download. EMCP_PIN_VERSION=<tag> or =latest selects another release, checked against the digest that release publishes (integrity, not provenance) or EMCP_EXPECTED_SHA256. Nothing is installed unverified","The target WordPress site's REST API (/wp-json/ — auth check, plugin list/install, MCP route verification). Plaintext http:// is refused for a non-local host unless that exact host is named in WP_ALLOW_HTTP, because the run sends a reusable application password on every request"],"filesystem":["Writes .mcp.json in the current working directory, created mode 600 before the credential is written (it embeds a reusable Basic-Auth WordPress credential), and appends .mcp.json to .gitignore there","Reads Local by Flywheel site paths + bundled WP-CLI/PHP binaries; creates a temp working dir for the plugin zip"],"env":["WP_URL / WP_USERNAME / WP_APP_PASSWORD (when used to supply the target site + Application Password auth)","EMCP_PIN_VERSION (optional — a release tag, or latest, instead of the release this kit pins; the kit's pin never downgrades an installed newer plugin — the run stops and names this override)","EMCP_EXPECTED_SHA256 (optional — verify the plugin zip against a digest obtained out of band; required for a release that publishes no digest)","WP_ALLOW_HTTP (comma-separated host list — permits plaintext http for exactly those hosts; a blanket value is not a hostname and permits nothing)"]}
# SiteAgent Elementor Studio Skill You are operating against a WordPress site with the **elementor-mcp** server (`https://github.com/Digitizers/elementor-mcp` — our fork, Elementor 4.x-correct) connected via the WordPress MCP Adapter. This skill captures everything I learned the hard way the first time through, so subsequent sessions start at expertise level. ## 🛑 First Action Protocol — ASK BEFORE DOING **When this skill is invoked, do not start running tools. Ask the user what they want first.** > **Shell / setup actions run only on explicit user confirmation.** The bundled `setup-elementor-mcp.sh` (which shells out, runs Local's WP-CLI, downloads the plugin, and writes a credentialed `.mcp.json`) is never run automatically — offer it and wait for the user to say yes. If the user's invocation message *already* contains a clear task — *"build me a hero section from `index.html`"*, *"show me my current global colors"*, *"change the burgundy to navy"* — proceed with that task directly. Otherwise *(invocations like `/siteagent-elementor-studio` alone, or "use the Elementor MCP" with no follow-up)*, **respond with this menu and wait for the user to pick:** ``` What would you like to do with your Elementor site? 1. Build — create new pages or sections from a design 2. Edit — change something on an existing page 3. Reference — inspect current state (pages, colors, fonts, content) 4. Explore — show me what's possible / what can the MCP do here ``` Do **not** silently default to "build" — that's the most destructive action and forces a path the user may not want. Wait for the user to choose 1/2/3/4 *(or describe their task in their own words)* before invoking any MCP tool other than the harmless read-only ones at the bottom of this section. ### Read-only "smoke test" calls that are always safe to run When the user picks any option, you can run these **before** asking follow-up questions, since they help frame the next response: - `mcp__elementor__elementor-mcp-list-pages` — confirms auth + lists what's there - `mcp__elementor__elementor-mcp-get-global-settings` — current colors/fonts kit That's it for unprompted tool calls. **Anything that creates, modifies, or deletes data requires the user to have explicitly asked for it.** ## When this skill applies - The user mentions Elementor MCP, types `/siteagent-elementor-studio`, or says "use the Elementor MCP" - A `.mcp.json` in the project registers an MCP server pointing at `wp-json/mcp/elementor-mcp-server` - The user asks to build, edit, inspect, or troubleshoot an Elementor page - Tools beginning with `mcp__elementor__elementor-mcp-*` are available ## First-session setup (when MCP not yet connected) > **Engine:** this skill drives our fork `Digitizers/elementor-mcp` (v1.34.1, the release this kit's installer pins; Elementor 4.x-correct), a single self-contained plugin — no Freemius, no phone-home. Since fork v1.28.0 it carries its own update checker, which **offers** later GitHub Releases on the site's normal Updates screens (release-only, a user agent naming only the plugin); installing one is WordPress's ordinary update flow, and the fork does not switch on WordPress's per-plugin auto-update. **Never run it alongside the paid "MCP Tools for Elementor (Premium)" — same class names → fatal.** Details + switch commands → `references/engine-and-premium.md`. If the user has a WordPress site but no **working** `elementor` MCP connection — either no `.mcp.json` at all, or only this kit's committed placeholder config (values like `"WP_URL": "${WP_URL:-}"` with those env vars unset) and no `mcp__elementor__elementor-mcp-*` tools loaded: > In the placeholder case there are two fixes, not one: **export `WP_URL` / `WP_USERNAME` / `WP_APP_PASSWORD`** (the committed config reads them — fastest in this repo's checkout or a cloud session), or run the wizard below from a **separate per-site project directory** (it refuses to write credentials into the tracked placeholder file). 1. **Check whether they're using Local-by-Flywheel or a live host.** Setup paths differ. 2. **Run the bundled setup script** from the loaded skill's directory — it handles plugin install, auth wiring, and `.mcp.json` generation interactively for both flavors. The skill's base directory is announced when this skill loads (look for the filesystem path in the skill load message). Replace `<skill-dir>` with that announced path: ```bash bash "<skill-dir>/setup-elementor-mcp.sh" ``` Keep the quotes — plugin-cache paths can contain spaces (e.g. a Windows profile named `First Last`), and an unquoted substitution splits the path. **If `<skill-dir>/setup-elementor-mcp.sh` is not found** (e.g., from a manual `INSTALL.sh` run instead of plugin-marketplace), use the fallback path for manual installations: ```bash bash ~/.claude/scripts/setup-elementor-mcp.sh ``` 3. After the script completes, instruct the user to **quit and reopen Claude Code in the project directory** so the new `.mcp.json` is picked up. 4. On reopen, the deferred MCP tools will be exposed via ToolSearch — load the ones you need with `select:` queries. If something fails, see "Setup gotchas" below. ## Working session conventions ### Always do this first ``` mcp__elementor__elementor-mcp-list-pages # confirms auth + lists existing pages mcp__elementor__elementor-mcp-get-global-settings # see existing colors/fonts kit mcp__elementor__elementor-mcp-get-container-schema # ground truth on flex_* key names ``` ### 🎯 Detect Pro vs Free FIRST — it changes which path you take Before building anything, determine whether **Elementor Pro** is active. The whole skill branches on this: with Pro you use native widgets (Form, Theme Builder, Loop Grid, Popups, Dynamic Tags, Sticky/Motion); without it you use the free-tier workarounds documented further down (Fluent Forms, UAE/HFE, HTML for motion). **How to detect — by tool availability (the definitive Pro signal):** The elementor-mcp server exposes Pro tools **conditionally**. When Pro is active the tool list grows from ~74 to ~100+ tools and Pro-only tools appear. Check whether these exist in your available `mcp__elementor__elementor-mcp-*` tools: - `add-form` — present ⇒ **Pro active** - `create-theme-template` — present ⇒ **Pro active** - `add-loop-grid` / `add-loop-carousel` — present ⇒ **Pro active** - `create-popup`, `set-dynamic-tag` — present ⇒ **Pro active** If none of those Pro tools are exposed, treat the site as **Free** and use the workarounds. The **tool-presence check above is the definitive Pro-vs-Free signal** — prefer it. (`detect-elementor-version` is reliable on current builds — the old v1.5.0 schema bug is fixed — but it reports **atomic/version** support, not a Pro flag, so it doesn't settle Pro-vs-Free on its own.) > **Record the verdict once** ("Pro detected" / "Free only") and state it to the > user up front, then follow the matching branch in every section below. Each > "Forms", "Header/Footer", and motion section is written as **If Pro → … / > If Free → …**. Don't mix paths. ### 🧬 Also detect the ENGINE — classic vs atomic (Elementor 4 / V4) There's a **second** axis that changes everything: the page engine. Elementor 4 introduced the **atomic / V4** engine (`e-flexbox`, `e-div-block`, atomic widgets, a typed-prop `$$type` data model). Classic widget writes **do not persist on an atomic page** — they silently appear to do nothing. So before building, decide classic vs atomic. **How to detect — by atomic tool availability (preferred):** The atomic tools register only when the site is on the atomic engine. Check your available tools: - `add-flexbox`, `add-div-block`, `add-atomic-heading` / `add-atomic-button` / …, `add-atomic-widget` / `update-atomic-widget` present ⇒ **atomic (V4) engine** - Only classic `add-container` / `add-heading` / … present ⇒ **classic engine** You may also call `detect-elementor-version` (reliable on current releases — it returns whether atomic is supported). The old v1.5.0 schema bug is fixed; still, tool-presence is the most direct signal. > **Which elementor-mcp PLUGIN version am I on?** Some behaviour below branches on > it, and `detect-elementor-version` answers about *Elementor*, not the plugin. > Call **`server-info`**: it returns `plugin_version` (plus registered-vs-exposed > tool counts and what is withholding the rest). It is always registered and > cannot be disabled, so **its absence is itself the answer** — no `server-info` > means the site is on **1.28.0 or older**. Use it for the one branch that needs it — > whether `update-atomic-widget` can restyle in place (1.28.1+). Nothing else should > depend on the version: for the universal atomic tools, pass raw `$$type` values, which > are correct on every build. > ⚠️ **Antigravity / tight tool caps.** Antigravity caps MCP tools at ~100. The > full Pro+atomic set is ~113, so atomic tools can get truncated and never reach > the client — making a V4 site look like "writes don't persist". Fix: enable the > MCP plugin's **Low-tools mode** (WP Admin → MCP Tools screen). Its curated > essentials set **includes the 5 atomic essentials** (`detect-elementor-version`, > `add-atomic-widget`, `update-atomic-widget`, `add-flexbox`, `add-div-block`) and > stays under the cap. > 🐞 **Known root cause (older MCP builds).** Elementor often runs atomic as an > opt-in *experiment* while `ELEMENTOR_VERSION` still reads `3.x`. MCP builds that > gate atomic on `version_compare(ELEMENTOR_VERSION,'4.0.0','>=')` therefore never > register the atomic tools on those sites. Fixed upstream by detecting via the > experiment/module. If atomic tools are missing on a clearly-V4 site, update the > elementor-mcp plugin (or confirm the V4 experiment is on under Elementor → > Settings → Features). Record **both** axes: e.g. "Pro + atomic", "Pro + classic", "Free + classic". The Pro/Free axis picks Form vs Fluent Forms etc.; the engine axis picks classic vs atomic widget tools (next section). The container schema is large (~50KB). Read it once, then write down the keys you'll use in your reply text so you don't need to re-fetch it. Critical keys: - `flex_direction`, `flex_justify_content`, `flex_align_items`, `flex_gap`, `flex_wrap` — note the **`flex_` prefix** on justify/align (issue #32 was about these being written under wrong keys in older versions) - `content_width: "boxed"|"full"` + `boxed_width: {unit, size, sizes}` - `min_height: {unit, size, sizes}` — use unit `vh` for full-screen heroes - `padding`/`margin: {unit, top, right, bottom, left, isLinked}` — `isLinked: false` when sides differ - `background_background: "classic"|"gradient"|"video"` — must be set first or other background_* keys are ignored - `background_overlay_*` — separate parallel set for overlays. `background_overlay_opacity: {unit:"px", size: 0.5}` (yes, the unit is `px` even for opacity — quirk of the schema) ### Widget call convention — flat params, NOT nested in `settings` This bit me hard the first time. The `add-*` shortcut tools take their settings as **top-level parameters**, not inside a `settings: {}` object: ```js // ✓ CORRECT mcp__elementor__elementor-mcp-add-heading({ post_id: 11, parent_id: "abc123", title: "where estates <em>are entrusted</em>", header_size: "h1", title_color: "#FFFFFF", typography_typography: "custom", // ← required to enable typography typography_font_family: "Cormorant Garamond", typography_font_size: {size: 110, unit: "px"}, typography_font_weight: "300", typography_line_height: {size: 0.98, unit: "em"}, }) // ✗ WRONG — silently fails or returns "title is required" mcp__elementor__elementor-mcp-add-heading({ post_id: 11, parent_id: "abc123", settings: {title: "...", typography_font_family: "..."} }) ``` `add-container` is the **exception** — it takes a `settings: {}` object. Don't generalize from one to the other. ### Always set `typography_typography: "custom"` Without this, the other typography_* keys are ignored. Same applies to `css_filters_css_filter: "custom"` for image filters, etc. — these "enable" flags are how Elementor knows you want to override defaults. ### Italic emphasis pattern Display headings often need a single italic-emphasized word. Don't use a separate widget — just inline `<em>` in the title: ```js title: "A <em>quiet</em> practice for an <em>uncommon</em> clientele." ``` Cormorant Garamond and most luxury serifs have italic variants that auto-load when `<em>` appears. Confirm via the rendered page; if italics fail, the global typography needs the italic variant explicitly enabled. ### Responsive values — suffix keys (classic) vs. variants (atomic) Elementor stores a responsive control's per-breakpoint values under **suffixed keys**. The base (desktop) value has **no suffix**; each breakpoint appends its own suffix to the **same base control key**, with the **same value shape** as desktop: ```js // classic widget — tablet/mobile overrides of the same control: mcp__elementor__elementor-mcp-add-heading({ post_id, parent_id, title: "...", typography_font_size: {size: 110, unit: "px"}, // desktop (base, no suffix) typography_font_size_tablet: {size: 72, unit: "px"}, // tablet typography_font_size_mobile: {size: 44, unit: "px"}, // mobile align: "left", align_tablet: "center", // alignment per breakpoint }) ``` **The suffix set is breakpoint-dependent — do NOT hardcode an incomplete list.** It derives from Elementor's **active breakpoints** (`add_responsive_control()`), so beyond `_tablet` / `_mobile` a site may expose `_widescreen`, `_laptop`, `_tablet_extra`, `_mobile_extra`, or custom ones. Read the site's breakpoints rather than assuming; the fork passes any `<base>_<breakpoint>` key through as long as `<base>` is a real control. > **Atomic (V4) is different — no suffix keys.** On a V4 page responsive lives in a style > definition's **`variants` array**, keyed by a `breakpoint` meta (`desktop` = base, then > `tablet`/`mobile`/custom) — Global Classes take a `variants` param, local styles add > variant entries. Never put `_tablet`/`_mobile` suffix keys on atomic elements. See > `references/atomic-v4.md` and `references/design-system-crud.md`. ## The widget-vs-HTML decision — DEFAULT TO NATIVE WIDGETS > 🚨 **CRITICAL ANTI-PATTERN — read this first.** > > **Do NOT paste an entire HTML page into one HTML widget.** Do NOT build a homepage that is "1 container with 3 HTML widgets inside." That is not building with Elementor — that is using Elementor as a wrapper around a static webpage. The user **cannot edit it** in the Elementor visual editor, **cannot reuse the design tokens**, and **cannot iterate** on it without going back to source code. > > If you find yourself thinking *"I'll just dump this section as HTML, it's faster,"* **STOP.** Break it into native widgets. ### Always default to native widgets For every section the user wants, build it from native Elementor widgets: - **Headings** → `add-heading` widget *(supports inline `<em>` for italic emphasis)* - **Body copy** → `add-text-editor` widget - **Images** → `add-image` widget *(NOT an `<img>` tag inside an HTML widget)* - **Buttons / CTAs** → `add-button` widget *(NOT an `<a>` styled as a button)* - **Layout / spacing** → `add-container` with proper `flex_*` settings *(NOT `<div>`s with CSS flex)* - **Lists** → `add-icon-list` widget
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る