wordpress-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WORDPRESS_PASSWORD | Yes | WordPress application password (generated from User Profile) | |
| WORDPRESS_SITE_URL | Yes | The URL of the WordPress site (e.g., https://example.com) | |
| WORDPRESS_USERNAME | Yes | WordPress username (must have Application Passwords enabled) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_sitesA | List the WordPress sites this server can manage. Every other tool requires a |
| wp_site_infoB | Get WordPress site information (name, description, URL, timezone) |
| wp_get_settingsB | Get WordPress site settings (title, tagline, timezone, date format) |
| wp_update_settingsC | Update WordPress site settings |
| wp_get_namespacesA | List available REST API namespaces (plugins may add custom endpoints) |
| wp_list_postsC | List WordPress posts with optional filters |
| wp_get_postC | Get a single post by ID |
| wp_create_postC | Create a new WordPress post |
| wp_update_postC | Update an existing post |
| wp_delete_postB | Delete a post (moves to trash, or permanently if force=true) |
| wp_search_postsC | Search posts by keyword |
| wp_list_pagesC | List WordPress pages |
| wp_get_pageB | Get a single page by ID |
| wp_create_pageC | Create a new WordPress page |
| wp_update_pageC | Update an existing page |
| wp_delete_pageA | Delete a page (moves to trash, or permanently if force=true) |
| wp_list_usersC | List WordPress users |
| wp_meB | Get the currently authenticated user |
| wp_get_userB | Get a user by ID |
| wp_create_userC | Create a new WordPress user |
| wp_update_userC | Update an existing user |
| wp_delete_userB | Delete a user (requires reassign parameter) |
| wp_list_pluginsC | List all installed plugins |
| wp_get_pluginC | Get plugin details by slug |
| wp_activate_pluginB | Activate an installed plugin (via cvrt-mcp-endpoints, avoids the often-blocked core route) |
| wp_deactivate_pluginC | Deactivate an installed plugin (via cvrt-mcp-endpoints) |
| wp_delete_pluginB | Delete an installed plugin (via cvrt-mcp-endpoints; deactivates first) |
| wp_list_themesC | List all installed themes |
| wp_get_active_themeC | Get the currently active theme |
| wp_get_themeC | Get theme details by stylesheet name |
| wp_activate_themeC | Activate a theme (switch themes) |
| wp_list_mediaC | List media library items |
| wp_get_mediaB | Get a media item by ID |
| wp_update_mediaC | Update media item metadata (title, alt text, caption) |
| wp_delete_mediaC | Delete a media item |
| wp_list_categoriesC | List all categories |
| wp_create_categoryC | Create a new category |
| wp_update_categoryC | Update a category |
| wp_delete_categoryC | Delete a category |
| wp_list_tagsC | List all tags |
| wp_create_tagC | Create a new tag |
| wp_update_tagC | Update a tag |
| wp_delete_tagC | Delete a tag |
| wp_list_commentsC | List comments |
| wp_get_commentB | Get a comment by ID |
| wp_create_commentC | Create a comment on a post |
| wp_update_commentC | Update a comment (approve, edit content, etc.) |
| wp_delete_commentD | Delete a comment |
| wp_moderate_commentsC | Batch moderate comments by status |
| mcp_search_pluginsC | Search WordPress.org plugin repository |
| mcp_install_pluginC | Install a plugin from WordPress.org by slug |
| mcp_update_pluginC | Update a single plugin to latest version |
| mcp_update_all_pluginsA | Update all plugins with available updates |
| mcp_install_plugin_zipB | Install a plugin from a ZIP URL (GitHub releases, custom sources) |
| mcp_search_themesB | Search WordPress.org theme repository |
| mcp_install_themeC | Install a theme from WordPress.org by slug |
| mcp_update_themeB | Update a single theme to latest version |
| mcp_update_all_themesC | Update all themes with available updates |
| mcp_delete_themeB | Delete an inactive theme |
| mcp_install_theme_zipC | Install a theme from a ZIP URL (GitHub releases, custom sources) |
| mcp_get_versionB | Get WordPress version and update status |
| mcp_get_system_infoC | Get comprehensive system information |
| mcp_check_updatesC | Check for WordPress core, plugin, and theme updates |
| mcp_update_coreC | Update WordPress to the latest version |
| mcp_flush_rewriteC | Flush permalink rewrite rules |
| mcp_flush_cacheC | Clear all caches and transients |
| mcp_get_tablesB | List all database tables with sizes |
| mcp_search_replaceB | Search and replace strings in database (serialization-safe) |
| mcp_optimize_tablesC | Optimize all database tables |
| mcp_clean_revisionsC | Delete old post revisions |
| mcp_clean_commentsC | Delete spam and trashed comments |
| mcp_list_optionsB | List WordPress options with optional prefix filter |
| mcp_get_optionC | Get a single option value |
| mcp_set_optionC | Create or update an option |
| mcp_delete_optionC | Delete an option |
| mcp_bulk_get_optionsB | Get multiple options at once |
| mcp_list_menusC | List all navigation menus |
| mcp_get_menu_locationsC | Get registered menu locations |
| mcp_get_menuB | Get a menu with all its items |
| mcp_create_menuC | Create a new navigation menu |
| mcp_delete_menuC | Delete a navigation menu |
| mcp_add_menu_itemC | Add an item to a menu |
| mcp_delete_menu_itemC | Delete a menu item |
| mcp_update_menuB | Update a navigation menu (rename) |
| mcp_update_menu_itemC | Update a menu item (title, URL, position, parent) |
| mcp_assign_menu_locationC | Assign a menu to a theme location |
| mcp_list_sidebarsC | List all registered sidebars |
| mcp_get_sidebar_widgetsB | Get all widgets in a sidebar |
| mcp_list_widget_typesB | List all available widget types |
| mcp_get_widgetC | Get a widget's details |
| mcp_add_widgetC | Add a widget to a sidebar |
| mcp_update_widgetC | Update a widget's settings |
| mcp_delete_widgetC | Remove a widget from its sidebar |
| mcp_reorder_widgetsC | Reorder widgets within a sidebar |
| mcp_move_widgetC | Move a widget to a different sidebar |
| mcp_get_healthC | Get site health status and score |
| mcp_get_debug_infoC | Get detailed debug information |
| mcp_get_php_infoC | Get PHP configuration details |
| mcp_get_plugins_healthB | Get plugin health status and available updates |
| mcp_get_cron_statusC | Get WordPress cron jobs status |
| mcp_run_cronC | Manually trigger a cron hook |
| mcp_list_post_typesB | List all public post types with their schema and counts |
| mcp_get_post_typeB | Get detailed schema for a post type |
| mcp_list_cpt_postsC | List posts of any custom post type |
| mcp_create_cpt_postC | Create a post of any custom post type |
| mcp_update_cpt_postC | Update a custom post type post |
| mcp_delete_cpt_postC | Delete a custom post type post |
| mcp_list_taxonomiesC | List all registered taxonomies |
| mcp_get_taxonomyC | Get taxonomy details and schema |
| mcp_list_termsC | List terms for any taxonomy (categories, tags, custom taxonomies) |
| mcp_create_termC | Create a term in any taxonomy |
| mcp_update_termC | Update a term in any taxonomy |
| mcp_delete_termC | Delete a term from any taxonomy |
| mcp_assign_termsC | Assign taxonomy terms to a post |
| mcp_list_usersC | List WordPress users with role/search filters |
| mcp_get_userC | Get user details by ID |
| mcp_create_userC | Create a new WordPress user |
| mcp_update_userC | Update an existing user |
| mcp_delete_userC | Delete a user and reassign their content |
| mcp_list_rolesB | List all available WordPress user roles |
| mcp_change_user_roleC | Change a user's role |
| mcp_get_user_metaC | Get all meta data for a user |
| mcp_update_user_metaC | Update meta data for a user |
| mcp_list_mediaB | List media library items with filtering |
| mcp_get_mediaB | Get detailed media item info (sizes, metadata) |
| mcp_sideload_mediaB | Upload media to WordPress from an external URL |
| mcp_update_mediaC | Update media item metadata (title, alt text, caption) |
| mcp_delete_mediaC | Delete a media item |
| mcp_bulk_delete_mediaC | Delete multiple media items at once |
| mcp_regenerate_thumbnailsC | Regenerate image thumbnails for a media item |
| mcp_get_media_statsB | Get media library statistics (counts by type, total size) |
| mcp_get_elementor_buildC | Get full Elementor page build (containers, widgets, settings tree) |
| mcp_get_elementor_flatB | Get flat list of all Elementor elements on a page (easier to search/filter than tree) |
| mcp_get_elementor_elementB | Get a single Elementor element with full settings |
| mcp_update_elementor_elementA | Update settings on a single Elementor element (merge by default). With widget_type, replaces the widget in place (same id, position and parent), e.g. turn a V4 placeholder into a V3 html widget; the type must be registered with Elementor. |
| mcp_get_elementor_page_settingsC | Get Elementor page-level settings (hide title, custom CSS, etc.) |
| mcp_update_elementor_page_settingsC | Update Elementor page-level settings |
| mcp_list_elementor_templatesB | List all Elementor library templates (headers, footers, singles, loop items, popups) |
| mcp_get_elementor_conditionsC | Get theme builder display conditions for an Elementor template |
| mcp_get_elementor_kitB | Get Elementor global kit settings (colors, fonts, typography, spacing, button defaults) |
| mcp_update_elementor_kitC | Update Elementor global kit settings (colors, fonts, typography) |
| mcp_search_elementorC | Search all Elementor pages for specific widgets, settings, or text content |
| acf_list_field_groupsB | List all ACF field groups with their fields |
| acf_get_field_groupC | Get ACF field group with full field configuration |
| acf_create_field_groupC | Create an ACF field group with fields |
| acf_update_field_groupC | Update an existing ACF field group |
| acf_delete_field_groupC | Delete an ACF field group |
| acf_export_field_groupB | Export a field group in ACF JSON format (for import/backup) |
| acf_import_field_groupsC | Import ACF field groups from JSON export format |
| acf_get_post_fieldsC | Get all ACF field values for a post |
| acf_update_post_fieldsC | Update multiple ACF field values for a post |
| acf_get_post_fieldC | Get a single ACF field value for a post |
| acf_update_post_fieldC | Update a single ACF field value for a post |
| woo_list_productsC | List WooCommerce products |
| woo_get_productC | Get WooCommerce product details |
| woo_create_productC | Create a WooCommerce product |
| woo_update_productC | Update a WooCommerce product |
| woo_delete_productC | Delete a WooCommerce product |
| woo_list_variationsC | List variations for a variable product |
| woo_create_variationC | Create a product variation |
| woo_update_variationD | Update a product variation |
| woo_delete_variationC | Delete a product variation |
| woo_list_attributesC | List product attributes |
| woo_list_attribute_termsC | List terms for an attribute |
| woo_create_attributeD | Create a product attribute |
| woo_create_attribute_termC | Create a term for an attribute |
| woo_list_categoriesC | List product categories |
| woo_create_categoryC | Create a product category |
| woo_update_categoryC | Update a product category |
| woo_delete_categoryC | Delete a product category |
| woo_list_tagsC | List product tags |
| woo_list_ordersC | List WooCommerce orders |
| woo_get_orderC | Get WooCommerce order details |
| woo_update_order_statusC | Update order status |
| woo_add_order_noteC | Add a note to an order |
| woo_get_order_notesC | Get order notes |
| woo_list_customersC | List WooCommerce customers |
| woo_get_customerC | Get customer details |
| woo_create_customerD | Create a customer |
| woo_update_customerD | Update a customer |
| woo_get_customer_ordersB | Get customer's order history |
| woo_list_couponsD | List WooCommerce coupons |
| woo_get_couponC | Get coupon details |
| woo_create_couponC | Create a coupon |
| woo_update_couponC | Update a coupon |
| woo_delete_couponC | Delete a coupon |
| woo_sales_reportC | Get sales report |
| woo_top_sellersC | Get top selling products |
| woo_stock_reportC | Get stock status report |
| woo_get_product_metaC | Get all product meta data |
| woo_update_product_metaC | Update product meta data |
| woo_bulk_update_stockC | Bulk update product stock |
| fulfillment_get_settingsA | Get the cvrt-order-fulfillment plugin settings. Secret values are returned as { set: boolean }, never raw. |
| fulfillment_update_settingsA | Update cvrt-order-fulfillment settings. Only provide the keys you want to change. A blank/omitted secret keeps the stored value (never wipes it). Keys: clickup_token, clickup_list_id, clickup_assignee_id, agent_token, webhook_secret, github_updater_token, slack_webhook_url. |
| fulfillment_statusC | Pipeline health: which credentials are set, ClickUp list/assignee, when the print agent last polled, and print-queue counts. |
| fulfillment_queueB | Print-queue state: status counts (pending/printing/printed/failed) and the recent jobs with their errors. |
| fulfillment_reprint_jobA | Reset a print job to pending so the agent prints it again. |
| fulfillment_fulfill_orderA | Manually (force) run fulfillment for an order: renders the packing slip, creates the ClickUp task, notifies Slack. Bypasses the idempotency guard, so it can create a duplicate ClickUp task. Audit-logged. |
| fulfillment_update_checkA | Force an immediate plugin-update check (bypassing PUC's throttle) and report whether a newer version is available. Throttled to about once per 30s. |
| fulfillment_update_applyA | Install a pending cvrt-order-fulfillment update via WordPress's own upgrader (same code path as the wp-admin one-click update). Reports { applied, from, to }. Audit-logged. |
| legal_statusA | Legal document status for a site: which documents are required, filled and published, plus a single compliant flag. Impressum and Datenschutz are always required; AGB and Widerruf become required when WooCommerce is active. |
| legal_list_documentsB | List all legal document types with their required/filled state and linked page. |
| legal_get_documentA | Get one legal document including its ordered sections. |
| legal_put_documentB | Replace a legal document. Sections are ordered; omit slug to derive it from the heading. The plugin ships no legal prose - it stores and renders what it is given. |
| legal_render_documentA | Render a document to normalized HTML without saving. Useful to preview the heading hierarchy and slug ids before writing. |
| legal_get_pageB | Get which page a legal document is linked to: linked, page_id, the page's post status, and ok (linked AND published). A required document only counts as reachable, and legal_status only turns compliant, when ok is true. Requires cvrt-legal 0.4.2+. |
| legal_link_pageA | Link a legal document to its WordPress page (post type page only; posts and products are refused). The rendered document is written into the page's post_content at once (mirrored: true, false while the document is empty) and on every later save, so a deactivated plugin still leaves the text on the page. Linking impressum/datenschutz also fills the consent banner's imprint/privacy link if that is still unset (banner_linked). page_id 0 unlinks. Requires cvrt-legal 0.4.2+. |
| legal_add_sectionC | Append a section to a legal document. Returns the resolved slug, which is what shortcodes address. |
| legal_update_sectionB | Update a section. The slug is never rewritten, so shortcodes already placed on a page keep working when a heading is renamed. |
| legal_delete_sectionC | Delete a section from a legal document. |
| legal_get_consentC | Get the cookie consent banner configuration. |
| legal_put_consentA | Configure the consent banner and every tracking credential the site uses. Nothing is handed to the browser until the visitor accepts - this plugin owns GTM, GA4 and Ahrefs Web Analytics precisely because it owns the gate. Search-engine verification meta tags are NOT here; those belong to cvrt-seo-manager because they fire no request. |
| legal_get_themeB | Get the banner theme: preset name, CSS custom property overrides and the rendered CSS. |
| legal_put_themeB | Set the banner theme preset and/or individual CSS custom properties. Only --cvrt-consent-* properties are accepted. |
| legal_get_settingsB | Get cvrt-legal settings. Secret values are returned as { set: boolean }, never raw. |
| legal_consent_log_getA | Get every logged consent decision for one consent_id (the banner's own record of what it asked and what the visitor chose). Requires manage_options. Logging itself stays off until legal_put_consent's log_enabled is set, which should only happen after the Datenschutz document has an 'einwilligungsnachweis' section describing it. Requires cvrt-legal 0.5.0+. |
| legal_consent_log_statsA | Aggregate consent decision counts by action and banner_version over a day range (both from and to are optional, default the last 30 days; the range cannot exceed 366 days). Requires manage_options. Logging itself stays off until legal_put_consent's log_enabled is set, which should only happen after the Datenschutz document has an 'einwilligungsnachweis' section describing it. Requires cvrt-legal 0.5.0+. |
| legal_consent_log_exportA | Export the raw consent decision log as CSV for a day range (same optional from/to rules as legal_consent_log_stats). Returns { filename, csv }; the csv is the full file text, ready to write out as-is. Requires manage_options. Logging itself stays off until legal_put_consent's log_enabled is set, which should only happen after the Datenschutz document has an 'einwilligungsnachweis' section describing it. Requires cvrt-legal 0.5.0+. |
| legal_update_settingsB | Update cvrt-legal settings. github_token (PUC auto-updates on a private repo) is write-only: a blank value keeps the stored one. required_override forces a document required or not ({agb: false}). |
| legal_get_factsA | Get the Impressum fields (company, address, register, VAT id, ...) the generator fills into both Impressum and Datenschutz, plus which required ones are missing. Requires cvrt-legal 0.7.0+. |
| legal_put_factsA | Set Impressum fields. Merges: only the keys given change; an empty string clears a field. Regenerates every generated document. Requires cvrt-legal 0.7.0+. |
| legal_get_generatorA | Get a generated document's state: active, library loaded, the selection (ticked modules, options, kept custom sections) and the sections it writes. Requires cvrt-legal 0.7.0+. |
| legal_put_generatorA | Tick or untick modules and options, then regenerate the document (the Datenschutz tab over the API). Merges into the stored selection; unknown module or option keys are refused. Sections tied to a switch (Einwilligungsnachweis, Barrierefreiheits-Werkzeug) follow that switch and are not ticked here. Requires cvrt-legal 0.7.0+. |
| legal_get_generator_libraryB | Get the imported text library of a generated document (the texts come from websites/bin/legal-v4/privacy, the plugin ships none). Requires cvrt-legal 0.7.0+. |
| legal_put_generator_libraryA | Import the text library of a generated document and regenerate it if active. Give the library inline or as library_file, a local .json path (e.g. websites/bin/legal-v4/privacy/library-datenschutz.json). A library using the 'accessibility' flag needs cvrt-legal 0.8.0+ on the site first. |
| legal_restore_generatorA | Restore a generated document to how it was before the generator first wrote it, and stop generating it. Requires cvrt-legal 0.7.0+. |
| legal_get_socialA | Get the social-media section configurator: networks on offer, which are switched on with their profile URLs, and the rendered preview. Requires cvrt-legal 0.6.0+. |
| legal_put_socialA | Switch social networks and set their profile URLs (https only), then rewrite the Datenschutz social-media section; with nothing on, the section is removed. Requires cvrt-legal 0.6.0+. |
| legal_get_social_modulesC | Get the imported social-media text modules. Requires cvrt-legal 0.6.0+. |
| legal_put_social_modulesA | Import the social-media text modules, inline or as modules_file (websites/bin/legal-v4/social-media/library.json). Careful: importing while nothing is ticked removes an existing section; call legal_put_social with the current networks right after. Requires cvrt-legal 0.6.0+. |
| legal_get_accessibilityA | Get the self-hosted accessibility tool's settings (enabled, position, colour, tools, statement link) and the tools on offer. Requires cvrt-legal 0.8.0+. |
| legal_put_accessibilityA | Configure the self-hosted accessibility tool (replaces the Ally widget; no third-party request, needs no consent). Merges: omitted keys keep their value. Switching enabled rewrites a generated Datenschutz (section Barrierefreiheits-Werkzeug). Returns the stored settings. Requires cvrt-legal 0.8.0+. |
| legal_get_accessibility_reportA | Get the markup repair report: totals per rule (fixed / open) and per page what was repaired and what is still open, i.e. what the site's own markup must fix. Each page is recorded at most once a day, newest 100 pages. Requires cvrt-legal 0.9.0+. |
| legal_reset_accessibility_reportA | Clear the markup repair report, e.g. after fixing the source, so new page views record afresh. Requires cvrt-legal 0.9.0+. |
| fields_statusB | cvrt-fields status: plugin version, definition counts per kind, whether ACF / Elementor / Elementor Pro are active, JSON sync state and JSON read error. |
| fields_get_settingsA | Get cvrt-fields settings. The GitHub update token is returned as { set: boolean }, never raw; also the JSON sync path and whether it is writable. |
| fields_update_settingsA | Update cvrt-fields settings. github_token is write-only and stored encrypted; a blank or omitted token keeps the stored one. clear_github_token: true deletes it. |
| fields_list_typesB | List the available field types (text, date_picker, image, relationship, ...) with their settings. |
| fields_get_location_valuesB | Values usable in field-group location rules: post types, page templates, taxonomies, options pages, user forms. |
| fields_get_schemaA | Editor form schema of one definition kind (fields and their options). Read it before fields_create_definition / fields_update_definition. |
| fields_list_definitionsB | List all definitions of one kind from every source (database, JSON, PHP) with their _source. |
| fields_get_definitionC | Get one definition by kind and key. |
| fields_create_definitionB | Create a definition (field group, post type, taxonomy or options page). Fails with 409 when the key exists. |
| fields_update_definitionB | Replace a definition. 409 cvrt_fields_json_shadowed means a read-only JSON file still overrides the database copy. |
| fields_delete_definitionB | Delete a database definition. Stored field values stay in post/term/user meta and options. |
| fields_sync_definitionB | Copy a JSON-sourced definition into the database. Only JSON definitions can be synced. |
| seo_statusB | Get cvrt-seo-manager status (version, configured, dependencies). |
| seo_get_settingsB | Get cvrt-seo-manager settings. Secret values are returned as { set: boolean }, never raw. |
| seo_update_settingsA | Update cvrt-seo-manager settings. Provide only keys to change; a blank/omitted secret preserves the stored value. |
| seo_get_post_seoC | Get the SEO meta for a post. |
| seo_update_post_seoC | Update the SEO meta for a post. |
| seo_delete_post_seoC | Delete (reset) the SEO meta for a post. |
| seo_get_post_analysisC | Get the SEO analysis (score, issues) for a post. |
| seo_list_posts_seoB | List SEO meta across posts. |
| seo_bulk_update_posts_seoC | Bulk update SEO meta across multiple posts. |
| seo_get_term_seoC | Get the SEO meta for a taxonomy term. |
| seo_update_term_seoC | Update the SEO meta for a taxonomy term. |
| seo_delete_term_seoB | Delete (reset) the SEO meta for a taxonomy term. |
| seo_keyword_checkC | Run the keyword analysis check. |
| seo_list_redirectsC | List all redirects. |
| seo_create_redirectC | Create a redirect. |
| seo_get_redirectC | Get a redirect by id. |
| seo_update_redirectC | Update a redirect by id. |
| seo_delete_redirectC | Delete a redirect by id. |
| seo_list_monitor_logC | List the 404/redirect monitor log entries. |
| seo_clear_monitor_logC | Clear the 404/redirect monitor log. |
| seo_create_redirect_from_logB | Create a redirect directly from a monitor log entry. |
| seo_sitemap_statusC | Get sitemap status. |
| seo_sitemap_pingC | Ping search engines with the sitemap. |
| seo_indexnow_pingC | Submit URLs to IndexNow. |
| seo_export_settingsC | Export cvrt-seo-manager settings. |
| seo_import_settingsC | Import cvrt-seo-manager settings. |
| seo_export_csvC | Export post SEO meta as CSV. |
| seo_import_csvC | Import post SEO meta from CSV. |
| seo_export_redirectsC | Export redirects. |
| seo_import_redirectsC | Import redirects. |
| seo_import_migrateC | Run a migration import (e.g. from RankMath GLOBAL settings) into cvrt-seo-manager. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 277 tools
The set contains two parallel namespaces (wp_* and mcp_*) that duplicate the same resources: wp_list_users/mcp_list_users, wp_get_user/mcp_get_user, wp_update_user/mcp_update_user, wp_list_media/mcp_list_media, wp_list_plugins/mcp_search_plugins, etc. An agent cannot reliably tell whether to call the core route or the cvrt-mcp-endpoints version. Beyond that, many domain-specific tools are distinct, but the systematic duplication makes tool selection error-prone.
Most tools use a prefix_verb_noun pattern (woo_list_products, acf_get_field_group), but verb placement is inconsistent in several families: legal_get_settings vs legal_consent_log_get, seo_status vs seo_get_settings, fields_status vs fields_list_types. The mix of wp_ and mcp_ prefixes for the same domain also breaks predictability. Still readable overall, hence a middle score.
277 tools is far beyond any reasonable scope for a single server and reflects heavy redundancy (parallel wp_/mcp_ CRUD sets) and many plugin-specific sub-surfaces. This extreme count is a strong mismatch with the intended purpose, and agents will struggle to navigate it.
Coverage is very broad: full CRUD for posts, pages, media, users, comments, taxonomies, plugins, themes, menus, widgets, options, WooCommerce, Elementor, ACF, SEO and legal documents. Only minor gaps exist (e.g., generic post meta and some widget-block operations), so the surface is largely complete despite being bloated.