Skip to content

Connect dbt Labs to ChatGPT: Orchestrate jobs and infrastructure

Learn how to connect dbt Labs to ChatGPT using Truto's managed MCP server. Execute jobs, audit users, and automate data infrastructure using natural language.

Nidhi KN Nidhi KN · · 8 min read
Connect dbt Labs to ChatGPT: Orchestrate jobs and infrastructure

If you need to connect dbt Labs to ChatGPT to automate data pipeline orchestration, trigger ad-hoc transformations, or audit workspace security, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's JSON-RPC tool calls and the dbt Labs REST API.

If your team uses Claude, check out our guide on connecting dbt Labs to Claude or explore our broader architectural overview on connecting dbt Labs to AI Agents.

Giving a Large Language Model (LLM) read and write access to a critical data infrastructure tool like dbt Labs is an engineering hurdle. You must map complex run tracking logic, manage nested environment variables, and deal with adapter-specific connection payloads. Rather than building and hosting this proxy layer yourself, you can use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.

This guide breaks down exactly how to use Truto to generate an MCP server for dbt Labs, connect it natively to ChatGPT, and execute data orchestration workflows using natural language.

The Engineering Reality of the dbt Labs API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, implementing it against dbt Labs requires handling several domain-specific quirks. If you decide to build this yourself, you own the entire integration lifecycle. Here is what makes the dbt Labs API specifically challenging for AI agents:

Asynchronous Run Lifecycles and Polling

dbt Cloud relies heavily on asynchronous processing. When an LLM wants to execute a pipeline, calling the trigger endpoint does not return the result - it returns an enqueued run ID. Your agent must then explicitly poll the run status endpoint until it hits a terminal state (success, error, or cancelled) before attempting to fetch the resulting artifact files. This requires highly precise tool definitions that instruct the LLM on exactly which IDs to extract and pass between sequential API calls.

Adapter-Specific Connection Schemas

Configuring connections in dbt Labs is not standardized across the platform. The required JSON body fields for an Account Connection change entirely depending on the adapter_version (e.g., Snowflake, BigQuery, Redshift). A static MCP tool definition will fail here. The AI agent must be able to dynamically understand which fields are required for the specific data warehouse being targeted.

Strict Rate Limits and 429 Handling

The dbt Cloud API strictly enforces rate limits, particularly on endpoints like job triggering and audit log fetching. When hitting these limits, the upstream API returns an HTTP 429 Too Many Requests error.

Note on how Truto handles this: Truto does not retry, throttle, or apply backoff on rate limit errors automatically. When the dbt Labs API returns a 429, Truto passes that error directly to the caller. However, Truto normalizes the upstream rate limit information into standardized HTTP headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. Your AI agent or its orchestration framework is entirely responsible for reading these headers and executing the appropriate retry or backoff logic.

How to Generate and Connect the dbt Labs MCP Server

Truto dynamically generates MCP tools based on dbt Labs' API documentation and resources. When you create an MCP server, Truto provides a single endpoint that carries routing and authentication. You can generate this server via the UI or the API, and connect it to ChatGPT via the UI or a configuration file.

Step 1: Create the MCP Server

Option A: Via the Truto UI

  1. Navigate to the Integrated Accounts page in your Truto dashboard and select your connected dbt Labs account.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration (name, allowed methods, specific tags, and expiration).
  5. Copy the generated MCP server URL (e.g., https://api.truto.one/mcp/a1b2c3d4e5f6...).

Option B: Via the Truto API You can programmatically generate the server URL by making a POST request to the Truto API. This is useful for dynamically provisioning MCP servers for end-users in a multi-tenant application.

curl -X POST https://api.truto.one/integrated-account/<YOUR_INTEGRATED_ACCOUNT_ID>/mcp \
  -H "Authorization: Bearer <YOUR_TRUTO_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "dbt Labs Orchestrator",
    "config": {
      "methods": ["read", "write", "custom"],
      "tags": ["jobs", "runs", "artifacts"]
    }
  }'

The API returns a JSON object containing the url field. Treat this URL like a secure token.

Step 2: Connect the Server to ChatGPT

