DataSecOps CLI
A command-line interface for the Data Engineers DataSecOps Native App on Snowflake. Streamlines dbt development, source control workflows, and framework configuration management for teams using the DataSecOps Framework.
What is this?
The DataSecOps CLI is the local developer companion to the Data Engineers DataSecOps Native App — a Snowflake Native App that provides governance, configuration management, and standardised development workflows for data teams.
This CLI connects to the native app and gives developers:
- dbt development commands — run, build, test, lint, and manage dbt projects via dbt Fusion
- Source control operations — branching, committing, rebasing, and deploying via GitPython with naming conventions enforced by the framework
- Configuration downloads — pull SQLFluff rules, CI/CD pipelines, dbt packages, and Cortex Code skills from the native app to your local project
- MCP server — expose framework governance rules to AI coding assistants (VS Code, Cursor, Cortex Code, Claude Code)
Installation
pip install datasecops-cli
With MCP server support:
pip install "datasecops-cli[mcp]"
Requires Python 3.10 or later.
Prerequisites
- A Snowflake connection configured in
~/.snowflake/connections.toml - The Data Engineers DataSecOps Native App installed in your Snowflake account
- A project profile created in the native app
Optional:
- dbt Fusion — required for dbt commands (
dbtf). Install from https://docs.getdbt.com/docs/core/installation - Cortex Code for skill downloads
- Node.js 18+ for GitHub/Azure DevOps MCP servers
Quick Start
1. Configure your project
datasecops setup
This prompts for your Snowflake connection name and native app database, then writes .datasecops.yml.
If you skip this step, running datasecops will offer to run setup automatically.
2. Run the CLI
datasecops
Features
| Menu | Capabilities |
|---|---|
| Development | dbt run, build, test, lint (SQLFluff), deps, seed, compile, snapshot, freshness, docs |
| Git | Branch create/checkout/delete, commit & push, rebase, squash, deploy to environment branches, cherry-pick, reset branch from main |
| Downloads | SQLFluff config, CI/CD pipelines (GitHub Actions / Azure DevOps), dbt packages, Cortex Code skills |
Non-Interactive Mode (CI/CD)
The download subcommand lets you pull framework config in CI/CD pipelines without interactive prompts:
# Download specific items
datasecops download sqlfluff
datasecops download sqlfluff packages
datasecops download pipelines macros
# Install framework-pinned package versions
datasecops download install-sqlfluff
datasecops download install-dbt
# Download config and install packages together
datasecops download sqlfluff install-sqlfluff
# Download and install everything
datasecops download all
Available items: sqlfluff, pipelines, packages, macros, scripts, install-sqlfluff, install-dbt, all
The pipeline platform (GitHub / Azure DevOps) is auto-detected from the native app's source control configuration.
Pipeline Setup
Your pipeline needs two things:
-
A
.datasecops.ymlin the repo (already committed — contains no secrets):connection_name: "ci" app_database: "DATA_ENGINEERS_DATASECOPS_FRAMEWORK"
-
A Snowflake connection in
~/.snowflake/connections.tomlfor the CI service account:# GitHub Actions example - name: Configure Snowflake connection run: | mkdir -p ~/.snowflake cat > ~/.snowflake/connections.toml << EOF [ci] account = "${{ vars.SNOWFLAKE_ACCOUNT }}" user = "${{ vars.SNOWFLAKE_USER }}" authenticator = "snowflake_jwt" private_key_file = "/tmp/rsa_key.p8" warehouse = "CI_WH" role = "CI_ROLE" EOF - name: Download SQLFluff config run: datasecops download sqlfluff
The exit code is 0 on success, 1 if any download fails.
MCP Server
The package includes an MCP (Model Context Protocol) server that exposes your framework's governance configuration to AI coding assistants. Instead of static skill files, the MCP server gives AI tools live access to your native app's current rules.
Available Tools
| Category | Tools |
|---|---|
| Configuration | get_branching_rules, get_linting_rules, get_dbt_packages, get_pipeline_config, get_dbt_versions |
| Project | get_project_settings, get_project_profiles, get_deployment_targets, get_available_skills |
| Linting | lint_sql, fix_sql, lint_project |
| Source Control | validate_branch_name, get_deployment_workflow |
Setup for AI Tools
Cortex Code — add to .snowflake/cortex/mcp.json in your project root:
{
"mcpServers": {
"datasecops-framework": {
"type": "stdio",
"command": "datasecops-mcp",
"args": ["--connection-name", "<CONNECTION>", "--app-database", "<APP_DB>"]
},
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-github-pat>"
}
},
"dbt": {
"type": "stdio",
"command": "uvx",
"args": ["dbt-mcp"]
}
}
}
For Azure DevOps instead of GitHub:
{
"mcpServers": {
"datasecops-framework": {
"type": "stdio",
"command": "datasecops-mcp",
"args": ["--connection-name", "<CONNECTION>", "--app-database", "<APP_DB>"]
},
"azure-devops": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@tiberriver256/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/<your-org>",
"AZURE_DEVOPS_AUTH_METHOD": "pat",
"AZURE_DEVOPS_PAT": "<your-azure-pat>"
}
},
"dbt": {
"type": "stdio",
"command": "uvx",
"args": ["dbt-mcp"]
}
}
}
VS Code / Cursor — add to .vscode/mcp.json or .cursor/mcp.json:
{
"mcpServers": {
"datasecops-framework": {
"command": "datasecops-mcp",
"args": ["--connection-name", "<CONNECTION>", "--app-database", "<APP_DB>"]
}
}
}
Recommended MCP Server Stack
For full integration with Snowflake, dbt, and your source control platform, configure these MCP servers alongside the framework server:
| Server | Purpose | Install |
|---|---|---|
| datasecops-framework | Governance rules, linting, branch validation | Included (datasecops-mcp) |
| dbt | Lineage, model discovery, codegen, semantic layer | pip install dbt-mcp |
| GitHub | PRs, issues, CI checks, releases | npx -y @modelcontextprotocol/server-github |
| Azure DevOps | PRs, pipelines, work items, boards | npx -y @tiberriver256/mcp-server-azure-devops |
See the Getting Started Guide for full configuration instructions for each editor and platform.
Configuration
The CLI reads from a .datasecops.yml file in your project root (created by the setup script):
connection_name: "my_connection"
app_database: "DATA_ENGINEERS_DATASECOPS_FRAMEWORK"
Project profiles, linting rules, pipeline templates, and deployment targets are all managed centrally in the native app and pulled down by the CLI.
License
MIT
Metadata
Release files for datasecops-cli 0.6.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| datasecops_cli-0.6.2.tar.gz | 87.4 kB | With provenance | Details for datasecops_cli-0.6.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| datasecops_cli-0.6.2-py3-none-any.whl | Python 3 | none | any | Details for datasecops_cli-0.6.2-py3-none-any.whl |
Total release size: 152.6 kB
Release files / datasecops_cli-0.6.2.tar.gz
| Download URL | datasecops_cli-0.6.2.tar.gz |
|---|---|
| Size | 87.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
96541c5fb9c53c0dc3328b3a8bb814bb011e12eca40e8d1a121940a15b486213
|
|
BLAKE2b-256 checksum How to use checksums |
24b7b502bcf5b34b634d9be8b8465710b4bb85295adac3f6ac79af63c7674dc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logRelease files / datasecops_cli-0.6.2-py3-none-any.whl
| Download URL | datasecops_cli-0.6.2-py3-none-any.whl |
|---|---|
| Size | 65.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17cc913ea7949fa7bb74463729750129c2daa8a1565027130c4a29eda66adf24
|
|
BLAKE2b-256 checksum How to use checksums |
e7c12fb21f9b3757b4b3fba7f30aeb0f334f5f5f7a2691a9f09b377872ef2068
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logSecurity for datasecops-cli 0.6.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for datasecops_cli-0.6.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.