Let AI assistants edit your WordPress site via MCP.
Tested up to: 6.9 Stable tag: 3.0.28 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html
This plugin exposes WordPress functionality through MCP (Model Context Protocol), enabling AI assistants to directly interact with your WordPress site. No more copy-pasting between chat and admin.
Example: "Fix the phone numbers in these 25 articles to be clickable tel: links." - Done in 30 seconds, all 25 articles.
Version 3.0 introduced a modular architecture. The core plugin provides WordPress-native abilities, while vendor-specific features are available as separate add-on plugins:
| Plugin | Abilities | Description |
|---|---|---|
| MCP Expose Abilities (core) | 61 | WordPress core: content, menus, users, media, widgets, plugins, options, comments, taxonomy, system |
| MCP Abilities - Filesystem | 11 | File operations with security hardening |
| MCP Abilities - Elementor | 38 | Elementor page builder integration |
| MCP Abilities - GeneratePress | 26 | GeneratePress theme + GenerateBlocks |
| MCP Abilities - Cloudflare | 4 | Cloudflare cache management |
| MCP Abilities - Google Workspace | 16 | Gmail API via Workspace service account |
| MCP Abilities - Rank Math | 12 | Rank Math SEO metadata access |
| MCP Abilities - Wordfence | 11 | Wordfence security status + blocks |
| MCP Abilities - Brevo | 22 | Brevo contacts, lists, campaigns |
| MCP Abilities - Advanced Ads | 17 | Advanced Ads management |
| MCP Abilities - Toolset | 38 | Toolset post types, custom fields, taxonomies, relationships |
| MCP Abilities - SitePress | 3 | WPML translation mapping and QA checks |
Total ecosystem: 258 abilities
Install only what you need. Running GeneratePress? Install that add-on. Don't use Elementor? Skip it.
- WordPress 6.9+
- PHP 8.0+
- Abilities API plugin (WordPress core team)
- MCP Adapter plugin (WordPress core team)
- Use the official Abilities API release ZIP (
abilities-api.zip) so it installs aswp-content/plugins/abilities-api/abilities-api.php
- Install and activate the required plugins:
- Abilities API (official release ZIP): https://github.com/WordPress/abilities-api/releases/download/v0.4.0/abilities-api.zip
- MCP Adapter: https://github.com/WordPress/mcp-adapter
- Download the latest release from Releases
- Upload via WordPress Admin → Plugins → Add New → Upload Plugin
- Activate the plugin
- (Optional) Install add-on plugins for vendor-specific features
| Ability | Description |
|---|---|
content/list-posts |
List posts with filtering by status, category, author, search |
content/get-post |
Get single post by ID or slug |
content/get-next-post |
Find the next existing post after an ID, even when IDs have gaps |
content/create-post |
Create new post, including featured_image_id |
content/update-post |
Update existing post, including featured_image_id |
content/delete-post |
Delete post (trash or permanent) |
content/patch-post |
Find/replace in post content |
content/list-pages |
List pages with filtering |
content/get-page |
Get single page by ID or slug |
content/create-page |
Create new page, including featured_image_id |
content/update-page |
Update existing page, including featured_image_id |
content/delete-page |
Delete page |
content/patch-page |
Find/replace in page content |
content/list-categories |
List all categories |
content/create-category |
Create new category |
content/update-category |
Update existing category |
content/list-tags |
List all tags |
content/create-tag |
Create new tag |
content/list-media |
List media items |
content/list-users |
List users |
content/search |
Search across posts, pages, media |
content/list-revisions |
List revisions for a post/page |
content/get-revision |
Get specific revision details |
| Ability | Description |
|---|---|
menus/list |
List all menus and theme locations |
menus/get-items |
Get items from a menu |
menus/create |
Create new menu |
menus/add-item |
Add item to menu |
menus/update-item |
Update menu item |
menus/delete-item |
Delete menu item |
menus/assign-location |
Assign menu to theme location |
| Ability | Description |
|---|---|
users/list |
List users with roles |
users/get |
Get user by ID, login, or email |
users/create |
Create new user |
users/update |
Update user |
users/delete |
Delete user (can reassign content) |
| Ability | Description |
|---|---|
media/upload |
Upload media from URL |
media/get |
Get media item details and sizes |
media/update |
Update title, alt, caption |
media/delete |
Delete media item |
| Ability | Description |
|---|---|
widgets/list-sidebars |
List all widget areas |
widgets/get-sidebar |
Get widgets in a sidebar |
widgets/list-available |
List available widget types |
| Ability | Description |
|---|---|
plugins/upload |
Upload plugin from URL |
plugins/upload-base64 |
Upload plugin from local file (base64 or zip path) |
plugins/list |
List installed plugins |
plugins/activate |
Activate installed plugin |
plugins/deactivate |
Deactivate active plugin |
plugins/delete |
Delete inactive plugin |
| Ability | Description |
|---|---|
comments/list |
List comments with filtering |
comments/get |
Get single comment details |
comments/create |
Create top-level comment |
comments/reply |
Reply to existing comment |
comments/update-status |
Update comment status (approve, spam, trash) |
comments/delete |
Delete comment |
| Ability | Description |
|---|---|
options/get |
Get option value |
options/update |
Update option (protected options blocked) |
options/list |
List all options |
| Ability | Description |
|---|---|
system/get-transient |
Get transient value |
system/debug-log |
Read debug.log file |
system/toggle-debug |
Toggle WP_DEBUG, WP_DEBUG_LOG, WP_DEBUG_DISPLAY |
| Ability | Description |
|---|---|
taxonomy/associate-with-post-type |
Associate a taxonomy with a post type and persist the mapping |
| Ability | Description |
|---|---|
filesystem/get-changelog |
Get plugin/theme changelog |
filesystem/read-file |
Read file contents (security hardened) |
filesystem/write-file |
Write file (PHP code blocked) |
filesystem/append-file |
Append to file |
filesystem/list-directory |
List directory contents |
filesystem/delete-file |
Delete file (creates backup) |
filesystem/delete-directory |
Delete directory (optional recursive) |
filesystem/file-info |
Get file metadata |
filesystem/create-directory |
Create directory |
filesystem/copy-file |
Copy file |
filesystem/move-file |
Move/rename file |
See the add-on readme for the full list. Common abilities:
| Ability | Description |
|---|---|
elementor/get-data |
Get Elementor JSON for a page |
elementor/update-data |
Replace Elementor JSON |
elementor/patch-data |
Find/replace in Elementor JSON |
elementor/update-element |
Update specific element by ID |
elementor/list-templates |
List saved templates |
elementor/clear-cache |
Clear CSS cache |
See the add-on readme for the full list. Common abilities:
| Ability | Description |
|---|---|
generatepress/get-settings |
Get theme settings |
generatepress/update-settings |
Update theme settings |
generatepress/get-typography |
Get typography rules and font manager |
generatepress/list-elements |
List GeneratePress Elements |
generatepress/list-modules |
List module statuses |
generateblocks/get-global-styles |
Get global styles |
generateblocks/update-global-styles |
Update global styles |
generateblocks/clear-cache |
Clear CSS cache |
| Ability | Description |
|---|---|
cloudflare/clear-cache |
Clear Cloudflare cache (entire site or specific URLs) |
cloudflare/get-zone |
Get resolved Cloudflare zone context |
cloudflare/get-development-mode |
Read development mode status |
cloudflare/set-development-mode |
Enable/disable development mode |
| Ability | Description |
|---|---|
gmail/configure |
Set up Gmail API service account credentials |
gmail/status |
Check API connection status and configuration |
gmail/list-labels |
List labels |
gmail/get-label |
Get label by ID |
gmail/create-label |
Create label |
gmail/update-label |
Update label |
gmail/delete-label |
Delete label |
gmail/list |
List inbox messages with filtering |
gmail/list-threads |
List threads |
gmail/get |
Get full email content by ID |
gmail/get-thread |
Get thread details |
gmail/get-attachment |
Fetch attachment as base64 |
gmail/send |
Send email with HTML, attachments, CC, BCC |
gmail/modify |
Modify labels (archive, mark read/unread, etc.) |
gmail/reply |
Reply to an existing email thread |
email/send |
Send email via WordPress wp_mail (non-Gmail fallback) |
WordPress Admin → Users → Your Profile → Application Passwords
Configure your MCP client to connect to:
https://yoursite.com/wp-json/mcp/mcp-adapter-default-server
Use HTTP transport with a Basic Auth header generated from your WordPress username and application password.
Your MCP client can now edit your WordPress site through conversation.
{
"ability_name": "content/create-page",
"parameters": {
"title": "About Us",
"content": "<!-- wp:paragraph --><p>Hello world!</p><!-- /wp:paragraph -->",
"status": "publish"
}
}{
"ability_name": "menus/add-item",
"parameters": {
"menu_id": 5,
"title": "Contact",
"url": "/contact/"
}
}{
"ability_name": "media/upload",
"parameters": {
"url": "https://example.com/image.jpg",
"title": "Hero Image",
"alt_text": "Beautiful sunset"
}
}{
"ability_name": "content/patch-post",
"parameters": {
"id": 123,
"find": "+44 203 3181 832",
"replace": "<a href=\"tel:+442033181832\">+44 203 3181 832</a>"
}
}- Authentication required - Uses WordPress application passwords
- Permission checks - Every ability verifies user capabilities
- Your server - AI connects to your site, you control access
- Protected options - Critical settings blocked from modification
- Filesystem hardening - PHP code detection, path traversal protection (in add-on)
Three-plugin stack plus optional add-ons:
- Abilities API - Framework for registering abilities (WordPress core team)
- MCP Adapter - MCP protocol layer (WordPress core team)
- MCP Expose Abilities (this plugin) - Core WordPress abilities
- Add-on plugins (optional) - Vendor-specific abilities
- Added
featured_image_idsupport to post/page create and update abilities - Added
featured_image_idtocontent/get-postandcontent/get-page
- Fixed:
content/get-next-postnow applies theafter_idfloor correctly by allowing the query filter to run
- Added:
content/get-next-postto find the next existing post after an ID, even when IDs have gaps - Improved:
content/list-postsnow accepts case-insensitiveordervalues and friendlyorderbyaliases likeidandslug - Improved:
content/get-postnow acceptspost_typefor slug lookups and returns clearer missing-post context
- Fixed:
users/deletenow loadswp-admin/includes/user.phpbefore callingwp_delete_user()in REST/MCP contexts
- Performance: debug log reader now tails file content instead of loading full files
- Security:
options/getblocks sensitive option names (tokens, keys, secrets) - Schema: output schemas added for comments and taxonomy-association abilities
- Added:
content/update-categoryability - Fixed: Translator comment for placeholder string in post type validation
- Fixed: Stable tag alignment with plugin version
- Fixed: Use literal text domain in translation calls
- Fixed: Add translators comments for placeholder strings
- Added:
include_totalsflag plushas_more/returnedoutput for list-posts/list-pages/list-media to avoid expensive counts by default
- Added: plugins/upload-base64 now accepts
zip_pathfor server-local zip installs - Fixed: no-params abilities accept null input (menus/list, widgets/list-sidebars, widgets/list-available)
- Fixed: plugins/delete now loads core file helpers before deletion
- Added: Shared pagination normalization for core list abilities
- Fixed: plugins/upload now loads WordPress download helpers in non-admin contexts
- Added: plugins/upload-base64 ability for local file uploads
- Added:
content/create-categoryability
- Security: Added per-item capability checks for content, media, users, and comments
- Added:
plugins/activateability to activate installed plugins - Added:
plugins/deactivateability to deactivate active plugins
- Improved: All 47 ability descriptions now include parameter hints
- Added:
comments/createability for top-level comments
- Added:
plugins/deleteability to remove inactive plugins
- Fixed: Use WP_Filesystem API instead of native PHP functions
- Fixed: Replaced wp_get_sidebars_widgets with direct option call
- Added: Revisions abilities (
content/list-revisions,content/get-revision) - Added: Comments abilities (list, get, create, reply, update-status, delete)
- Added:
author_idparameter for content creation
- Breaking: Modular architecture - vendor-specific abilities moved to add-on plugins
- Core plugin now contains only WordPress-native abilities
- Add-on plugins: Filesystem (10), Elementor (6), GeneratePress (5), Cloudflare (1), Google Workspace (8)
- Cleaner installation - install only what you need
- Security: Added protected options blocklist (active_plugins, siteurl, admin_email, etc.)
- Security: Prevents accidental site breakage via options/update
- Security: Added UTF-7 and UTF-16 encoding bypass detection
- Security: Blocks encoded PHP injection attempts
- Security: Major filesystem security hardening
- Security: PHP code detection in file writes
- Security: Path traversal protection
- Security: Restricted to wp-content directory
- Added: Filesystem abilities
- Added: Options abilities
- Added: System abilities
- Added: Cloudflare cache clear ability
- Added:
elementor/update-elementfor targeted element updates
- Added: Menu, User, Media, Widget, Page abilities
- Initial release
PRs welcome! For vendor-specific abilities, consider creating an add-on plugin.
GPL-2.0+
Devenia - We've been doing SEO and web development since 1993.
- Plugin Page
- MCP Abilities - Toolset
- Abilities API (WordPress core team)
- MCP Adapter (WordPress core team)