@us-all/dbt-mcp
This MCP server provides read-only introspection into dbt projects and data quality monitoring, designed for LLM clients (e.g., Claude Desktop, Cursor). It parses dbt artifacts (manifest.json, run_results.json, sources.json, catalog.json) and queries custom DQ result tables (BigQuery or Postgres).
dbt Artifact Inspection
List/search models with filters (tag, schema, materialization, package); get details including columns, tests, refs, and raw/compiled SQL
List and inspect tests (generic or singular) with latest run results
List sources with freshness criteria and results, exposures (BI/ML/apps), and macros with signatures and callers
Walk DAG lineage upstream/downstream; get per-column test coverage for any model
Run History & Performance
List recent dbt invocations and per-node run results (filterable by status)
Find chronically failing tests across the last N runs; identify slowest models by execution time
Freshness & SLA Monitoring
Cross-reference source freshness criteria vs. actual results to detect stale sources
Check dbt SLA status by comparing test pass rate and freshness pass rate against configured thresholds
Data Quality (DQ) Monitoring
List recent DQ check rows filtered by dataset, status, check type, and time window
Get time-series check history; group failing checks by dataset
Trend the 4-axis DQ score (completeness, freshness, validity, anomaly-free) over time
Check Tier SLA compliance (Tier 1/2/3 targets); reconstruct tier picture from raw checks via
dq-tier-by-source
Aggregation Tools (reduce round-trips)
failed-tests-summary— dbt failures + DQ check failures in one calldq-score-snapshot— score trend + tier compliance + recent failing checksincident-context— single asset deep-dive: dbt definition + test failures + DQ checksfreshness-statusanddq-tier-by-sourcefor consolidated freshness and tier views
Discovery & Triage
search-tools— natural language tool discovery across all categories4 MCP Prompts for guided workflows: investigate failed tests, freshness degradation triage, DQ trend report, and full incident triage
Configuration & Flexibility
BigQuery and Postgres backends for DQ tables; schema presets (
genericorus-all) with per-columnDQ_COL_*overridesextractFieldsresponse projection on all tools to reduce token usageCategory-level tool toggles (
DBT_TOOLSallowlist /DBT_DISABLEdenylist)Can be paired with
@us-all/airflow-mcpfor DAG triggering and log tailing
Provides tools for interacting with a dbt project, enabling AI agents to list models, tests, sources, exposures, macros, runs, check freshness, coverage, and explore the DAG using the project's manifest, run results, and catalog.
Integrates with BigQuery to query custom data quality result tables, enabling analysis of quality checks, score trends, and tier status.
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., "@@us-all/dbt-mcpcheck source freshness for tier 1 sources"
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.
@us-all/dbt-mcp
dbt MCP server —
manifest.json,run_results.json,sources.json,catalog.json, plus DQ result tables (BigQuery / Postgres) behind one stdio MCP. Built on@us-all/mcp-toolkit.
A read-only window into your dbt project for LLM clients. No dbt run triggering — just deep introspection, run-history analysis, source freshness, per-column test coverage, lineage walks, and (if you have a custom DQ result table) historical check trends and Tier SLA status.
For DAG triggering / run history / log tails, install the companion @us-all/airflow-mcp alongside.
27 tools across 3 categories (
dbt,quality,meta) — 21 primitive tools + 5 aggregations + 1 meta4 MCP Prompts for triage workflows
5 aggregation tools that replace 3-5 round-trips of "list / get / list"
extractFieldsresponse projection on high-volume readsRead-only by default
Hybrid backend: BigQuery (default) or Postgres for DQ result tables — both peer-imported lazily
Install
# 1. add the MCP server
pnpm add -D @us-all/dbt-mcp
# 2. add the DQ backend you actually use (only if you query custom DQ tables):
pnpm add -D @google-cloud/bigquery # OR
pnpm add -D pgRelated MCP server: dbt-doctor
Run
DBT_PROJECT_DIR=/path/to/dbt-project \
DQ_RESULTS_TABLE=my-project.data_ops.quality_checks \
npx @us-all/dbt-mcpThe server speaks MCP stdio; wire it into Claude Desktop / Cursor / any MCP client. Set MCP_TRANSPORT=http to opt in to Streamable HTTP transport (Bearer auth, /health endpoint).
Categories
Category | Tools | Purpose |
| 15 + 3 aggregations | Parse |
| 6 + 2 aggregations | Query |
| 1 (always on) |
|
Toggle with DBT_TOOLS=dbt (allowlist) or DBT_DISABLE=quality (denylist).
Tools at a glance
dbt (15 + 3)
dbt-list-models, dbt-get-model, dbt-list-tests, dbt-get-test, dbt-list-sources, dbt-get-source, dbt-list-exposures, dbt-list-macros, dbt-get-macro, dbt-list-runs, dbt-get-run-results, dbt-failed-tests, dbt-slow-models, dbt-coverage, dbt-graph, freshness-status, incident-context, dbt-sla-status
quality (6 + 2)
dq-list-checks, dq-get-check-history, dq-failed-checks-by-dataset, dq-score-trend, dq-tier-status, dq-tier-by-source, failed-tests-summary, dq-score-snapshot
Prompts
Prompt | Use when |
| "What's broken in the last 24h?" |
| "Are any sources stale?" (Tier 1 focus optional) |
| "Give me a stakeholder-friendly DQ trend report" |
| "Triage <model | source>" — bundles all signals |
Environment variables
Env | Required | Notes |
| yes | dbt project root (where |
| no | Defaults to |
| no | Optional dir for archived |
| no |
|
| no | FQN of the checks table; required only for checks-based quality tools |
| no | FQN of the score-daily table; required for score-only tools |
| no | For BigQuery backend (ADC fallback supported) |
| no | Explicit BQ project (otherwise inferred from ADC) |
| no | When |
| no |
|
| no | Per-column overrides on top of |
| no | Tier 1 SLA threshold for |
| no | Optional YAML path with |
| no | Reserved for future write tools (none currently) |
| no | Category toggles |
DQ result-table schema flavors
The quality category supports two schema presets via DQ_SCHEMA:
DQ_SCHEMA=generic (default)
Columns assumed on DQ_RESULTS_TABLE: run_at, check_name, check_type, dataset, table_name, status, severity, failure_count, message.
Columns assumed on DQ_SCORE_TABLE: score_date, scope, tier, completeness_pct, freshness_pct, validity_pct, anomaly_free_pct, overall_score.
dq-tier-status rolls up by Tier 1/2/3 against the per-scope rows.
DQ_SCHEMA=us-all
Real schema used at us-all (Postgres data_ops database):
quality_checks: run_date, check_type, dimension, source, target_name, status, metric_value, threshold, details (JSONB).
quality_score_daily: run_date, completeness_pct, freshness_pct, validity_pct, anomaly_free_pct, overall_score, total_checks, failed_checks.
In this flavor quality_score_daily is one row per day (no per-scope rollup, no tier column). dq-tier-status falls back to comparing the day's overall_score against DQ_TIER1_TARGET_PCT (default 99.5).
dq-get-check-history requires checkName formatted as '<check_type>:<target_name>' since us-all has no native check_name column.
Per-column overrides — DQ_COL_*
If your DQ tables don't match either preset, layer per-column overrides on top of DQ_SCHEMA. Any DQ_COL_* env var, when set, replaces the preset value for that single column. Unset vars keep the preset default.
Overrides are validated as simple SQL identifiers to avoid injecting raw SQL through environment variables. Table names in DQ_RESULTS_TABLE / DQ_SCORE_TABLE are also validated and quoted for the configured backend.
Env var | Logical concept | Generic preset | us-all preset |
| timestamp/date on the checks table |
|
|
| check type / dimension family |
|
|
| pass/fail/warn/error |
|
|
| dataset / source / schema |
|
|
| table or target name |
|
|
| severity / dimension |
|
|
| numeric failure count / metric |
|
|
| free-text or JSON message |
|
|
| natural identifier of the check |
| (none) |
| date column on the score table |
|
|
| scope/tenant column on score table |
| (none) |
| tier column on score table |
| (none) |
For the three nullable columns (DQ_COL_CHECK_NAME, DQ_COL_SCOPE, DQ_COL_TIER), set the value to none / null / - to declare "no native column":
Without
check_name→ the tools synthesize one fromcheck_type || ':' || table_name.dq-get-check-historythen expectscheckNameformatted as'<check_type>:<table_name>'.Without
scope→dq-score-trend'sscopefilter is ignored (with a caveat) anddq-tier-statusswitches to the single-overall_scorepath that compares againstDQ_TIER1_TARGET_PCT.Without
tier→ same single-overall_scorefallback.
Example — generic preset against a Postgres schema where columns happen to be named differently:
DQ_SCHEMA=generic
DQ_COL_RUN_AT=checked_at
DQ_COL_DATASET=schema_name
DQ_COL_TABLE_NAME=tbl
DQ_COL_FAILURE_COUNT=fail_n
DQ_COL_CHECK_NAME=none # synthesize from check_type+tbl
DQ_COL_SCOPE=none # no per-team rollup
DQ_COL_TIER=none # use DQ_TIER1_TARGET_PCT insteadSLA config (optional) — DBT_SLA_CONFIG_PATH
Set DBT_SLA_CONFIG_PATH to a YAML file to surface project-defined tier targets and DBT SLAs to the quality tools. Schema (extra keys ignored):
dbt_sla:
test_pass_pct: 99.0 # consumed by dbt-sla-status (test pass rate threshold)
freshness_pass_pct: 99.5 # consumed by dbt-sla-status (source freshness pass rate threshold)
tier_sla:
1: 99.5 # tier-1 overall_score / per-source pass-rate target
2: 99.0
3: 95.0When set, the tier_sla map drives:
dq-tier-status— per-tier rollup compares each row'soverall_scoreagainst the matching target. Without this file, hardcoded{1: 99.5, 2: 99.0, 3: 95.0}is used.dq-tier-by-source— per-source pass-rate is compared to the target for that source's tier (resolved from dbt sources.ymlmeta.tier).dq-tier-statusno-tier-column path (us-all preset /DQ_COL_TIER=none) — usestier_sla.1as the single target.DQ_TIER1_TARGET_PCTenv still works as a fallback when no SLA file is set.
The dbt_sla block drives:
dbt-sla-status— computes test pass rate from latestrun_results.jsonand freshness pass rate fromsources.json, then compares each axis againstdbt_sla.test_pass_pct/dbt_sla.freshness_pass_pct. ReturnspassPct,target,meetingper axis plus caveats when fields or artifacts are missing.
The file is mtime-cached; edits between tool calls are picked up automatically.
Per-tier rollup from quality_checks — dq-tier-by-source
For schemas where quality_score_daily has only one row per day (no per-scope/tier breakdown), dq-tier-by-source reconstructs a per-tier picture from the raw quality_checks rows. Two modes:
mode: "source" (default) — group by source/dataset column
Use when each row of quality_checks represents a check on a source group and the dataset/source column carries the dbt source-group name directly.
Builds a
source_name -> tiermap from the dbt manifest'ssources.<source>.<table>.meta.tier(first table's tier per source group).Groups
quality_checksrows by the dataset/source column and computes pass rate per source over a date orsinceHourswindow.Looks up each source's tier and target (from SLA config or defaults), reports meeting / missing per tier.
mode: "table" — group by table_name column
Use when the dataset/source column is a category (bq / dbt / airflow) and the actual dbt source-table identifier lives in the table_name / target_name column as <source_group>.<table>. Common in checks tables that consolidate signals from heterogeneous backends.
Builds a
<source_group>.<table> -> tiermap from the manifest using each source entry'ssource_name + name + meta.tier— picks up table-level tier overrides naturally.Groups
quality_checksrows by thetable_namecolumn. Pre-filter viasourceFilter(e.g.sourceFilter: "bq") when only some categories produce parseable target names.Each rollup key is parsed as
<source_group>.<table>; rows without a.or whose key is not in the manifest land incaveats[].
Untiered rows (no manifest meta.tier) and unparseable rows always appear in caveats[] so you can tier them or accept the gap.
Tested-against schemas
dbt manifest schema v11 / v12 — the current top version. dbt 1.7 emits v11; dbt 1.8 through 1.12 all emit v12 (the schema evolves additively in-place). Newer/unknown versions still parse, but a
caveatsline will flag them.
Companion server
For Airflow DAG operations (list, runs, task instances, log tail, trigger, clear), install @us-all/airflow-mcp alongside this server.
Build
pnpm install
pnpm run build # tsc → dist/
pnpm test # vitest
pnpm run smoke # spawns dist/index.js, calls initialize + tools/list (set env first)License
MIT — see LICENSE.
Available Tools
27 toolsdbt-coverageA
Per-column test coverage for a dbt model (which columns have tests, table-level tests, coverage %)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Model name (resolved if uniqueId not provided) | |
| uniqueId | No | dbt unique_id | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention that the tool is read-only, any required permissions, potential side effects, or rate limits. For a tool with no annotations, more transparency is needed.
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 a single sentence, front-loaded with the core purpose, and contains no unnecessary words. Every part contributes to understanding the tool's function.
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 that there are no annotations and no output schema, the description is adequate but could be more complete. It explains what the tool returns (coverage per column, table-level tests, coverage %) but does not specify the format or structure of the response. For a simple tool, this is sufficient but not exemplary.
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 baseline is 3. The description does not add additional meaning beyond what the schema already provides for the three parameters. The parameter descriptions in the schema are already clear, so the description adds no extra 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 verb (get coverage), resource (dbt model), and the specific output (per-column tests, table-level tests, coverage %). It distinguishes from sibling tools like dbt-list-tests or dbt-get-test by focusing on coverage metrics.
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 implies usage for checking test coverage but does not explicitly state when to use this tool versus alternatives like dbt-list-tests or dbt-get-test. No guidance on when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-failed-testsB
Find tests that failed across the last N runs, grouped and ordered by chronic failure count
| Name | Required | Description | Default |
|---|---|---|---|
| recentRuns | No | Look at last N runs | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions grouping and ordering but does not clarify what 'chronic failure count' means, whether the operation is read-only, or any side effects. The behavior beyond the basic purpose is opaque.
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?
Single sentence, 12 words, highly concise. However, the brevity sacrifices some informational depth that could aid usability. For a simple tool, this is acceptable but could be improved.
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 tool with no output schema, the description should hint at return format or structure. It does not mention what the output looks like (e.g., list of tests with counts). The chronic failure grouping and ordering are mentioned but not explained. Incomplete for an agent to fully understand usage.
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 coverage is 100%, so baseline 3 applies. The description adds no parameter-specific information; it does not reference recentRuns or extractFields. The schema itself provides adequate definitions, so the description adds no extra 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 it finds failed tests across N runs, grouped and ordered by chronic failure count. This distinguishes it from siblings like dbt-list-tests (lists all tests) and failed-tests-summary (likely summarizes, not grouped by chronicity).
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?
No guidance on when to use this tool versus alternatives like dbt-list-tests or dq-failed-checks-by-dataset. The description implies a specific use case (chronic failures) but does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-get-macroA
Get a dbt macro: signature, raw SQL, and reverse-lookup of nodes that call it
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Macro name (resolved if uniqueId not provided) | |
| uniqueId | No | dbt unique_id (e.g. 'macro.proj.my_macro') | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses the return types (signature, raw SQL, reverse-lookup) but does not mention read-only nature, authentication, rate limits, or any side effects. The description is adequate but not rich in 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 a single, front-loaded sentence that efficiently conveys the tool's purpose and output. Every word earns its place with no fluff.
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 complexity (3 parameters, no output schema, no annotations), the description covers the core functionality well. It could elaborate more on parameter usage, but the schema descriptions handle that. The reverse-lookup aspect is a nice extra detail.
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 coverage is 100%, so baseline is 3. The description does not add extra meaning beyond what the schema already provides. For instance, it doesn't clarify the relationship between 'name' and 'uniqueId' or how 'extractFields' reduces tokens.
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 verb 'Get' and resource 'dbt macro' and specifies the exact outputs: signature, raw SQL, and reverse-lookup of nodes that call it. This differentiates it from sibling tools like dbt-get-model or dbt-get-source which have different resources and outputs.
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 no guidance on when to use this tool versus alternatives. For example, it doesn't explain when to use 'name' vs 'uniqueId' parameters, or how this differs from dbt-list-macros which lists all macros. No when-not-to-use or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-get-modelA
Get a single dbt model: refs, sources, columns (with catalog types if available), attached tests, raw/compiled SQL
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Model name (resolved if uniqueId not provided) | |
| uniqueId | No | dbt unique_id (e.g. 'model.us_dbt.users_dim') | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. | |
| includeCompiledSql | No | Include compiled_code in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description mentions response contents but does not disclose additional behavioral traits such as read-only nature, authorization needs, or rate limits. No annotations provided, so description carries full burden but provides moderate transparency.
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?
Single sentence efficiently conveys purpose and response contents. Every word adds value; no redundancy.
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?
Four parameters well-described, but no output schema and no annotations. Description explains what the tool returns (refs, sources, etc.) but lacks details on error handling, prerequisites, or response format. Given complexity, it is mostly complete.
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 has 100% coverage with descriptions for all 4 parameters. The description does not add significant meaning beyond schema, but the overall context helps interpret parameter purpose. Baseline 3 is appropriate.
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?
Description clearly states verb 'Get', resource 'single dbt model', and enumerates included elements (refs, sources, columns, tests, SQL). This distinguishes it from sibling tools like dbt-list-models and dbt-get-source.
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?
No guidance on when to use this tool versus alternatives. Implicit from name and sibling tools that it is for fetching one model, but no explicit when-not-to-use or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-get-run-resultsB
Get per-node results from a specific dbt invocation (or the latest run if invocationId omitted)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | Filter results by status (pass | error | fail | skipped | runtime error | success) | |
| invocationId | No | invocation_id from a run; if omitted, the latest run_results.json in target/ is used | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as authorization needs, rate limits, or safety. The word 'Get' implies a read-only operation, but explicit safety disclosure is absent.
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 a single clear sentence with no wasted words, effectively front-loaded with the core purpose.
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?
The description is minimal and fails to cover parameter usage, output format, or edge cases. Given the lack of annotations and output schema, more contextual completeness is needed for correct tool invocation.
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 already describes 3 of 4 parameters (status, invocationId, extractFields) with 75% coverage. The description adds no additional meaning for any parameter. The `limit` parameter lacks a schema description and is not addressed in the tool description.
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 returns per-node results from a dbt invocation, distinguishing it from sibling tools that retrieve single objects or run lists. However, it does not explicitly name these alternatives, so it falls short of a 5.
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 implies usage context by noting that omitting invocationId retrieves the latest run, but it provides no explicit guidance on when to use this tool versus alternative sibling tools like dbt-list-runs or dbt-get-model.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-get-sourceA
Get a single dbt source: freshness criteria, columns, latest freshness result from sources.json
| Name | Required | Description | Default |
|---|---|---|---|
| uniqueId | No | dbt unique_id (e.g. 'source.proj.raw.users') | |
| tableName | No | Source table name (with sourceName) | |
| sourceName | No | Source group name (with tableName) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description indicates a read operation with no destructive side effects, detailing what is returned (freshness criteria, columns, latest freshness result). Full burden is met for a simple get.
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?
Single sentence that is front-loaded with purpose and contains no redundant information; every word earns its place.
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?
Description covers what the tool retrieves (freshness criteria, columns, latest freshness result). Lack of output schema is mitigated by describing return content. Minor gap: no mention of error conditions or empty results.
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 coverage is 100% with descriptions for all 4 parameters. Description adds overall context on tool output but does not enhance meaning beyond schema for individual 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?
Description clearly states 'Get a single dbt source' and specifies returned fields (freshness criteria, columns, latest freshness result), distinguishing it from sibling tools like dbt-list-sources.
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?
Description implies usage for retrieving details of a specific source, but does not explicitly state when to use it versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-get-testA
Get a single dbt test: definition, parameters, attached models, latest run result
| Name | Required | Description | Default |
|---|---|---|---|
| uniqueId | Yes | dbt unique_id of the test (e.g. 'test.proj.unique_users_id') | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies a read-only operation ('Get') but does not explicitly state idempotency, permissions, or side effects. It adds some behavioral context by listing what the response contains, but does not cover potential errors or cost 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?
A single sentence of 11 words concisely conveys the tool's purpose and output. Every word is informative and front-loaded, with no redundancy or extraneous details.
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 simplicity (2 params, no output schema), the description adequately covers what the tool returns (definition, parameters, models, run result). It is complete enough for a 'get single entity' tool, though it could mention error handling or typical response structure.
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 coverage is 100% and the input schema already provides detailed descriptions for both parameters (uniqueId with example, extractFields with usage). The description adds no additional parameter information beyond the schema, so baseline score of 3 applies.
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 retrieves a single dbt test, listing specific components returned (definition, parameters, attached models, latest run result). It uses a specific verb 'Get' and distinct resource 'single dbt test', differentiating it from sibling tools like dbt-list-tests (list) and dbt-failed-tests (subset).
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?
No explicit guidance on when to use this tool versus alternatives such as dbt-list-tests for listing or dbt-failed-tests for failures. The description implies use for detailed retrieval of a specific test but lacks when-not-to-use or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-graphB
Walk dbt parent_map / child_map to return upstream and downstream nodes (model/source/test) up to a given depth
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Model name (resolved if uniqueId not provided) | |
| uniqueId | No | dbt unique_id | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. | |
| upstreamDepth | No | ||
| downstreamDepth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description should disclose behavioral traits. It states it 'walks' and 'returns' but does not mention side effects (e.g., read-only), rate limits, or authorization needs. The description is insufficient for an agent to know if the tool modifies state.
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?
Single sentence that encapsulates core functionality efficiently. Front-loads the action and return value. No extraneous words, earning its place.
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?
Despite simplicity, the description lacks context on how results are structured (no output schema), dependencies on parent_map/child_map, and the role of extractFields parameter. Incomplete for a tool with multiple parameters and no output schema.
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?
Parameter descriptions in the input schema are detailed (e.g., extractFields has extensive documentation). The tool description adds little beyond noting depth limits, so it does not significantly enhance parameter understanding. Baseline 3 due to moderate 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?
Description clearly states action (walking), resource (dbt parent_map/child_map), and return (upstream/downstream nodes up to given depth). It effectively distinguishes from sibling tools like dbt-get-model or dbt-get-source which retrieve single entities.
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 implies usage for exploring node dependencies but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-exposuresA
List dbt exposures (downstream BI/ML/application consumers declared in YAML)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Substring match against exposure name | |
| exposureType | No | Filter by type (dashboard | application | ml | analysis | notebook) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description holds the burden for behavioral disclosure. It correctly identifies the tool as a read operation (list), but does not elaborate on pagination behavior, impact of the 'limit' parameter, or whether authentication is required. Minimal but acceptable for a simple list 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 a single, clear sentence with no extraneous words. It efficiently conveys the core purpose.
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?
The description covers the basic purpose but is lacking in completeness. It does not hint at the output structure (e.g., list of exposure objects with properties), nor does it explain how the 'search', 'exposureType', or 'extractFields' parameters work. Given no output schema, more context would be beneficial.
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 75% (3 of 4 parameters have descriptions in the input schema). The tool description adds no additional information about parameters beyond what the schema already provides. Baseline is 3 due to high 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 action ('List'), the resource ('dbt exposures'), and provides context that they are downstream consumers declared in YAML. This distinguishes it from sibling tools like dbt-list-models or dbt-list-sources.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., dbt-list-models, dbt-graph). There is no mention of prerequisites, typical use cases, or situations where it should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-macrosA
List dbt macros from manifest.json with package / name filters
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Substring match against macro name | |
| package | No | Filter by package name | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool reads from 'manifest.json' and applies filters, implying a read-only operation. However, it does not disclose auth requirements, whether it accesses local files or remote endpoints, or the treatment of the default limit parameter. The core behavior is adequately communicated but not thoroughly.
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 a single, short sentence that conveys the essential information without any superfluous words or tangential details. It is front-loaded and efficient.
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 low complexity (4 params, no output schema, no required params) and the presence of well-described siblings, the description covers the primary behavioral aspects: what it lists, the source, and available filters. It is nearly complete, though it could mention the default limit or how results are ordered. Still, it meets the needs for a simple list 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?
The description adds context (source from manifest.json, filter types) beyond the schema, which already provides descriptions for 3 of 4 parameters. The semantic value is moderate: it clarifies the purpose of search and package filters but omits any mention of the 'limit' parameter, whose schema lacks a description. Overall, it adds some meaning but not deeply.
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 action ('List'), the resource ('dbt macros'), the source ('manifest.json'), and available filters ('package / name'). This effectively distinguishes it from sibling tools like dbt-list-models, which list different resources.
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?
No guidance is provided on when to use this tool vs alternatives (e.g., dbt-get-macro for a single macro, or other list tools). The description does not include when or when not to use it, nor does it reference prerequisites or behavior under different conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-modelsA
List dbt models from manifest.json with filters (package, tag, materialized, schema, name search)
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag (a model is included if it has this tag) | |
| limit | No | Max rows to return | |
| schema | No | Filter by destination schema/dataset | |
| search | No | Substring match against model name (case-insensitive) | |
| package | No | Filter by dbt package name (e.g. project name) | |
| materialized | No | Filter by materialization (table | view | incremental | ...) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It correctly implies a read-only operation ('list') but does not disclose whether results are paginated, what permissions are required, or how the manifest.json is accessed. The description is adequate but not comprehensive.
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 a single efficient sentence with no superfluous words. It front-loads the verb and resource, and lists filters succinctly.
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 has 7 well-documented parameters but no output schema, the description misses explaining what the response contains (e.g., model metadata fields). It covers the filtering purpose but lacks completeness for an agent to fully understand the output structure.
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 coverage is 100% with detailed parameter descriptions. The description provides a high-level summary of filters but adds little meaning beyond the schema. Baseline 3 is appropriate.
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 the resource 'dbt models', and enumerates the filtering dimensions (package, tag, materialized, schema, name search), making it distinct from sibling tools like dbt-list-tests or dbt-list-sources.
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?
No guidance is provided on when to use this tool versus alternatives such as dbt-get-model for a single model or dbt-list-exposures. There is no mention of prerequisites, optimal scenarios, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-runsC
List recent dbt invocations from run_results.json files in target/ and DBT_RUN_HISTORY_DIR
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions reading from run_results.json but does not disclose whether it is read-only, whether multiple directories are scanned, error handling, or any safety concerns. Minimal behavioral disclosure.
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?
Very concise—one sentence that directly states the tool's function. No unnecessary words or redundancy.
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 no output schema, the description should hint at what information is returned (e.g., list of run objects with timestamps, status). It does not. It also lacks information about input requirements or behavior. Incomplete for a list 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 50% (extractFields has a description, limit has default/min/max but no description). The tool description adds nothing about parameters; it relies on the schema. No additional semantics beyond the schema's hints.
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 lists recent dbt invocations from specific files (run_results.json). It uses a specific verb 'List' and identifies the resource. However, it does not explicitly differentiate from sibling tools like dbt-get-run-results, but the purpose is still clear.
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?
There is no guidance on when to use this tool versus alternatives. No mention of prerequisites, context, or exclusions. The description simply states what it does without usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-sourcesC
List dbt sources from manifest.json with optional source-group / name filters
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Substring match against source table name | |
| sourceName | No | Filter by source group name | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries full burden for behavioral disclosure. It only states it lists sources from manifest.json but does not disclose whether the manifest is locally available, if authentication is needed, or any side effects (e.g., read-only). The description fails to communicate traits beyond the basic action, making it minimal.
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 a single concise sentence that front-loads the action and resource. Every word is informative with no redundancy. It fully meets the requirement of being appropriately sized and efficient.
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 complexity (4 parameters, no output schema, many sibling list tools), the description is too brief. It does not explain the return format or contents, nor does it clarify when to prefer this over dbt-get-source or other list tools. The omission of output and comparative guidance makes it incomplete for effective tool selection.
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 high (75%), so the baseline is 3. The description adds 'optional source-group / name filters' which roughly maps to sourceName and search parameters, but provides no new details beyond the schema. It does not elaborate on limit or extractFields. The added semantic value is marginal, keeping the score at baseline.
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 states the specific action (List) and resource (dbt sources from manifest.json), which clearly differentiates it from siblings like dbt-list-models or dbt-list-tests. The mention of 'optional source-group / name filters' indicates filtering but could be slightly ambiguous—'source-group' maps to sourceName parameter and 'name' to search. Overall, purpose is clear with a specific verb and resource.
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?
No guidance is provided on when to use this tool versus alternatives like dbt-get-source for a single source, or other list tools. There are no explicit context or exclusion statements. The description is purely declarative, leaving the agent to infer usage without comparative information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-list-testsC
List dbt tests (generic or singular) optionally filtered to a specific model
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Substring match against test name | |
| testKind | No | all | |
| attachedTo | No | Filter to tests attached to a specific model unique_id or name | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the action ('list') without disclosing side effects, pagination, rate limits, or any behavioral traits. The limit parameter suggests pagination but is not explained.
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 a single clear sentence without redundant information. It is concise and front-loaded. However, it could be slightly more structured (e.g., listing parameters or use cases) without adding length.
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 5 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return value structure, pagination behavior, or how to effectively use the 'extractFields' parameter. Sibling tools are not differentiated, leaving the agent confused about when to use this 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?
The description does not add meaning beyond the input schema. With 60% schema description coverage, the description should compensate for missing parameter explanations, but it does not elaborate on any parameter. The 'extractFields' parameter, which is crucial for token reduction, is not mentioned.
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', the resource 'dbt tests', and specifies that it can be filtered by test kind (generic, singular) and optionally to a specific model, distinguishing it from sibling tools like dbt-list-models or dbt-get-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?
No guidance is provided on when to use this tool versus alternatives like dbt-get-test for single test details or dbt-list-models for models. The description does not mention prerequisites, limitations, or which tool to prefer under different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-sla-statusB
Compare latest dbt run test pass rate and source freshness pass rate against DBT_SLA_CONFIG_PATH thresholds (dbt_sla.test_pass_pct / freshness_pass_pct). Returns per-axis passPct/target/meeting plus caveats when SLA fields or artifacts are missing.
| Name | Required | Description | Default |
|---|---|---|---|
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses return of per-axis values and caveats for missing fields/artifacts, which is useful. However, it does not mention whether the tool is read-only or requires specific permissions, lacking full behavioral transparency.
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?
Single sentence that conveys purpose, inputs, outputs, and edge cases. Efficient and well-structured.
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 simple tool with one parameter and no output schema, the description provides sufficient context: it explains the comparison, thresholds, and return fields. Minor gap: does not describe the 'caveats' in detail.
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?
Only one parameter (extractFields) with 100% schema description coverage. The description adds no extra semantics beyond the schema, so baseline 3 is appropriate.
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 it compares two pass rates against thresholds from DBT_SLA_CONFIG_PATH and lists specific return fields. It distinguishes from siblings like dbt-coverage and freshness-status by its specific focus on SLA thresholds, but does not explicitly state the use case (e.g., 'check if SLAs are met').
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?
No guidance on when to use this tool versus siblings like dbt-coverage or freshness-status. The description does not provide context about when to prefer this tool or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbt-slow-modelsB
Top N slowest models in a dbt run by execution_time, with bytes_processed when available
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | ||
| invocationId | No | Use a specific run; default is latest | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral information. It states the tool reads from a dbt run and returns a list, but does not disclose if it is read-only, permissions needed, or any rate limits. Critical behavioral traits are missing.
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 a single sentence that is concise and front-loaded, containing only essential information without extraneous details.
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 simplicity and lack of output schema or annotations, the description is adequate but incomplete. It does not mention how to use invocationId or extractFields, nor explain response format. Additional context would improve completeness.
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 input schema covers two of three parameters (invocationId, extractFields) with descriptions. The topN parameter is inferred from the tool's purpose but lacks explicit schema description. The tool description adds minimal value beyond the schema, so a baseline 3 is appropriate.
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 communicates that the tool returns the top N slowest models from a dbt run, sorted by execution_time. However, it lacks an explicit verb like 'list' or 'get', and while it distinguishes from sibling tools by focusing on slow models, it could be more precise.
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?
No guidance is provided on when to use this tool versus alternatives such as dbt-list-models or dbt-get-model. The description does not mention appropriate contexts or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-failed-checks-by-datasetB
Group failing checks by dataset across a recent window with the latest 5 failures per dataset
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | ||
| sinceHours | No | ||
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it groups by dataset, limits to 5 failures per dataset, and uses a recent window (via sinceHours). However, it does not explicitly state that it is read-only or describe potential side effects, leaving some behavioral questions unanswered.
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?
Single sentence that is concise, front-loaded with the action, and contains no unnecessary words. Every part adds value.
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 tool with 3 parameters, no output schema, and no annotations, the description is minimally complete. It explains the grouping and time window but lacks details on output format, error handling, or how to choose among many similar sibling tools.
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 only 33% (extractFields described). Description adds no detail about topN or sinceHours parameters beyond what schema provides. It mentions 'recent window' and 'latest 5 failures per dataset' but these are output behaviors, not parameter semantics.
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?
Description clearly states it groups failing checks by dataset, uses a recent window, and shows latest 5 failures per dataset. This distinguishes it from sibling tools like dq-list-checks (listing without grouping) and dq-get-check-history (history per check).
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?
No explicit guidance on when to use this tool versus alternatives. The description implies its purpose but does not specify when not to use it or mention related tools for similar tasks among many dq- siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-get-check-historyC
Time-series of one check_name's status across the last N days
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| checkName | Yes | Generic schema: exact check_name. us-all schema: 'check_type:target_name' (concat) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so description must convey behavioral traits. It mentions time-series and days but lacks details on pagination (limit parameter), data freshness, or any side effects. The description does not compensate for missing annotations.
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 a single sentence, concise but overly brief. It misses important details that could be included without excessive length.
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 four parameters and no output schema, the description is insufficient. It does not explain the return format, how days and limit interact, or how extractFields works.
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 50% schema coverage, the description adds no extra meaning to parameters. The schema provides a detailed description for checkName, but days, limit, and extractFields are not elaborated in the description.
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 it provides a time-series of one check's status over days, distinguishing from siblings like dq-failed-checks-by-dataset or dq-score-trend. However, it does not explicitly define 'status' and relies on the tool name for the verb 'get'.
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?
No guidance on when to use this tool vs alternatives such as dq-list-checks or dq-score-snapshot. The description does not provide any context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-list-checksA
List recent rows from DQ_RESULTS_TABLE filtered by dataset / status / type / time window
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by check type (dbt_test | freshness | anomaly | reconciliation | ...) | |
| limit | No | ||
| status | No | Filter by status | |
| dataset | No | Filter by dataset / source | |
| sinceHours | No | ||
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions 'recent rows' but doesn't clarify default time window or explain that it's a read-only operation. Lacks details on authorization or performance.
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?
Single sentence, focused, no unnecessary words. Could include more detail but remains efficient.
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?
With 6 parameters, no output schema, and no annotations, the description is minimal. It does not explain return format, pagination, or the meaning of 'recent' beyond the sinceHours parameter.
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 coverage is 67% (4/6 parameters described). Description adds context that filters apply to DQ_RESULTS_TABLE, but does not significantly expand on parameters like limit or sinceHours beyond defaults.
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?
Description clearly states it lists recent rows from DQ_RESULTS_TABLE with filters by dataset, status, type, and time window. It distinguishes from siblings like dq-failed-checks-by-dataset and dq-get-check-history.
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?
Implies usage for listing recent checks with filters, but no explicit when-to-use or when-not-to-use compared to siblings like dq-failed-checks-by-dataset or dq-get-check-history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-score-snapshotA
Aggregated 4-axis score trend + today's Tier compliance + most recent failing checks. Combines dq-score-trend + dq-tier-status + dq-list-checks(fail).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. | |
| includeFailing | No | Also include the most recent failing checks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses it combines outputs from three sub-tools but doesn't state whether it makes independent API calls, or any side effects. It is read-only by implication. Reasonable transparency, but could explicitly state it is non-destructive.
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?
Description is one sentence clearly conveying the composite nature. Very concise. Could benefit from a second sentence explaining typical use case, but front-loads key info effectively.
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 no output schema and composite nature, the description sufficiently explains what the tool returns (aggregation of three sub-results). It misses mention of how the aggregation is structured (e.g., merged JSON), but the intended behavior is clear for an AI agent.
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 has 3 parameters (days, extractFields, includeFailing) with 67% description coverage. The description does not add new meaning beyond the schema. Per rules, baseline 3 is appropriate since schema already explains parameters adequately.
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 explicitly states the tool aggregates three specific sub-tools' outputs (score trend, tier compliance, failing checks). It clearly differentiates from siblings like dq-score-trend (single axis) or dq-tier-status (single component) by naming the combined result.
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 explains what the tool does but provides no guidance on when to use it vs. calling the individual sub-tools (dq-score-trend, dq-tier-status, dq-list-checks) or alternatives. It implies it is a convenience composite but doesn't specify scenarios where the composite is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-score-trendB
Time-series of the 4-axis DQ score (completeness / freshness / validity / anomaly_free) plus overall_score from DQ_SCORE_TABLE
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| scope | No | Scope filter (only honored when DQ_SCHEMA=generic) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It does not mention ordering, aggregation period, pagination, or any side effects. For a time-series tool, critical behaviors like default time range and data granularity are missing.
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 a single concise sentence that is front-loaded with the key concept (time-series of scores). It is efficient but lacks additional context that could be added without becoming verbose.
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 has 3 parameters and no output schema, the description is insufficient. It does not explain default behavior (e.g., how far back the time-series goes), what the response looks like, or how parameters like 'scope' and 'extractFields' affect the output. Users are left guessing essential details.
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 coverage is 67% (2 of 3 parameters have descriptions). The description does not add meaning beyond schema: the tool description mentions the source table but not parameter usage. The missing 'days' parameter description is not compensated by the tool description.
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 returns a time-series of specific DQ scores (completeness, freshness, validity, anomaly_free, and overall_score) from a named source table. It distinguishes from siblings like dq-score-snapshot (snapshot vs. time-series) and dq-failed-checks-by-dataset (different focus).
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?
No guidance on when to use this tool versus alternatives like dq-score-snapshot or dq-failed-checks-by-dataset. The description does not provide context for appropriate usage or scenarios where other tools might be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-tier-by-sourceA
Per-tier rollup computed from quality_checks grouped by source. Reads source-to-tier mapping from dbt sources.yml meta.tier and tier targets from DBT_SLA_CONFIG_PATH (falls back to defaults). Reports per-source pass rate, meeting/missing per tier, and untiered sources as caveats.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO date (YYYY-MM-DD) for the rollup, default = today | |
| mode | No | How to roll up. 'source' (default) groups by the dataset/source column and looks up tier from each source group's first table-level meta.tier. 'table' groups by table_name (assumed format '<source_group>.<table>'), parses the prefix, and looks up the table-level meta.tier — useful when meta.tier varies per table inside a source group. | source |
| sinceHours | No | Alternative window: rollup over the last N hours instead of a single date | |
| sourceFilter | No | Optional pre-filter on the dataset/source column. Useful in mode='table' when only some source rows have target_name in '<source_group>.<table>' format (e.g. sourceFilter='bq' to keep only the BigQuery-shaped rows). | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fully carries burden. It discloses data sources, fallback defaults, rollup logic, and caveats like untiered sources. Lacks authorization or rate limit info, but acceptable for read-only rollup.
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?
Three concise sentences, front-loaded with purpose, no redundancies. Each sentence adds value.
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?
Explains core logic and parameter implications well, but with no output schema, it omits return format, which could aid agent understanding. Adequate but leaves a gap.
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 coverage is 100%, so baseline is 3. Description adds high-level context (e.g., mode distinction) but does not extend parameter meaning beyond schema definitions.
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 computes per-tier rollups from quality_checks grouped by source, with specific verb and resource. It distinguishes from siblings like dq-tier-status by detailing the source-to-tier mapping.
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 explains when to use source vs table mode, but does not explicitly exclude cases or reference alternatives. It provides context but lacks direct when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dq-tier-statusA
Compare today's overall_score per scope against Tier SLA targets (defaults Tier 1 99.5 / 2 99.0 / 3 95.0; override via DBT_SLA_CONFIG_PATH yaml or DQ_TIER1_TARGET_PCT) and report meeting vs missing counts
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO date (YYYY-MM-DD) to check, default = today | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. | |
| fallbackMaxDays | No | us-all schema only: when the cutoff date has no row, walk back to the most recent prior row only if it is within this many days. Beyond the limit, score/meeting are returned null with a stale note instead of silently passing SLA with stale data. Default 2. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description explains the main behavior (comparison, default targets, override options, fallback for missing rows). It does not mention read-only nature or side effects, but these are implied.
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?
Single sentence that is front-loaded and concise, containing all key information without wasted words.
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?
Adequate for a simple tool with 3 parameters and no output schema, but lacks details about return format or structure. Could be improved by briefly describing the output.
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 coverage is 100%, baseline 3. Description adds meaningful context beyond field descriptions, such as explaining the fallback logic for fallbackMaxDays and default behavior for date.
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?
Clearly states the verb (compare/report) and resource (today's overall_score per scope against Tier SLA targets). Distinguishes from siblings like dbt-sla-status by focusing on tier-specific SLA compliance.
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?
Provides clear context for when to use: comparing scores against tier SLA targets with defaults and override methods. Does not explicitly exclude alternatives or specify when-not-to-use, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
failed-tests-summaryA
Aggregated 24h-ish view: dbt failed tests + DQ checks failures grouped by dataset + most recent failing rows. Replaces 3+ tool calls (dbt-failed-tests + dq-failed-checks-by-dataset + dq-list-checks).
| Name | Required | Description | Default |
|---|---|---|---|
| recentRuns | No | Look at last N dbt runs | |
| sinceHours | No | Recent window for DQ checks | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the aggregated nature, the 24h-ish time window, and that it includes the most recent failing rows. However, it does not explicitly state side effects, auth requirements, or whether it is read-only. For a composite tool, a bit more detail on behavior would be beneficial, but what is provided is adequate.
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 two sentences: the first introduces the aggregated view and grouping, and the second explains that it replaces multiple tool calls. Every word earns its place; no fluff. Front-loaded with key 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?
Given the tool's complexity (composite with 3 parameters, no output schema), the description provides a good overview: aggregation, grouping by dataset, time window, and replacement of multiple calls. It could have included a bit more detail on the exact structure of the response, but for a 3-param tool it is largely complete.
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 coverage is 100%, with each parameter having a clear description. The tool description does not add additional meaning beyond what the schema already provides; it only mentions defaults implicitly. Therefore, baseline 3 is appropriate.
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 what the tool does: it aggregates dbt failed tests and DQ check failures grouped by dataset with the most recent failing rows. It explicitly distinguishes itself from siblings by noting it replaces three separate tool calls (dbt-failed-tests, dq-failed-checks-by-dataset, dq-list-checks), making its composite nature clear.
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 explicitly states that this tool replaces 3+ separate tool calls, giving strong guidance on when to use it (when a consolidated view is needed). It does not provide explicit exclusions or when-not conditions, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
freshness-statusB
Cross-reference dbt source freshness criteria with sources.json results in a single 'is anything stale right now?' answer.
| Name | Required | Description | Default |
|---|---|---|---|
| failingOnly | No | Only return sources where freshness is warn/error | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions 'cross-reference' but doesn't disclose what data is accessed, potential side effects, or staleness criteria. For a read-only query tool, more detail on behavior is needed.
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?
Single sentence is concise and front-loaded with the primary action. However, it lacks structure like separate usage or behavior sections, but remains efficient.
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 simple query tool with two optional params and no output schema, the description covers core purpose. However, it lacks details on staleness criteria, prerequisites, or return format, leaving some gaps.
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 coverage is 100% with descriptions for both parameters. The description adds meaningful context beyond schema: 'failingOnly' limits to warn/error, and 'extractFields' explains the project pattern including wildcard and backtick usage.
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 it answers 'is anything stale right now?' by cross-referencing dbt source freshness, but it doesn't differentiate from sibling tools like dbt-sla-status or dbt-list-sources.
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?
No explicit guidance on when to use this tool versus alternatives (e.g., dbt-sla-status, dbt-list-sources). The implication is for staleness checks, but no when-not-to or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
incident-contextA
Single asset deep-dive: dbt definition + recent test failures + DQ checks for the dataset. Designed to anchor an LLM-driven incident triage.
| Name | Required | Description | Default |
|---|---|---|---|
| modelName | No | dbt model name to anchor on (provide modelName OR sourceFqn) | |
| sourceFqn | No | 'source_name.table_name' to anchor on a source instead of a model | |
| sinceHours | No | ||
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions it returns dbt definition, test failures, and DQ checks, but does not disclose behavioral traits like read-only status, error handling (e.g., if both modelName and sourceFqn are provided), or any side effects. It provides moderate transparency but lacks detail.
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 two sentences: the first defines the content, the second states the purpose. No extraneous words, every sentence earns its place. It is well-structured and front-loaded with key 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?
Given the tool has 4 parameters, no output schema, and no annotations, the description is somewhat incomplete. It covers the purpose and output scope but lacks details on return format, error handling, or what happens when the asset is not found. For a complex tool combining multiple data sources, more contextual information would be beneficial.
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 75% (three out of four parameters have descriptions). The description adds context by stating 'single asset deep-dive' implying modelName or sourceFqn anchors the query, but it does not explain sinceHours or extractFields. The schema already covers the purpose of the parameters, so the description adds minimal value beyond 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 tool's function as a single asset deep-dive combining dbt definition, recent test failures, and DQ checks. It is designed for LLM-driven incident triage, which differentiates it from sibling tools that focus on individual aspects like dbt-get-model or dq-failed-checks-by-dataset.
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 explicitly states the tool is designed for incident triage, giving context for when to use it. However, it lacks explicit guidance on when not to use it or how to choose between similar tools (e.g., dbt-get-model vs this). The phrase 'anchor an LLM-driven incident triage' implies a comprehensive investigation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-toolsA
Discover available dbt MCP tools by natural language query across dbt / quality / meta categories.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| query | Yes | Natural language query. Discover available dbt MCP tools across dbt artifact / DQ result table / meta categories — call this first to find the right tool. | |
| category | No | Restrict search to a specific category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It describes the tool's purpose (search/discovery) but does not explicitly state that it is a read-only operation or any other behavioral traits (e.g., no side effects, no data modification). The description adds minimal context beyond the immediate function.
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 a single, focused sentence that front-loads the purpose. Every word is necessary and there is no extraneous information. It is optimally concise.
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 simplicity (search/discovery) and the absence of an output schema, the description is adequate. It explains what the tool does and when to use it. However, it could be slightly more complete by hinting at the output format (e.g., a list of tool names) to fully inform the agent, but overall it suffices.
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 baseline is 3. The description does not add extra meaning beyond the parameter names and hints in the schema. It mentions 'natural language query' and 'categories' but these are already reflected in the 'query' and 'category' parameter descriptions. No new semantic 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 'Discover available dbt MCP tools by natural language query across dbt / quality / meta categories' clearly states the verb (discover), resource (tools), and scope (cross-category). It distinguishes the tool from its siblings, which are specific operational tools like dbt-coverage or dq-failed-checks.
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 includes explicit guidance: 'call this first to find the right tool.' This tells the agent when to use it (before other tools) but does not specify when not to use it or name direct alternatives. The instruction is clear but lacks exclusionary context.
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.
27 tool updates
v1.0.3- Added
dbt-coverage - Added
dbt-failed-tests - Added
dbt-get-macro - Added
dbt-get-model - Added
dbt-get-run-results - Added
dbt-get-source - Added
dbt-get-test - Added
dbt-graph - Added
dbt-list-exposures - Added
dbt-list-macros - Added
dbt-list-models - Added
dbt-list-runs - Added
dbt-list-sources - Added
dbt-list-tests - Added
dbt-sla-status - Added
dbt-slow-models - Added
dq-failed-checks-by-dataset - Added
dq-get-check-history - Added
dq-list-checks - Added
dq-score-snapshot - Added
dq-score-trend - Added
dq-tier-by-source - Added
dq-tier-status - Added
failed-tests-summary - Added
freshness-status - Added
incident-context - Added
search-tools
27 tool updates
v1.0.2- Removed
dbt-coverage - Removed
dbt-failed-tests - Removed
dbt-get-macro - Removed
dbt-get-model - Removed
dbt-get-run-results - Removed
dbt-get-source - Removed
dbt-get-test - Removed
dbt-graph - Removed
dbt-list-exposures - Removed
dbt-list-macros - Removed
dbt-list-models - Removed
dbt-list-runs - Removed
dbt-list-sources - Removed
dbt-list-tests - Removed
dbt-sla-status - Removed
dbt-slow-models - Removed
dq-failed-checks-by-dataset - Removed
dq-get-check-history - Removed
dq-list-checks - Removed
dq-score-snapshot - Removed
dq-score-trend - Removed
dq-tier-by-source - Removed
dq-tier-status - Removed
failed-tests-summary - Removed
freshness-status - Removed
incident-context - Removed
search-tools
26 tool updates
v1.0.0- Changed
dbt-coverage1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-failed-tests1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-get-macro1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-get-model1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-get-run-results1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-get-source1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-get-test1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-graph1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-exposures1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-macros1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-models1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-runs1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-sources1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-list-tests1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-sla-status1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dbt-slow-models1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-failed-checks-by-dataset1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-get-check-history1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-list-checks1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-score-snapshot1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-score-trend1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-tier-by-source1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
dq-tier-status1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
failed-tests-summary1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
freshness-status1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
- Changed
incident-context1 field changed- added
Input schema / properties / extractFieldsAdded value: +{ + "description": "Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities.", + "type": "string" +}
2 tool updates
v0.4.2- Added
dbt-sla-status - Changed
dq-tier-status1 field changed- added
Input schema / properties / fallbackMaxDaysAdded value: +{ + "default": 2, + "description": "us-all schema only: when the cutoff date has no row, walk back to the most recent prior row only if it is within this many days. Beyond the limit, score/meeting are returned null with a stale note instead of silently passing SLA with stale data. Default 2.", + "maximum": 30, + "minimum": 0, + "type": "integer" +}
1 tool update
v0.3.1- Added
dq-tier-by-source
3 tool updates
v0.1.1- Changed
dq-get-check-history1 field changed- changed
Input schema / properties / checkName / descriptionPrevious value: -"Exact check_name as stored in the results table"New value: +"Generic schema: exact check_name. us-all schema: 'check_type:target_name' (concat)"
- Changed
dq-list-checks1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Filter by dataset / schema"New value: +"Filter by dataset / source"
- Changed
dq-score-trend1 field changed- changed
Input schema / properties / scope / descriptionPrevious value: -"Scope filter (domain or dataset, when score table supports it)"New value: +"Scope filter (only honored when DQ_SCHEMA=generic)"
25 tool updates
v0.1.0- First observed
dbt-coverage - First observed
dbt-failed-tests - First observed
dbt-get-macro - First observed
dbt-get-model - First observed
dbt-get-run-results - First observed
dbt-get-source - First observed
dbt-get-test - First observed
dbt-graph - First observed
dbt-list-exposures - First observed
dbt-list-macros - First observed
dbt-list-models - First observed
dbt-list-runs - First observed
dbt-list-sources - First observed
dbt-list-tests - First observed
dbt-slow-models - First observed
dq-failed-checks-by-dataset - First observed
dq-get-check-history - First observed
dq-list-checks - First observed
dq-score-snapshot - First observed
dq-score-trend - First observed
dq-tier-status - First observed
failed-tests-summary - First observed
freshness-status - First observed
incident-context - First observed
search-tools
TDQS
Most tools have distinct purposes, but composite tools like `failed-tests-summary` overlap with `dbt-failed-tests` and `dq-failed-checks-by-dataset`, and `incident-context` aggregates multiple individual tools, potentially causing confusion about which to use.
Tools follow a consistent prefix pattern (`dbt-` and `dq-`) but there are deviations like `dbt-graph` instead of `dbt-get-graph`, and four tools without any prefix (`failed-tests-summary`, `freshness-status`, `incident-context`, `search-tools`), mixing naming conventions.
With 27 tools covering dbt core operations, data quality, and incident triage, the count is slightly high but well-justified for the broad scope, avoiding the extremes of overwhelming or insufficient coverage.
The tool set covers essential dbt monitoring and data quality workflows (listing, details, failures, SLAs, scores), but lacks write operations and some administrative functions, though that seems intentional for a read-only analysis server.
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
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Related MCP Servers
- AlicenseBqualityAmaintenanceA MCP (Model Context Protocol) server for interacting with dbt.16602Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAI-driven MCP server that audits, profiles, detects schema drift, and auto-generates documentation for dbt projects, enabling natural language interaction with your dbt project's health.133MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that provides tools to interact with dbt, including dbt Core, Cloud CLI, Semantic Layer, and Discovery API.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server that provides comprehensive dbt project quality assessment for any GitHub repository, enabling AI agents to analyze dbt models, check metadata coverage, and map data lineage.9MIT
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/us-all/dbt-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server