Hand AI agents scoped MCP tools that inherit your permissions. They get useful access; they never get a raw connection.
MCP tools only reach SchemaRegistry, the PermissionCompiler, and the DataEngineProvider — never a raw connection.
Every AI request runs through the same RBAC + Filter AST as your users. No privileged backdoor.
Mutations can be previewed with explain plans before anything touches data.
Destructive operations drop into an approval queue instead of executing.
# MCP tool call — governed, not raw SQL
await sf.mcp.plan({
op: 'add_index',
collection: 'posts',
field: 'slug',
});
// → explain plan + affected rows,
// → destructive? queued for approval check-mcp-data-access) fails CI if any MCP code touches a raw connection.