PluginProbe
ZIP AI – AI Website Builder & AI Agent / 0.0.14
ZIP AI – AI Website Builder & AI Agent v0.0.14
0.0.14 0.0.13 0.0.12 0.0.11 0.0.10 0.0.9 trunk 0.0.4 0.0.5 0.0.6 0.0.7 0.0.8
← All changes | inc/abilities/core/run-wp-cli.php +9 -10 0.0.13 → 0.0.14 View file →
@@ -298,20 +298,19 @@
298 298 // bundled `lib/mcp-adapter`. Its `McpAdapter` inits on `init` under
299 299 // WP-CLI. It is a stdio JSON-RPC MCP server. It routes `tools/call` to
300 300 // abilities. This runs in a process where `WP_CLI` is defined.
301 301 //
302 - // That entry point stops one hop short today. This is only because
303 302 // `mcp-adapter/execute-ability` refuses anything without
304 - // `meta['mcp']['public'] === true`. No `zipai/*` ability sets it. One
305 - // `mcp_adapter_default_server_config` filter would make it reachable. So
306 - // treat this path as guarded by configuration. Do not treat it as
307 - // unreachable.
303 + // `meta['mcp']['public'] === true`. The ability loader sets it on every
304 + // exposed `zipai/*` ability, this one included, while the external MCP
305 + // endpoint is switched on (`External_Mcp::is_enabled()`,
306 + // `External_Tool_Policy::is_exposed()`). So this path is reachable
307 + // whenever that toggle is on. Do not treat it as unreachable.
308 308 //
309 - // A related point is wider than this ability. Only
310 - // `Rest_Api::handle_mcp_request` (`inc/api/rest-api.php:116`) enters the
311 - // MCP-context flag of `Protected_Options_Filter`. So on ANY non-REST MCP
312 - // transport the filter backstop is inert for every protected key. This is
313 - // tracked separately.
309 + // The MCP-context flag of `Protected_Options_Filter` is entered by
310 + // `Rest_Api::handle_mcp_request`, and by `External_Mcp::enter_protected_context`
311 + // for every call on this plugin's adapter server and for a call on any
312 + // other adapter server that runs a `zipai/*` ability, this one included.
314 313 if ( defined( 'WP_CLI' ) && WP_CLI && class_exists( '\WP_CLI' ) ) {
315 314 $families = array_column( $this->candidate_positionals( $args ), 0 );
316 315 if ( ! in_array( 'search-replace', $families, true ) ) {
317 316 return $this->run_via_wpcli_api( $command );