io.github.fabienfrfr/pbix-atlas
Provides full lineage graph analysis for Power BI .pbix files, enabling source-to-visual-field traversal. Exposes REST and MCP endpoints for building, searching, and exporting lineage graphs.
README
<h1 align="center"> <p>🌐 PBIX‑Atlas</p> </h1>
<p align="center"> <a href="https://pypi.org/project/pbix-atlas/"> <img alt="PyPI" src="https://img.shields.io/pypi/v/pbix-atlas?color=orange"> </a> <a href="https://github.com/fabienfrfr/pbix-atlas/"> <img alt="GitHub" src="https://img.shields.io/badge/github-fabienfrfr%2Fpbix--atlas-black?logo=github"> </a> <a href="https://github.com/fabienfrfr/pbix-atlas/actions"> <img alt="CI" src="https://img.shields.io/github/actions/workflow/status/fabienfrfr/pbix-atlas/tests.yml?label=tests"> <a href="https://registry.modelcontextprotocol.io/?q=pbix-atlas"> <img alt="MCP Registry" src="https://img.shields.io/badge/MCP-registry-purple?logo=protocols"> </a> </p>
<h3 align="center"> <p>Full lineage graph for Power BI — from source to visual field</p> </h3>
<!-- mcp-name: io.github.fabienfrfr/pbix-atlas -->
PbixAtlas is an Universal lineage graph for Power BI .pbix files: source to visual field in one traversable graph.
source (HTTP, OData, SQL, file...) --> Power Query (M)
--> column / calculated column --> measure (DAX)
--> field displayed in a report visual
Install
pip install pbix-atlas
# or
uv add pbix-atlas
Quick start
from pbix_atlas import LineageGraphBuilder, upstream, downstream, print_tree, find_nodes
graph = LineageGraphBuilder().build("my_report.pbix")
find_nodes(graph, "customer_name")
print_tree(graph, "visual_field::my_report.pbix::Page1::16::customer_name", direction="upstream")
print_tree(graph, "source::odata::example.com/odata/", direction="downstream")
Export
from pbix_atlas import export_graphml, export_nodes_csv, export_edges_csv, graph_summary
graph_summary(graph) # {'query': 70, 'column': 183, ...}
export_graphml(graph, "lineage.graphml") # Gephi / yEd
export_nodes_csv(graph, "nodes.csv")
export_edges_csv(graph, "edges.csv")
Codegen — standalone Python pipeline
Generates a single Python file reproducing a report's full chain: source → extraction → Power Query → semantic model → Vizro dashboard. The M source is executed at runtime by the built-in interpreter, not pattern-matched. Unimplemented functions raise MRuntimeError (no silent stubs).
pip install "pbix-atlas[codegen]"
pbix-atlas-codegen my_report.pbix -o pipeline.py
from pbix_atlas import generate_python_pipeline
generate_python_pipeline("my_report.pbix", "pipeline.py")
HTTP API / MCP server
uv sync --extra api
uv run pbix-atlas # http://127.0.0.1:8080
- REST:
POST /graphs,/search,/upstream,/downstream,/tree,/export,/codegen - MCP (streamable HTTP):
http://127.0.0.1:8080/mcp/ - Env vars:
PBIX_LINEAGE_HOST,PBIX_LINEAGE_PORT
Architecture
| Module | Responsibility |
|---|---|
models.py |
Node/edge types and shared data structures |
sources.py |
Physical source detection (configurable patterns) |
pbix_model.py |
Adapter isolating from pbixray |
m_lexer.py / m_parser.py |
Built-in M tokenizer and parser |
m_interpreter.py |
M runtime interpreter + stdlib |
dax_translate.py |
DAX → Python (supported subset) |
dax.py |
DAX reference parsing |
mquery.py |
Power Query dependencies (table-level) |
layout.py |
Internal Report/Layout format parsing |
graph_builder.py |
Orchestrator: builds the networkx.DiGraph |
navigation.py |
Upstream/downstream traversal, search, export |
codegen.py |
Python pipeline code generation |
api/app.py |
FastAPI + MCP mount (FastMCP) |
Sample files
- Retail Analysis Sample PBIX (Microsoft)
- Sales & Returns Sample v201912 (Microsoft)
Development
uv sync --extra dev
uv run pytest
uv build
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.