powerbi-health-mcp
powerbi-health-mcp
An AI-powered Power BI dataset health monitor, built with Claude + MCP.
This demo project connects Claude to a simulated Power BI tenant through the Model Context Protocol (MCP) and turns it into a dataset health analyst. Instead of clicking through refresh histories workspace by workspace, you ask:
"Run a health check on my Power BI tenant. What's broken, why, and what should I fix first?"
...and Claude calls the MCP tools, correlates refresh failures with gateway status, and answers with a prioritized action plan.
flowchart LR
A[Claude Desktop] -- MCP (stdio) --> B[powerbi-health-mcp\nFastMCP server]
B --> C[(Mock Power BI tenant\n3 workspaces, 7 datasets,\n2 gateways)]
B -. same tool surface as .-> D[Power BI REST API]Why mock data?
The point of the demo is the AI + MCP workflow, not tenant setup. The
server ships with a realistic mock tenant (refresh histories are generated
relative to now, so the demo always looks live) and requires zero
credentials — clone and run. The tool surface intentionally mirrors the
real Power BI REST API (groups, datasets, refreshes, gateways), so
swapping the mock layer for requests calls with a service principal token
is a contained change.
What's in the mock tenant
Dataset | Workspace | Seeded problem |
Sales Master | Sales Analytics | none — healthy |
Regional Pipeline | Sales Analytics | failing 3 days — expired SQL credentials |
P&L Consolidated | Finance Reporting | refresh timeout at 120 min (no incremental refresh) |
AP Aging | Finance Reporting | none — healthy |
Budget vs Actuals FY24 | Finance Reporting | stale 21 days — owner left the company |
Plant Telemetry | Operations | failing — its gateway has been offline 30h |
Logistics KPIs | Operations | intermittent failures — memory pressure on shared capacity |
A good health-check answer should find all five problems, notice that Plant Telemetry's failures are a gateway issue rather than a dataset issue, and flag the orphaned owner on the stale dataset.
MCP tools exposed
Tool | Purpose |
| One-shot overview: counts by health state, problem datasets, offline gateways |
| Workspaces with capacity type |
| Datasets with owner, schedule, health state (optional workspace filter) |
| Per-dataset run history with durations and error messages |
| Gateway status + which datasets depend on each |
| Simulated on-demand refresh — fails again until the root cause is "fixed" |
Health states: HEALTHY, DEGRADED (recent intermittent failures),
FAILING (latest run failed), STALE (no successful refresh in 7+ days).
Setup
Requires Python 3.10+.
git clone https://github.com/<you>/powerbi-health-mcp.git
cd powerbi-health-mcp
pip install -r requirements.txt
# quick smoke test without any MCP client:
python server.py --selftestConnect to Claude Desktop
Add to claude_desktop_config.json
(Settings → Developer → Edit Config), then restart Claude Desktop:
{
"mcpServers": {
"powerbi-health": {
"command": "python",
"args": ["/absolute/path/to/powerbi-health-mcp/server.py"]
}
}
}A ready-to-edit copy is in
claude_desktop_config.example.json.
Demo prompts to try
The health check — "Use the powerbi-health tools to run a full health check on the tenant. Group problems by root cause and give me a prioritized fix list."
Root-cause reasoning — "Plant Telemetry keeps failing. Is the problem the dataset or something upstream?" (Claude should correlate it with the offline gateway.)
The skeptic test — "Trigger a refresh of Regional Pipeline and tell me if that fixed it." (It won't — broken credentials — and Claude should say so instead of declaring victory.)
The report — "Write a Monday-morning status email to the BI team summarizing tenant health, with owners to contact for each issue."
Findings
My honest take on what worked and what didn't lives in FINDINGS.md — filled in after testing this with a real-world use case, as promised in the LinkedIn post that started this.
Roadmap
Real Power BI REST API mode behind the same tool surface (service principal auth)
execute_daxtool via theexecuteQueriesendpointScheduled health snapshots + trend comparison ("what got worse this week?")
License
MIT — see LICENSE.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ramalakshmi0505/powerbi-health-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server