Option A: Via the ChatGPT UI

  1. In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
  2. Ensure Developer mode is enabled (available on Pro, Plus, Business, Enterprise, and Education tiers).
  3. Under MCP servers / Custom connectors, click Add new.
  4. Provide a name (e.g., "dbt Labs via Truto") and paste the Truto MCP server URL into the connection field.
  5. Click Save. ChatGPT will instantly initialize the connection and ingest the available dbt Labs tools.

Option B: Via Manual Config File (SSE bridge) If you are using a local developer environment or a framework that requires a static configuration file to bridge Server-Sent Events (SSE), you can use the official MCP SSE wrapper command. Add the following to your MCP configuration file (e.g., mcp-settings.json):

{
  "mcpServers": {
    "dbt-labs-truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "--url",
        "https://api.truto.one/mcp/<YOUR_TRUTO_MCP_TOKEN>"
      ]
    }
  }
}

Hero Tools for dbt Labs

Truto maps the entire dbt Labs API surface into MCP tools. Here are six high-leverage "hero tools" your AI agent can use to orchestrate data pipelines and manage infrastructure.

list_all_dbt_labs_account_jobs

Retrieves a list of all jobs configured within a dbt account. This tool allows the agent to audit job schedules, check environment associations, and find the correct job_id needed to trigger subsequent runs.

"List all the jobs in our dbt Labs account. I need to find the job ID for our nightly data warehouse refresh."

create_a_dbt_labs_job_run

Triggers the execution of a specific dbt job. The run is enqueued asynchronously. The agent must capture the returned id from this tool to monitor the run's progress.

"Trigger a run for job ID 45902 and tell me the run ID that gets generated."

get_single_dbt_labs_account_run_by_id

Checks the status of a specific job run. Because dbt processes runs asynchronously, the LLM uses this tool to poll the API and determine if a run has successfully finished, failed, or is currently executing.

"Check the status of run ID 99281. If it is still running, let me know. If it failed, summarize the error."

list_all_dbt_labs_run_artifacts_runs

Downloads a completed run's specific artifact file (such as manifest.json, run_results.json, or catalog.json). This is essential for analyzing the output of a data pipeline or troubleshooting failing models.

"Download the run_results.json artifact for run ID 99281 and analyze which specific SQL models failed during execution."

list_all_dbt_labs_users

Lists all users provisioned in a dbt Cloud account. This is heavily utilized for security workflows, access audits, and offboarding automation.

"List all users in the dbt account and identify anyone who hasn't logged in recently based on their updated_at timestamp."

list_all_dbt_labs_account_service_tokens

Audits the programmatic service tokens associated with a dbt account. This helps IT and DevOps agents enforce security posture by tracking active tokens and their permission scopes.

"Retrieve all service tokens for the account. Tell me how many are currently active and list their names."

For the complete inventory of available dbt Labs tools and their exact JSON schema definitions, visit the dbt Labs integration page.

Workflows in Action

When you provide an AI agent with access to these tools, you move beyond simple Q&A. ChatGPT can execute multi-step deterministic workflows against your actual dbt infrastructure.

Workflow 1: Ad-Hoc Data Pipeline Execution and Monitoring

Data engineers frequently need to trigger specific jobs outside of their normal schedule and monitor the results to ensure data freshness before a major report.

"Find the 'Marketing Attribution Sync' job, trigger a run for it, and check if it succeeds. If it succeeds, grab the run_results.json and tell me how many models were built."

Execution Steps:

  1. list_all_dbt_labs_account_jobs: ChatGPT queries the job list, filtering by name to find the specific job ID for the "Marketing Attribution Sync".
  2. create_a_dbt_labs_job_run: The agent passes the job_id to trigger the execution, capturing the new run_id.
  3. get_single_dbt_labs_account_run_by_id: The agent polls the run status. (If it is still running, it may wait and poll again depending on system prompting).
  4. list_all_dbt_labs_run_artifacts_runs: Once the status indicates success, the agent requests the run_results.json artifact using the run_id.

Result: The user receives a confirmation that the job ran successfully, along with a parsed summary of the JSON artifact detailing exactly how many data models were successfully materialized.

