Elementify MCP

Elementify MCP

An MCP server and WordPress plugin that enables AI assistants to manage Elementor template libraries through a secure REST API. It allows users to read, create, update, and organize templates directly through natural language interfaces.

Category
访问服务器

README

repo-safety CI CodeQL npm License: MIT WordPress tested Elementor tested Node.js MCP compatible Vamerli Studio

Elementify MCP

Elementor-native MCP bridge for AI-assisted template management. Exposes the full elementor_library post type over a typed REST API — no 401 surprises, no empty responses. Ships as a WordPress plugin + Node.js MCP server with fine-grained, governance-controlled API key permissions.


What it is

Elementify MCP is a dual-distribution product connecting AI assistants to Elementor's template library. The WordPress plugin registers a REST API under /wp-json/elementify/v1/ that queries elementor_library directly, bypassing the limitations in Elementor's own REST modifications. The MCP server bridges Claude, Cursor, or any MCP-compatible client to any WordPress site running the plugin, with support for multiple sites, capability-scoped API keys, and a site-level governance layer.


Dual Distribution

Standalone

Install the plugin on your WordPress site and run the MCP server locally. Works with any Elementor installation — free or Pro.

Embedded in Vamerli Studio

When running inside Vamerli Studio, Elementify MCP activates automatically in vamerli-embedded or vamerli-agency mode. The Bundle Importer deploys the plugin; no separate configuration is needed.


Quick Start — Standalone

Step 1: Install the plugin

  1. Download or clone this repo
  2. Zip the /plugin directory
  3. Upload via WordPress admin: Plugins → Add New → Upload Plugin
  4. Activate Elementify MCP Plugin
  5. Go to Settings → Elementify MCP → generate your first API key

Step 2: Install and configure the MCP server

npm install -g @elementify/mcp
elementify-mcp init   # creates ~/.elementify/config.json

Edit ~/.elementify/config.json:

{
  "sites": [
    {
      "id": "my-site",
      "name": "My WordPress Site",
      "url": "https://yoursite.com",
      "apiKey": "ek_your_key_here",
      "default": true
    }
  ]
}

Step 3: Add to your MCP client

{
  "mcpServers": {
    "elementify": {
      "command": "elementify-mcp"
    }
  }
}

Quick Start — Vamerli Studio

Vamerli Studio deploys and configures the Elementify plugin automatically via the Bundle Importer. The MCP server activates in vamerli-embedded mode with your Vamerli license. No additional setup required.


Available MCP Tools

Tool Description Capability required
list_templates List templates with filtering by type, status, keyword templates:read
get_template Get a single template by ID templates:read
create_template Create a new template templates:write
update_template Update title, status, categories, tags templates:write
delete_template Permanently delete a template templates:delete
rename_template Rename a single template templates:write
duplicate_template Duplicate a template with optional new title templates:write
bulk_rename Rename multiple templates in one call templates:write
get_template_data Get raw _elementor_data JSON templates:read
update_template_data Replace _elementor_data entirely templates:write
extract_sections Get top-level section/container summary templates:read
list_by_type List all templates grouped by type templates:read
set_category Assign categories to a template templates:write
set_tags Assign tags to a template templates:write
audit_library Full library audit: counts, drafts, stale, uncategorized templates:read
get_site_info WP version, Elementor version, activation mode, capabilities templates:read
list_sites List all configured sites in ~/.elementify/config.json
switch_site Change the default site

Permission Architecture

Elementify uses a two-layer permission model.

Layer 1 — Key capabilities. Each API key is created with an explicit list of capabilities (e.g., templates:read, templates:write, templates:delete). A key with only templates:read cannot write. When a write endpoint is called with a read-only key, the plugin returns elementify_insufficient_scope — not elementify_invalid_key. This distinction is intentional and must be preserved by any client that consumes the API.

Layer 2 — Governance settings. Site administrators define an allowed_capabilities list in Settings → Elementify MCP. Even if a key has a capability, if governance disables it at the site level, the request returns elementify_governance_blocked. This enables a site owner to lock down destructive operations (e.g., templates:delete) without revoking keys.

The MCP server maps these server-side error codes to typed ElementifyErrorCode values so AI clients receive actionable, precise error information.


