power-bi-mcp
An MCP (Model Context Protocol) server that lets AI agents manage Power BI workspaces, datasets, and refreshes via natural language.
README
Power BI MCP Server
An MCP (Model Context Protocol) server that lets AI agents manage Power BI workspaces, datasets, and refreshes via natural language.
Features
Authentication & Discovery
| Tool | Description |
|---|---|
pbi_auth |
Authenticate via Azure AD device code flow (with token caching & auto-refresh) |
pbi_list_workspaces |
List accessible workspaces (with optional name filter) |
pbi_list_datasets |
List datasets in a workspace |
Dataset & Refresh Management
| Tool | Description |
|---|---|
pbi_dataset_info |
Aggregate dataset metadata + datasources + gateways + refresh schedule + impacted reports + PBIP locate (single call) |
pbi_refresh_dataset |
Trigger an Enhanced refresh (supports table-level, polling, retry, timeout) |
pbi_refresh_manage |
Refresh lifecycle: view history (status), get execution details (details), or cancel (cancel) |
Diagnostics & Source Code
| Tool | Description |
|---|---|
pbi_diagnose |
One-shot diagnostic report for refresh failures — root cause classification, error catalog, next actions, PBIP source hints |
pbi_locate_pbip |
Locate PBIP source code for a dataset (fuzzy folder match + optional table TMDL & M source extraction) |
Query & Reporting
| Tool | Description |
|---|---|
pbi_execute_query |
Execute DAX queries against a dataset (supports RLS impersonation) |
pbi_scheduled_refresh_report |
Generate a daily scheduled-refresh status report across all datasets in a workspace (JSON or Markdown table) |
Architecture
server.py # Entry point — configures logging, runs MCP via stdio
app.py # FastMCP instance with server instructions
config.py # Configuration loader (config.json, defaults, constants)
auth.py # Azure AD device code flow, token caching, HTTP helpers
diagnostics.py # Refresh error classification, PBIP folder/table locator
error_catalog.py # Error code catalog + regex patterns for failure classification
tools/ # MCP tool modules (auto-registered via __init__.py)
├── auth_tool.py # pbi_auth
├── workspace.py # pbi_list_workspaces, pbi_list_datasets
├── dataset.py # pbi_dataset_info
├── refresh.py # pbi_refresh_dataset, pbi_refresh_manage
├── diagnose.py # pbi_diagnose, pbi_locate_pbip
├── query.py # pbi_execute_query
└── report.py # pbi_scheduled_refresh_report
setup.ps1 # Azure AD App Registration automation (PowerShell)
config.json # User-specific config (gitignored)
Quick Start
1. Install dependencies
git clone https://github.com/FreelexHo/power-bi-mcp.git && cd power-bi-mcp
uv venv && uv sync
<details> <summary>Don't have uv? Use pip instead</summary>
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
pip install -e .
</details>
2. Register in your MCP client
Add to your MCP client configuration:
Cursor / Windsurf / Antigravity IDE (mcp.json):
{
"mcpServers": {
"power-bi": {
"command": "uv",
"args": ["run", "--directory", "/path/to/power-bi-mcp", "server.py"],
"transport": "stdio"
}
}
}
3. Authenticate (one-time)
Just use the MCP! On first use, the agent will call pbi_auth and show you a message like:
To sign in, visit https://microsoft.com/devicelogin
and enter the code XXXXXXXX
- Open the link in your browser
- Enter the code shown
- Sign in with your Microsoft work account
- Approve the permissions
That's it. Tokens are cached to ~/.powerbi-mcp/token.json and auto-refreshed — you won't need to do this again unless you revoke access.
Configuration
The server works out of the box with a built-in public client_id. Create a config.json in the project root to customize:
{
"client_id": "<your-azure-ad-client-id>",
"token_cache_dir": "~/.powerbi-mcp",
"pbip_root": "C:/path/to/your/pbip-repo/data/power-bi-report"
}
| Key | Default | Description |
|---|---|---|
client_id |
Built-in public app | Azure AD App Registration client ID |
token_cache_dir |
~/.powerbi-mcp |
Directory for cached OAuth tokens |
pbip_root |
(none) | Local PBIP repo root — enables pbi_locate_pbip and pbi_diagnose source-level hints |
A setup.ps1 script is included to automate App Registration creation via Azure CLI. See Advanced Setup below.
Troubleshooting
AADSTS7000218: The request body must contain ... client_assertion
Your organization may block public client flows. Ask your Azure AD admin to either:
- Allow public client flows on the app registration, or
- Create a dedicated App Registration for your team (use
setup.ps1)
AADSTS65001: The user or administrator has not consented
First-time users in a new Azure AD tenant need to consent to Power BI permissions. If your tenant requires admin consent:
- Ask your admin to grant consent via Azure Portal -> App registrations -> API permissions -> "Grant admin consent"
- Or use
setup.ps1to create your own App Registration where you are the owner
AADSTS50076: MFA required or AADSTS50079
Multi-factor authentication is required by your organization. The device code flow supports MFA — complete the MFA challenge in your browser when prompted.
Not authenticated. Call pbi_auth first.
Token has expired and could not be refreshed. The agent should automatically re-trigger pbi_auth. If it doesn't, ask the agent to call pbi_auth again.
Token keeps expiring
By default, tokens are cached at ~/.powerbi-mcp/token.json. Make sure:
- The directory is writable
- You are not running multiple instances that overwrite each other's tokens
Refresh details return 403
A 403 on pbi_refresh_manage action=details typically indicates insufficient permissions or the refresh record has expired.
Advanced Setup
For organizations that require their own App Registration:
Prerequisites
- Azure CLI
- Azure AD permissions to create App Registrations
Run setup
./setup.ps1
This creates an Azure AD App Registration with the correct configuration:
| Setting | Value |
|---|---|
| Sign-in audience | Multi-tenant (any Azure AD directory) |
| Public client flows | Enabled |
| Redirect URI | https://login.microsoftonline.com/common/oauth2/nativeclient |
| API Permissions | Power BI Service: Dataset.ReadWrite.All, Workspace.Read.All (Delegated) |
Tech Stack
- Python ≥ 3.10
- FastMCP (
mcp[cli]≥ 1.6.0) — MCP server framework, stdio transport - httpx ≥ 0.27.0 — HTTP client for Azure AD & Power BI REST API calls
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。