<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="mlflow-e2e" errors="0" failures="30" skipped="6" tests="75" time="153.823" timestamp="2026-09-15T15:07:58.023360+00:00" hostname="e2e-cli-nmanos-ephc-rhoai-smoke-qn7j6-test-mlflow-pod"><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE &amp; GET permission can log and download artifacts]" time="3.899" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE &amp; GET permission can log and load models]" time="7.568" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission can verify storage for artifacts]" time="2.203" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot log models]" time="3.858" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission on workspace 1 cannot start run in workspace 2]" time="1.878" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission on workspace 2 cannot log artifacts in workspace 1]" time="4.023" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot end run]" time="3.894" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission on workspace 1 cannot log model to run in workspace 2]" time="3.900" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with LIST permission cannot log artifacts without CREATE permission]" time="1.978" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_s3_model_download_uses_runner_reachable_presigned_endpoint" time="0.001"><skipped type="pytest.skip" message="requires the in-cluster SeaweedFS S3 backend">/mlflow/mlflow-tests/tests/test_artifacts.py:266: requires the in-cluster SeaweedFS S3 backend</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_direct_artifact_server_functionality" time="0.000"><skipped type="pytest.skip" message="requires an ARTIFACTS_SERVER=true deployment with a direct artifact URI">/mlflow/mlflow-tests/tests/test_artifacts.py:425: requires an ARTIFACTS_SERVER=true deployment with a direct artifact URI</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_direct_artifact_server_multipart_functionality" time="0.000"><skipped type="pytest.skip" message="requires an S3-backed artifact server with a direct artifact URI">/mlflow/mlflow-tests/tests/test_artifacts.py:442: requires an S3-backed artifact server with a direct artifact URI</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_gateway_compatibility_paths_are_served_by_artifact_deployment" time="0.000"><skipped type="pytest.skip" message="requires live artifact-server Gateway rewrite validation">/mlflow/mlflow-tests/tests/test_artifacts.py:458: requires live artifact-server Gateway rewrite validation</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_gateway_multipart_paths_are_served_by_artifact_deployment" time="0.000"><skipped type="pytest.skip" message="requires live S3 multipart Gateway rewrite validation">/mlflow/mlflow-tests/tests/test_artifacts.py:481: requires live S3 multipart Gateway rewrite validation</skipped></testcase><testcase classname="tests.test_deploy_configuration" name="test_kind_overlay_rebakes_operator_values_from_overlay_params" time="0.526" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission can get experiment]" time="1.859" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission cannot create experiment]" time="1.821" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission on workspace 2 cannot get experiment in workspace 1]" time="1.888" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission scoped to one experiment can get that experiment]" time="1.907" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission scoped to one experiment cannot get a different experiment in the same workspace]" time="1.886" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with CREATE permission can create experiment]" time="1.979" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET, CREATE and DELETE permissions can delete experiment]" time="2.041" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with CREATE permission on workspace 1, cannot create experiment in workspace 2]" time="1.824" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with GET permission cannot delete experiment]" time="3.811" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with CREATE permission cannot delete experiment without DELETE permission]" time="2.119" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with UPDATE permission cannot create experiment without CREATE permission]" time="1.822" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with LIST permission cannot delete experiment without DELETE permission]" time="3.851" /><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission can get MCP server]" time="1.781"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-tbttrw01 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-tbttrw01, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1bb0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1bb0&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission can get MCP server user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1bb0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-tbttrw01 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-tbttrw01, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission cannot create MCP server]" time="1.776"><failure message="AssertionError: Action failed with unexpected error for user test-user-zp3117lw: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2420&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2420&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission cannot create MCP server user_info=UserInfo(workspace='workspac...source_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['get']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace1-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-zp3117lw: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission on workspace 1 cannot get MCP server in workspace 2]" time="1.785"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-vw2e7n5q in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-vw2e7n5q, Workspace: workspace2-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2510&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2510&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission on workspace 1 cannot get MCP server in workspace 2 user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2510&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-vw2e7n5q in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-vw2e7n5q, Workspace: workspace2-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission scoped to one MCP server can get that server]" time="1.775"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-i1dlmajb in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-i1dlmajb, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2600&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2600&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission scoped to one MCP server can get that server user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2600&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 2, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-i1dlmajb in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-i1dlmajb, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission scoped to one MCP server cannot get a different server in the same workspace]" time="1.773"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-nrv9vvj8 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-nrv9vvj8, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad26c0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad26c0&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission scoped to one MCP server cannot get a different server in the same workspace user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad26c0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 2, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-nrv9vvj8 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-nrv9vvj8, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission scoped to one MCP server cannot create a different server]" time="1.763"><failure message="AssertionError: Action failed with unexpected error for user test-user-yygdua0c: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2780&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2780&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission scoped to one MCP server cannot create a different server user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace1-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-yygdua0c: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission cannot register an MCP server (add a version) without UPDATE permission]" time="1.777"><failure message="AssertionError: Action failed with unexpected error for user test-user-mz7da9at: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2840&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2840&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission cannot register an MCP server (add a version) without UPDATE...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['create']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace1-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-mz7da9at: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission can create a bare MCP server via the direct client API]" time="1.777"><failure message="AssertionError: Action 'action_create_mcp_server_shell' failed for user test-user-tiz1cg48 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-tiz1cg48, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2900&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2900&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission can create a bare MCP server via the direct client API user_...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['create']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2900&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server_shell' failed for user test-user-tiz1cg48 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-tiz1cg48, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission cannot create a bare MCP server via the direct client API without CREATE permission]" time="1.776"><failure message="AssertionError: Action failed with unexpected error for user test-user-9altps1i: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad29f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad29f0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission cannot create a bare MCP server via the direct client API wi...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace1-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-9altps1i: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET, UPDATE and DELETE permissions can delete MCP server]" time="1.771"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-bmc8g9zt in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-bmc8g9zt, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2ab0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2ab0&gt;&gt;
test_data = Test Data: name=Validate that user with GET, UPDATE and DELETE permissions can delete MCP server user_info=UserInfo(wo...ceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['get', 'update', 'delete']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2ab0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-bmc8g9zt in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-bmc8g9zt, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission on workspace 1 cannot create MCP server in workspace 2]" time="1.777"><failure message="AssertionError: Action failed with unexpected error for user test-user-zehlgb9f: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1af0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1af0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission on workspace 1 cannot create MCP server in workspace 2 user_...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace2-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace2-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-zehlgb9f: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot delete MCP server]" time="1.782"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-l0we8oy1 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-l0we8oy1, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1820&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1820&gt;&gt;
test_data = Test Data: name=User with GET permission cannot delete MCP server user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad1820&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-l0we8oy1 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-l0we8oy1, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with UPDATE permission cannot delete MCP server without DELETE permission]" time="1.772"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ixe3dbjw in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ixe3dbjw, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2b10&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2b10&gt;&gt;
test_data = Test Data: name=User with UPDATE permission cannot delete MCP server without DELETE permission user_info=UserInfo(work...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2b10&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ixe3dbjw in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ixe3dbjw, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot create MCP server without UPDATE permission]" time="1.770"><failure message="AssertionError: Action failed with unexpected error for user test-user-5obk9i1r: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2bd0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2bd0&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot create MCP server without UPDATE permission user_info=UserInfo(work...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['delete']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:657: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-2wmbhbma', 'workspace2-2wmbhbma'], active_workspace='workspace1-2wmbhbma', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-5obk9i1r: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot get MCP server without GET permission]" time="1.768"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-zoqwx4jv in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-zoqwx4jv, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2cc0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2cc0&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot get MCP server without GET permission user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2cc0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-zoqwx4jv in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-zoqwx4jv, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with UPDATE permission can create MCP server]" time="1.778"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-c6gzhyvk in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-c6gzhyvk, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2db0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2db0&gt;&gt;
test_data = Test Data: name=User with UPDATE permission can create MCP server user_info=UserInfo(workspace='workspace1-2wmbhbma', ...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2db0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-c6gzhyvk in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-c6gzhyvk, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with LIST permission cannot delete MCP server without DELETE permission]" time="1.800"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-8q2rl5a0 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-8q2rl5a0, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2e70&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2e70&gt;&gt;
test_data = Test Data: name=User with LIST permission cannot delete MCP server without DELETE permission user_info=None workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2e70&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-8q2rl5a0 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-8q2rl5a0, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that MCP server search results are scoped to the active workspace]" time="1.826"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-017389ij in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-017389ij, Workspace: workspace2-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2f60&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2f60&gt;&gt;
test_data = Test Data: name=Validate that MCP server search results are scoped to the active workspace user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad2f60&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-017389ij in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-017389ij, Workspace: workspace2-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Full MCP server lifecycle: create, add version and access endpoint, then delete]" time="1.766"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-uo4ekprm in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-uo4ekprm, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3020&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3020&gt;&gt;
test_data = Test Data: name=Full MCP server lifecycle: create, add version and access endpoint, then delete user_info=UserInfo(wor...CP_SERVERS: 'mcpservers'&gt;], verbs=['get', 'update', 'list', 'delete']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3020&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-uo4ekprm in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-uo4ekprm, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can create an MCP access endpoint]" time="1.766"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-5rgl70wr in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-5rgl70wr, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad30e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad30e0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can create an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad30e0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-5rgl70wr in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-5rgl70wr, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission cannot create an MCP access endpoint without UPDATE permission]" time="1.779"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-z27pyesz in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-z27pyesz, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad31a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad31a0&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission cannot create an MCP access endpoint without UPDATE permissi...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad31a0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-z27pyesz in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-z27pyesz, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission can get an MCP access endpoint]" time="1.782"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-bsx2zas0 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-bsx2zas0, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3260&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3260&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission can get an MCP access endpoint user_info=UserInfo(workspace='wo...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3260&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-bsx2zas0 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-bsx2zas0, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission cannot get an MCP access endpoint without GET permission]" time="1.773"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-w1ar02yr in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-w1ar02yr, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3320&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3320&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission cannot get an MCP access endpoint without GET permission use...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad3320&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-w1ar02yr in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-w1ar02yr, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that MCP access endpoint search results are scoped to the active workspace]" time="1.775"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-c39jgxtx in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-c39jgxtx, Workspace: workspace2-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad33e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad33e0&gt;&gt;
test_data = Test Data: name=Validate that MCP access endpoint search results are scoped to the active workspace user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41ad33e0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-c39jgxtx in workspace workspace2-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-c39jgxtx, Workspace: workspace2-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can update an MCP access endpoint]" time="1.761"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-dk3vv5br in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-dk3vv5br, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3dfd0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3dfd0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can update an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3dfd0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-dk3vv5br in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-dk3vv5br, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot update MCP access endpoint without UPDATE permission]" time="1.781"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ncb9cs84 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ncb9cs84, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ec60&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ec60&gt;&gt;
test_data = Test Data: name=User with GET permission cannot update MCP access endpoint without UPDATE permission user_info=UserInf...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ec60&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ncb9cs84 in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ncb9cs84, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot update MCP access endpoint without UPDATE permission]" time="1.779"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-4ghf9mhl in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-4ghf9mhl, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ed20&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ed20&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot update MCP access endpoint without UPDATE permission user_info=User...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ed20&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-4ghf9mhl in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-4ghf9mhl, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can delete an MCP access endpoint]" time="1.779"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-iqxzm26u in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-iqxzm26u, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3edb0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3edb0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can delete an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3edb0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-iqxzm26u in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-iqxzm26u, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot delete MCP access endpoint without UPDATE permission]" time="1.765"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-js9ubcxz in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-js9ubcxz, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3eed0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3eed0&gt;&gt;
test_data = Test Data: name=User with GET permission cannot delete MCP access endpoint without UPDATE permission user_info=UserInf...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3eed0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-js9ubcxz in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-js9ubcxz, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission alone cannot delete MCP access endpoint (requires UPDATE, not DELETE)]" time="1.783"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ksx3dmyn in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ksx3dmyn, Workspace: workspace1-2wmbhbma">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ef90&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ef90&gt;&gt;
test_data = Test Data: name=User with DELETE permission alone cannot delete MCP access endpoint (requires UPDATE, not DELETE) user...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-2wmbhbma resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:581: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f7b41d3ef90&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f7b41a674c0&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ksx3dmyn in workspace workspace1-2wmbhbma: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ksx3dmyn, Workspace: workspace1-2wmbhbma

