wp-ultra-mcp
Turns any WordPress site into an MCP server, allowing AI clients to directly control files, database, WP-CLI, PHP, content, and more through declarative abilities without writing code.
README
WP-Ultra-MCP
Free, open-source. Turn any WordPress site into a Model Context Protocol server so AI clients (Claude Code, Claude Desktop, Cursor, Gemini CLI) can build and control the whole site — files, SQL, WP-CLI, PHP, content, Elementor, and more — directly, with no relay service in the middle.
Install the plugin, flip a toggle, paste a config into your AI client. That's it. Your data never leaves your server.
Inspired by what closed/paid tools like Novamira do — rebuilt as a free plugin, and pushed further with declarative custom abilities (no plugin code needed), management Hubs, and a crash-recovery sandbox.
✨ The headline: extend the AI's toolset without writing code
Every other tool makes you write a PHP plugin to add a capability. WP-Ultra-MCP lets you (or the AI itself) define a new ability from a tiny .md/JSON recipe — uploaded in the Ability Hub or created over MCP — and it instantly becomes a real tool the AI can call:
---
name: woo-empty-cart
description: Empty a WooCommerce customer's cart
category: custom
run: wp-cli
---
```json
{ "input": { "user_id": { "type": "integer", "required": true } },
"command": ["wc", "cart", "empty", "--user={user_id}"] }
```
Recipe run types: wp-cli · sql (parameter-bound) · php (sandboxed) · http. The AI can even mint its own abilities via the ability-write tool. This is the compounding advantage: an ever-growing library of skills + abilities covering the whole WordPress ecosystem.
Why WP-Ultra-MCP
| WP-Ultra-MCP | Closed/paid alternatives | |
|---|---|---|
| Cost | Free, GPL open-source | Paid, gated features |
| Custom abilities | Declarative .md/JSON — no code |
Write a PHP plugin |
| Data ownership | Your server, your DB | May transit a 3rd-party service |
| Hubs | Ability / Skill / Memory Hubs in wp-admin | Limited |
| Sandbox safety | Crash-recovery safe-mode keeps the site up | Varies |
| Elementor | Schema-driven, server-side (shipped Wave 2) | Often paid-only |
Shipped now
Wave 1 — Core abilities
- Files:
read-file·write-file·edit-file·delete-file·list-directory— jailed to the WP root, executable files sandboxed - Code:
run-wp-cli(arg-array, no shell injection) ·execute-php(sandboxed eval) - Database:
execute-wp-query— parameterized SQL; destructive queries gated behindconfirm: true - Diagnostics:
read-debug-log - Memory:
memory-save·memory-get·memory-list·memory-delete— persistent across sessions - Content:
create-post·update-post·delete-post(+ meta, taxonomy terms, featured image) - Skills:
skill-get·skill-write·skill-edit·skill-delete— reusable markdown prompt docs
Wave 1.5 — Hubs, declarative abilities & sandbox
- Declarative ability engine —
.md/JSON recipes become real MCP abilities at runtime (run: wp-cli|sql|php|http) - Ability Hub — create / upload / edit / delete custom abilities;
ability-write/ability-get/ability-deleteso the AI can manage its own tools - Skill Hub — upload / edit / export
.mdskills, per-skill prompt + agentic toggles, read-only built-ins - Memory Hub — view / add / edit / delete persistent memories
- Sandbox safe-mode — if AI-written PHP triggers a fatal, a sentinel suspends it and keeps the site up, with a one-click recovery
- Connect page — managed Application-Password list + revoke, and per-client setup tabs (Claude Desktop / Claude Code / Cursor / Gemini / generic HTTP)
Wave 2 — Elementor (shipped)
Schema-driven Elementor v4 atomic layout control. Requires Elementor (free or Pro) with the e_atomic_elements experiment enabled.
elementor-list-widgets— list all registered Elementor widgets; passatomic_only:trueto filter to v4 atomic widgets only (e-heading, e-button, e-image, e-paragraph, e-divider, e-flexbox, e-div-block, …)elementor-get-widget-schema— introspect a widget's full prop schema: each prop's$$type, allowedenumvalues, anddefault; use this before setting any widget to avoid guessingelementor-get-style-schema— introspect the style schema for a widget or container (CSS custom-properties, layout, spacing, typography tokens)elementor-get-content— read a page's Elementor data as a compact element tree; passelement_idto drill into one node's full settingselementor-set-content— replace a page's entire Elementor data array (atomic-safe write that bypasses Document::save, which would strip atomic widgets; clears the CSS cache)elementor-add-element— insert a new element (container or widget) at a given parent and position; plain scalar settings are auto-wrapped into the{$$type,value}form and validated by Elementor's own Props_Parserelementor-edit-element— deep-merge new settings into an existing element without touching sibling propselementor-delete-element— remove an element (and its subtree) from the pageelementor-move-element— relocate an element to a new parent and/or position within the tree
Built-in skill elementor-v4-architect is pre-loaded and teaches the AI the step-by-step atomic workflow: introspect → build → position → read back.
Wave 3 — Elementor design systems (shipped)
Site-wide design control for Elementor v4. Requires Elementor (free or Pro).
elementor-get-design-system— read the active kit's global colors, global typography presets, and design-token variables in one call; use this to understand the current brand palette before making changeselementor-manage-global-colors— set or add brand colors to the kit (e.g.{colors:[{title:"Brand",color:"#0055FF"}], target:"custom"}); each color becomes a--e-global-color-<id>CSS custom property applied site-wide across all pageselementor-manage-variables— list or create Elementor v4 design-token variables (color, font, size types); reference a variable inside any widget or style prop with the shape{ "$$type":"global-color-variable", "value":"e-gv-<id>" }so widgets stay in sync when the token value changeselementor-list-dynamic-tags— list all registered dynamic-tag groups and tags; bind any widget prop to live data with{ "$$type":"dynamic", "value":{ "name":"post-title", "group":"post", "settings":{} } }— ACF, JetEngine, and other field-plugin tags appear here when those plugins are active
The built-in elementor-v4-architect skill is extended with a "Design systems (site-wide)" section that teaches the AI the variable-reference and dynamic-tag binding shapes.
Wave 3.5 — Global classes & interactions (shipped)
Reusable CSS classes and entrance animations for Elementor v4 elements. Requires Elementor (free or Pro); global classes require the e_classes experiment enabled (the elementor-upsert-global-class ability can enable it automatically by passing enable:true).
elementor-list-global-classes— list all existing global classes in the active kitelementor-upsert-global-class— create or update a reusable style class;propsare atomic CSS props (e.g.{ "color":{"$$type":"color","value":"#fff"} }); returns ane-gc-…id usable across any pageelementor-apply-class— add or remove a global class id on any element ({post_id, element_id, class_id}; passremove:trueto detach); changes take effect site-wide wherever the class is appliedelementor-set-interaction— attach an entrance animation to any element ({post_id, element_id, trigger:"scrollIn", effect:"fade"|"slide"|"scale", type:"in", duration:600}); uses Elementor's native interactions system
The built-in elementor-v4-architect skill is extended with a "Reusable classes & animations" section that teaches the AI the class-creation, application, and interaction-setting shapes.
Phase A — Elementor Reliability (shipped)
Reliable Elementor builds — schema validation before every write + server-side render check. Catches silently-dropped atomic props that cause broken designs.
elementor-validate— dry-run schema validation of Elementor pages; validates atomic settings and container layout props; detects silently-dropped properties before they break the designelementor-render-check— server-side render verification: confirms what actually rendered afterset-content/add-element/edit-element/move-element(catches design breakage)- Validate-before-commit: Elementor writes now enforce strict atomic-settings validation (with
force:trueescape hatch); container layout properties always validated to prevent broken designs
Phase B — Elementor Design Tokens (shipped)
Apply a reference's design palette, typography system, and token sizes as Elementor Variables for token-consistent, reference-faithful builds.
elementor-apply-design-tokens— create color, font, and size Variables from a perceived reference's palette, typography, and sizes; returns refs in the form{$$type,value}for use in atomic-build workflows
Phase B2 — Elementor Blueprints (shipped)
Insert ready-made structural section skeletons — navbar, hero, feature-grid, CTA, footer — with fresh ids, layout, and placeholder copy (no styling). Style them afterward with design tokens + global classes.
elementor-list-blueprints— list available built-in blueprint skeletons with descriptionselementor-insert-blueprint— insert a blueprint skeleton at a given parent and position; re-ids for the page, validates, and writes atomically. Carries layout + placeholder text only; style with tokens + classes
Wave 4a — Gutenberg core block control (shipped)
Positional-path block tree ops for Gutenberg posts and pages. Core WordPress APIs only — no browser tab required.
gutenberg-get-content— read a post's block tree as a compact JSON array (type, attrs, innerBlocks)gutenberg-list-blocks— list all registered block types available on the site (namespace/name + title)gutenberg-get-block-schema— introspect a block type's full attribute schema and default values; use this before inserting to avoid guessing propsgutenberg-insert-block— insert a new block at a positional path inside a post's block tree; best-effort attribute validation with unknown-block warning; every write is audit-loggedgutenberg-update-block— deep-merge new attributes into an existing block at a given path without touching sibling propsgutenberg-delete-block— remove a block (and its innerBlocks subtree) from a postgutenberg-move-block— relocate a block from one positional path to another within the same post
Tip: insert container blocks (group/columns/etc.) via block.markup (raw block HTML) rather than the structured form, so wrapper markup is preserved.
Wave 4b+ — Planned
Gutenberg patterns/reusable blocks, FSE (Full Site Editing) template control, Bricks Builder support, ACF / JetEngine / Meta Box / Pods field-plugin integration. The goal: literally do everything in WordPress through AI.
Install & connect
- Install: download the release ZIP (or clone) and put the
wp-ultra-mcp/directory — including its bundledvendor/— intowp-content/plugins/, then activate it. (Requires WordPress 6.6+ and PHP 8.0+. Nocomposer installneeded —vendor/is bundled.) - Enable: wp-admin → WP-Ultra-MCP → toggle AI control on.
- App password: click Generate application password, copy it (shown once).
- Connect: on the same page, pick your AI client tab and paste the shown config. For the npx-bridge clients:
{
"mcpServers": {
"wp-ultra-mcp": {
"command": "npx",
"args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
"env": {
"WP_API_URL": "https://YOUR-SITE/wp-json/mcp/wpultra",
"WP_API_USERNAME": "your-wp-username",
"WP_API_PASSWORD": "the application password"
}
}
}
}
The MCP endpoint exposes three meta-tools — discover-abilities, get-ability-info, execute-ability — and the AI uses them to introspect and run any ability. Auth is standard WordPress Application Passwords; revoke anytime from the Connect page.
Security model
Full power, bounded blast radius. Every privileged ability requires the plugin to be enabled AND the user to have manage_options (super-admin on multisite). SQL is always $wpdb->prepared; destructive verbs need confirm: true. File writes are jailed to the WP root and executable files confined to a sandbox dir. WP-CLI runs as an argument array (no shell string). The sandbox safe-mode suspends AI-written PHP after a fatal so a bad write can't take the site down.
Repository layout
wp-ultra-mcp/ ← the WordPress plugin (install this)
wp-ultra-mcp.php plugin entry point
includes/
abilities/ one PHP file per built-in ability
recipes/ declarative-ability engine (parser, executor, CPT)
admin/ Connect page + Ability/Skill/Memory Hubs
skills/ memory/ sandbox/ helpers.php bootstrap-mcp.php
vendor/ bundled wordpress/mcp-adapter (GPL)
bin/ deploy.ps1, build-zip.ps1
tests/ zero-dependency PHP test harness (run with: php tests/<name>.test.php)
docs/superpowers/ design specs & implementation plans
Develop
# run the PHP test suite — any PHP 8.x CLI; no dependencies
# bash: for f in tests/*.test.php; do php "$f"; done
# powershell: Get-ChildItem tests\*.test.php | % { php $_.FullName }
# deploy into a local site for live testing
powershell -File wp-ultra-mcp\bin\deploy.ps1
# build a distributable release zip (vendor bundled)
powershell -File wp-ultra-mcp\bin\build-zip.ps1
Contributions welcome — new built-in abilities and skills especially. Open an issue or PR.
License
GPL-2.0-or-later. WP-Ultra-MCP bundles the wordpress/mcp-adapter and wordpress/php-mcp-schema packages (also GPL-2.0-or-later). Free to use, modify, and redistribute.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。