-
Notifications
You must be signed in to change notification settings - Fork 81
Description
Bug Description
The default MCP adapter abilities (mcp-adapter/discover-abilities, mcp-adapter/get-ability-info, mcp-adapter/execute-ability) fail to register because the ability registration hooks are added too late.
Expected Behavior
When the plugin loads, the default abilities should register successfully via the wp_abilities_api_init hook.
Actual Behavior
The abilities are NOT registered because:
McpAdapter::instance()defers initialization torest_api_init(line 64)- maybe_create_default_server() is called during init() which runs on
rest_api_init - But
wp_abilities_api_initfires during the init hook (viaWP_Abilities_Registry::get_instance()) - Since
rest_api_initfires AFTER init, theadd_action('wp_abilities_api_init', ...)calls are too late
Error in Debug Log
[ERROR] WordPress ability 'mcp-adapter/discover-abilities' does not exist.
[ERROR] WordPress ability 'mcp-adapter/get-ability-info' does not exist.
[ERROR] WordPress ability 'mcp-adapter/execute-ability' does not exist.
Root Cause
In includes/Core/McpAdapter.php, the instance() method schedules initialization on rest_api_init:
add_action( 'rest_api_init', array( self::$instance, 'init' ), 15 );But the wp_abilities_api_init hook fires during init, which happens BEFORE rest_api_init.
Proposed Fix
Move the ability registration hooks out of maybe_create_default_server() and into a new method register_ability_hooks() that's called immediately during instance():
public static function instance(): self {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
// Register ability hooks IMMEDIATELY so they fire before wp_abilities_api_init
self::$instance->register_ability_hooks();
if ( defined( 'WP_CLI' ) && constant( 'WP_CLI' ) ) {
add_action( 'init', array( self::$instance, 'init' ), 20 );
} else {
add_action( 'rest_api_init', array( self::$instance, 'init' ), 15 );
}
}
return self::$instance;
}
private function register_ability_hooks(): void {
if ( ! apply_filters( 'mcp_adapter_create_default_server', true ) ) {
return;
}
add_action( 'wp_abilities_api_categories_init', array( $this, 'register_default_category' ) );
add_action( 'wp_abilities_api_init', array( $this, 'register_default_abilities' ) );
}Environment
- WordPress: 6.9.0
- MCP Adapter: 0.4.1
- PHP: 7.4+
Steps to Reproduce
- Install MCP Adapter plugin v0.4.1
- Activate the plugin
- Make a REST API request to /wp-json/mcp/mcp-adapter-default-server
- Check wp-content/debug.log for errors about missing abilities
Metadata
Metadata
Assignees
Labels
Type
Projects
Status