Wordpress Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Wordpress Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Lightweight WordPress MCP server for site management. 266 tools with token-optimized responses - REST API responses automatically slimmed from kilobytes to essentials.
v3.5: fields_* (12 tools) for cvrt-fields 0.1.2+ - status, settings, field types, location values, schemas and CRUD + JSON sync for field groups, post types, taxonomies and options pages.
v3.4: cvrt-legal 0.9.0 - markup repair switches (repairs on legal_put_accessibility) and report (legal_get_accessibility_report / legal_reset_accessibility_report), document type barrierefreiheit.
v3.3: every cvrt-legal admin route is a tool - generator (legal_*_generator*, library import from a local file), Impressum facts, social-media section, settings, and the self-hosted accessibility tool (legal_get_accessibility / legal_put_accessibility, cvrt-legal 0.8.0+).
v3.2: legal_consent_log_get / legal_consent_log_stats / legal_consent_log_export for the cvrt-legal consent decision log (needs cvrt-legal 0.5.0+); legal_put_consent takes log_enabled.
v3.1: Tools for our own plugins - seo_* (31) for cvrt-seo-manager, legal_* (15) for cvrt-legal incl. legal_link_page (cvrt-legal 0.4.2+), and fulfillment_* (8) for cvrt-order-fulfillment.
v3.0 (BREAKING): Multi-site - one server instance manages any number of sites via a single WORDPRESS_SITES env var. Every tool now requires a site argument; use the new list_sites tool to discover configured ids. The old single-site env vars are removed. wp_activate_plugin / wp_deactivate_plugin / wp_delete_plugin now use cvrt-mcp-endpoints mcp/v1 routes and take the plugin file path (e.g. akismet/akismet.php) instead of a slug.
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-mcpOr run directly:
npx @cavort-it-systems/wordpress-mcpv3.0 is multi-site (BREAKING CHANGE). A single server instance now manages any number of WordPress sites, defined in one WORDPRESS_SITES env var as a JSON array of {id, url, username, password} objects. The old single-site env vars (WORDPRESS_SITE_URL, WORDPRESS_USERNAME, WORDPRESS_PASSWORD) are no longer read - set WORDPRESS_SITES instead.
Every tool (except list_sites) now requires a site argument naming the target site id. Call list_sites first to discover which ids are configured - it returns {id, url} for each site (passwords are never returned or logged).
Add to your MCP config (~/.claude.json or Claude Desktop settings):
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["@cavort-it-systems/wordpress-mcp"],
"env": {
"WORDPRESS_SITES": "[{\"id\":\"boardcouture\",\"url\":\"https://boardcouture.shop\",\"username\":\"cavortkonzepte\",\"password\":\"xxxx xxxx xxxx\"}]"
}
}
}
}Add more sites by appending objects to the WORDPRESS_SITES array - one server instance handles them all.
claude mcp add wordpress \
-e WORDPRESS_SITES='[{"id":"boardcouture","url":"https://boardcouture.shop","username":"cavortkonzepte","password":"xxxx xxxx xxxx"}]' \
-- npx @cavort-it-systems/wordpress-mcpgit clone https://github.com/cvrt-jh/wordpress-mcp.git
cd wordpress-mcp
npm install && npm run buildUses 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 |
Every tool below requires a site argument (the id from your WORDPRESS_SITES config), except list_sites itself.
list_sites - List configured site ids and URLs (no site argument; passwords never returned)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 plugin (mcp/v1; plugin is the file path, e.g. akismet/akismet.php)wp_deactivate_plugin - Deactivate plugin (mcp/v1; plugin is the file path)wp_delete_plugin - Delete plugin (mcp/v1; plugin is the file path)wp_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 plugin (refresh checks first, incl. GitHub/PUC plugins)mcp_check_plugin_updates - Run Plugin Update Checker and wp.org checks now, list updatesmcp_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 - Flush object cache and transients (not a page cache in front of WordPress)mcp_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 a cron event now (rescheduled/unscheduled like wp cron event run)mcp_get_action_scheduler - Action Scheduler counts, past-due and recent failuresmcp_run_action_scheduler - Run due Action Scheduler actions now (1-50, optional hook/group)mcp_scan_uploads - Executable files under uploads (sha256, benign flag)mcp_get_audit_log - Audit trail of state-changing MCP callsRequires 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 updateseo_status - Get cvrt-seo-manager status (version, configured, dependencies)seo_get_settings - Get cvrt-seo-manager settingsseo_update_settings - Update cvrt-seo-manager settingsseo_get_post_seo - Get the SEO meta for a postseo_update_post_seo - Update the SEO meta for a postseo_delete_post_seo - Delete (reset) the SEO meta for a postseo_get_post_analysis - Get the SEO analysis (score, issues) for a postseo_list_posts_seo - List SEO meta across postsseo_bulk_update_posts_seo - Bulk update SEO meta across multiple postsseo_get_term_seo - Get the SEO meta for a taxonomy termseo_update_term_seo - Update the SEO meta for a taxonomy termseo_delete_term_seo - Delete (reset) the SEO meta for a taxonomy termseo_keyword_check - Run the keyword analysis checkseo_list_redirects - List all redirectsseo_create_redirect - Create a redirectseo_get_redirect - Get a redirect by idseo_update_redirect - Update a redirect by idseo_delete_redirect - Delete a redirect by idseo_list_monitor_log - List the 404/redirect monitor log entriesseo_clear_monitor_log - Clear the 404/redirect monitor logseo_create_redirect_from_log - Create a redirect directly from a monitor log entryseo_sitemap_status - Get sitemap statusseo_sitemap_ping - Ping search engines with the sitemapseo_indexnow_ping - Submit URLs to IndexNowseo_export_settings - Export cvrt-seo-manager settingsseo_import_settings - Import cvrt-seo-manager settingsseo_export_csv - Export post SEO meta as CSVseo_import_csv - Import post SEO meta from CSVseo_export_redirects - Export redirectsseo_import_redirects - Import redirectsseo_import_migrate - Run a migration import (e.glegal_get_page / legal_link_page need 0.4.2+, legal_consent_log_* 0.5.0+, social 0.6.0+, generator and facts 0.7.0+, accessibility 0.8.0+)legal_status - Legal document status for a site: which documents are required, filled and published, plus a single compliant flaglegal_list_documents - List all legal document types with their required/filled state and linked pagelegal_get_document - Get one legal document including its ordered sectionslegal_put_document - Replace a legal documentlegal_render_document - Render a document to normalized HTML without savinglegal_get_page - Get which page a legal document is linked to: linked, page_id, the page's post status, and ok (linked AND published)legal_link_page - Link a legal document to its WordPress page (post type page only; posts and products are refused)legal_add_section - Append a section to a legal documentlegal_update_section - Update a sectionlegal_delete_section - Delete a section from a legal documentlegal_get_consent - Get the cookie consent banner configurationlegal_put_consent - Configure the consent banner and every tracking credential the site useslegal_get_theme - Get the banner theme: preset name, CSS custom property overrides and the rendered CSSlegal_put_theme - Set the banner theme preset and/or individual CSS custom propertieslegal_get_settings - Get cvrt-legal settingslegal_consent_log_get - Get every logged consent decision for one consent_idlegal_consent_log_stats - Aggregate consent decision counts by action and banner_version over a day rangelegal_consent_log_export - Export the raw consent decision log as CSV for a day rangelegal_update_settings - Set the GitHub update token (write-only) and the required-document overridelegal_get_facts / legal_put_facts - Impressum fields the generator fills into Impressum and Datenschutz (merge)legal_get_generator / legal_put_generator - Selection of a generated document (modules, options, kept sections); a PUT regenerates itlegal_get_generator_library / legal_put_generator_library - The imported text library; import inline or via library_file (local .json)legal_restore_generator - Restore the document as it was before the generator first wrote itlegal_get_social / legal_put_social - Social-media section: networks and profile URLslegal_get_social_modules / legal_put_social_modules - The social-media text modules (inline or modules_file)legal_get_accessibility / legal_put_accessibility - The self-hosted accessibility tool (replaces the Ally widget, no third-party request); repairs switches the markup repair rules (0.9.0+)legal_get_accessibility_report / legal_reset_accessibility_report - What the markup repair fixed and what is still open, per page (0.9.0+)fields_status - Plugin version, definition counts, ACF / Elementor presence, JSON sync statefields_get_settings / fields_update_settings - Update token (masked as { set }, write-only, stored encrypted) and JSON sync pathfields_list_types - Available field typesfields_get_location_values - Values for location rulesfields_get_schema - Editor form schema of a definition kindfields_list_definitions / fields_get_definition / fields_create_definition / fields_update_definition / fields_delete_definition - CRUD for groups, post-types, taxonomies, options-pagesfields_sync_definition - Copy a JSON-sourced definition into the databasefulfillment_get_settings - Get the cvrt-order-fulfillment plugin settingsfulfillment_update_settings - Update cvrt-order-fulfillment settingsfulfillment_status - Pipeline health: which credentials are set, ClickUp list/assignee, when the print agent last polled, and print-queue countsfulfillment_queue - Print-queue state: status counts (pending/printing/printed/failed) and the recent jobs with their errorsfulfillment_reprint_job - Reset a print job to pending so the agent prints it againfulfillment_fulfill_order - Manually (force) run fulfillment for an order: renders the packing slip, creates the ClickUp task, notifies Slackfulfillment_update_check - Force an immediate plugin-update check (bypassing PUC's throttle) and report whether a newer version is availablesrc/
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 - WooCommerceFor sites hosted on Bearfort, fort_* tools reach the worker through the Bearfort API: backups (fort_backup_create, fort_backup_list, fort_job_get), page-cache purge (fort_cache_purge) and server logs (fort_logs_read: access, error, php, wp-cron, with lines, grep, since). Set BEARFORT_API_KEY (admin key) and optionally BEARFORT_API_URL; without the key these tools refuse to run. The fort is resolved from the site URL. Restore is not exposed.
stripe_* tools (cvrt-mcp-endpoints 1.17.0+) read the Stripe account behind the WooCommerce Stripe Gateway through the site itself: the key never leaves WordPress and results are whitelisted. Writes (stripe_recreate_webhook, stripe_set_payment_method) need confirm: true and are audit-logged on the site. woo_gateway_status shows which gateways a customer from a given country gets. Express checkout and where Stripe.js loads belong to cvrt-woo-helper (woo_helper_*).
Every tool result passes through src/mask.ts before it reaches the model. Values under secret-looking keys (token, secret, password, api_key, whsec, signing_key, ...) and credential-shaped values (sk_live_, whsec_, GitHub/Slack/AWS tokens, PEM blocks) become [masked], recursively and inside JSON strings. Flag values (yes, 0, empty) stay visible so "not set" is still readable. Writing a secret works; it is never read back. The same rules run server-side in cvrt-mcp-endpoints 1.15.0+.
One server instance manages all your sites via the WORDPRESS_SITES env var (see Configuration). Call list_sites to see configured ids, then pass site: "<id>" to any other tool:
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["@cavort-it-systems/wordpress-mcp"],
"env": {
"WORDPRESS_SITES": "[{\"id\":\"site1\",\"url\":\"https://site1.com\",\"username\":\"admin\",\"password\":\"xxxx xxxx xxxx xxxx\"},{\"id\":\"site2\",\"url\":\"https://site2.com\",\"username\":\"admin\",\"password\":\"yyyy yyyy yyyy yyyy\"}]"
}
}
}
}MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.