sequenceDiagram
  participant ChatGPT as ChatGPT
  participant Truto as Truto MCP Router
  participant dbt as dbt Labs API

  ChatGPT->>Truto: call tool "list_all_dbt_labs_account_jobs"
  Truto->>dbt: GET /api/v2/accounts/{account_id}/jobs
  dbt-->>Truto: Return jobs
  Truto-->>ChatGPT: Return job list

  ChatGPT->>Truto: call tool "create_a_dbt_labs_job_run"
  Truto->>dbt: POST /api/v2/accounts/{account_id}/jobs/{job_id}/run
  dbt-->>Truto: Return run_id
  Truto-->>ChatGPT: Return run_id

  ChatGPT->>Truto: call tool "get_single_dbt_labs_account_run_by_id"
  Truto->>dbt: GET /api/v2/accounts/{account_id}/runs/{run_id}
  dbt-->>Truto: Return run status
  Truto-->>ChatGPT: Return run status

Workflow 2: Infrastructure Security Audit

IT administrators need to ensure that programmatic and human access to the dbt workspace adheres to company compliance policies.

"Audit the dbt account security. Pull a list of all active users and a list of all active service tokens. Give me a summary report of who has access."

Execution Steps:

  1. list_all_dbt_labs_users: The agent fetches the directory of all human users, capturing their IDs and activity timestamps.
  2. list_all_dbt_labs_account_service_tokens: The agent fetches all machine identities, reviewing the list of active service tokens.

Result: The agent compiles a Markdown report listing all active human accounts and programmatic tokens, immediately alerting the administrator to any rogue access vectors.

sequenceDiagram
  participant ChatGPT as ChatGPT
  participant Truto as Truto MCP Router
  participant dbt as dbt Labs API

  ChatGPT->>Truto: call tool "list_all_dbt_labs_users"
  Truto->>dbt: GET /api/v2/accounts/{account_id}/users
  dbt-->>Truto: Return users
  Truto-->>ChatGPT: Return users

  ChatGPT->>Truto: call tool "list_all_dbt_labs_account_service_tokens"
  Truto->>dbt: GET /api/v3/accounts/{account_id}/service-tokens
  dbt-->>Truto: Return tokens
  Truto-->>ChatGPT: Return tokens

Security and Access Control

Exposing an enterprise data tool like dbt Labs to an LLM requires strict boundary setting. Truto's MCP servers provide four primary levers to secure AI agent access:

  • Method Filtering (methods): You can restrict an MCP server to specific operation types. Setting methods: ["read"] ensures the agent can only execute GET or LIST operations, physically preventing it from altering pipelines or triggering jobs.
  • Tag Filtering (tags): Group and restrict tools by functional area. You can scope a server to only expose tools tagged with jobs and runs, keeping the agent entirely locked out of users or billing APIs.
  • Enforced Authentication (require_api_token_auth): By default, possessing the MCP URL grants access. By setting this flag to true, the connecting client must also supply a valid Truto API token in the Authorization header, adding a strict secondary identity check.
  • Time-to-Live (expires_at): Ideal for temporary debugging sessions. You can set an ISO datetime, after which Truto automatically destroys the server routing configuration and flushes the underlying KV records.

Moving Past Boilerplate

Connecting dbt Labs to ChatGPT shouldn't mean writing custom polling scripts, parsing dynamic JSON schemas, and managing OAuth lifecycles. AI agents need deep, standardized access to infrastructure APIs without the technical debt of maintaining custom proxy layers.

By leveraging an auto-generated MCP server, you turn the complex dbt Labs API surface into a discoverable, semantic toolset that ChatGPT understands natively.

FAQ

How do I connect dbt Labs to ChatGPT?
You can connect dbt Labs to ChatGPT by generating a Model Context Protocol (MCP) server URL via Truto. Once generated, add this URL to ChatGPT's custom connectors in developer mode, granting the AI secure access to dbt Labs API operations.
Does Truto handle dbt Labs API rate limits automatically?
No, Truto does not retry, throttle, or absorb rate limits. When the dbt Labs API returns an HTTP 429 error, Truto passes it directly to the caller, normalizing the headers into standardized IETF format (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your agent is responsible for its own retry and backoff logic.
Can I restrict ChatGPT to only read operations in dbt Labs?
Yes. When creating your Truto MCP server, you can use method filtering to restrict the server to 'read' operations only, ensuring ChatGPT cannot execute job runs or modify environment configurations.
Do I need to write code to map ChatGPT's function calls to dbt Labs?
No. Truto dynamically generates MCP tools based on dbt Labs' integration resources and documentation. ChatGPT's arguments are automatically split into the appropriate query parameters and JSON bodies required by the dbt API.

More from our Blog