Fabric MCP Server - PowerBI Report Creator

Fabric MCP Server - PowerBI Report Creator

Enables AI agents to deploy Power BI reports to Microsoft Fabric by automating data loading from CSV, creating semantic models, and generating report visuals.

Category
Visit Server

README

Fabric MCP Server | PowerBI Report CreatorπŸš€

Skip the formula learning curve β€” let AI build your Power BI report structure.

A Model Context Protocol (MCP) server that lets AI agents deploy Power BI reports to Microsoft Fabric. Focus on what data you want to see, not how to write DAX or configure data sources.

πŸ’‘ The Big Idea

Traditional workflow: Learn DAX formulas β†’ Figure out data modeling β†’ Create measures β†’ Build visuals β†’ Configure connections β†’ Publish β†’ Style it β†’ Hope it works.

With this MCP server: Tell your AI what data you want to visualize β†’ AI generates the semantic model, measures, and report structure β†’ Deploys to Fabric β†’ You apply final styling in Fabric portal.

Why This Matters

  1. No DAX Required β€” AI writes the measures and data model. You don't need to learn SUM(), CALCULATE(), or relationship syntax.
  2. Quick Scaffolding β€” Get a working report with the right visuals and data bindings in minutes, not hours.
  3. Data Pipeline Automation β€” CSV β†’ Lakehouse β†’ Delta Table β†’ Semantic Model β†’ Report, all automated.
  4. Ready for Styling β€” Visuals are deployed with correct data. Apply colors and formatting in Fabric portal.

What You Get

You: "Create a sales report from this CSV with revenue by region and monthly trends"
AI: [uploads data, creates semantic model with measures, builds report with charts]

Result: Working report in Fabric with:
  βœ“ Data loaded into Lakehouse
  βœ“ Semantic model with correct measures (TotalRevenue, TotalProfit, etc.)
  βœ“ Visuals bound to the right fields
  βœ“ Ready for you to apply your preferred colors/theme in Fabric portal

Styling Limitations

Note: Programmatic visual styling (custom colors, fonts) via PBIR objects property is not currently supported by Fabric. Reports deploy with default Power BI styling. Use Fabric portal or Power BI Desktop to apply custom themes after deployment.

πŸ”„ How It Works

The server automates the complete data-to-report workflow:

  1. Upload CSV Data β†’ Write to Lakehouse OneLake storage (ADLS Gen2)
  2. Create Delta Tables β†’ Load CSV into queryable Lakehouse tables
  3. Deploy Semantic Model β†’ Push TMDL definitions to Git
  4. Deploy Report β†’ Push PBIR report with visuals to Git
  5. Sync to Fabric β†’ Trigger "Update from Git" to create workspace items
  6. Refresh Model β†’ Load data into semantic model via Power BI API

✨ Capabilities

Category Features
Data Loading Upload CSV to OneLake, create Delta tables
Semantic Models Generate TMDL with Direct Lake connection, measures, relationships
Reports Generate PBIR with cards, bar charts, line charts, tables, slicers
Git Operations Push to Azure DevOps, sync workspace from Git
Workspace Management List workspaces, check Git status, refresh models
Themes Generate Power BI JSON themes from hex colors

πŸ“¦ Installation

Prerequisites

  • Python 3.10+
  • Azure CLI (for authentication): az login
  • Azure SDK: pip install azure-storage-file-datalake azure-identity
  • Fabric Workspace connected to Azure DevOps Git repo (one-time setup in Fabric portal)

Install from Source

git clone https://github.com/yourorg/fabric-mcp-server-powerbi-creator.git
cd fabric-mcp-server-powerbi-creator

# Create virtual environment
python -m venv .venv
.venv\Scripts\Activate.ps1  # Windows PowerShell

# Install
pip install -e .
pip install azure-storage-file-datalake azure-identity

Verify Installation

python -c "import fabric_mcp; print('OK')"

πŸš€ Quick Start

1. Authenticate with Azure (REQUIRED)

You MUST authenticate before using the MCP server:

az login

This uses Azure CLI for authentication. Without this step, all API calls will fail.

2. Get Your Fabric Information

