dbt Cloud is where many data teams define the canonical metrics and models the rest of the business reports against. Connecting dbt Cloud to clariBI lets your AI analyses call the dbt Semantic Layer directly — so when someone asks for MRR or churn, you get the analyst-team-approved definition instead of a re-derived approximation.
Why connect dbt Cloud
Most "what does this number mean?" disputes between teams happen because two systems calculated the same metric two different ways. dbt's Semantic Layer fixes this by making one definition the source of truth.
With dbt Cloud connected, you can ask "What is monthly active users by signup channel last quarter?" or "Show me our cumulative new ARR for FY26 by region", and the AI engine routes through the dbt Semantic Layer — so the number matches what your data team publishes. clariBI also reads model lineage + freshness, so questions like "is this dashboard up to date?" or "what changed upstream?" get accurate answers. The integration is read-only at the catalog level: write CLI tools (build, run, test, trigger_job_run, retry_job_run) are filtered out so clariBI cannot mutate dbt resources.
How the connection works
clariBI talks to dbt Cloud through its hosted MCP server at https://cloud.getdbt.com/api/ai/v1/mcp/. Authentication uses an OAuth flow that clariBI registers itself for (no developer console setup on your side). Tokens stay encrypted server-side and never leave clariBI in clear form.
sequenceDiagram
actor U as You
participant C as clariBI
participant V as dbt Cloud
U->>C: Click Authorize with dbt Cloud
C->>V: Open OAuth authorization
V-->>U: Grant read access?
U->>V: Approve
V-->>C: Authorization code
C->>V: Exchange code for tokens
V-->>C: Access + refresh tokens
C->>C: Encrypt and store credentials
C-->>U: Connection ready
Available tools
The AI engine selects from these read-only dbt Cloud tools during analyses. None of them modify data in dbt Cloud.
| Tool | Returns | Example question |
|---|---|---|
list_metrics | Every metric defined in the dbt Semantic Layer with name, label, and description. | What metrics has our data team defined in dbt? |
list_saved_queries | Saved metric queries — pre-built analyses curated by the data team. | List the saved queries our analysts published. |
get_dimensions | Dimensions available for specified metrics (channel, region, tier, etc.). | What dimensions can I slice MRR by? |
get_entities | Entities (customer, order, etc.) available for specified metrics. | Which entities are joinable on the bookings metric? |
get_metrics_compiled_sql | Compiled SQL for a metric (without executing it). | Show me the compiled SQL for monthly active users. |
query_metrics | Executes a metric query against the dbt Semantic Layer with filters + grouping. | Get monthly active users by signup channel for the last 12 months. |
get_all_models | Every dbt model in the project with name + description. | List all dbt models in our project. |
get_mart_models | Mart-layer models (the analyst-facing layer). | Which mart models are available? |
get_model_details | Single model detail: compiled SQL, columns, schema, description. | Show me the details for the fct_orders model. |
get_model_health | Health signals for a model: latest run status, test results, upstream freshness. | Is the fct_revenue model healthy? |
get_model_parents | Upstream dependencies of a model. | What does fct_orders depend on? |
get_model_children | Downstream dependents of a model. | What breaks if I change dim_customers? |
get_model_performance | Execution history for a model with run times + test results. | How long does the fct_orders run usually take? |
get_lineage | Full lineage graph (ancestors + descendants) for a node. | Show the lineage from raw_stripe.invoices. |
get_related_models | Semantically similar models to a given one. | Find models similar to fct_subscriptions. |
get_all_sources | All source tables with freshness status. | Are any of our sources stale right now? |
get_source_details | Single source detail including columns + freshness. | Show me details for the source raw_hubspot.contacts. |
get_seed_details | Detail for a specific seed. | Show me the country_codes seed. |
get_snapshot_details | Detail for a specific snapshot. | Show me the snp_subscription_status snapshot. |
get_semantic_model_details | Detail for a specific semantic model. | Show me the orders semantic model. |
get_exposures | All exposures (downstream dashboards, apps, analyses). | Which dashboards depend on our dbt project? |
get_exposure_details | Single exposure with owner, parents, freshness status. | Who owns the revenue dashboard exposure? |
get_test_details | Detail for a specific test. | Show me the not-null test on fct_orders.order_id. |
get_all_macros | All macros, optionally filtered by package. | List all macros in the dbt_utils package. |
get_macro_details | Detail for a specific macro. | Show me the macro source for get_relation. |
search | Search across resources in the dbt project (alpha). | Find anything related to "revenue" in the dbt project. |
list_projects | All projects in the dbt Cloud account. | List our dbt projects. |
list_jobs | All jobs in the account with schedule + trigger metadata. | List all scheduled jobs. |
get_job_details | Single job configuration including triggers, schedule, and commands. | Show me the daily-refresh job configuration. |
list_jobs_runs | Job runs filtered by status, time, or job. | List failed job runs in the last week. |
get_job_run_details | Single run detail: status, timing, steps, artifacts. | Show me the details for run 12345. |
get_job_run_error | Error and warning detail for a failed run. | Why did the nightly run fail? |
list_job_run_artifacts | Artifacts available from a job run. | List the artifacts from run 12345. |
list | Resources in the dbt project, filterable by type + selector. | List all models tagged "finance". |
parse | Validates project file syntax without running. | Parse the project to check for syntax errors. |
compile | Generates executable SQL from models/tests/analyses. | Compile the fct_orders model. |
docs | Generates documentation for the dbt project. | Generate the dbt docs. |
show | Executes ad-hoc SQL against the database (read-only by convention; verify with your team). | Show me the top 10 rows of fct_orders. |
search_product_docs | Searches docs.getdbt.com for pages matching a query. | How do I define a cumulative metric in dbt? |
get_product_doc_pages | Full Markdown content of a docs.getdbt.com page. | Get the full incremental-models doc. |
get_mcp_server_version | Version of the running dbt MCP server. | What version of the dbt MCP server are we on? |
Data flow during analysis
When you ask a question that maps to dbt Cloud, the AI engine routes to the right tool, reads the result, and pairs the answer with a chart you can pin to a dashboard.
sequenceDiagram
actor U as You
participant C as clariBI
participant AI as AI engine
participant V as dbt Cloud
U->>C: Ask a question about dbt semantic metrics, model lineage, and run history
C->>AI: Plan the analysis
AI->>V: Call the right tool
V-->>AI: Tool result
AI->>AI: Summarize and chart
C-->>U: Answer plus visual
Setting up the connection
- {'title': 'Confirm your dbt plan supports remote MCP', 'description': 'Remote MCP with OAuth is available on dbt Cloud Enterprise and Enterprise+ accounts. Lower-tier accounts can still connect via a Personal Access Token; see the dbt MCP docs for the token flow.'}
- {'title': 'Copy your account-specific MCP endpoint URL', 'description': 'In dbt Cloud go to Account settings → Access URLs → MCP Endpoint URL. The URL is account-specific because multi-cell accounts use a per-account prefix (e.g.
https://your-account.us1.dbt.com/api/ai/v1/mcp/) instead of the defaultcloud.getdbt.com.'} - {'title': 'Paste the URL in the clariBI connect modal', 'description': 'Use the URL you copied. clariBI hands it to the OAuth flow; dbt opens a browser sign-in and shows you the requested scopes (Semantic Layer read + Discovery read).'}
- {'title': 'Authorize on the dbt consent screen', 'description': 'Review the scopes shown and confirm. clariBI never requests write scopes.'}
Permissions and data access
clariBI requests read-only scopes covering the Semantic Layer (metrics, dimensions, entities, saved queries) and Discovery (model metadata, lineage, freshness, test results). Job-run and project metadata are also read-only. Write CLI tools (build, run, test, clone, trigger_job_run, retry_job_run, cancel_job_run) and direct SQL execution (execute_sql) are filtered out at the catalog layer and never reachable through clariBI. Disconnect anytime from Settings → Integrations or revoke access from Account settings → Integrations → App integrations in dbt Cloud.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| "Endpoint URL not recognised" | Your account is multi-cell and the default URL was used instead of your account-specific prefix. | Copy the URL from Account settings → Access URLs → MCP Endpoint URL in dbt Cloud and re-paste it in clariBI. |
| "Not available on your plan" | Remote MCP with OAuth requires dbt Enterprise or Enterprise+. Your account is on a lower tier. | Either upgrade your dbt plan or use a Personal Access Token connection — see dbt's MCP docs for the PAT setup. |
| "Metric returned 403" | The connected user does not have permission for that metric or its underlying model. | Adjust the user's role in dbt or reconnect with a user who has Semantic Layer + Discovery read access. |