Power BI Skills MCP Server
Enables AI assistants to query Power BI datasets via MCP, automatically anonymizing sensitive data before it reaches the AI, and generating rich HTML reports from natural language questions.
README
Proxuma Power BI Skills
AI prompt files and MCP server for generating reports and dashboards from your Power BI data. Works with Claude Code, GitHub Copilot, Cursor, and any MCP-compatible AI tool.
You ask a business question. The AI queries your data model, anonymizes it, and generates a complete HTML report or dashboard builder with real numbers. Your data never reaches the AI in readable form.
What's included
| Component | Description |
|---|---|
| MCP Server | Python server connecting AI tools to Power BI and Fabric APIs |
| Report Prompt | Generates standalone HTML reports with KPIs, tables, analysis, and findings |
| QBR Prompt | Generates Quarterly Business Review reports |
| Project Report Prompt | Generates project status reports |
| Data Anonymization | Two-pass anonymization: deterministic aliases + NLP safety net |
| Setup Wizard | Auto-discovers workspaces, datasets, and sensitive columns |
Quick start
git clone https://github.com/Proxuma/powerbi-claude-skills.git
cd powerbi-claude-skills
pip install -r requirements.txt
python -m server.wizard
The wizard walks you through Microsoft sign-in, picks your workspace and dataset, detects sensitive columns, and writes the config. No GUIDs to hunt for.
Then add the MCP server to your AI tool:
Claude Code:
claude mcp add powerbi -- python -m server.server
VS Code (GitHub Copilot / Cursor):
Add to .vscode/mcp.json:
{
"servers": {
"powerbi": {
"command": "python",
"args": ["-m", "server.server"],
"cwd": "/path/to/powerbi-claude-skills"
}
}
}
Claude Desktop:
Add to claude_desktop_config.json:
{
"mcpServers": {
"powerbi": {
"command": "python",
"args": ["-m", "server.server"],
"cwd": "/path/to/powerbi-claude-skills"
}
}
}
Prompts
Import these as slash commands or paste them as system prompts.
| File | Use |
|---|---|
prompts/powerbireport.md |
#powerbireport what is my monthly revenue trend? |
prompts/powerbireportQBR.md |
#powerbireportQBR Q1 2026 |
prompts/projectreport.md |
#projectreport Project Alpha |
prompts/powerbi.md |
General Power BI data questions |
Data anonymization
All data is automatically anonymized before it reaches the AI. The AI only sees aliases like Client_A, Resource_1, Contact_3.
How it works
- On first query, the server loads unique values from your configured sensitive columns via DAX
- Every response passes through two layers:
- Pass 1 — Deterministic lookup: known entities get consistent aliases (fast, auditable)
- Pass 2 — Presidio NLP: catches unexpected PII in free-text fields (optional safety net)
- After report generation, restore real names locally
Restoring real names
Option A — Drag and drop: Open the generated report in a browser. Drag ~/.powerbi-mcp/sessions/latest/mapping.json onto the restore button at the top of the page.
Option B — CLI:
python -m server report.html -o report-real.html
Configuration
The wizard (option 4) auto-detects sensitive columns. Or edit ~/.powerbi-mcp/config.json manually:
{
"anonymization": {
"enabled": true,
"sensitive_columns": {
"client": ["'Company'[CompanyName]"],
"resource": ["'Resource'[FullName]"],
"contact": ["'Contact'[ContactName]"]
},
"presidio_enabled": true
}
}
Audit trail
Every session stores its mapping at ~/.powerbi-mcp/sessions/<id>/mapping.json. This file never leaves your machine. Use it to verify what was anonymized and provide compliance documentation.
MCP tools
Once the server is running, your AI assistant has access to:
| Tool | Description |
|---|---|
list_workspaces |
List all Power BI workspaces |
list_datasets |
List datasets in a workspace |
execute_dax |
Run a DAX query and get anonymized results |
search_schema |
Search for measures, columns, or tables |
list_measures |
List all measure names |
list_fabric_items |
List items in a Fabric workspace |
get_schema |
Full schema (caution: can be >10MB) |
anonymization_status |
Show anonymization state and entity counts |
Requirements
- Python 3.10+
- Power BI Pro or Premium Per User license (for API access)
- An MCP-compatible AI tool (Claude Code, GitHub Copilot, Cursor, Claude Desktop)
No Azure app registration needed. The server uses the same public client flow as Power BI Desktop.
Authentication
- The wizard opens a browser for Microsoft sign-in
- You sign in with your Power BI account
- Tokens are cached locally in
~/.powerbi-mcp/ - Subsequent runs refresh automatically — no re-login needed
Tokens are stored only on your machine. The MCP server never sends credentials to any third party.
Project structure
powerbi-claude-skills/
├── server/
│ ├── server.py # MCP server
│ ├── auth.py # Azure AD authentication
│ ├── wizard.py # Setup wizard
│ ├── entity_registry.py # Deterministic entity anonymization
│ ├── anonymizer.py # Two-pass anonymizer (registry + Presidio)
│ ├── mapping.py # Session mapping persistence
│ ├── deanonymizer.py # Restore real names (XSS-safe)
│ ├── __main__.py # CLI deanonymize entry point
│ └── config.example.json # Example configuration
├── prompts/
│ ├── powerbireport.md # Report generator
│ ├── powerbireportQBR.md # QBR report generator
│ ├── projectreport.md # Project report generator
│ └── powerbi.md # General Power BI queries
├── templates/
│ └── report-shell.html # Report HTML template (with restore UI)
├── tests/ # Test suite
├── requirements.txt
├── LICENSE
└── README.md
Running tests
pip install pytest
python -m pytest tests/ -v
Compatibility
| AI Tool | Status |
|---|---|
| Claude Code (CLI) | Supported |
| GitHub Copilot (VS Code, Agent mode) | Supported |
| Claude Desktop | Supported |
| Cursor | Supported |
| ChatGPT (via MCP plugin) | Experimental |
License
MIT
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.
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.
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.
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.