The MCP server will ask you for:

Information How to Get It
Workspace URL Go to Fabric portal β†’ Open your workspace β†’ Copy URL from browser<br>https://app.fabric.microsoft.com/groups/<WORKSPACE_ID>/...
Lakehouse The server will list available Lakehouses for you to choose
Azure DevOps Repo URL Go to Azure DevOps β†’ Repos β†’ Clone β†’ Copy HTTPS URL<br>https://org.visualstudio.com/project/_git/repo

3. Configure MCP Client

Add to your AI agent's MCP configuration:

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "fabric": {
      "command": "fabric-mcp-server-powerbi-creator"
    }
  }
}

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "fabric": {
      "command": "C:/path/to/project/.venv/Scripts/fabric-mcp-server-powerbi-creator.exe"
    }
  }
}

πŸ› οΈ Available Tools

Workspace Management

Tool Description
list_workspaces List all Fabric workspaces you have access to
get_git_status Check Git connection and pending changes for a workspace
sync_workspace Trigger "Update from Git" to pull changes into Fabric

Data Loading

Tool Description
list_lakehouses List all Lakehouses in a workspace
list_lakehouse_tables List Delta tables in a Lakehouse
upload_csv_to_lakehouse Upload local CSV to Lakehouse OneLake storage
load_csv_to_lakehouse Load CSV from Files into a Delta table

Deployment

Tool Description
deploy_semantic_model Deploy TMDL semantic model to Git
deploy_report_with_model Deploy semantic model + report together to Git
refresh_semantic_model Refresh model to load data from Lakehouse

Utilities

Tool Description
generate_theme Generate Power BI JSON theme from hex colors
deploy_report Deploy a simple report template (legacy)

πŸ“– Workflow Examples

Basic: Describe What You Want

You: "Create a sales dashboard from sales-data.csv. Show revenue by region 
     as a bar chart and monthly trends as a line chart."

AI: "I'll need your Fabric workspace URL and Azure DevOps repo URL."

You: [paste URLs]

AI: [uploads CSV β†’ creates Delta table β†’ builds semantic model β†’ 
     generates report with bar chart + line chart β†’ deploys to Fabric]

"Done! Your report 'SalesReport' is live in Fabric."

Advanced: Start from a Screenshot

You: "I want my report to look like this:" [attaches screenshot of existing report]

AI: "I can see card KPIs at top, donut chart on left, and trend line on right. 
     I'll create the data model and visuals with that layout."

[AI analyzes the screenshot and generates visuals that mimic the layout 
 and chart types - with your actual data wired up automatically]

"Deployed! Check Fabric to see the report. You can apply colors and 
 formatting in the Fabric portal."

Pro Tip: Iterative Refinement

The real power is iteration on data and measures. Rapidly experiment:

  • "Add a date slicer"
  • "Change the bar chart to horizontal"
  • "Add a YoY growth measure"
  • "Filter to only show top 10 products"

Each change: AI modifies the model/visuals β†’ pushes to Git β†’ syncs to Fabric β†’ done.

Note: For visual styling (colors, fonts, custom formatting), use the Fabric portal after deployment. Programmatic styling via PBIR objects is not yet supported by Fabric.


πŸ”§ What Happens Under the Hood

When you deploy a report, the MCP server:

1. list_workspaces() β†’ Extract workspace ID from URL
2. list_lakehouses(workspace_id) β†’ Find available Lakehouses
3. upload_csv_to_lakehouse(workspace_id, lakehouse_id, "sales-data.csv")
   β†’ Writes to OneLake Files/
4. load_csv_to_lakehouse(workspace_id, lakehouse_id, "fact_Sales", "Files/sales-data.csv")
   β†’ Creates Delta table
5. deploy_report_with_model(repo_url, branch, model_name, report_name, ...)
   β†’ Pushes TMDL + PBIR to Git
6. sync_workspace(workspace_id)
   β†’ Triggers "Update from Git" in Fabric (async polling)
7. refresh_semantic_model(workspace_id, model_name)
   β†’ Loads data from Lakehouse into model

