X

dbt cli mcp

Information

# DBT CLI MCP Server A Model Context Protocol (MCP) server that wraps the dbt CLI tool, enabling AI coding agents to interact with dbt projects through standardized MCP tools. ## Features - Execute dbt commands through MCP tools - Support for all major dbt operations (run, test, compile, etc.) - Command-line interface for direct interaction - Environment variable management for dbt projects - Configurable dbt executable path - Flexible profiles.yml location configuration ## Installation ### Prerequisites - Python 3.10 or higher - \`uv\` tool for Python environment management - dbt CLI installed ### Setup \`\`\`bash # 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]" \`\`\` ## Usage ### Command Line Interface The package provides a command-line interface for direct interaction with dbt: \`\`\`bash # 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: \`\`\`bash python -m src.cli run --models customers --project-dir /path/to/project \`\`\` ### Command Line Options - \`--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) ### Environment Variables The server can also be configured using environment variables: - \`DBT_PATH\`: Path to dbt executable - \`ENV_FILE\`: Path to environment file - \`LOG_LEVEL\`: Logging level - \`DBT_PROFILES_DIR\`: Path to directory containing profiles.yml file ### Using with MCP Clients To use the server with an MCP client like Claude for Desktop, add it to the client's configuration: \`\`\`json \{ "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 \} \} \} \} \`\`\` ## IMPORTANT: Absolute Project Path Required When using any tool from this MCP server, you **MUST** specify the **FULL ABSOLUTE PATH** to your dbt project directory with the \`project_dir\` parameter. Relative paths will not work correctly. \`\`\`json // INCORRECT - Will NOT work \{ "project_dir": "." \} // CORRECT - Will work \{ "project_dir": "/Users/username/path/to/your/dbt/project" \} \`\`\` See the [complete dbt MCP usage guide](docs/dbt_mcp_guide.md) for more detailed instructions and examples. ## Available Tools The server provides the following MCP tools: - \`dbt_run\`: Run dbt models (requires absolute \`project_dir\`) - \`dbt_test\`: Run dbt tests (requires absolute \`project_dir\`) - \`dbt_ls\`: List dbt resources (requires absolute \`project_dir\`) - \`dbt_compile\`: Compile dbt models (requires absolute \`project_dir\`) - \`dbt_debug\`: Debug dbt project setup (requires absolute \`project_dir\`) - \`dbt_deps\`: Install dbt package dependencies (requires absolute \`project_dir\`) - \`dbt_seed\`: Load CSV files as seed data (requires absolute \`project_dir\`) - \`dbt_show\`: Preview model results (requires absolute \`project_dir\`) \{ "models": "customers", "project_dir": "/path/to/dbt/project", "limit": 10 \} \`\`\` ### dbt Profiles Configuration When using the dbt MCP tools, it's important to understand how dbt profiles are handled: 1. The \`project_dir\` parameter **MUST** be an absolute path (e.g., \`/Users/username/project\` not \`.\`) that points to a directory containing both: - A valid \`dbt_project.yml\` file - A valid \`profiles.yml\` file with the profile referenced in the project 2. The MCP server automatically sets the \`DBT_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. 3. If you encounter a "Could not find profile named 'X'" error, it means either: - The profiles.yml file is missing from the project directory - The profiles.yml file doesn't contain the profile referenced in dbt_project.yml - You provided a relative path instead of an absolute path for \`project_dir\` Example of a valid profiles.yml file: \`\`\`yaml 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. ## Development ### Integration Tests The project includes integration tests that verify functionality against a real dbt project: \`\`\`bash # Run all integration tests python integration_tests/run_all.py # Run a specific integration test python integration_tests/test_dbt_run.py \`\`\` #### Test Project Setup 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: \`\`\`bash 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: \`\`\`bash git submodule update --init \`\`\` ## License MIT

Prompts

Reviews

Tags

Write Your Review

Detailed Ratings

ALL
Correctness
Helpfulness
Interesting
Upload Pictures and Videos

Name
Size
Type
Download
Last Modified

Upload Files

  • Community

Add Discussion

Upload Pictures and Videos