Why not Respira?

  • elementor_library access: Respira uses the default WordPress REST API for posts, which conflicts with Elementor's own REST modifications and returns 401 or empty results for template library requests. Elementify queries elementor_library directly via WP_Query.
  • Permission error clarity: Respira maps both "wrong key" and "insufficient capability" to the same generic auth error. Elementify distinguishes auth_invalid_key from auth_insufficient_scope, so AI clients can tell users exactly what to fix.
  • Elementor-native focus: Elementify is purpose-built for Elementor template management with Elementor-specific data structures, template types, and shortcode support. Respira is a general WordPress MCP tool.

Monorepo Structure

elementify-mcp/
├── .github/
│   ├── workflows/
│   │   ├── ci.yml              # Test matrix: Node 20/22, PHP 8.1/8.2/8.3
│   │   ├── codeql.yml          # CodeQL security analysis
│   │   ├── repo-safety.yml     # Block committed secrets
│   │   └── release.yml         # npm publish + plugin ZIP on tag
│   ├── dependabot.yml
│   ├── CODEOWNERS
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── SECURITY.md
│
├── plugin/                     # WordPress PHP plugin
│   ├── elementify-mcp.php      # Plugin bootstrap
│   ├── includes/
│   │   ├── Plugin.php          # Singleton main class
│   │   ├── Auth/Manager.php    # X-Elementify-Key auth + capability checks
│   │   ├── Api/Router.php      # REST route registration
│   │   ├── Api/Templates.php   # Template CRUD controller
│   │   ├── Api/Site.php        # Site info endpoint
│   │   ├── Governance/Settings.php
│   │   └── Activation/Mode.php
│   ├── tests/
│   │   ├── bootstrap.php
│   │   ├── Stubs/              # WordPress class stubs for unit tests
│   │   ├── Unit/
│   │   │   ├── Auth/ManagerTest.php
│   │   │   ├── Governance/SettingsTest.php
│   │   │   ├── Activation/ModeTest.php
│   │   │   └── Api/TemplatesTest.php
│   │   └── Integration/RestApiTest.php
│   ├── composer.json
│   └── phpunit.xml
│
├── mcp-server/                 # Node.js/TypeScript MCP server
│   ├── src/
│   │   ├── index.ts            # MCP server entry
│   │   ├── cli.ts              # elementify-mcp binary
│   │   ├── client.ts           # ElementifyClient (axios + error mapping)
│   │   ├── config.ts           # ~/.elementify/config.json
│   │   └── tools/
│   │       ├── index.ts
│   │       ├── library.ts      # list/get/create/update/delete/rename/duplicate/bulk_rename
│   │       ├── content.ts      # get/update template data, extract sections
│   │       ├── organization.ts # list_by_type, set_category, set_tags, audit_library
│   │       └── site.ts         # get_site_info, list_sites, switch_site
│   ├── src/__tests__/
│   │   ├── client.test.ts
│   │   ├── config.test.ts
│   │   ├── tools/
│   │   │   ├── library.test.ts
│   │   │   ├── content.test.ts
│   │   │   ├── organization.test.ts
│   │   │   └── site.test.ts
│   │   ├── integration/client-api.test.ts
│   │   └── smoke/server.test.ts
│   ├── vitest.config.ts
│   └── package.json
│
└── shared/                     # Shared TypeScript types
    ├── src/
    │   ├── index.ts
    │   ├── types/
    │   │   ├── template.ts
    │   │   ├── auth.ts
    │   │   ├── config.ts
    │   │   └── errors.ts
    │   └── __tests__/types.test.ts
    ├── vitest.config.ts
    └── package.json

Development

# Install all dependencies
npm install

# Build everything
npm run build

# Run MCP server tests
npm run test --workspace=mcp-server

# Run with coverage
npm run test:coverage --workspace=mcp-server

# Run shared type tests
npm run test --workspace=shared

# Run PHP tests (from plugin/)
cd plugin && composer install && vendor/bin/phpunit

# Watch mode during development
npm run test:watch --workspace=mcp-server

Contributing

  1. Fork and clone
  2. Create a branch: git checkout -b feat/your-feature
  3. Make changes with tests
  4. Run the full test suite: npm test + phpunit
  5. Open a pull request using the provided template

Security

See SECURITY.md for the vulnerability reporting policy and supported versions.

Never commit API keys or .env files. Use governance settings to restrict destructive capabilities in production environments.


License

MIT — see LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选