feat(rebrand): rebrand to Heretek AI, re-engineer GitHub updater for Heretek-AI/elementor-mcp releases, and rewrite README.md

This commit is contained in:
John Smith
2026-09-02 12:24:35 -04:00
parent 9176dd7ff0
commit f0bd723f80
7 changed files with 328 additions and 127 deletions
+10 -12
View File
@@ -2,19 +2,19 @@
Thanks for being here. Bug reports, docs fixes, prompts, and new tools are all genuinely useful, and you don't need to write PHP to help.
- **Found a bug?** [Open a bug report](https://github.com/msrbuilds/elementor-mcp/issues/new?template=bug_report.yml)
- **Want a tool that doesn't exist?** [Request a feature](https://github.com/msrbuilds/elementor-mcp/issues/new?template=feature_request.yml)
- **Want a plugin supported?** [Request an integration](https://github.com/msrbuilds/elementor-mcp/issues/new?template=integration_request.yml)
- **Just an idea or a question?** [Start a discussion](https://github.com/msrbuilds/elementor-mcp/issues/new?template=idea.yml)
- **Found a bug?** [Open a bug report](https://github.com/Heretek-AI/elementor-mcp/issues/new)
- **Want a tool that doesn't exist?** [Request a feature](https://github.com/Heretek-AI/elementor-mcp/issues/new)
- **Want a plugin supported?** [Request an integration](https://github.com/Heretek-AI/elementor-mcp/issues/new)
- **Just an idea or a question?** [Start a discussion](https://github.com/Heretek-AI/elementor-mcp/discussions)
User documentation lives at **[emcptools.com/docs](https://emcptools.com/docs/)**. This file is about working on the plugin itself.
Documentation and setup guides live in **[README.md](README.md)**. This file is about working on the plugin itself.
## Ways to contribute
| | What it involves |
|---|---|
| **Report a bug** | The most valuable thing you can do. Include your MCP client, the tool you called, and what came back. |
| **Improve the docs** | The docs live in the website repo, but if something in this repo is wrong or stale, a PR fixing it is very welcome. |
| **Improve the docs** | If something in the documentation is wrong or stale, a PR fixing it is very welcome. |
| **Contribute a prompt** | A landing-page blueprint in [`prompts/`](prompts/). No PHP needed, see [Contributing prompts](#contributing-prompts). |
| **Add a tool** | A new MCP ability in an existing domain. See [Adding a tool](#adding-a-tool). |
| **Add an integration** | Support for a plugin we don't cover yet. This is the highest-leverage code contribution, see [Adding an integration](#adding-an-integration). |
@@ -25,8 +25,8 @@ User documentation lives at **[emcptools.com/docs](https://emcptools.com/docs/)*
```bash
cd /path/to/wordpress/wp-content/plugins
git clone https://github.com/msrbuilds/elementor-mcp.git emcp-tools
cd emcp-tools
git clone https://github.com/Heretek-AI/elementor-mcp.git elementor-mcp
cd elementor-mcp
composer install
```
@@ -43,7 +43,7 @@ npx @modelcontextprotocol/inspector wp mcp-adapter serve \
--server=emcp-tools-server --user=admin --path=/path/to/wordpress
```
> **Note on the `pro/` directory.** The Pro tier lives in a separate private repository, mounted as a git submodule at `pro/`. A normal clone simply won't have it, and the plugin runs fine without it, every Pro unit is guarded. If you see references to `pro/` in the code, that's why.
> **Note on the unlocked architecture:** In this fork, all Pro features (AI Chat, Block Builder, Widget Builder, Themer Pro, Agent Skills runtime, Project Memory, and all integrations) are bundled directly in the main tree without private git submodules. Every user and developer gets full access out of the box.
## Repository layout
@@ -177,7 +177,7 @@ Put new tests in `tests/`, named `SomethingTest.php`. Test the pure logic, valid
## Reporting bugs
Use the [bug report template](https://github.com/msrbuilds/elementor-mcp/issues/new?template=bug_report.yml). The details that actually speed up a fix:
Use [GitHub Issues](https://github.com/Heretek-AI/elementor-mcp/issues/new). The details that actually speed up a fix:
- Plugin, WordPress, and PHP versions (and Elementor, if relevant)
- Which **MCP client** you're using
@@ -185,8 +185,6 @@ Use the [bug report template](https://github.com/msrbuilds/elementor-mcp/issues/
- What you expected versus what happened
- Anything from `wp-content/debug.log`
For anything security-sensitive, please **don't** open a public issue. Email **[email protected]** instead.
---
Every contribution helps, including the ones that just tell us something is broken. Thank you.
+185 -45
View File
@@ -1,92 +1,232 @@
<h1 align="center">
<img src="assets/img/icon-sm.png" width="72" alt="EMCP Tools logo"><br>
MCP Tools for WordPress &amp; Page Builders
Elementor MCP Tools (Unlocked)
</h1>
<p align="center">
<strong>The Unlocked, Enterprise-Grade Model Context Protocol (MCP) Server for WordPress &amp; Elementor</strong><br>
<em>Maintained by <a href="https://github.com/Heretek-AI">Heretek AI</a> · 100% Open Source · All 269 Pro Tools Included Free</em>
</p>
<div align="center">
[![Version](https://img.shields.io/github/v/release/msrbuilds/elementor-mcp?label=version&color=blue)](https://github.com/msrbuilds/elementor-mcp/releases)
[![Version](https://img.shields.io/github/v/release/Heretek-AI/elementor-mcp?label=version&color=blue)](https://github.com/Heretek-AI/elementor-mcp/releases)
[![License](https://img.shields.io/badge/license-GPL--2.0--or--later-green.svg)](LICENSE)
[![PHP](https://img.shields.io/badge/PHP-%3E%3D8.1-8892BF.svg)](https://php.net)
[![WordPress](https://img.shields.io/badge/WordPress-%3E%3D6.9-21759B.svg)](https://wordpress.org)
[![MCP Tools](https://img.shields.io/badge/MCP_Tools-200%2B-orange.svg)](https://emcptools.com/docs/tools/overview/)
[![MCP Tools](https://img.shields.io/badge/MCP_Tools-269_Unlocked-9333ea.svg)](#-all-269-mcp-tools-unlocked)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
[![GitHub Issues](https://img.shields.io/github/issues/msrbuilds/elementor-mcp)](https://github.com/msrbuilds/elementor-mcp/issues)
[![GitHub Stars](https://img.shields.io/github/stars/msrbuilds/elementor-mcp?style=social)](https://github.com/msrbuilds/elementor-mcp)
[![GitHub Issues](https://img.shields.io/github/issues/Heretek-AI/elementor-mcp)](https://github.com/Heretek-AI/elementor-mcp/issues)
[![GitHub Stars](https://img.shields.io/github/stars/Heretek-AI/elementor-mcp?style=social)](https://github.com/Heretek-AI/elementor-mcp)
**[Docs](https://emcptools.com/docs/) · [Integrations](https://emcptools.com/integrations/) · [Changelog](https://emcptools.com/changelog) · [Pro](https://emcptools.com/pricing)**
**[Quick Start](#-quick-start) · [Unlocked Features](#-all-269-mcp-tools-unlocked) · [Client Setup](#-connect-your-ai-client) · [Integrations](#-comprehensive-integrations-suite) · [Contributing](CONTRIBUTING.md)**
</div>
Turn your WordPress site into something an AI agent can actually operate.
---
EMCP Tools is a WordPress plugin that exposes your site as **[MCP](https://modelcontextprotocol.io/) tools**, so Claude, Cursor, and any other MCP client can build Elementor pages, write content, manage plugins and users, audit performance and security, and drive the plugins you already run. It builds on the [WordPress MCP Adapter](https://github.com/WordPress/mcp-adapter), which ships bundled.
## 📖 About This Fork
<img width="1995" height="1141" alt="EMCP Tools admin" src="https://github.com/user-attachments/assets/06ab916a-0146-4a5f-828c-d5aa409cb072" />
This repository is an unlocked, telemetry-free **soft fork** of [`msrbuilds/elementor-mcp`](https://github.com/msrbuilds/elementor-mcp), originally authored by [Mian Shahzad Raza](https://github.com/msrbuilds).
> **EMCP Pro, 25% off for the GitHub community**: use code **`MSRGIT`** at [emcptools.com/pricing](https://emcptools.com/pricing).
While the upstream free version provides fundamental Elementor tools, many advanced capabilities (AI Chat assistant, custom Gutenberg block builder, project memory, agent runtime skills, 8 form integrations, 6 SEO plugin integrations, unlimited themer quotas, and offline bundles) were locked behind commercial Freemius paywalls and a private submodule (`msrbuilds/emcp-pro`).
## What it does
**What this Heretek AI fork delivers:**
- 🔓 **100% Pro Features Unlocked**: All commercial capabilities are compiled directly into the codebase. No license keys, no subscriptions, and zero Freemius upsells.
- 🛡️ **Zero Telemetry & Tracking**: Stripped of phone-home analytics, account verification screens, and external paywall iframes.
- 🔄 **Native In-Dashboard Updates**: The built-in GitHub updater checks [`Heretek-AI/elementor-mcp/releases`](https://github.com/Heretek-AI/elementor-mcp/releases) directly from your WordPress admin dashboard with one-click in-place updates.
- 📦 **Self-Contained Repository**: No private submodules or missing directories. Everything required to run, test, and develop ships in this single repo.
- 🤝 **100% Upstream Compatible**: Preserves standard tool slugs (`emcp-tools/*`), database formats, and hooks. Existing agent configurations and client scripts work out of the box.
**Build pages.** The full Elementor workflow, containers, widgets, templates, global styles, and atomic elements for Elementor 4.0+. Also Gutenberg blocks, and a builder-agnostic theme builder for headers, footers, and archives.
---
**Run the site.** Content and taxonomies, media, users, settings, plugins and themes, nav menus, the filesystem, and the database, all over MCP.
## ✨ All 269 MCP Tools Unlocked
**Understand and undo.** One-call page snapshots, content search across your own pages and templates, a change ledger with rollback, and read-only performance and security scans that return a scored report.
| Feature Domain | Upstream Free | Heretek AI Unlocked | What It Unlocks |
|---|:---:|:---:|---|
| **Total MCP Tools** | ~188 | **269+** | Full coverage of WordPress core, page builders, forms, SEO, and commerce |
| **In-Editor AI Chat** | ❌ Paid | ✅ **Included** | Floating AI assistant in Elementor & Gutenberg; BYO LLM key or local Ollama |
| **Gutenberg Block Builder** | ❌ Paid | ✅ **Included** | Custom Gutenberg block generator with sandbox compiler & live testing |
| **Elementor Widget Builder** | ❌ Paid | ✅ **Included** | Sandbox-backed custom Elementor widget generation & validation |
| **Themer / Theme Builder** | 1 per type | **Unlimited** | Headers, footers, single post, and archives with exclude rules & dynamic tags |
| **Project Memory** | ❌ Paid | ✅ **Included** | Persistent memory CPT, admin approval workflow, and context injection |
| **Agent Skills Runtime** | ❌ Paid | ✅ **Included** | Runtime `SKILL.md` catalog with `list-skills` & `get-skill` discovery tools |
| **Deep Page Snapshot** | Basic | **Full Audits** | Automated WCAG AA color contrast math, heading hierarchy, and SEO audits |
| **Form Builders (8)** | ❌ Paid | ✅ **Included** | WPForms, Gravity Forms, Fluent, Ninja, Formidable, MetForm, SureForms, Forminator |
| **SEO Plugins (6)** | ❌ Paid | ✅ **Included** | Yoast SEO, Rank Math, AIOSEO, SEOPress, The SEO Framework, SureRank |
| **Themes & Addons** | ❌ Paid | ✅ **Included** | GeneratePress, GenerateBlocks, Blocksy, BeTheme, Essential Addons, Premium, UAE |
| **WooCommerce** | ❌ Paid | ✅ **Included** | ~120 store operations: products, orders, coupons, reviews, categories, inventory |
| **Backup, Sync & Migrate** | ❌ Paid | ✅ **Included** | Portable `.emcp` site packages, database export/import, and deep URL search/replace |
| **Offline Content Bundles** | 5 Prompts | **Full Library** | 50 Brand Kits, 60 Industry Landing Page Prompts, and Premium Templates |
**Speak your plugins.** Integrations that register only when the plugin is active: ACF, Meta Box, WooCommerce, 8 form builders, 7 SEO plugins, and the Elementor addon packs. See the [integrations directory](https://emcptools.com/integrations/).
---
Elementor is **optional**. Every WordPress domain works without it; installing Elementor unlocks the page-building family.
## 🚀 Quick Start
→ **[Full tool reference](https://emcptools.com/docs/tools/overview/)**
### 1. Installation
## Install
1. Download the latest release `.zip` from **[Releases](https://github.com/Heretek-AI/elementor-mcp/releases)**.
2. In your WordPress admin: go to **Plugins → Add New → Upload Plugin**, select the `.zip`, and click **Install Now**.
3. Click **Activate Plugin**.
4. Open the **EMCP Tools** menu in the WordPress admin sidebar.
5. Notice the **PRO UNLOCKED** badge in the header — all features are instantly active!
1. Download the latest `emcp-tools-*.zip` from [Releases](https://github.com/msrbuilds/elementor-mcp/releases/).
2. In WordPress: **Plugins → Add New → Upload Plugin**, then activate.
3. Open the **EMCP Tools** menu in the admin sidebar.
### 2. Automatic Updates
Free installs update in place from **Dashboard → Updates**.
This fork includes native in-dashboard update checking powered by GitHub releases:
- Go to **Dashboard → Updates** or click the **Check for updates** button on the **EMCP Tools → Dashboard** tab.
- WordPress will notify you when a new release is available from `Heretek-AI/elementor-mcp` and allow one-click updates.
**Requires** WordPress 6.9+ and PHP 8.1+. Elementor 3.20+ is optional (4.0+ for atomic elements). The MCP Adapter and Abilities API need no separate install.
---
→ [Installation guide](https://emcptools.com/docs/getting-started/installation/) · [Requirements](https://emcptools.com/docs/getting-started/requirements/)
## 🤖 Connect Your AI Client
## Connect your AI client
The plugin exposes an MCP server over stdio or HTTP streaming via the bundled [WordPress MCP Adapter](https://github.com/WordPress/mcp-adapter).
The **Connection** tab in the admin generates a ready-to-paste config for your client, including a one-click `.mcpb` bundle for Claude Desktop. That is the fastest route, and it fills in your site URL and credentials for you.
### Claude Desktop
Step-by-step guides per client:
Add this to your `claude_desktop_config.json`:
[Claude Code](https://emcptools.com/docs/connecting/claude-code/) · [Claude Desktop](https://emcptools.com/docs/connecting/claude-desktop/) · [Cursor](https://emcptools.com/docs/connecting/cursor/) · [VS Code](https://emcptools.com/docs/connecting/vscode/) · [Antigravity](https://emcptools.com/docs/connecting/antigravity/) · [ChatGPT](https://emcptools.com/docs/connecting/chatgpt-app/) · [WP-CLI](https://emcptools.com/docs/connecting/wp-cli/) · [OAuth](https://emcptools.com/docs/connecting/oauth/) · [Multiple sites](https://emcptools.com/docs/connecting/multiple-sites/)
```json
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["-y", "@msrbuilds/emcp-proxy@latest"],
"env": {
"WP_URL": "https://your-site.com",
"WP_USER": "your_username",
"WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx"
}
}
}
}
```
Tools not showing up? Start with [no tools appearing](https://emcptools.com/docs/troubleshooting/no-tools-appearing/) or [tool cap exceeded](https://emcptools.com/docs/troubleshooting/tool-cap-exceeded/).
*Tip: You can also generate a 1-click `.mcpb` bundle directly from the **Connection** tab in the plugin admin.*
## Safe by default
### Claude Code
Every tool runs a real WordPress capability check before it does anything, so an agent can only do what the authenticating user could do by hand.
```bash
claude mcp add wordpress -- npx -y @msrbuilds/emcp-proxy@latest
```
Anything that writes, deletes, or renders site-wide **ships disabled** and is opt-in from **EMCP Tools → Tools**. Destructive operations additionally require an explicit `confirm: true`. Administrators cannot be edited over MCP, there is no delete-user tool, and filesystem access is confined to the WordPress root with automatic backups and an audit log.
### Cursor
→ [Permission model](https://emcptools.com/docs/tools/overview/#permission-model)
In your workspace root, create or edit `.cursor/mcp.json`:
## Sample prompts
```json
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["-y", "@msrbuilds/emcp-proxy@latest"],
"env": {
"WP_URL": "https://your-site.com",
"WP_USER": "your_username",
"WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx"
}
}
}
}
```
The [`prompts/`](prompts/) directory has five complete landing-page blueprints, design system, structure, images, and animations, that build an entire page from a single paste: [Local Business](prompts/LOCAL_BUSINESS.md), [Dental Clinic](prompts/DENTAL_CLINIC.md), [Developer Portfolio](prompts/WEB_DEVELOPER_PORTFOLIO.md), [Hair Salon](prompts/HAIR_SALON.md), [Car Wash](prompts/CAR_WASH.md).
### Direct HTTP Streaming (OAuth / App Password)
A library of 50+ industry-specific prompts is included with [Pro](https://emcptools.com/pricing).
```json
{
"mcpServers": {
"wordpress": {
"url": "https://your-site.com/wp-json/mcp/emcp-tools-server",
"headers": {
"Authorization": "Basic <base64(username:app_password)>"
}
}
}
}
```
## Contributing
---
Bug reports, feature requests, and pull requests are all welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
## 🧩 Comprehensive Integrations Suite
1. Fork the repo
2. Create a branch (`git checkout -b feature/amazing-tool`)
3. Make your changes and test locally
4. Open a Pull Request
When an integrated plugin is installed and activated on your WordPress site, its corresponding MCP tools automatically register:
**Contributors**: [@msrbuilds](https://github.com/msrbuilds) (author and maintainer)
### 1. E-Commerce (WooCommerce)
- **`emcp-tools/woo-read`**: Query products, variations, orders, customers, reviews, coupons, tax rates, shipping zones, payment gateways, and system reports.
- **`emcp-tools/woo-write`**: Create and update products, bulk adjust stock/prices, fulfill orders, issue coupon codes, manage refunds, and configure store settings.
## License
### 2. Form Builders (8 Supported)
Read form structures, inspect fields, and fetch submissions:
- **WPForms** (`emcp-tools/wpforms-read`)
- **Gravity Forms** (`emcp-tools/gravityforms-read`)
- **Fluent Forms** (`emcp-tools/fluentforms-read`)
- **Ninja Forms** (`emcp-tools/ninjaforms-read`)
- **Formidable Forms** (`emcp-tools/formidable-read`)
- **MetForm** (`emcp-tools/metform-read`)
- **SureForms** (`emcp-tools/sureforms-read`)
- **Forminator** (`emcp-tools/forminator-read`)
[GNU General Public License v2.0 or later](LICENSE).
### 3. SEO Suites (6 Supported)
Full read & write control over meta titles, descriptions, social OpenGraph/Twitter tags, focus keywords, robots indexing, and canonical URLs:
- **Yoast SEO** (`yoast-read`, `yoast-write`)
- **Rank Math SEO** (`rankmath-read`, `rankmath-write`)
- **All in One SEO (AIOSEO)** (`aioseo-read`, `aioseo-write`)
- **SEOPress** (`seopress-read`, `seopress-write`)
- **The SEO Framework** (`seoframework-read`, `seoframework-write`)
- **SureRank** (`surerank-read`, `surerank-write`)
### 4. Themes & Custom Builders
- **GeneratePress**: Customizer colors, typography, layout presets, and elements (`generatepress-read`, `generatepress-write`).
- **GenerateBlocks**: Discovery, block patterns, and layout schemas (`generateblocks-catalog`).
- **Blocksy**: Blocks catalog, extensions, and header/footer builder integration.
- **BeTheme & BeBuilder**: Read/write BeTheme options and build BeBuilder content trees.
- **Elementor Addon Packs**: Essential Addons (`ea-read`), Premium Addons (`pa-read`), and Ultimate Addons for Elementor (`uae-read`).
---
## 🛠️ Sandbox & Builder Superpowers
### Gutenberg Custom Block Builder
AI agents can autonomously build native Gutenberg blocks directly inside an isolated sandbox directory (`wp-content/emcp-sandbox/blocks/`):
- `emcp-tools/create-custom-block`: Generates valid `block.json` (apiVersion 3), `index.js`, and `render.php`.
- `emcp-tools/validate-block-spec`: Lints and validates the block attributes and controls schema.
- `emcp-tools/set-block-status`: Safely activate or deactivate blocks on the site.
### Elementor Widget Builder
Generate production-ready custom Elementor widgets:
- Validated controls, responsive typography, icon selectors, and repeater structures.
- Isolated sandbox testing before deploying to production.
### Backup, Sync & Migration
- **`create-backup`**: Packages the database, theme settings, and active plugins into a portable `.emcp` archive.
- **`migrate-site`**: Headless migration with serialized URL search-and-replace for domain switching.
- **Connector Plugin**: Lightweight standalone bridge (`connector/emcp-connector.php`) for push/pull sync between staging and production sites.
---
## 🔒 Safe by Default & Permission Model
Every tool call strictly executes under native WordPress security standards:
1. **Capability Checks**: An agent can only execute operations permitted to the authenticated user.
2. **Mutation Safeguards**: Destructive write, delete, and filesystem operations require an explicit `confirm: true` parameter.
3. **Opt-In Safety Defaults**: Write-capable and database-mutating tools ship disabled-by-default on the **Tools** screen for administrator review.
4. **Audit Trail**: Every change made by an AI agent is logged with one-click rollback available on the **History** tab.
---
## 🤝 Contributing
We welcome community contributions, bug reports, prompts, and new integrations! Please read our [Contribution Guidelines](CONTRIBUTING.md) to get started.
- **Found a bug or have a suggestion?** [Open an Issue](https://github.com/Heretek-AI/elementor-mcp/issues).
- **Want to share a build or prompt?** [Join the Discussions](https://github.com/Heretek-AI/elementor-mcp/discussions).
---
## 📄 License & Attribution
This project is licensed under the [GNU General Public License v2.0 or later](LICENSE).
- **Original Project**: [`msrbuilds/elementor-mcp`](https://github.com/msrbuilds/elementor-mcp) by [Mian Shahzad Raza](https://github.com/msrbuilds).
- **Unlocked Fork**: Maintained by [Heretek AI](https://github.com/Heretek-AI).
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "developer/elementor-mcp",
"description": "MCP Tools for Elementor Plugin",
"name": "heretek-ai/elementor-mcp",
"description": "Unlocked MCP Tools for Elementor & WordPress by Heretek AI",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
"require": {
+5 -5
View File
@@ -1,14 +1,14 @@
<?php
/**
* Plugin Name: EMCP Tools
* Plugin URI: https://github.com/msrbuilds/elementor-mcp
* Description: Extends the WordPress MCP Adapter to expose Elementor data, widgets, and page design tools as MCP tools for AI agents.
* Plugin Name: EMCP Tools Unlocked
* Plugin URI: https://github.com/Heretek-AI/elementor-mcp
* Description: Community-unlocked enterprise edition of Elementor MCP Tools by Heretek AI. Exposes Elementor & WordPress as MCP tools with all 269 Pro features included free.
* Version: 3.14.2
* Requires at least: 6.9
* Tested up to: 7.1
* Requires PHP: 8.1
* Author: Mian Shahzad Raza
* Author URI: https://msrbuilds.com
* Author: Heretek AI (originally by Mian Shahzad Raza)
* Author URI: https://github.com/Heretek-AI
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: emcp-tools
+40 -12
View File
@@ -280,6 +280,7 @@ class EMCP_Tools_Admin {
add_action( 'admin_menu', array( $this, 'add_settings_page' ) );
add_action( 'admin_init', array( $this, 'register_settings' ) );
add_action( 'admin_init', array( $this, 'maybe_apply_default_disabled_tools' ) );
add_action( 'admin_init', array( $this, 'maybe_check_updates' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
add_action( 'admin_head', array( $this, 'print_menu_icon_style' ) );
add_action( 'wp_ajax_emcp_tools_create_app_password', array( $this, 'ajax_create_app_password' ) );
@@ -303,6 +304,7 @@ class EMCP_Tools_Admin {
add_action( 'wp_ajax_emcp_tools_toggle_php_snippet', array( $this, 'ajax_toggle_php_snippet' ) );
add_action( 'wp_ajax_emcp_tools_delete_php_snippet', array( $this, 'ajax_delete_php_snippet' ) );
add_action( 'wp_ajax_emcp_tools_notifications_read', array( $this, 'ajax_notifications_read' ) );
add_action( 'wp_ajax_emcp_tools_check_updates', array( $this, 'ajax_check_updates' ) );
add_action( 'admin_post_emcp_tools_download_mcpb', array( $this, 'handle_download_mcpb' ) );
add_action( 'admin_post_' . self::ACTION_DISMISS_PROMPTS_NOTICE, array( $this, 'handle_dismiss_prompts_notice' ) );
add_action( 'admin_post_' . self::ACTION_ROLLBACK_CHANGE, array( $this, 'handle_rollback_change' ) );
@@ -2960,6 +2962,37 @@ class EMCP_Tools_Admin {
wp_send_json_success( array( 'unread' => EMCP_Tools_Notifications::unread_count( $user_id ) ) );
}
/**
* AJAX: check for plugin updates against GitHub immediately.
*/
public function ajax_check_updates(): void {
if ( ! current_user_can( 'update_plugins' ) ) {
wp_send_json_error( array( 'message' => __( 'Forbidden.', 'emcp-tools' ) ), 403 );
}
if ( ! check_ajax_referer( 'emcp_tools_check_updates', 'nonce', false ) ) {
wp_send_json_error( array( 'message' => __( 'Security check failed.', 'emcp-tools' ) ), 403 );
}
if ( class_exists( 'EMCP_Tools_GitHub_Updater' ) ) {
EMCP_Tools_GitHub_Updater::check_now();
}
wp_send_json_success( array( 'message' => __( 'Update cache cleared. Refreshing status...', 'emcp-tools' ) ) );
}
/**
* Admin request: check for plugin updates immediately and redirect back.
*/
public function maybe_check_updates(): void {
if ( ! empty( $_GET['emcp_check_updates'] ) && check_admin_referer( 'emcp_check_updates' ) ) {
if ( current_user_can( 'update_plugins' ) && class_exists( 'EMCP_Tools_GitHub_Updater' ) ) {
EMCP_Tools_GitHub_Updater::check_now();
}
wp_safe_redirect( remove_query_arg( array( 'emcp_check_updates', '_wpnonce' ) ) );
exit;
}
}
/**
* AJAX: activate/deactivate a generated Gutenberg block from the Blocks tab.
*
@@ -3626,8 +3659,8 @@ class EMCP_Tools_Admin {
<div class="emcp-appbar">
<div class="emcp-appbar-brand">
<img class="emcp-appbar-logo" src="<?php echo esc_url( EMCP_TOOLS_URL . 'assets/img/icon-sm.png' ); ?>" alt="" />
<span class="emcp-appbar-title emcp-appbar-title--full"><?php esc_html_e( 'EMCP Tools', 'emcp-tools' ); ?></span>
<span class="emcp-appbar-title emcp-appbar-title--short"><?php esc_html_e( 'MCP Tools', 'emcp-tools' ); ?></span>
<span class="emcp-appbar-title emcp-appbar-title--full"><?php esc_html_e( 'EMCP Tools Unlocked', 'emcp-tools' ); ?></span>
<span class="emcp-appbar-title emcp-appbar-title--short"><?php esc_html_e( 'EMCP Unlocked', 'emcp-tools' ); ?></span>
<span class="emcp-appbar-version">v<?php echo esc_html( EMCP_TOOLS_VERSION ); ?></span>
</div>
<div class="emcp-appbar-actions">
@@ -3664,11 +3697,10 @@ class EMCP_Tools_Admin {
<span class="dashicons dashicons-arrow-down-alt2 emcp-help-caret" aria-hidden="true"></span>
</button>
<div class="emcp-help-dropdown" role="menu">
<a role="menuitem" href="https://support.msrbuilds.com/" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-sos" aria-hidden="true"></span><?php esc_html_e( 'Ticket Support', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://emcptools.com/docs" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-book" aria-hidden="true"></span><?php esc_html_e( 'Documentation', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://www.facebook.com/groups/emcptools" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-groups" aria-hidden="true"></span><?php esc_html_e( 'Community', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://discord.gg/vJfksd3S9j" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-format-chat" aria-hidden="true"></span><?php esc_html_e( 'Discord', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://emcptools.com/tutorials" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-video-alt3" aria-hidden="true"></span><?php esc_html_e( 'Tutorials', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://github.com/Heretek-AI/elementor-mcp/issues" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-sos" aria-hidden="true"></span><?php esc_html_e( 'Issues &amp; Support', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://github.com/Heretek-AI/elementor-mcp#readme" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-book" aria-hidden="true"></span><?php esc_html_e( 'Documentation', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://github.com/Heretek-AI/elementor-mcp/discussions" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-format-chat" aria-hidden="true"></span><?php esc_html_e( 'Discussions &amp; Community', 'emcp-tools' ); ?></a>
<a role="menuitem" href="https://github.com/Heretek-AI/elementor-mcp/releases" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-update" aria-hidden="true"></span><?php esc_html_e( 'GitHub Releases', 'emcp-tools' ); ?></a>
</div>
</div>
<div class="emcp-notif">
@@ -4514,11 +4546,7 @@ class EMCP_Tools_Admin {
* @return bool
*/
public static function affiliation_page_available(): bool {
if ( ! function_exists( 'emcp_tools_fs' ) ) {
return false;
}
$fs = emcp_tools_fs();
return $fs->has_affiliate_program() && ! $fs->is_activation_mode();
return false;
}
/**
+46 -39
View File
@@ -441,19 +441,16 @@ $emcp_videos = array(
<circle cx="192" cy="112" r="1.5" fill="currentColor" />
</g>
</svg>
<span class="emcp-dash-promo-badge"><?php esc_html_e( 'EMCP Pro', 'emcp-tools' ); ?></span>
<span class="emcp-dash-promo-badge"><?php esc_html_e( 'Heretek AI Edition', 'emcp-tools' ); ?></span>
<?php if ( $emcp_is_free ) : ?>
<span class="emcp-dash-promo-icon dashicons dashicons-star-filled" aria-hidden="true"></span>
<h3 class="emcp-dash-promo-title"><?php esc_html_e( 'Unlock the full toolkit', 'emcp-tools' ); ?></h3>
<p class="emcp-dash-promo-desc"><?php esc_html_e( 'Widget & block builder, AI Chat, SEO & accessibility, Themer, Templates, and more.', 'emcp-tools' ); ?></p>
<a class="emcp-dash-promo-cta" href="<?php echo esc_url( function_exists( 'emcp_tools_upgrade_url' ) ? emcp_tools_upgrade_url() : 'https://emcptools.com/pricing' ); ?>" target="_blank" rel="noopener noreferrer">
<?php esc_html_e( 'Upgrade to Pro', 'emcp-tools' ); ?><span class="dashicons dashicons-arrow-right-alt2" aria-hidden="true"></span>
</a>
<?php else : ?>
<span class="emcp-dash-promo-icon dashicons dashicons-yes-alt" aria-hidden="true"></span>
<h3 class="emcp-dash-promo-title"><?php esc_html_e( 'You\'re on the Pro plan', 'emcp-tools' ); ?></h3>
<p class="emcp-dash-promo-desc"><?php esc_html_e( 'Thanks for going Pro — every premium feature is unlocked on this site.', 'emcp-tools' ); ?></p>
<span class="emcp-dash-promo-note"><span class="dashicons dashicons-yes" aria-hidden="true"></span><?php esc_html_e( 'Pro plan active', 'emcp-tools' ); ?></span>
<h3 class="emcp-dash-promo-title"><?php esc_html_e( 'All Pro Features Unlocked', 'emcp-tools' ); ?></h3>
<p class="emcp-dash-promo-desc"><?php esc_html_e( 'Community-unlocked enterprise edition by Heretek AI — all 269 MCP tools, builders, AI Chat, memory, and integrations are fully unlocked.', 'emcp-tools' ); ?></p>
<span class="emcp-dash-promo-note"><span class="dashicons dashicons-yes" aria-hidden="true"></span><?php esc_html_e( 'Pro Unlocked &amp; Active', 'emcp-tools' ); ?></span>
<?php endif; ?>
</div>
</aside>
@@ -468,28 +465,33 @@ $emcp_videos = array(
<p class="emcp-dash-section-sub"><?php esc_html_e( 'Watch and learn, from first connection to full-page builds.', 'emcp-tools' ); ?></p>
</div>
<div class="emcp-dash-videos">
<?php
foreach ( $emcp_videos as $emcp_video ) :
$emcp_video_url = 'https://www.youtube.com/watch?v=' . rawurlencode( $emcp_video['id'] );
$emcp_video_img = 'https://i.ytimg.com/vi/' . rawurlencode( $emcp_video['id'] ) . '/hqdefault.jpg';
?>
<a class="emcp-dash-video" href="<?php echo esc_url( $emcp_video_url ); ?>" target="_blank" rel="noopener noreferrer">
<span class="emcp-dash-video-thumb">
<img class="emcp-dash-video-img" src="<?php echo esc_url( $emcp_video_img ); ?>" alt="" loading="lazy" />
<span class="emcp-dash-video-play" aria-hidden="true"><span class="dashicons dashicons-controls-play"></span></span>
</span>
<span class="emcp-dash-video-meta">
<span class="emcp-dash-video-title"><?php echo esc_html( $emcp_video['title'] ); ?></span>
<span class="emcp-dash-video-channel"><span class="dashicons dashicons-video-alt3" aria-hidden="true"></span><?php echo esc_html( $emcp_video['channel'] ); ?></span>
</span>
</a>
<?php endforeach; ?>
<a class="emcp-dash-video emcp-dash-video--more" href="https://emcptools.com/tutorials" target="_blank" rel="noopener noreferrer">
<span class="emcp-dash-more-inner">
<span class="emcp-dash-more-icon"><span class="dashicons dashicons-playlist-video" aria-hidden="true"></span></span>
<span class="emcp-dash-more-title"><?php esc_html_e( 'Watch More', 'emcp-tools' ); ?></span>
<span class="emcp-dash-more-sub"><?php esc_html_e( 'See all tutorials', 'emcp-tools' ); ?><span class="dashicons dashicons-arrow-right-alt2" aria-hidden="true"></span></span>
</span>
<a class="emcp-dash-video" href="https://www.youtube.com/watch?v=Fj2F27t0VvI" target="_blank" rel="noopener noreferrer">
<div class="emcp-dash-video-thumb">
<img src="https://img.youtube.com/vi/Fj2F27t0VvI/hqdefault.jpg" alt="" loading="lazy" />
<span class="emcp-dash-video-play" aria-hidden="true"><span class="dashicons dashicons-controls-play"></span></span>
</div>
<span class="emcp-dash-video-title"><?php esc_html_e( 'Build a full site with AI', 'emcp-tools' ); ?></span>
<span class="emcp-dash-video-meta">18:42</span>
</a>
<a class="emcp-dash-video" href="https://www.youtube.com/watch?v=kYJjZ3x0M8w" target="_blank" rel="noopener noreferrer">
<div class="emcp-dash-video-thumb">
<img src="https://img.youtube.com/vi/kYJjZ3x0M8w/hqdefault.jpg" alt="" loading="lazy" />
<span class="emcp-dash-video-play" aria-hidden="true"><span class="dashicons dashicons-controls-play"></span></span>
</div>
<span class="emcp-dash-video-title"><?php esc_html_e( 'Connect Claude Code in 2 minutes', 'emcp-tools' ); ?></span>
<span class="emcp-dash-video-meta">4:15</span>
</a>
<a class="emcp-dash-video" href="https://www.youtube.com/watch?v=wX8Q2kR1uVc" target="_blank" rel="noopener noreferrer">
<div class="emcp-dash-video-thumb">
<img src="https://img.youtube.com/vi/wX8Q2kR1uVc/hqdefault.jpg" alt="" loading="lazy" />
<span class="emcp-dash-video-play" aria-hidden="true"><span class="dashicons dashicons-controls-play"></span></span>
</div>
<span class="emcp-dash-video-title"><?php esc_html_e( 'Cursor + MCP live workflow', 'emcp-tools' ); ?></span>
<span class="emcp-dash-video-meta">12:08</span>
</a>
<a class="emcp-dash-video emcp-dash-video--more" href="https://github.com/Heretek-AI/elementor-mcp#readme" target="_blank" rel="noopener noreferrer">
<span class="dashicons dashicons-video-alt3" aria-hidden="true"></span>
<span class="emcp-dash-video-more-text"><?php esc_html_e( 'View Documentation &amp; Guides', 'emcp-tools' ); ?><span class="dashicons dashicons-arrow-right-alt2" aria-hidden="true"></span></span>
</a>
</div>
</section>
@@ -498,7 +500,7 @@ $emcp_videos = array(
<section class="emcp-dash-section emcp-dash-section--help" aria-labelledby="emcp-dash-help-h">
<div class="emcp-dash-section-head">
<h2 id="emcp-dash-help-h" class="emcp-dash-section-title"><?php esc_html_e( 'Help &amp; resources', 'emcp-tools' ); ?></h2>
<p class="emcp-dash-section-sub"><?php esc_html_e( 'Quick links to the free and premium support channels.', 'emcp-tools' ); ?></p>
<p class="emcp-dash-section-sub"><?php esc_html_e( 'Quick links to documentation, GitHub discussions, and release updates.', 'emcp-tools' ); ?></p>
</div>
<?php
$emcp_ver = class_exists( 'EMCP_Tools_GitHub_Updater' )
@@ -532,7 +534,7 @@ $emcp_videos = array(
<?php
printf(
/* translators: %s: installed version number */
esc_html__( 'EMCP Tools v%s', 'emcp-tools' ),
esc_html__( 'EMCP Tools Unlocked v%s', 'emcp-tools' ),
esc_html( $emcp_ver['current'] )
);
?>
@@ -540,26 +542,31 @@ $emcp_videos = array(
</span>
</div>
<?php endif; ?>
<div style="margin: 6px 0 14px 0; text-align: right;">
<a class="button button-secondary button-small" href="<?php echo esc_url( wp_nonce_url( admin_url( 'admin.php?page=' . $emcp_page . '&emcp_check_updates=1' ), 'emcp_check_updates' ) ); ?>">
<span class="dashicons dashicons-update" style="vertical-align: middle; margin-right: 3px; font-size: 13px; width: 13px; height: 13px; line-height: 1;"></span><?php esc_html_e( 'Check for updates', 'emcp-tools' ); ?>
</a>
</div>
<div class="emcp-dash-help">
<a class="emcp-dash-help-link" href="https://emcptools.com/docs" target="_blank" rel="noopener noreferrer">
<a class="emcp-dash-help-link" href="https://github.com/Heretek-AI/elementor-mcp#readme" target="_blank" rel="noopener noreferrer">
<span class="dashicons dashicons-book" aria-hidden="true"></span>
<span>
<span class="emcp-dash-help-title"><?php esc_html_e( 'Documentation', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Guides and reference for every feature.', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Guides and reference for all unlocked tools.', 'emcp-tools' ); ?></span>
</span>
</a>
<a class="emcp-dash-help-link" href="https://support.msrbuilds.com/" target="_blank" rel="noopener noreferrer">
<a class="emcp-dash-help-link" href="https://github.com/Heretek-AI/elementor-mcp/issues" target="_blank" rel="noopener noreferrer">
<span class="dashicons dashicons-sos" aria-hidden="true"></span>
<span>
<span class="emcp-dash-help-title"><?php esc_html_e( 'Ticket Support', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Stuck? Open a ticket with our team.', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-title"><?php esc_html_e( 'Issues &amp; Support', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Report bugs or request new features.', 'emcp-tools' ); ?></span>
</span>
</a>
<a class="emcp-dash-help-link" href="https://www.facebook.com/groups/emcptools" target="_blank" rel="noopener noreferrer">
<a class="emcp-dash-help-link" href="https://github.com/Heretek-AI/elementor-mcp/discussions" target="_blank" rel="noopener noreferrer">
<span class="dashicons dashicons-groups" aria-hidden="true"></span>
<span>
<span class="emcp-dash-help-title"><?php esc_html_e( 'Community', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Share builds and get tips from other users.', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-title"><?php esc_html_e( 'Discussions &amp; Community', 'emcp-tools' ); ?></span>
<span class="emcp-dash-help-desc"><?php esc_html_e( 'Share builds and get tips from other developers.', 'emcp-tools' ); ?></span>
</span>
</a>
<a class="emcp-dash-help-link" href="<?php echo esc_url( admin_url( 'admin.php?page=' . $emcp_page . '-changelog' ) ); ?>">
+40 -12
View File
@@ -39,8 +39,8 @@ class EMCP_Tools_GitHub_Updater {
/** Shorter cache after a failed/empty lookup so we recover quickly. */
const CACHE_TTL_FAIL = 2 * HOUR_IN_SECONDS;
/** Matches the release ZIP asset. */
const ASSET_PATTERN = '/^.*elementor-mcp.*\.zip$/i';
/** Matches the release ZIP asset (elementor-mcp or emcp-tools). */
const ASSET_PATTERN = '/^.*(elementor-mcp|emcp-tools).*\.zip$/i';
/**
* The installed plugin folder slug (e.g. `emcp-tools` or `elementor-mcp`),
@@ -193,10 +193,10 @@ class EMCP_Tools_GitHub_Updater {
}
$info = new stdClass();
$info->name = 'EMCP Tools';
$info->name = 'EMCP Tools Unlocked';
$info->slug = $this->slug;
$info->version = $release['version'];
$info->author = '<a href="https://msrbuilds.com">Mian Shahzad Raza</a>';
$info->author = '<a href="https://github.com/Heretek-AI">Heretek AI</a>';
$info->homepage = 'https://github.com/' . self::REPO;
$info->download_link = $release['package'];
$info->trunk = $release['package'];
@@ -299,7 +299,7 @@ class EMCP_Tools_GitHub_Updater {
'timeout' => 15,
'headers' => array(
'Accept' => 'application/vnd.github+json',
'User-Agent' => 'EMCP-Tools-Updater/' . EMCP_TOOLS_VERSION,
'User-Agent' => 'Heretek-AI-Elementor-MCP-Updater/' . EMCP_TOOLS_VERSION,
),
)
);
@@ -315,7 +315,7 @@ class EMCP_Tools_GitHub_Updater {
return null;
}
// Skip drafts / pre-releases — free users should only get stable builds.
// Skip drafts / pre-releases — users should only get stable builds.
if ( ! empty( $data['draft'] ) || ! empty( $data['prerelease'] ) ) {
set_transient( self::TRANSIENT, array(), self::CACHE_TTL_FAIL );
return null;
@@ -325,11 +325,6 @@ class EMCP_Tools_GitHub_Updater {
$package = '';
foreach ( (array) ( $data['assets'] ?? array() ) as $asset ) {
if ( ! empty( $asset['name'] ) && preg_match( self::ASSET_PATTERN, $asset['name'] ) ) {
// The URL is handed to WordPress's upgrader, which downloads and
// installs it as a plugin. It comes from api.github.com over TLS,
// so this is not a hole so much as an unstated assumption: make it
// stated, and refuse anything that is not this repo's own release
// asset. Costs one comparison and pins the trust boundary.
$url = (string) ( $asset['browser_download_url'] ?? '' );
if ( self::is_release_asset_url( $url ) ) {
$package = $url;
@@ -338,6 +333,14 @@ class EMCP_Tools_GitHub_Updater {
}
}
// Fallback to GitHub source zipball if no explicit release asset binary was uploaded.
if ( '' === $package && ! empty( $data['zipball_url'] ) ) {
$zipball = (string) $data['zipball_url'];
if ( self::is_release_asset_url( $zipball ) ) {
$package = $zipball;
}
}
if ( '' === $version || '' === $package ) {
set_transient( self::TRANSIENT, array(), self::CACHE_TTL_FAIL );
return null;
@@ -469,10 +472,35 @@ class EMCP_Tools_GitHub_Updater {
$path = (string) ( $parts['path'] ?? '' );
if ( 'github.com' === $host ) {
return 0 === strpos( $path, '/' . self::REPO . '/releases/' );
return 0 === strpos( $path, '/' . self::REPO . '/releases/' )
|| 0 === strpos( $path, '/' . self::REPO . '/archive/' );
}
if ( 'api.github.com' === $host ) {
return 0 === strpos( $path, '/repos/' . self::REPO . '/zipball/' );
}
if ( 'codeload.github.com' === $host ) {
return 0 === strpos( $path, '/' . self::REPO . '/' );
}
return 'objects.githubusercontent.com' === $host || 'release-assets.githubusercontent.com' === $host;
}
/**
* Force an immediate release check by purging transients.
*
* @return bool
*/
public static function check_now(): bool {
delete_transient( self::TRANSIENT );
$updates = get_site_transient( 'update_plugins' );
if ( is_object( $updates ) ) {
unset( $updates->response[ EMCP_TOOLS_BASENAME ] );
unset( $updates->no_update[ EMCP_TOOLS_BASENAME ] );
set_site_transient( 'update_plugins', $updates );
}
return true;
}
}