Automattic\WooCommerce\Internal\MCP

MCPAdapterProvider::initialize_mcp_serverpublicWC 1.0

Initialize MCP server.

Method of the class: MCPAdapterProvider{}

No Hooks.

Returns

null. Nothing (null).

Usage

$MCPAdapterProvider = new MCPAdapterProvider();
$MCPAdapterProvider->initialize_mcp_server( $adapter ): void;
$adapter(object) (required)
MCP adapter instance.

MCPAdapterProvider::initialize_mcp_server() code WC 10.7.0

public function initialize_mcp_server( $adapter ): void {
	// Get filtered abilities for MCP server.
	$abilities_ids = $this->get_woocommerce_mcp_abilities();

	// Bail if no abilities are available.
	if ( empty( $abilities_ids ) ) {
		return;
	}

	/*
	 * Temporarily disable MCP validation during server creation.
	 * Workaround for validator bug with union types (e.g., ["integer", "null"]).
	 * This will be removed once the mcp-adapter validator bug is fixed.
	 *
	 * @see https://github.com/WordPress/mcp-adapter/issues/47
	 */
	add_filter( 'mcp_validation_enabled', array( __CLASS__, 'disable_mcp_validation' ), 999 );

	try {
		// Create MCP server.
		$adapter->create_server(
			'woocommerce-mcp',
			self::MCP_NAMESPACE,
			self::MCP_ROUTE,
			__( 'WooCommerce MCP Server', 'woocommerce' ),
			__( 'AI-accessible WooCommerce operations via MCP', 'woocommerce' ),
			'1.0.0',
			array( WooCommerceRestTransport::class ),
			\WP\MCP\Infrastructure\ErrorHandling\ErrorLogMcpErrorHandler::class,
			\WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler::class,
			$abilities_ids,
		);
	} catch ( \Throwable $e ) {
		if ( function_exists( 'wc_get_logger' ) ) {
			wc_get_logger()->error(
				'MCP server initialization failed: ' . $e->getMessage(),
				array( 'source' => 'woocommerce-mcp' )
			);
		}
	} finally {
		// Re-enable MCP validation immediately after server creation.
		remove_filter( 'mcp_validation_enabled', array( __CLASS__, 'disable_mcp_validation' ), 999 );
	}
}