The DBT CLI Model Context Protocol (MCP) Server is a specialized server that wraps the dbt CLI tool, enabling AI coding agents to interact with dbt projects through standardized MCP tools. This implementation allows for seamless integration of dbt operations within AI-driven workflows.
profiles.yml
location configurationuv
tool for Python environment management# Clone the repository with submodules
git clone --recurse-submodules https://github.com/yourusername/dbt-cli-mcp.git
cd dbt-cli-mcp
# If you already cloned without --recurse-submodules, initialize the submodule
# git submodule update --init
# Create and activate a virtual environment
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
uv pip install -e .
# For development, install development dependencies
uv pip install -e ".[dev]"
The package provides a command-line interface for direct interaction with dbt:
# Run dbt models
dbt-mcp run --models customers --project-dir /path/to/project
# Run dbt models with a custom profiles directory
dbt-mcp run --models customers --project-dir /path/to/project --profiles-dir /path/to/profiles
# List dbt resources
dbt-mcp ls --resource-type model --output-format json
# Run dbt tests
dbt-mcp test --project-dir /path/to/project
# Get help
dbt-mcp --help
dbt-mcp run --help
You can also use the module directly:
python -m src.cli run --models customers --project-dir /path/to/project
--dbt-path
: Path to dbt executable (default: "dbt")--env-file
: Path to environment file (default: ".env")--log-level
: Logging level (default: "INFO")--profiles-dir
: Path to directory containing profiles.yml
file (defaults to project-dir
if not specified)The server can also be configured using environment variables:
DBT_PATH
: Path to dbt executableENV_FILE
: Path to environment fileLOG_LEVEL
: Logging levelDBT_PROFILES_DIR
: Path to directory containing profiles.yml
fileTo use the server with an MCP client like Claude for Desktop, add it to the client's configuration:
{
"mcpServers": {
"dbt": {
"command": "uv",
"args": ["--directory", "/path/to/dbt-cli-mcp", "run", "src/server.py"],
"env": {
"DBT_PATH": "/absolute/path/to/dbt",
"ENV_FILE": ".env"
// You can also set DBT_PROFILES_DIR here for a server-wide default
}
}
}
}
The server provides the following MCP tools:
dbt_run
: Run dbt modelsdbt_test
: Run dbt testsdbt_ls
: List dbt resourcesdbt_compile
: Compile dbt modelsdbt_debug
: Debug dbt project setupdbt_deps
: Install dbt package dependenciesdbt_seed
: Load CSV files as seed datadbt_show
: Preview model resultsWhen using the dbt MCP tools, it's important to understand how dbt profiles are handled:
project_dir
parameter must point to a directory that contains both:dbt_project.yml
fileprofiles.yml
file with the profile referenced in the projectDBT_PROFILES_DIR
environment variable to the absolute path of the directory specified in project_dir
. This tells dbt where to look for the profiles.yml
file.profiles.yml
file is missing from the project directoryprofiles.yml
file doesn't contain the profile referenced in dbt_project.yml
Example of a valid profiles.yml
file:
jaffle_shop: # This name must match the profile in dbt_project.yml
target: dev
outputs:
dev:
type: duckdb
path: 'jaffle_shop.duckdb'
threads: 24
When running commands through the MCP server, ensure your project directory is structured correctly with both configuration files present.
The project includes integration tests that verify functionality against a real dbt project:
# Run all integration tests
python integration_tests/run_all.py
# Run a specific integration test
python integration_tests/test_dbt_run.py
The integration tests use the jaffle_shop_duckdb
project which is included as a Git submodule in the dbt_integration_tests
directory. When you clone the repository with --recurse-submodules
as mentioned in the Setup section, this will automatically be initialized.
If you need to update the test project to the latest version from the original repository:
git submodule update --remote dbt_integration_tests/jaffle_shop_duckdb
If you're seeing errors about missing files in the jaffle_shop_duckdb
directory, you may need to initialize the submodule:
git submodule update --init
MIT