About this plugin
WEBO MCP securely connects authenticated AI agents and MCP-compatible clients to WordPress through JSON-RPC tools over REST. It provides bounded access to content, media, users, settings, site health, and extensible WordPress abilities while preserving native capability checks.
Use Application Passwords or an authenticated WordPress session, discover tools with tools/list, and invoke exact tools through tools/call. Optional API-key, HMAC, scoped connector-token, allowlist, and audit controls are available for administrators. com
Privacy
This plugin does not send telemetry. MCP traffic is initiated by clients you configure. com.
Some tools may perform outbound HTTP requests only when a client invokes them (for example seo/article-analysis may request keyword suggestions from a third-party suggest API unless you pass no_autocomplete). Separately installed paid add-ons manage their own update checks; Core does not download or install their packages.
The plugin stores the following options in the WordPress database when configured:
– webo_mcp_api_key: API key used to authenticate MCP requests.
– webo_mcp_hmac_secret: HMAC secret used to sign and validate MCP requests.
– webo_mcp_require_secondary_credentials: when enabled, also require API key/HMAC for Application Password and Bearer clients (off by default so standard connectors are not blocked).
– webo_mcp_url_connector_tokens: hashed, expirable, revocable URL connector tokens for clients that cannot send headers. Raw tokens are shown once and are not stored.
– webo_mcp_tool_allowlist_enabled and webo_mcp_tool_allowlist_rules: optional administrator-configured MCP tool allowlist policy.
– webo_mcp_audit_log_enabled, webo_mcp_audit_log_max_entries, and webo_mcp_audit_log: bounded MCP tool-call audit log settings and compact audit events. Audit entries include user/tool/action/status data, anonymized IPs, and hashed session IDs; they do not store request payloads, API keys, HMAC secrets, or Application Passwords.
org review request notice (not sent off-site; dismissible).
These Core options are removed when the plugin is uninstalled via the WordPress Plugins screen. If an administrator enters a paid add-on license, the license key and status are stored locally in that add-on’s webo_mcp_*_license_key and webo_mcp_*_license_status options. Those shared add-on options are not deleted when Core is uninstalled, so separately installed add-ons retain their license state.
External services
com (WEBO MCP / Đinh WP) for Easy Digital Downloads license validation. The request includes the entered license key, add-on product ID, WordPress site URL, requested activation/deactivation action, and a user-agent containing the Core version and site URL. Standard request metadata such as the server IP address is also sent.
This is not triggered merely by activating Core. Separately installed paid add-ons may contact the same service for their own update checks and downloads; see their documentation. com
This plugin can connect to Google Suggest (Autocomplete) when a client calls the seo/article-analysis tool and does not set no_autocomplete to true. This external request is used to return related keyword suggestions for SEO analysis.
Service provider: Google LLC (Google Suggest / Autocomplete API endpoint).
Data sent and when:
– Sent only when seo/article-analysis is called with autocomplete enabled.
com/complete/search as the q parameter.
– Sends standard HTTP request metadata such as IP address and User-Agent as part of the web request.
com/terms
com/privacy
Developer Hooks
The plugin exposes the following actions and filters for developers:
Actions
- webo_mcp_register_tools
Fired during plugin bootstrap after standalone tools are registered. Use this to register custom MCP tools from other plugins.
Filters
-
webo_mcp_current_user_can_use_mcp (bool $allowed, int $user_id)
Gate for all MCP REST access. Default: super admin OR manage_options OR edit_posts. g.
super-admin only) in hardened installs.
-
webo_mcp_secondary_credentials_exempt (bool $exempt, WP_REST_Request $request)
When true, skip optional API key / HMAC after WordPress auth. Default true for Application Password (Basic) and Bearer sessions unless Settings → Security → “Require for App Password / Bearer” is enabled. Return false to always enforce X-WEBO-* headers.
-
webo_mcp_allow_internal_tools (bool $allow_internal, WP_REST_Request $request)
Controls whether internal tools are included in tools/list responses. Defaults to false for public environments.
-
webo_mcp_public_categories (array $categories, WP_REST_Request $request, array $tool)
Filters which tool categories are exposed as public. Defaults to array( ‘wordpress’ ).
-
webo_mcp_rate_limit_per_hour (int $limit, string $client, array|null $profile)
Adjust effective hourly limit (fallback for both buckets).
-
webo_mcp_rate_limit_read_per_hour / webo_mcp_rate_limit_mutate_per_hour (int $limit, string $client, array|null $profile)
Per-bucket limits after admin/profile resolution.
-
webo_mcp_tool_is_mutating (bool $is_mutating, string $tool_name, array|null $tool_definition, array $arguments)
Override mutating classification for rate limits and read-only profiles.
-
webo_mcp_tool_arguments_allow_extra (bool $allow, string $tool_name, array $schema, array $arguments)
When true, unknown tool argument keys are passed through (default false).
-
webo_mcp_disallow_url_token_query (bool $disallowed)
Block URL connector tokens in query strings (admin setting is the default source).
-
webo_mcp_rest_bom_guard_json_api_requests (bool $activate, string $uri_raw)
Opt-in BOM sanitizer for all /wp-json/ responses (default false; MCP routes only).
-
webo_mcp_bridge_deny_patterns (array $patterns)
g. bulk, themes/, multisite/).
-
webo_mcp_auto_bridge_abilities (bool $enabled)
Enables or disables automatic bridging of registered abilities into MCP tools. Defaults to true; bridge mode still controls whether the bridge is off, layered, or full.
-
webo_mcp_bridge_mode (string $mode)
Controls Abilities bridge mode after the WEBO_MCP_BRIDGE_MODE constant and before the stored option. Values: off, layered, full. Default: layered.
-
webo_mcp_enable_adapter (bool $enabled)
Enables or disables the bundled WordPress MCP Adapter runtime. Defaults to true.
-
webo_mcp_validate_media_fetch_url (true|\WP_Error $ok, string $url, array $parsed)
Reject unsafe URLs for webo/media-mutate upload action (return WP_Error to block).
-
webo_mcp_tool_allowlist_allowed (bool $allowed, string $tool_name, WP_REST_Request $request, array $params, array $allowed_tools)
Filters the optional per-user/role/client allowlist decision.
Quick start
- Upload the plugin folder to /wp-content/plugins/webo-mcp
- Run composer install inside the plugin folder
- Activate the plugin in WordPress Admin
- Send JSON-RPC requests to POST /wp-json/mcp/v1/router
distignore exclusions.
Credits
Special thanks to the authors and open source projects that contributed to this plugin:
org)
com/WordPress/abilities-api)
org/ai/2025/07/17/abilities-api/
com/WordPress/mcp-adapter)
org/ai/2025/07/17/mcp-adapter/
org)
– Other PHP and JS libraries from the community
If you use this plugin, please give credit to the authors of these libraries.
License
This plugin is licensed under the GPLv2 or later.
html for details.