diff --git a/api/controllers/console/workspace/tool_providers.py b/api/controllers/console/workspace/tool_providers.py index f37850a810d..c35f2b88de8 100644 --- a/api/controllers/console/workspace/tool_providers.py +++ b/api/controllers/console/workspace/tool_providers.py @@ -1582,6 +1582,7 @@ class ToolMCPDetailApi(Resource): @setup_required @login_required @account_initialization_required + @rbac_permission_required(RBACCheck(RBACPermission.MCP_MANAGE, Workspace())) @with_current_tenant_id def get(self, tenant_id: str, provider_id: str): with sessionmaker(db.engine).begin() as session: diff --git a/api/tests/unit_tests/controllers/console/test_workspace_credential_mutation_permissions.py b/api/tests/unit_tests/controllers/console/test_workspace_credential_mutation_permissions.py index 03cf9767036..f89ccb3e765 100644 --- a/api/tests/unit_tests/controllers/console/test_workspace_credential_mutation_permissions.py +++ b/api/tests/unit_tests/controllers/console/test_workspace_credential_mutation_permissions.py @@ -10,7 +10,11 @@ from controllers.console.datasets.data_source import DataSourceApi from controllers.console.datasets.rag_pipeline.datasource_auth import DatasourceAuth from controllers.console.workspace.model_providers import ModelProviderCredentialApi from controllers.console.workspace.models import ModelProviderModelCredentialApi -from controllers.console.workspace.tool_providers import ToolBuiltinProviderAddApi, ToolOAuthCustomClient +from controllers.console.workspace.tool_providers import ( + ToolBuiltinProviderAddApi, + ToolMCPDetailApi, + ToolOAuthCustomClient, +) from tests.unit_tests.controllers.rbac_introspection import rbac_checks @@ -92,3 +96,13 @@ def test_agent_app_get_requires_rbac(method: FunctionType) -> None: [check] = rbac_checks(method) assert check.scene == RBACPermission.AGENT_PREVIEW assert isinstance(check.locator, AgentId) + + +def test_tool_mcp_detail_get_requires_rbac() -> None: + """GET endpoint that returns MCP provider details must enforce + the workspace MCP management RBAC gate.""" + method = ToolMCPDetailApi.get + + [check] = rbac_checks(method) + assert check.scene == RBACPermission.MCP_MANAGE + assert isinstance(check.locator, Workspace)