Borrowing it
Nothing to install: this file belongs to dbt-labs/dbt-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/dbt-labs/dbt-mcp/main/CLAUDE.mdgit clone --depth 1 https://github.com/dbt-labs/dbt-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/dbt-labs/dbt-mcp/claude-md)<a href="https://agentmods.dev/instructions/dbt-labs/dbt-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/dbt-labs/dbt-mcp/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/dbt-labs/dbt-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/dbt-labs/dbt-mcp/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.01894 | $0.01894 |
| Opus 5.5 | $0.00758 | $0.00758 |
| Sonnet 5.5 | $0.00379 | $0.00379 |
| Haiku 4.5 | $0.00189 | $0.00189 |
Grade A, and why
dbt-mcp CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 83 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CLAUDE.md
Project Overview
dbt-mcp is an MCP (Model Context Protocol) server that exposes dbt functionality as tools to AI assistants. Built on FastMCP from the mcp SDK.
Key Paths
- Entry point:
src/dbt_mcp/main.py - Server:
src/dbt_mcp/mcp/server.py(DbtMCPclass,create_dbt_mcp()) - Tool infra:
src/dbt_mcp/tools/(definitions, registration, injection, toolsets, tool_names) - Tool categories:
discovery/,semantic_layer/,dbt_cli/,dbt_codegen/,dbt_admin/,lsp/,mcp_server_metadata/ - Prompts (tool descriptions):
src/dbt_mcp/prompts/ - Config:
src/dbt_mcp/config/ - Tests:
tests/unit/,tests/integration/
Tool Architecture
Tools follow a consistent pattern:
@dbt_mcp_tooldefines metadata and requires an explicit access declaration: target argument annotations, top-levelrequirements=(AccountTarget(requires=…),)or a host policy enum. Userequirements=(AccessPolicy.LOCAL,)for local execution andrequirements=()for public tools. Hosts implement enforcement; shared declarations contain semantic permissions and preserve host policies without interpreting them.ToolNameenum intools/tool_names.py— every tool needs an entry- Toolset mapping in
tools/toolsets.py— maps tools to categories - Context injection builds the framework callable; the declared input contract and host bindings determine the model schema
- Declare
Annotated[..., ProjectTarget(...)]andEnvironmentTarget(...)on the canonical tool arguments. Keep a requiredField(...)default for selectors; context adapters pass these arguments through, but bodies read resolved context/config and leave selectors unused. The model sees the declared non-nullable type or no parameter when bound. Adaptation preserves the canonical metadata.JobTarget/RunTargetdescribe ordinary IDs used by the body whose owning project/environment the host resolves. Resource-specific job/run tools require only their JobTarget/RunTarget permission; AccountTarget is reserved for genuinely account-wide operations. Listing visibility must not add an account-wide runtime requirement. Hosts check owners only for supplied IDs and leave requiredness to input validation. - Discovery and semantic-layer tools declare
ProjectTarget(requires=..., environment=EnvironmentRole.PRODUCTION). The host resolves production alongside the project before authorization; no environment-ID argument is needed. Job listing declares AccessPolicy.JOBS_LISTING; hosts authorize the configured project/environment scope or account fallback. Tool bodies consume the configuration supplied by their context mapper. adapt_with_mappers(context=build_context, project_id=resolved_project)injects parameters by name. Mapper inputs form the framework signature, shared inputs must agree, and each mapper runs once per invocation. Canonical input types/defaults define the model contract independently of mapper omission support. Target annotations remain on caller-visible inputs. All injection is explicit by parameter name; type-based and positional mapper APIs have been removed.- Context mappers explicitly declare the selectors and ordinary arguments they need. Hosts resolve and authorize those inputs, then build the final context. Framework context can supply request authorization while adapters choose the visible selector inputs. Ordinary mapper inputs also reach the body unchanged.
project_id=HIDEremoves a model input without supplying a value; dependent mappers must allow omission. Zero-argument value mappers hide and inject known values; compose them after context adaptation so context builders receive the selected values. FastMCP generates and validates the resulting callable with extra inputs forbidden. Discovery contexts construct fetchers with resolved config. - Discovery and semantic-layer tools have one canonical implementation and one registration entry point. Project-aware providers resolve either the configured environment or an explicit project. The local server uses one registry and projects schemas per credential selection: a unique project/configured environment hides the selector; multiple projects expose the tool's declared selector. Invocation rejects supplied bound selectors. Optional job filters use nullable
JobTargetarguments alongsideAccessPolicy.RUNS_LISTING; hosts check the owner when supplied and the account when omitted. Shared listing policies are implemented by hosts alongsideAccessPolicy.LOCAL.list_jobsaccepts an optional project filter that overrides the configured environment. Without an explicit filter, it uses the configured environment (including staging), then the configured project, then account-wide listing. Optional local selectors retain their defaults when hidden and permit omission in multi-project mode; required selectors remain required.
- Declare
register_tools()intools/register.py— precedence-based enablement (individual > toolset > default)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago Changed · +7 tokens per session b4edbc061946
- 6d ago Changed · +63 tokens per session 972bf37e3287
- 23d ago Changed · +69 tokens per session 03d90fae2a40
- 25d ago Changed · +5 lines · +592 tokens per session 163db2e975d8
- 28d ago Changed · +7 lines · +277 tokens per session 22d64a16fba6
- 2mo ago First seen · 71 lines · 886 tokens per session scan A 7c28bb09803e
dbt-mcp CLAUDE.md is an instructions file published in the GitHub repository dbt-labs/dbt-mcp (616 stars, last pushed yesterday), licensed Apache-2.0. It adds 1,894 tokens to every session, about $0.0076 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
dbt-mcp CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| dbt-mcp CLAUDE.mddbt-labs/dbt-mcp | Instructions file | 616 | yesterday | Apache-2.0 | A | 1,894 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |