> For the complete documentation index, see [llms.txt](https://docs.soda.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.soda.io/soda-ai/rca-agent/connect-your-data-stack.md).

# Connect your data stack

Connect the orchestrator, warehouse, transformation project, and code hosting that the RCA agent investigates with, by adding MCP servers to Claude Code.

The Soda plugin installs one MCP server: Soda MCP, which tells the agent which checks are failing. To find out why they fail, the agent needs to reach the rest of your stack. Each additional capability is an MCP server that you register with Claude Code once, at user scope, so that it applies to every session.

## Capabilities

| Capability     | Question it answers                                   | What the agent does with it                                                                                            |
| -------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Orchestration  | Whether the pipeline run actually did the work        | Lists recent runs and reads task logs to catch a green run that skipped its work, and finds the deployed code version. |
| Warehouse      | Whether the data is wrong, and where freshness breaks | Runs read-only queries for row counts and load timestamps, and reads the warehouse's own lineage where it has one.     |
| Transformation | Which model produces the bad column                   | Reads the model graph and the model SQL, and finds the non-dataset consumers such as dashboards and reports.           |
| Code history   | Which change caused it                                | Reads the commits that touched the pipeline at the deployed version.                                                   |

Code history is usually covered already: the `gh` and `git` CLIs on your `PATH` count as coverage, as long as the repository is reachable from your shell. On Windows, Git for Windows provides `git`.

## How the agent reports gaps

At the start of every investigation, the agent checks which capabilities the session can reach. The check classifies each connected MCP server by the system named in the server's name, command, or URL. A missing capability never blocks the investigation. The agent works with what is present, states in the report which evidence it could not gather, and offers to help you close the gap: it asks which system you run, then suggests how to register its server.

The offer is made once per configuration. It is repeated when you add or remove a server, or after 30 days. If you tell the agent not to ask again, it records that and stays quiet until your set of servers changes.

## Register an MCP server

Every server is registered the same way. Use `--scope user` so that the server is available in all your projects:

```bash
# A server that runs locally and talks over stdio
claude mcp add <name> --scope user -- <command>

# A server reached over HTTP
claude mcp add <name> --scope user --transport http <url>
```

Pass credentials in the server's own environment block with `-e KEY=value`, never on the command line of a shared terminal. The commands are the same in PowerShell on native Windows.

Name the server after the system it connects to, for example `snowflake`, `airflow`, or `dbt`. The agent's coverage check recognizes a system by its name in the server name, command, or URL. A server named `prod-data` that starts a Snowflake command is still recognized, but one that hides the system behind an unrelated name and a wrapper script is not.

> For the full syntax, including project-scoped servers and OAuth, refer to the [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp).

After registering a server, run `/mcp` inside a Claude Code session to confirm it is connected. The next `/rca` investigation picks it up.

## Where to find a server for your system

The tables below point to where each vendor documents its MCP server. Follow the vendor's current instructions for the exact command or endpoint. A system that is not listed here almost certainly has a server too: search the vendor's documentation for MCP.

### Orchestration

| System    | Server                                                                                                                        |
| --------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Airflow 3 | The Airflow API server serves an MCP endpoint at `/mcp/v1`. Register it with `--transport http http://<airflow-host>/mcp/v1`. |
| Dagster   | Refer to the [Dagster documentation](https://docs.dagster.io/).                                                               |
| Prefect   | [prefect-mcp-server](https://github.com/PrefectHQ/prefect-mcp-server)                                                         |

### Warehouse

{% hint style="warning" %}
Register warehouse servers read-only. Most servers accept a configuration that limits them to statements such as `SELECT`, `SHOW`, and `DESCRIBE`. An investigation must never be able to write.
{% endhint %}

| System                           | Server                                                                                                                                                                                                                                         |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Snowflake                        | [Snowflake-Labs mcp](https://github.com/Snowflake-Labs/mcp), run as `uvx snowflake-labs-mcp --service-config-file <config>.yml` with the configuration limited to Select, Show, Describe, and Use. It also exposes Snowflake's native lineage. |
| Databricks                       | [Databricks managed MCP servers](https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp) or [Databricks Labs mcp](https://github.com/databrickslabs/mcp)                                                                             |
| BigQuery, PostgreSQL, and others | [MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox)                                                                                                                                                                       |
| Redshift and other AWS services  | [AWS MCP servers](https://github.com/awslabs/mcp)                                                                                                                                                                                              |

### Transformation

| System  | Server                                                                                                                                                                                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| dbt     | [dbt-mcp](https://github.com/dbt-labs/dbt-mcp), run as `uvx dbt-mcp` and pointed at your project. Its model graph also declares exposures: the dashboards, reports, and extracts that read your models. |
| SQLMesh | Refer to the vendor's documentation.                                                                                                                                                                    |

Without a server, a checkout of the transformation project on disk answers the same questions, more slowly. Tell the agent where the project lives when you start the investigation. It does not search your filesystem for one.

### Code history

| System    | Server                                                                                          |
| --------- | ----------------------------------------------------------------------------------------------- |
| GitHub    | The `gh` CLI, or the [GitHub MCP server](https://github.com/github/github-mcp-server)           |
| GitLab    | [GitLab MCP server](https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/) |
| Bitbucket | [Atlassian MCP server](https://github.com/atlassian/atlassian-mcp-server)                       |

A code hosting server is an alternative to the CLIs, not an upgrade. Add one only when the repository is not reachable from your shell.

> To run an investigation with the connected servers, refer to [Root cause analysis agent](/soda-ai/rca-agent.md).

***

{% hint style="info" %}
You are **not logged in to Soda** and are viewing the default public documentation. Learn more about [Licensing & documentation access](/reference/documentation-access-and-licensing.md).

If you do have a Soda license, make sure to **log in to Soda Cloud in this same browser**.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.soda.io/soda-ai/rca-agent/connect-your-data-stack.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