tests/base.py:654: AssertionError</failure></testcase><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission can get registered model]" time="1.837" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission cannot create registered model]" time="1.828" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission on workspace 1 cannot get registered model in workspace 2]" time="1.880" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission scoped to one registered model can get that model]" time="1.892" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission scoped to one registered model cannot get a different model in the same workspace]" time="1.865" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with CREATE permission can create registered model]" time="1.971" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET, CREATE and DELETE permissions can delete registered model]" time="2.101" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with CREATE permission on workspace 1 cannot create registered model in workspace 2]" time="1.820" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with GET permission cannot delete registered model]" time="3.919" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with CREATE permission cannot delete registered model without DELETE permission]" time="1.996" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot create registered model without CREATE permission]" time="1.829" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot get registered model without GET permission]" time="1.862" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with UPDATE permission cannot create registered model without CREATE permission]" time="1.830" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with LIST permission cannot delete registered model without DELETE permission]" time="3.735" /><testcase classname="tests.test_trace_archival.TestTraceArchival" name="test_trace_archival_job_archives_multiple_traces[Job created from the trace archival CronJob archives traces and keeps them readable]" time="0.000"><skipped type="pytest.skip" message="trace archival live Job requires object storage and an enabled trace archival configuration">/mlflow/mlflow-tests/tests/test_trace_archival.py:91: trace archival live Job requires object storage and an enabled trace archival configuration</skipped></testcase><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE on one experiment can send traces to that experiment]" time="2.224" /><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE on one experiment cannot send traces to a different experiment in the same workspace]" time="1.961" /><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE in one workspace cannot send traces in a different workspace]" time="1.951" /></testsuite></testsuites>