dbt-labs / dbt-labs/dbt

[v2 Bug] get_column_lineage returns empty array despite confirmed lineage

Open
#15,396 11 comments 0 reactions 1 assignee Claimed by @TIHan View on GitHub
area:engine engine:v2 source:customer status:triage type:bug
Dominant language
Rust
Stars
13.8k
Forks
2.6k
Avg merge
21h 31m
Merged PRs (30d)
56

Description

### Is this a new bug in dbt v2.x compared to the latest version of dbt 1.x?

- [x] I believe this is a new bug in dbt v2.x
- [x] I have searched the existing issues and could not find a duplicate

### Current Behavior

The `get_column_lineage` tool (exposed via the remote dbt MCP server's LSP integration) returns an empty array `[]` with `isError: false` for every model tested, regardless of whether upstream lineage exists.

Seems the LSP is also not responding to column-level requests in the dbt Cloud UI — after working with engineering, this seems to point to a Fusion LSP issue rather than an MCP transport issue.

### Expected Behavior

`get_column_lineage` should return column lineage nodes tracing how a column's value is derived from upstream sources, consistent with what get_lineage (model-level) already confirms exists.

### Steps To Reproduce

Set up a Fusion-enabled dev environment with a multi-hop model chain (in my repro: `settlement_credit_eod` → `stg_foo` → `foo`)

Confirm model-level lineage works:
```
curl -s -X POST "https:///api/ai/v1/mcp/" \
-H "Authorization: Token " \
-H "x-dbt-prod-environment-id: " \
-H "x-dbt-dev-environment-id: " \
-H "x-dbt-user-id: " \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/call","id":1,"params":{"name":"get_lineage","arguments":{"unique_id":"model.repro_122896.foo","depth":2}}}'
```
Result: Returns `foo` with `parent stg_foo`, `stg_foo` with parent `settlement_credit_eod`. Full 3-hop lineage exists.

Call `get_column_lineage` on the same model:
```
curl -s -X POST "https:///api/ai/v1/mcp/" \
-H "Authorization: Token " \
-H "x-dbt-prod-environment-id: " \
-H "x-dbt-dev-environment-id: " \
-H "x-dbt-user-id: " \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/call","id":2,"params":{"name":"get_column_lineage","arguments":{"model_id":"model.repro_122896.foo","column_name":"session_id"}}}'
```
Result: `[], isError: false`

### Relevant log output

```shell
get_lineage (working — confirms lineage exists):
Returns foo with parent stg_foo, stg_foo with parent settlement_credit_eod. Full 3-hop lineage exists.

get_column_lineage (broken — returns empty):
[], isError: false

No error, no stack trace — just an empty array on a model with confirmed upstream lineage.
```

### Environment

```markdown
Fusion-enabled environment
Auth method: Personal Access Token (PAT)
MCP
Multi-tenant deployment
```

### Which database adapter are you using?

_No response_

### Is this a discrepancy vs. dbt 1.x?

- [ ] Yes — this works in dbt 1.x but not in dbt v2.x

### Additional Context

- Engineering saw that the model foo.sql is querying for `+column:model.repro_122896.foo.AMOUNT+` but the result is [] from the LSP. We initially thought that the column name is case sensitive so we've tested with both uppercase and lowercase column names — same empty result.

- `get_lineage` (model-level) works correctly on the same environment, confirming the lineage graph is intact — only `get_column_lineage` returns empty.

- After working with engineering, seems the LSP is also not responding to column-level requests even in the dbt Cloud UI — this points to a Fusion LSP issue rather than an MCP transport issue.

- Authentication (PAT) succeeds with HTTP 200. The tool is registered and callable — it simply returns empty data.

Image

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.