Result: Live Power BI report in Fabric!

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Local CSV     │───▢│  OneLake Storage │───▢│  Delta Tables   β”‚
β”‚   (your data)   β”‚    β”‚  (ADLS Gen2)     β”‚    β”‚  (Lakehouse)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                        β”‚
                                                        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Azure DevOps   │◀───│   MCP Server     │───▢│  Fabric API     β”‚
β”‚  Git Repository β”‚    β”‚  (this project)  β”‚    β”‚  (sync/refresh) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Fabric Sync    │───▢│  Workspace Items β”‚
β”‚  (updateFromGit)β”‚    β”‚  (Model + Report)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Components:

File Purpose
server.py MCP server with all tools
fabric_api.py Fabric REST API client (async polling)
lakehouse.py OneLake upload + Delta table loading
semantic_model.py TMDL semantic model builder (Direct Lake)
report_builder.py PBIR report builder with visuals
theme_generator.py Power BI JSON theme generator

πŸ”§ Configuration

Environment Variables (Optional)

For CI/CD or service principal authentication:

# Windows PowerShell
$env:FABRIC_TENANT_ID="your-tenant-id"
$env:FABRIC_CLIENT_ID="your-client-id"
$env:FABRIC_CLIENT_SECRET="your-client-secret"

Workspace Git Connection

Your Fabric workspace must be connected to an Azure DevOps Git repository:

  1. Open Fabric portal β†’ Workspace settings β†’ Git integration
  2. Connect to Azure DevOps
  3. Select organization, project, repository, branch
  4. Initialize sync

This is a one-time setup per workspace.

πŸ“ Project Structure

fabric-mcp-server-powerbi-creator/
β”œβ”€β”€ src/fabric_mcp/
β”‚   β”œβ”€β”€ server.py           # MCP server + tools
β”‚   β”œβ”€β”€ fabric_api.py       # Fabric REST API client
β”‚   β”œβ”€β”€ lakehouse.py        # OneLake + Delta table operations
β”‚   β”œβ”€β”€ semantic_model.py   # TMDL builder (Direct Lake)
β”‚   β”œβ”€β”€ report_builder.py   # PBIR builder with visuals
β”‚   └── theme_generator.py  # Power BI theme generator
β”œβ”€β”€ examples/
β”‚   └── deploy_report_e2e.py  # Complete workflow example
β”œβ”€β”€ test-templates/
β”‚   └── sales-dashboard/      # Sample data + template
β”œβ”€β”€ templates/
β”‚   └── *.json               # Power BI theme templates
β”œβ”€β”€ pyproject.toml
└── README.md

πŸ§ͺ Testing

Run the example script to test the full workflow:

# 1. First authenticate
az login

# 2. Edit the example file and fill in YOUR values:
#    - WORKSPACE_ID (from Fabric workspace URL)
#    - LAKEHOUSE_ID (from Lakehouse URL)
#    - REPO_URL (Azure DevOps repo)
#    - BRANCH

# 3. Run the example
cd fabric-mcp-server-powerbi-creator
$env:PYTHONPATH = "src"
python examples/deploy_report_e2e.py

This will:

  1. Upload test-templates/sales-dashboard/sales-data.csv to Lakehouse
  2. Create fact_Sales Delta table
  3. Deploy SalesModel semantic model
  4. Deploy SalesReport with 5 visuals
  5. Sync workspace from Git
  6. Refresh semantic model

⚠️ Troubleshooting

Issue Solution
"Failed to get token" / 401 Unauthorized Run az login first to authenticate
ModuleNotFoundError: azure pip install azure-storage-file-datalake azure-identity
"Workspace Git state is NotConnected" Connect workspace to Git in Fabric portal
"DiscoverDependenciesFailed" on sync Delete conflicting items from workspace first
Report shows "Error fetching data" Run refresh_semantic_model() after sync
Visuals blank but no error Verify Delta table has data, refresh model
"Invalid workspace ID" Copy workspace ID from Fabric URL (GUID after /groups/)

πŸ“œ License

MIT License - see LICENSE file for details.

πŸ™ Credits

Inspired by FabricAI deployment patterns for Direct Lake semantic models.

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured