dbt CLI MCP Server
Allows AI agents to execute dbt CLI commands and interact with dbt projects. Supports operations like run, test, compile, list resources, debug, install dependencies, and load seed data.
Supports working with DuckDB as a database backend for dbt projects, as shown in the profiles.yml example.
Supports environment variable management for dbt projects through .env files, allowing configuration of variables needed for dbt operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dbt CLI MCP Serverrun tests on the orders model in my project at /Users/alice/dbt/project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Related MCP server: @us-all/dbt-mcp
Installation
Prerequisites
Python 3.10 or higher
uvtool for Python environment managementdbt CLI installed
Setup
# 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:
# 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 --helpYou can also use the module directly:
python -m src.cli run --models customers --project-dir /path/to/projectCommand 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 executableENV_FILE: Path to environment fileLOG_LEVEL: Logging levelDBT_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:
{
"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.
// ❌ 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 for more detailed instructions and examples.
Available Tools
The server provides the following MCP tools:
dbt_run: Run dbt models (requires absoluteproject_dir)dbt_test: Run dbt tests (requires absoluteproject_dir)dbt_ls: List dbt resources (requires absoluteproject_dir)dbt_compile: Compile dbt models (requires absoluteproject_dir)dbt_debug: Debug dbt project setup (requires absoluteproject_dir)dbt_deps: Install dbt package dependencies (requires absoluteproject_dir)dbt_seed: Load CSV files as seed data (requires absoluteproject_dir)dbt_show: Preview model results (requires absoluteproject_dir)
dbt Profiles Configuration
When using the dbt MCP tools, it's important to understand how dbt profiles are handled:
The
project_dirparameter MUST be an absolute path (e.g.,/Users/username/projectnot.) that points to a directory containing both:A valid
dbt_project.ymlfileA valid
profiles.ymlfile with the profile referenced in the project
The MCP server automatically sets the
DBT_PROFILES_DIRenvironment variable to the absolute path of the directory specified inproject_dir. This tells dbt where to look for the profiles.yml file.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:
jaffle_shop: # This name must match the profile in dbt_project.yml
target: dev
outputs:
dev:
type: duckdb
path: 'jaffle_shop.duckdb'
threads: 24When 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:
# Run all integration tests
python integration_tests/run_all.py
# Run a specific integration test
python integration_tests/test_dbt_run.pyTest 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:
git submodule update --remote dbt_integration_tests/jaffle_shop_duckdbIf you're seeing errors about missing files in the jaffle_shop_duckdb directory, you may need to initialize the submodule:
git submodule update --initLicense
MIT
Available Tools
9 toolsdbt_buildA
Run build command (seeds, tests, snapshots, and models). An AI agent should use this tool when it needs to execute a comprehensive build process that runs seeds, snapshots, models, and tests in the correct order. This is ideal for complete project deployment or ensuring all components work together.
Returns:
Output from the dbt build command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Specific models to build, using the dbt selection syntax | |
| selector | No | Named selector to use | |
| exclude | No | Models to exclude | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) | |
| full_refresh | No | Whether to perform a full refresh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: the command runs multiple components 'in the correct order' and returns 'output as text (this command does not support JSON output format).' However, it doesn't mention potential side effects like database mutations, execution time, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, usage guidelines second, and return format third. The three sentences each earn their place, though the second sentence could be slightly more concise by combining the two usage scenarios.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-step build process) and 100% schema coverage with an output schema present, the description provides excellent contextual completeness. It explains the comprehensive nature of the operation, when to use it, and clarifies the output format limitation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema, meeting the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Run build command (seeds, tests, snapshots, and models)' with specific verb+resource. It distinguishes from siblings by explaining this is a 'comprehensive build process' that runs multiple components in order, unlike single-purpose tools like dbt_seed or dbt_test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when it needs to execute a comprehensive build process... ideal for complete project deployment or ensuring all components work together.' This provides clear context for choosing this tool over simpler alternatives like dbt_run or dbt_test.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_compileA
Compile dbt models. An AI agent should use this tool when it needs to generate the SQL that will be executed without actually running it against the database. This is valuable for validating SQL syntax, previewing transformations, or investigating how dbt interprets models before committing to execution.
Returns:
Output from the dbt compile command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Specific models to compile, using the dbt selection syntax | |
| selector | No | Named selector to use | |
| exclude | No | Models to exclude | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: explains the tool is for preview/validation (not execution), discloses output format limitation ('does not support JSON output format'), and describes what the compilation process does. Could improve by mentioning performance implications or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured: purpose statement first, usage guidance second, return format third. Every sentence earns its place with zero waste. The two-sentence format is efficient and front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a compilation tool: clear purpose, explicit usage guidelines, behavioral context (preview vs execution), and output format disclosure. With 100% schema coverage and an output schema present, the description focuses appropriately on the conceptual aspects rather than repeating structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no specific parameter information beyond what's in the schema, but the schema documentation is comprehensive. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Compile dbt models' with specific explanation of what compilation does ('generate the SQL that will be executed without actually running it'). It distinguishes from siblings like dbt_run (which executes) and dbt_show (which shows compiled SQL with sample data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when it needs to generate the SQL that will be executed without actually running it' and provides three specific use cases (validating SQL syntax, previewing transformations, investigating dbt interpretations). This clearly differentiates from execution tools like dbt_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_debugA
Run dbt debug to validate the project setup. An AI agent should use this tool when it needs to troubleshoot configuration issues, check database connectivity, or verify that all project dependencies are properly installed. This is essential for diagnosing problems before attempting to run models or tests.
Returns:
Output from the dbt debug command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's purpose (diagnostic validation), output format (text rather than JSON), and when it should be used (before running other operations). It doesn't mention potential side effects, performance characteristics, or error handling, but provides sufficient context for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with two focused paragraphs: the first explains purpose and usage guidelines, the second clarifies output format. Every sentence adds value without redundancy, and the information is appropriately front-loaded with the most important context first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's diagnostic nature, 100% schema coverage, and the presence of an output schema (implied by 'Has output schema: true'), the description provides complete context. It explains what the tool does, when to use it, and the output format, which is sufficient for this type of validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Run dbt debug to validate the project setup') and distinguishes it from siblings by focusing on troubleshooting configuration issues, checking connectivity, and verifying dependencies. It explicitly contrasts with tools like dbt_run or dbt_test that execute models rather than diagnose problems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('when it needs to troubleshoot configuration issues, check database connectivity, or verify that all project dependencies are properly installed') and when not to use it ('before attempting to run models or tests'), clearly differentiating it from sibling tools that perform those execution tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_depsA
Install dbt package dependencies. An AI agent should use this tool when it needs to install or update external packages that the dbt project depends on. This ensures that all required modules, macros, and models from other packages are available before running the project.
Returns:
Output from the dbt deps command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's function (installing/updating dependencies) and output format (text from the dbt deps command, not JSON). However, it doesn't mention potential side effects like network dependencies, time requirements, or error conditions, which would be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with two sentences: the first states the purpose and usage guidelines, and the second explains the output format. Every sentence adds value without redundancy, and the information is front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (installing dependencies), no annotations, and an output schema that exists (though the description clarifies it returns text, not JSON), the description is mostly complete. It covers purpose, usage, and output format, but could improve by mentioning behavioral aspects like idempotency or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents both parameters (project_dir and profiles_dir) thoroughly. The description adds no additional parameter information beyond what's in the schema, maintaining the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('install dbt package dependencies') and resource ('external packages'), distinguishing it from siblings like dbt_run or dbt_test that perform different operations. It explicitly mentions installing or updating dependencies, which is distinct from building, compiling, or testing the project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'when it needs to install or update external packages that the dbt project depends on.' It also explains the purpose ('ensures that all required modules, macros, and models from other packages are available before running the project'), which implicitly suggests using it as a prerequisite before other operations like dbt_run or dbt_test.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_lsA
List dbt resources. An AI agent should use this tool when it needs to discover available models, tests, sources, and other resources within a dbt project. This helps the agent understand the project structure, identify dependencies, and select specific resources for other operations like running or testing.
Returns:
When output_format is 'json' (default):
- With verbose=False (default): returns a simplified JSON with only name, resource_type, and depends_on.nodes
- With verbose=True: returns a full JSON with all resource details
When output_format is 'name', 'path', or 'selector', returns plain text with the respective format.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Specific models to list, using the dbt selection syntax. Note that you probably want to specify your selection here e.g. silver.fact | |
| selector | No | Named selector to use | |
| exclude | No | Models to exclude | |
| resource_type | No | Type of resource to list (model, test, source, etc.) | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) | |
| output_format | No | Output format (json, name, path, or selector) | json |
| verbose | No | Return full JSON output instead of simplified version |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by detailing output behavior based on parameters (verbose flag and output_format). It explains what gets returned in different scenarios, though it doesn't mention performance characteristics, error conditions, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then usage guidance, then detailed output behavior. Every sentence adds value, though the output format explanation is somewhat dense and could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no annotations, but with output schema), the description is complete. It covers purpose, usage context, and detailed output behavior. With an output schema present, it appropriately doesn't need to explain return value structure beyond the behavioral variations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds value by explaining how output_format and verbose parameters affect return values, but doesn't provide additional semantic context for other parameters beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('dbt resources'), specifying it discovers models, tests, sources, and other resources. It distinguishes from siblings by focusing on discovery rather than execution operations like dbt_run or dbt_test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when it needs to discover available models, tests, sources, and other resources within a dbt project' and explains the purpose: 'helps the agent understand the project structure, identify dependencies, and select specific resources for other operations'. This provides clear context for choosing this tool over execution-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_runA
Run dbt models. An AI agent should use this tool when it needs to execute dbt models to transform data and build analytical tables in the data warehouse. This is essential for refreshing data or implementing new data transformations in a project.
Returns:
Output from the dbt run command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Specific models to run, using the dbt selection syntax (e.g., "model_name+") | |
| selector | No | Named selector to use | |
| exclude | No | Models to exclude | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) | |
| full_refresh | No | Whether to perform a full refresh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains what the tool does (executes dbt models to transform data), mentions the output format (text, not JSON), and implies it's a write operation that changes data in the warehouse. It could be more explicit about potential side effects like data overwriting or performance impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two paragraphs that efficiently convey purpose, usage context, and output format. The first sentence clearly states the core function, and the 'Returns' section provides important behavioral information. There's minimal wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations but 100% schema coverage and an output schema, the description provides good context about what the tool does and when to use it. It explains the output format limitation (text not JSON) which is valuable. The main gap is lack of explicit guidance on when NOT to use it versus sibling tools like dbt_build or dbt_compile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters are well-documented in the schema itself. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions, so it meets the baseline expectation without providing additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('execute dbt models', 'transform data', 'build analytical tables') and distinguishes it from siblings by mentioning its role in refreshing data or implementing new transformations. It explicitly names the resource (dbt models) and the action (run).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('when it needs to execute dbt models to transform data and build analytical tables'), including essential use cases like refreshing data or implementing new transformations. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_seedA
Load CSV files as seed data. An AI agent should use this tool when it needs to load initial data from CSV files into the database. This is essential for creating reference tables, test datasets, or any static data that models will depend on.
Returns:
Output from the dbt seed command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | Named selector to use | |
| exclude | No | Seeds to exclude | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's purpose and use cases. It adds valuable context about the output format ('Returns: Output from the dbt seed command as text (this command does not support JSON output format)'), which is crucial behavioral information not in the input schema. However, it doesn't mention potential side effects like database writes or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then usage guidelines, and finally output format. Every sentence adds value, though the output format section could be slightly more integrated rather than a separate 'Returns:' block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Good completeness for a data loading tool with no annotations but an output schema. The description covers purpose, usage context, and output behavior. With 4 parameters fully documented in the schema and an output schema present, the main gap is lack of explicit warnings about database writes or permissions needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing good documentation for all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 where the schema does the heavy lifting without compensating with extra semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Load CSV files as seed data') and resource ('database'), distinguishing it from siblings by focusing on initial data loading from CSV files rather than building, compiling, testing, or other dbt operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('when it needs to load initial data from CSV files into the database') and provides concrete use cases ('creating reference tables, test datasets, or any static data that models will depend on'), giving clear context for selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_showA
Preview the results of a model. An AI agent should use this tool when it needs to preview data from a specific model without materializing it. This helps inspect transformation results, debug issues, or demonstrate how data looks after processing without modifying the target database.
Returns:
Output from the dbt show command, defaulting to JSON format if not specified
| Name | Required | Description | Default |
|---|---|---|---|
| models | Yes | Specific model to show. For model references, use standard dbt syntax like 'model_name'. For inline SQL, use the format 'select * from {{ ref("model_name") }}' to reference other models. | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) | |
| limit | No | Limit the number of rows returned | |
| output | No | Output format (json, table, etc.) | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by clarifying this is a preview operation that doesn't modify the target database. It explains the non-destructive nature and default JSON output format, though it could mention performance characteristics or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by usage guidance and return format information. Every sentence adds value, and the information is front-loaded with the most important details about previewing without materialization.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, no annotations, but with an output schema present, the description provides good context about the tool's purpose and behavior. It covers the key distinction from materialization tools and mentions the return format, though could benefit from more operational details given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description doesn't add parameter-specific information beyond what's already in the schema, though it does mention the default JSON format which relates to the 'output' parameter. No additional syntax or usage examples are provided for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('preview the results of a model') and resource ('model'), distinguishing it from siblings by emphasizing non-materialization. It explicitly contrasts with tools like dbt_run that would materialize data, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('when it needs to preview data from a specific model without materializing it') and offers concrete use cases ('inspect transformation results, debug issues, or demonstrate how data looks after processing'). It clearly distinguishes from materialization tools in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt_testA
Run dbt tests. An AI agent should use this tool when it needs to validate data quality and integrity by running tests defined in a dbt project. This helps ensure that data transformations meet expected business rules and constraints before being used for analysis or reporting.
Returns:
Output from the dbt test command as text (this command does not support JSON output format)
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Specific models to test, using the dbt selection syntax | |
| selector | No | Named selector to use | |
| exclude | No | Models to exclude | |
| project_dir | No | ABSOLUTE PATH to the directory containing the dbt project (e.g. '/Users/username/projects/dbt_project' not '.') | . |
| profiles_dir | No | Directory containing the profiles.yml file (defaults to project_dir if not specified) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the core behavior (running tests to validate data quality) and importantly discloses that the output is 'text (this command does not support JSON output format)', which is valuable behavioral information not captured elsewhere. It doesn't mention execution time, error handling, or side effects, but provides solid core behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three focused sentences: purpose statement, usage guidance, and output format disclosure. Every sentence adds value without redundancy. The information is front-loaded with the core purpose, followed by usage context, and ending with important behavioral detail about the output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a testing tool with 5 parameters, 100% schema coverage, and an output schema, the description provides good contextual completeness. It explains the purpose, when to use it, and importantly discloses the text-only output format. While it doesn't cover all possible behavioral aspects (like execution characteristics or error conditions), it provides sufficient context given the rich schema documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with all 5 parameters well-documented in the schema. The description adds no specific parameter information beyond what's already in the schema, so it meets the baseline of 3. The description focuses on the tool's purpose and output format rather than parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('run dbt tests'), the resource ('tests defined in a dbt project'), and the purpose ('validate data quality and integrity'). It distinguishes this tool from siblings by focusing specifically on testing rather than building, compiling, running, or other dbt operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'when it needs to validate data quality and integrity by running tests defined in a dbt project.' It also explains the value: 'helps ensure that data transformations meet expected business rules and constraints before being used for analysis or reporting.' This gives clear context for when this testing tool should be selected over other dbt operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
- First observed
dbt_build - First observed
dbt_compile - First observed
dbt_debug - First observed
dbt_deps - First observed
dbt_ls - First observed
dbt_run - First observed
dbt_seed - First observed
dbt_show - First observed
dbt_test
TDQS
Each tool corresponds to a distinct dbt CLI command with a clear, non-overlapping purpose. The descriptions explicitly differentiate their use cases, such as dbt_build for comprehensive builds versus dbt_run for model execution, preventing agent misselection.
All tool names follow a consistent 'dbt_' prefix with the exact CLI command name in lowercase, such as dbt_build, dbt_compile, and dbt_debug. This uniform pattern makes the set predictable and easy to navigate for agents.
With 9 tools, the server covers core dbt CLI operations without being overwhelming. This count aligns well with the domain, providing essential commands for project management, execution, and validation in a data transformation workflow.
The tool set offers comprehensive coverage of dbt CLI functionality, including project setup (debug, deps), resource listing (ls), execution (run, build, seed, test), and inspection (compile, show). No obvious gaps exist for typical agent workflows in this domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityAmaintenanceA MCP (Model Context Protocol) server for interacting with dbt.16602Apache 2.0
- AlicenseBqualityAmaintenanceA read-only MCP server that exposes dbt project artifacts and data quality result tables (BigQuery/Postgres) to LLM clients, enabling deep introspection, run-history analysis, source freshness, test coverage, and lineage walks.2774MIT
- FlicenseNot gradedqualityDmaintenanceA minimal, extensible MCP server to run dbt models via CLI, HTTP API, or AI interfaces like Claude, with Slack notifications for task completions.2-
- AlicenseNot gradedqualityDmaintenanceMCP server that provides tools to interact with dbt, including dbt Core, Cloud CLI, Semantic Layer, and Discovery API.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MammothGrowth/dbt-cli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server