Connects to WordPress sites via REST API and exposes 42 standard tools for managing posts, pages, users, plugins, themes, media, categories, tags, and comments. The main feature is aggressive response slimming that strips WordPress's verbose JSON down by 95 to 96 percent, dropping fields like guid, _links, meta, and class_list to keep only essentials like id, title, slug, and status. Uses Application Passwords for auth. An optional companion plugin adds 43 more tools for installing packages from WordPress.org, database search and replace, table optimization, and menu management. Reach for this when you need Claude to work with WordPress content without burning tokens on kilobytes of metadata per request.
Public tool metadata for what this MCP can expose to an agent.
wp_list_postsList WordPress posts with optional filters. Returns post ID, title, status, date, and categories. Use to browse existing content or find posts by keyword.3 paramsList WordPress posts with optional filters. Returns post ID, title, status, date, and categories. Use to browse existing content or find posts by keyword.
searchstringstatusstringper_pagenumberwp_get_postGet a single WordPress post with full content, metadata, categories, and tags. Use to inspect post content before editing.1 paramsGet a single WordPress post with full content, metadata, categories, and tags. Use to inspect post content before editing.
idnumberwp_create_postCreate a new WordPress post. Provide title and content (HTML). Optionally set status (draft/publish), categories, and tags.5 paramsCreate a new WordPress post. Provide title and content (HTML). Optionally set status (draft/publish), categories, and tags.
tagsarraytitlestringstatusstringcontentstringcategoriesarraywp_update_postUpdate an existing WordPress post. Change title, content, status, categories, or tags.6 paramsUpdate an existing WordPress post. Change title, content, status, categories, or tags.
idnumbertagsarraytitlestringstatusstringcontentstringcategoriesarraywp_delete_postDelete a WordPress post. Moves to trash by default.1 paramsDelete a WordPress post. Moves to trash by default.
idnumberwp_list_pagesList WordPress pages. Returns page ID, title, status, and parent page. Use to browse site page structure.2 paramsList WordPress pages. Returns page ID, title, status, and parent page. Use to browse site page structure.
statusstringper_pagenumberwp_get_pageGet a single WordPress page with full content and metadata.1 paramsGet a single WordPress page with full content and metadata.
idnumberwp_create_pageCreate a new WordPress page. Provide title and content (HTML). Optionally set parent page for hierarchy.4 paramsCreate a new WordPress page. Provide title and content (HTML). Optionally set parent page for hierarchy.
titlestringparentnumberstatusstringcontentstringwp_update_pageUpdate an existing WordPress page.4 paramsUpdate an existing WordPress page.
idnumbertitlestringstatusstringcontentstringwp_delete_pageDelete a WordPress page.1 paramsDelete a WordPress page.
idnumberwp_list_mediaList media files in the WordPress library. Returns file URLs, types, and metadata.2 paramsList media files in the WordPress library. Returns file URLs, types, and metadata.
per_pagenumbermedia_typestringwp_delete_mediaPermanently delete a media file from WordPress.1 paramsPermanently delete a media file from WordPress.
idnumberwp_list_commentsList comments on WordPress posts. Filter by post ID.2 paramsList comments on WordPress posts. Filter by post ID.
postnumberper_pagenumberwp_create_commentCreate a new comment on a WordPress post.4 paramsCreate a new comment on a WordPress post.
postnumbercontentstringauthor_namestringauthor_emailstringwp_update_commentUpdate or moderate a comment. Change content or approval status.3 paramsUpdate or moderate a comment. Change content or approval status.
idnumberstatusstringcontentstringwp_delete_commentPermanently delete a comment.1 paramsPermanently delete a comment.
idnumberwp_list_categoriesList all WordPress categories with post counts.2 paramsList all WordPress categories with post counts.
searchstringper_pagenumberwp_list_tagsList all WordPress tags with post counts.2 paramsList all WordPress tags with post counts.
searchstringper_pagenumberwp_list_usersList WordPress users with their roles.2 paramsList WordPress users with their roles.
searchstringper_pagenumberwp_get_site_infoGet WordPress site information: name, description, URL, timezone, and available features.1 paramsGet WordPress site information: name, description, URL, timezone, and available features.
_fieldsstringLightweight WordPress MCP server for site management. 158 tools with token-optimized responses — REST API responses automatically slimmed from kilobytes to essentials.
v2.1: Now includes Pro modules for ACF and WooCommerce via wp-pilot-pro.
v2.0: Extended tools for the cvrt-mcp-endpoints plugin — install plugins/themes from WordPress.org, database management, full widget/menu control, and more.
WordPress REST API returns extremely verbose JSON (~5-10KB per post). This server strips it down:
| Response | Before | After | Reduction |
|---|---|---|---|
wp_list_posts (10 posts) | ~50KB | ~2KB | 96% |
wp_get_post | ~5KB | ~200 bytes | 96% |
wp_list_plugins | ~15KB | ~800 bytes | 95% |
Less tokens = faster responses, lower costs, more context for your AI.
npm install -g @cavort-it-systems/wordpress-mcp
Or run directly:
npx @cavort-it-systems/wordpress-mcp
claude mcp add wordpress \
-e WORDPRESS_SITE_URL=https://example.com \
-e WORDPRESS_USERNAME=admin \
-e WORDPRESS_PASSWORD="xxxx xxxx xxxx xxxx" \
-- npx @cavort-it-systems/wordpress-mcp
Add to your MCP config (~/.claude.json or Claude Desktop settings):
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["@cavort-it-systems/wordpress-mcp"],
"env": {
"WORDPRESS_SITE_URL": "https://example.com",
"WORDPRESS_USERNAME": "admin",
"WORDPRESS_PASSWORD": "xxxx xxxx xxxx xxxx"
}
}
}
}
git clone https://github.com/cvrt-jh/wordpress-mcp.git
cd wordpress-mcp
npm install && npm run build
Uses Application Passwords (WordPress 5.6+):
All responses are automatically trimmed. Example:
wp_get_post — from ~5KB to ~200 bytes:
// Before (WordPress REST API raw)
{"id":123,"date":"2026-01-15T10:30:00","date_gmt":"2026-01-15T09:30:00",
"guid":{"rendered":"https://example.com/?p=123"},"modified":"2026-01-20T14:00:00",
"modified_gmt":"2026-01-20T13:00:00","slug":"my-post","status":"publish",
"type":"post","link":"https://example.com/my-post/","title":{"rendered":"My Post"},
"content":{"rendered":"<p>Full content...</p>","protected":false},
"excerpt":{"rendered":"<p>Excerpt...</p>","protected":false},
"author":1,"featured_media":456,"comment_status":"open","ping_status":"open",
"sticky":false,"template":"","format":"standard","meta":{"footnotes":""},
"categories":[1,5],"tags":[10,20],"class_list":["post-123","type-post",...],
"_links":{"self":[...],"collection":[...],"about":[...],...}}
// After (slimmed)
{"id":123,"title":"My Post","slug":"my-post","status":"publish",
"date":"2026-01-15T10:30:00","modified":"2026-01-20T14:00:00",
"link":"https://example.com/my-post/","excerpt":"Excerpt...",
"author":1,"categories":[1,5],"tags":[10,20],"featured_media":456}
What gets stripped:
| Field | Where | Why |
|---|---|---|
guid, _links | everywhere | Internal WordPress data |
content.rendered | lists | Only included when explicitly requested |
meta, class_list | posts/pages | Theme/plugin metadata |
ping_status, comment_status | posts | Rarely needed |
template, format, sticky | posts | Theme-specific |
| HTML tags | excerpts | Clean text output |
| Pretty-print JSON | all | Compact single-line output |
These work with any WordPress site:
wp_site_info - Get site name, description, URLwp_get_settings - Get site settingswp_update_settings - Update site settingswp_get_namespaces - List REST API namespaceswp_list_posts - List posts with filterswp_get_post - Get single postwp_create_post - Create postwp_update_post - Update postwp_delete_post - Delete postwp_search_posts - Search postswp_list_pages - List pageswp_get_page - Get single pagewp_create_page - Create pagewp_update_page - Update pagewp_delete_page - Delete pagewp_list_users - List userswp_me - Get current userwp_get_user - Get user by IDwp_create_user - Create userwp_update_user - Update userwp_delete_user - Delete userwp_list_plugins - List pluginswp_get_plugin - Get plugin detailswp_activate_plugin - Activate pluginwp_deactivate_plugin - Deactivate pluginwp_delete_plugin - Delete pluginwp_list_themes - List themeswp_get_active_theme - Get active themewp_get_theme - Get theme detailswp_activate_theme - Switch themeswp_list_media - List media librarywp_get_media - Get media itemwp_update_media - Update media metadatawp_delete_media - Delete mediawp_list_categories - List categorieswp_create_category - Create categorywp_update_category - Update categorywp_delete_category - Delete categorywp_list_tags - List tagswp_create_tag - Create tagwp_update_tag - Update tagwp_delete_tag - Delete tagwp_list_comments - List commentswp_get_comment - Get commentwp_create_comment - Create commentwp_update_comment - Update/moderate commentwp_delete_comment - Delete commentwp_moderate_comments - Batch moderateThese require the cvrt-mcp-endpoints WordPress plugin to be installed and activated.
mcp_search_plugins - Search WordPress.org pluginsmcp_install_plugin - Install plugin from WordPress.orgmcp_update_plugin - Update single pluginmcp_update_all_plugins - Update all pluginsmcp_search_themes - Search WordPress.org themesmcp_install_theme - Install theme from WordPress.orgmcp_update_theme - Update single thememcp_update_all_themes - Update all themesmcp_delete_theme - Delete inactive thememcp_get_version - Get WordPress version infomcp_get_system_info - Get comprehensive system infomcp_check_updates - Check for all updatesmcp_update_core - Update WordPress coremcp_flush_rewrite - Flush rewrite rulesmcp_flush_cache - Clear all cachesmcp_get_tables - List tables with sizesmcp_search_replace - Search/replace in databasemcp_optimize_tables - Optimize all tablesmcp_clean_revisions - Delete old revisionsmcp_clean_comments - Delete spam/trash commentsmcp_list_options - List options with prefix filtermcp_get_option - Get single optionmcp_set_option - Create/update optionmcp_delete_option - Delete optionmcp_bulk_get_options - Get multiple optionsmcp_list_menus - List navigation menusmcp_get_menu_locations - Get theme locationsmcp_get_menu - Get menu with itemsmcp_create_menu - Create menumcp_delete_menu - Delete menumcp_add_menu_item - Add menu itemmcp_delete_menu_item - Delete menu itemmcp_assign_menu_location - Assign menu to locationmcp_list_sidebars - List all sidebarsmcp_get_sidebar_widgets - Get sidebar widgetsmcp_list_widget_types - List widget typesmcp_get_widget - Get widget detailsmcp_add_widget - Add widget to sidebarmcp_update_widget - Update widget settingsmcp_delete_widget - Remove widgetmcp_move_widget - Move widget to sidebarmcp_get_health - Site health scoremcp_get_debug_info - Debug informationmcp_get_php_info - PHP configurationmcp_get_plugins_health - Plugin health/updatesmcp_get_cron_status - Cron jobs statusmcp_run_cron - Run cron hook manuallyRequires wp-pilot-pro and Advanced Custom Fields.
acf_list_field_groups - List all field groupsacf_get_field_group - Get field group with schemaacf_export_field_groups - Export as JSONacf_import_field_groups - Import from JSONacf_get_post_fields - Get all fields for postacf_update_post_fields - Update multiple fieldsacf_get_post_field - Get single field valueacf_update_post_field - Update single fieldacf_get_term_fields - Get term ACF fieldsacf_update_term_fields - Update term fieldsacf_get_user_fields - Get user ACF fieldsacf_update_user_fields - Update user fieldsacf_list_options_pages - List options pagesacf_get_options_fields - Get options page fieldsacf_update_options_fields - Update options fieldsacf_get_repeater - Get repeater rowsacf_add_repeater_row - Add rowacf_update_repeater_row - Update rowacf_delete_repeater_row - Delete rowacf_reorder_repeater - Reorder rowsacf_get_flexible - Get layoutsacf_add_flexible_layout - Add layoutacf_update_flexible_layout - Update layoutacf_delete_flexible_layout - Delete layoutacf_reorder_flexible - Reorder layoutsacf_get_relationship - Get related postsacf_set_relationship - Set related postsacf_add_to_relationship - Add postsacf_remove_from_relationship - Remove postsacf_get_clone_references - Get clone field refsacf_get_field_object - Get field schemaRequires wp-pilot-pro and WooCommerce.
woo_list_products - List products with filterswoo_get_product - Get product detailswoo_create_product - Create productwoo_update_product - Update productwoo_delete_product - Delete productwoo_list_variations - List product variationswoo_create_variation - Create variationwoo_update_variation - Update variationwoo_delete_variation - Delete variationwoo_list_attributes - List attributeswoo_list_attribute_terms - List attribute termswoo_create_attribute - Create attributewoo_create_attribute_term - Create termwoo_list_categories - List product categorieswoo_create_category - Create categorywoo_update_category - Update categorywoo_delete_category - Delete categorywoo_list_tags - List product tagswoo_list_orders - List orderswoo_get_order - Get order detailswoo_update_order_status - Update statuswoo_add_order_note - Add notewoo_get_order_notes - Get noteswoo_list_customers - List customerswoo_get_customer - Get customerwoo_create_customer - Create customerwoo_update_customer - Update customerwoo_get_customer_orders - Get order historywoo_list_coupons - List couponswoo_get_coupon - Get couponwoo_create_coupon - Create couponwoo_update_coupon - Update couponwoo_delete_coupon - Delete couponwoo_sales_report - Sales reportwoo_top_sellers - Top selling productswoo_stock_report - Stock status reportwoo_get_product_meta - Get product metawoo_update_product_meta - Update product metawoo_bulk_update_stock - Bulk stock updatesrc/
index.ts # Entry: McpServer + StdioServerTransport
client.ts # WordPress REST API client (Basic Auth)
types.ts # Shared Zod schemas + jsonResult helper
slim.ts # Response slimming transformers
tools/
# Standard WP REST API (wp/v2)
site.ts # 4 tools
posts.ts # 6 tools
pages.ts # 5 tools
users.ts # 6 tools
plugins.ts # 5 tools
themes.ts # 4 tools
media.ts # 4 tools
taxonomies.ts # 8 tools (categories + tags)
comments.ts # 6 tools
# Extended (mcp/v1) - requires cvrt-mcp-endpoints plugin
mcp-plugins.ts # 4 tools - install from WordPress.org
mcp-themes.ts # 5 tools - install from WordPress.org
mcp-core.ts # 6 tools - updates, cache flush
mcp-database.ts # 5 tools - search-replace, optimize
mcp-options.ts # 5 tools - full options CRUD
mcp-menus.ts # 8 tools - navigation menus
mcp-widgets.ts # 8 tools - sidebar widgets
mcp-health.ts # 6 tools - diagnostics, cron
# Pro modules (mcp/v1) - requires wp-pilot-pro
mcp-acf.ts # 31 tools - ACF integration
mcp-woo.ts # 42 tools - WooCommerce
For managing multiple WordPress sites, run separate MCP instances:
{
"mcpServers": {
"wordpress-site1": {
"command": "npx",
"args": ["@cavort-it-systems/wordpress-mcp"],
"env": {
"WORDPRESS_SITE_URL": "https://site1.com",
"WORDPRESS_USERNAME": "admin",
"WORDPRESS_PASSWORD": "xxxx xxxx xxxx xxxx"
}
},
"wordpress-site2": {
"command": "npx",
"args": ["@cavort-it-systems/wordpress-mcp"],
"env": {
"WORDPRESS_SITE_URL": "https://site2.com",
"WORDPRESS_USERNAME": "admin",
"WORDPRESS_PASSWORD": "yyyy yyyy yyyy yyyy"
}
}
}
}
MIT
WORDPRESS_SITE_URL*WordPress site URL (e.g., https://example.com)
WORDPRESS_USERNAME*WordPress username
WORDPRESS_PASSWORD*secretWordPress Application Password (Users > Profile > Application Passwords)