| @@ -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 ); |