{"name":"io.github.Mogacode-ma/elementor-mcp-agent","slug":"mogacode-ma-elementor-mcp-agent","title":null,"description":"Agency-grade MCP for WordPress Elementor — multi-site, safe edits, templates, versions.","url":"https://mcp.market/server/mogacode-ma-elementor-mcp-agent","rating":null,"grade":"C","score":66,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":30,"stars":3,"forks":0,"downloads_week":62,"last_push_at":"2026-09-14T14:09:16.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Mogacode-ma/elementor-mcp-agent","website":null,"version":"1.3.0","remotes":[],"packages":[{"registryType":"npm","identifier":"elementor-mcp-agent","version":"1.3.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"JSON array of site objects. Each: {id, url, username, application_password}. See README.","format":"string","isSecret":true,"name":"ELEMENTOR_MCP_SITES"},{"description":"Alternative: path to a JSON config file. README has the schema.","format":"string","name":"ELEMENTOR_MCP_CONFIG_PATH"},{"description":"Optional default site id when a tool is called without site_id.","format":"string","name":"ELEMENTOR_MCP_DEFAULT_SITE_ID"}]}],"tools":[{"name":"add_widget","description":"Append a new widget to a parent container (section, column, or container) on a page. Re-reads to confirm the new widget exists under the parent. Two-call confirmation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_template_to_page","description":"Copy the _elementor_data + _elementor_page_settings of a SOURCE template (or page) onto a TARGET page on the same site. Backs up the target first. Use to apply a section/page template to an existing draft.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bulk_find_replace_site","description":"Find/replace plain text in every Elementor page on a single site. TWO-CALL FLOW: dry-run returns per-page match_count + total + confirmation_token. Apply iterates each page (auto-backup + validate + flush per page). Slower than wp_search_replace but works without SSH and gives per-page granularity.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_elementor_versions","description":"Fleet-wide Elementor version audit. For every site, fetches installed Elementor/Pro versions and compares against wordpress.org latest. Flags outdated installs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"compare_screenshots","description":"Compare two screenshot files via SHA-256 hash equality and size delta. Quick way to spot whether a page changed visually after an edit. For pixel diffs, use a dedicated tool externally.","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_widget","description":"Remove a widget from a page by id. Two-call confirmation. Backs up before deleting; re-reads to confirm the widget is gone.","write_action":true,"price_micros":0,"input_schema":null},{"name":"duplicate_elementor_page","description":"Duplicate an Elementor page within the same site. Creates a new draft page, copies _elementor_data + _elementor_page_settings + _elementor_edit_mode, flushes CSS.","write_action":false,"price_micros":0,"input_schema":null},{"name":"duplicate_widget","description":"Duplicate a widget in place (right after the original). The clone gets a new id. Re-reads to confirm the clone persisted. Two-call confirmation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"elementor_find_replace","description":"Find/replace plain text in every widget on one page. TWO-CALL FLOW: dry-run returns match_count + detailed widget hits + confirmation_token. Second call with token applies the change with auto-backup + JSON validation + auto-rollback if validation fails + CSS flush.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_elementor_template","description":"Export an Elementor template (section, page, header, footer, etc.) as a portable JSON object. Output goes into import_elementor_template on another site.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fleet_find_replace","description":"Find/replace plain text across every Elementor page of every site in the pool. Same flow as bulk_find_replace_site but iterates across sites. Returns per-site + grand-total summary. Dry-run first; second call applies. Use sparingly \\u2014 this is the nuclear option.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_elementor_template","description":"Import a portable template JSON (output of export_elementor_template) into a target site as a new library entry. Useful for cross-site template sync.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_elementor_backups","description":"List timestamped backups of a page's Elementor data (created by previous edit ops). Use restore_elementor_backup with one of these meta keys to roll back.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_elementor_pages","description":"List pages built with Elementor (have _elementor_edit_mode = 'builder'). Returns id, title, slug, status, modified date.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_elementor_templates","description":"List Elementor library entries on a site: saved sections, pages, popups, headers/footers (Theme Builder Pro), single/archive templates (Theme Builder Pro), and global widgets. Type filter narrows results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_global_widgets","description":"List all global widgets on a site (Elementor library entries of type 'widget'). These are shared across pages \\u2014 editing one affects every page using it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sites","description":"List every WordPress site configured. Best called first in a session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_widgets_in_page","description":"Flat list of every widget in a page with id, type, parent path, and an excerpt of the first text setting (for spot-checking before find/replace).","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_widget","description":"Move a widget to a different parent (or different position in the same parent). Re-reads to confirm new parent. Two-call confirmation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ping_site","description":"Verify connectivity + authentication to a WordPress site. Returns user identity + WP/Elementor/Elementor Pro versions if accessible.","write_action":false,"price_micros":0,"input_schema":null},{"name":"preflight_check","description":"Validate a page is safe to edit. Checks: page exists, is Elementor-built, data parses cleanly, references valid global widgets, isn't currently locked by another editor.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_page_elementor","description":"Fetch a page's Elementor data structure summary. With verbose=true returns the full parsed tree (potentially MBs).","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_widget","description":"Fetch a single widget's full settings by id. Use list_widgets_in_page to find the id first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_elementor_backup","description":"Restore a page's _elementor_data and _elementor_page_settings from a backup created by a previous edit. TWO-CALL FLOW with confirmation token.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_from_file","description":"Restore a page from a JSON backup file (created by ANY earlier op with backup_to_file=true or by direct fullBackup with to_file). Requires the file_path returned by that backup. Two-call confirmation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_page","description":"Capture a PNG screenshot of a page's frontend (visitor-facing URL). Requires a Chrome/Chromium binary on the host. Returns the local file path so the LLM can analyse it or compare against another shot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"site_health","description":"Comprehensive site health snapshot: WP/PHP/Elementor versions, disk space (if SSH), plugin count, theme info. Aggregates multiple REST calls into a single overview.","write_action":false,"price_micros":0,"input_schema":null},{"name":"swap_widget_type","description":"Replace a widget's type (e.g., heading \\u2192 button) while preserving its id and position. Provide full new_settings \\u2014 the old settings are NOT carried over (different widget types have incompatible schemas). Re-reads to confirm. Two-call confirmation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_widget_settings","description":"Shallow-merge a partial settings object into one widget. Backs up the page first, validates the result, auto-flushes CSS, then re-reads the page and verifies the patch persisted (matches_requested in the response). Two-call confirmation.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wp_cli_run","description":"Execute an arbitrary wp-cli command on a site via SSH. The `wp` prefix and `--path` are added automatically \\u2014 pass only the args (e.g. 'post list --post_type=page'). Destructive commands (delete, drop, search-replace without --dry-run, plugin deactivate/uninstall) require a two-call confirmation flow.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wp_elementor_flush_css","description":"Flush Elementor's CSS cache on a site using the 3-level fallback strategy (REST endpoint \\u2192 wp-cli native \\u2192 option/meta delete). Always call after writing _elementor_data programmatically.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wp_plugin_list","description":"List installed plugins on a site with name, version, status (active/inactive), and update_version (if outdated). Uses WP-CLI for accurate version data including update_version.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wp_plugin_update","description":"Update one or more plugins on a site to their latest version. Requires confirmation token (uses wp-cli).","write_action":true,"price_micros":0,"input_schema":null},{"name":"wp_search_replace","description":"Run `wp search-replace` against wp_postmeta (default) \\u2014 the standard agency way to update Elementor text content. ALWAYS dry-run first; the apply call requires a confirmation token. Includes --precise --all-tables-with-prefix by default if you specify table='all'.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":66,"grade":"C","scanned_at":"2026-09-27T12:14:33.950Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T12:14:33.965Z","components":{"code":{"score":15,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 13 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: …x scripts/fetch-elementor-docs.ts\", \"postinstall\": \"node scripts/postinstall.cjs || true\",…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"elementor-mcp-agent","version":"1.3.0","found":true,"license":"MIT","hasInstallScripts":true,"dependencyCount":4,"publishedAt":"2026-06-07T08:23:41.539Z","repositoryUrl":"git+https://github.com/Mogacode-ma/elementor-mcp-agent.git","weeklyDownloads":62}],"repo":{"found":true,"owner":"Mogacode-ma","repo":"elementor-mcp-agent","archived":false,"pushedAt":"2026-09-14T14:09:16Z","stars":3,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/280684819?v=4","ownerCreatedAt":"2026-04-30T11:54:42Z","license":"NOASSERTION"},"icon":{"url":null,"source":"none"},"presence":{"stars":3,"forks":0,"downloadsWeek":62,"license":"NOASSERTION","lastPushAt":"2026-09-14T14:09:16.000Z","score":30}}}},"grade_history":[],"reviews":[]}