关于 PowerBI MCP Server
PowerBI MCP Server 将 PowerBI REST API 的工作区、数据集和 DAX 查询能力提供给 AI 助手。它也可查询模型架构、报表、刷新记录及数据集参数。
主要功能
- 01列出可访问的工作区与数据集
- 02查看数据集架构和表
- 03列出工作区报表
- 04查询刷新历史和参数
- 05执行 DAX 查询
适用场景
- 01查找可访问的数据集
- 02检查数据集中的表和关系
- 03查看报表及最近刷新状态
- 04通过 DAX 分析销售数据
MCP 相关
该 MCP 服务向 MCP 客户端提供 PowerBI REST API 工具,用于浏览工作区和数据集、获取架构信息及执行 DAX 查询。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx powerbi-mcpPOWERBI_TENANT_IDAzure AD Tenant ID for PowerBI authenticationPOWERBI_CLIENT_IDAzure AD Application (Client) ID with PowerBI API accessPOWERBI_CLIENT_SECRET密钥Azure AD Client Secret for service principal authentication本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
PowerBI MCP 服务
一个用于与 PowerBI REST API 交互的模型上下文协议(MCP)服务。该服务让 Claude 等 AI 助手能够查询 PowerBI 工作区、数据集并执行 DAX 查询。
警告
安全最佳实践
- 切勿将凭据提交到版本控制系统
- 将凭据存储在
.env文件中(并将其添加到.gitignore)- 定期轮换 Azure AD 中的客户端密钥
- 使用最小权限访问(仅授予必要的工作区权限)
- 此服务对 PowerBI 数据集具有读写访问权限,请谨慎使用
✨ 功能
- 查询数据:通过对话直接运行 DAX 查询,提取洞察并分析 PowerBI 数据
- 发现工作区和数据集:探索组织 PowerBI 环境中有哪些可用数据
- 了解数据模型:获取详细的架构信息,了解现有表、列和关系
- 通过自然语言获取洞察:询问有关数据的问题,无需打开 PowerBI 即可获得答案
请参阅下方的可用工具。
💡 可以做什么?
| 场景 | 提示词示例 |
|---|---|
| 探索可用数据 | “我有权访问哪些工作区?” |
| 发现报表 | “我的工作区中有哪些可用报表?” |
| 了解数据架构 | “显示数据集 [dataset-name] 的架构” |
| 监控数据刷新 | “此数据集上次刷新是什么时候?” |
| 检查参数 | “此数据集接受哪些参数?” |
| 使用 DAX 查询数据 | “运行 DAX 查询,获取 [dataset] 中各地区销售额排名前 10 的数据” |
| 分析数据质量 | “Sales 数据集中有哪些表?” |
| 提取洞察 | “列出 Financial 数据集中的所有度量值” |
📋 先决条件
- Azure AD 服务主体:身份验证所必需。请按照下方的 Azure AD 配置步骤进行设置。
🔐 Azure AD 配置
安装服务之前,需要设置一个具有 PowerBI 访问权限的 Azure AD 应用。
创建 Azure AD 应用注册
- 前往 Azure Portal
- 导航至 Azure Active Directory > App registrations
- 点击 New registration
- 输入名称(例如,“PowerBI MCP Server”)
- 点击 Register
获取凭据
注册后,收集以下值:
- Tenant ID:可在应用的 Overview 页面中找到(Directory ID)
- Client ID:可在应用的 Overview 页面中找到(Application ID)
- Client Secret:
- 前往 Certificates & secrets
- 点击 New client secret
- 添加说明并设置到期时间
- 复制密钥 Value(此值只能查看一次!)
在 PowerBI 中启用服务主体
- 前往 PowerBI Admin Portal
- 导航至 Tenant settings > Developer settings
- 启用 Service principals can use PowerBI APIs
- 将应用添加到安全组,或为整个组织启用
- 点击 Apply
说明
服务主体可以访问已明确授予其权限的工作区(Admin、Member 或 Contributor 角色)。
授予工作区访问权限
对于要访问的每个工作区:
- 在 PowerBI 中前往该工作区
- 点击工作区设置(⚙️)> Access
- 点击 Add people or groups
- 搜索应用名称
- 分配角色:Admin、Member 或 Contributor
- 点击 Add
📦 安装
方法 0:从 PyPI 安装(推荐)
发布到 PyPI 后,这是最简单的安装方法。
将以下内容添加到 MCP 客户端配置文件中:
对于 Claude Desktop(在 macOS 上,配置文件位于 ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"powerbi-mcp": {
"command": "uvx",
"args": ["powerbi-mcp"],
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
对于 Claude Code(项目目录中的 ./.mcp.json):
{
"mcpServers": {
"powerbi-mcp": {
"command": "uvx",
"args": ["powerbi-mcp"],
"env": {}
}
}
}
使用 Claude Code 时,请在项目目录中(即运行 Claude Code 的目录)创建 .env 文件:
POWERBI_TENANT_ID=your-tenant-id-here
POWERBI_CLIENT_ID=your-client-id-here
POWERBI_CLIENT_SECRET=your-client-secret-here
提示
.env文件应位于工作目录中,而不是服务的安装目录中。
对于 OpenCode(~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"powerbi-mcp": {
"type": "local",
"command": ["uvx", "powerbi-mcp"],
"enabled": true,
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
添加配置后,重启 MCP 客户端。
方法 1:直接从 GitHub 运行(开发)
此方法使用 uvx 直接从 GitHub 运行服务,无需克隆仓库。
将以下内容添加到 MCP 客户端配置文件中:
对于 Claude Desktop(在 macOS 上,配置文件位于 ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"powerbi-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/gurvinder-dhillon/powerbi-mcp@main",
"run-server"
],
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
对于 Claude Code(项目目录中的 ./.mcp.json):
{
"mcpServers": {
"powerbi-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/gurvinder-dhillon/powerbi-mcp@main",
"run-server"
],
"env": {}
}
}
}
使用 Claude Code 时,请在项目目录中(即运行 Claude Code 的目录)创建 .env 文件:
POWERBI_TENANT_ID=your-tenant-id-here
POWERBI_CLIENT_ID=your-client-id-here
POWERBI_CLIENT_SECRET=your-client-secret-here
提示
.env文件应位于工作目录中,而不是服务的安装目录中。
服务会自动从当前工作目录中的 .env 文件加载环境变量。
对于 OpenCode(~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"powerbi-mcp": {
"type": "local",
"command": [
"uvx",
"--from",
"git+https://github.com/gurvinder-dhillon/powerbi-mcp@main",
"run-server"
],
"enabled": true,
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
添加配置后,重启 MCP 客户端。
方法 2:克隆到本地(贡献者)
适用于想要从本地克隆的仓库运行服务的贡献者:
- 克隆仓库:
git clone https://github.com/gurvinder-dhillon/powerbi-mcp.git
cd powerbi-mcp
- 安装依赖项:
uv sync
- 添加到 MCP 客户端配置中:
对于 Claude Desktop:
{
"mcpServers": {
"powerbi-mcp-local": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/powerbi-mcp",
"run",
"run-server"
],
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
对于 Claude Code(项目目录中的 ./.mcp.json):
{
"mcpServers": {
"powerbi-mcp-local": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/powerbi-mcp",
"run",
"run-server"
],
"env": {}
}
}
}
对于 OpenCode(~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"powerbi-mcp-local": {
"type": "local",
"command": [
"uv",
"--directory",
"/absolute/path/to/powerbi-mcp",
"run",
"run-server"
],
"enabled": true,
"env": {
"POWERBI_TENANT_ID": "your-tenant-id-here",
"POWERBI_CLIENT_ID": "your-client-id-here",
"POWERBI_CLIENT_SECRET": "your-client-secret-here"
}
}
}
}
将 /absolute/path/to/powerbi-mcp 替换为克隆仓库的实际路径。
使用 Claude Code 或 OpenCode 时,请在项目目录中创建 .env 文件并填入凭据(格式请参阅上文方法 1 中的 Claude Code 部分)。
🚀 快速开始
安装完成后,尝试以下步骤开始使用:
- 验证连接:询问 Claude“我可以访问哪些 PowerBI 工作区?”
- 探索数据:“显示工作区 [workspace-name] 中的数据集”
- 查看架构:“数据集 [dataset-name] 中有哪些表?”
- 运行查询:“在 [dataset-name] 上执行此 DAX 查询:EVALUATE TOPN(10, Sales)”
🛠️ 可用工具
| 工具 | 描述 | 关键参数 |
|---|---|---|
get_workspaces | 列出可访问的 PowerBI 工作区 | top、detail |
get_datasets | 获取工作区或“My workspace”中的数据集 | workspace_id、detail |
get_dataset | 获取数据集的详细信息,包括架构 | dataset_id、workspace_id、detail |
get_reports | 列出工作区中的 PowerBI 报表 | workspace_id、format、detail |
get_refresh_history | 获取数据集刷新历史记录,包括状态和时间戳 | dataset_id、workspace_id、top、format |
get_parameters | 列出数据集参数及其当前值 | dataset_id、workspace_id、format、detail |
query_dataset | 对数据集执行 DAX 查询 | dataset_id、dax_query、workspace_id |
工具详情
1. get_workspaces
列出服务主体可访问的 PowerBI 工作区。
参数:
top(可选):返回的工作区数量(默认值:100,最大值:5000)detail(可选):详情级别——“concise”、“normal”或“full”(默认值:“normal”)
2. get_datasets
获取工作区或“My workspace”中的数据集列表。
参数:
workspace_id(可选):工作区 ID(若为“My workspace”,则省略)detail(可选):详情级别——“concise”、“normal”或“full”(默认值:“normal”)
3. get_dataset
获取特定数据集的详细信息,包括架构和表。
参数:
dataset_id(必需):数据集 IDworkspace_id(可选):工作区 ID(“My workspace” 可省略)detail(可选):详细程度——“concise”、“normal” 或 “full”(默认:“normal”)
4. get_reports
列出工作区中的 PowerBI 报表。
参数:
workspace_id(可选):工作区 ID(“My workspace” 可省略)format(可选):响应格式——“markdown” 或 “json”(默认:“markdown”)detail(可选):详细程度——“concise” 或 “normal”(默认:“concise”)
5. get_refresh_history
获取数据集的刷新历史,显示最近的刷新操作。
参数:
dataset_id(必需):数据集 IDworkspace_id(可选):工作区 ID(“My workspace” 可省略)top(可选):要返回的刷新记录数量(默认:5,最大:60)format(可选):响应格式——“markdown” 或 “json”(默认:“markdown”)
6. get_parameters
获取数据集中定义的参数。
参数:
dataset_id(必需):数据集 IDworkspace_id(可选):工作区 ID(“My workspace” 可省略)format(可选):响应格式——“markdown” 或 “json”(默认:“markdown”)detail(可选):详细程度——“concise” 或 “normal”(默认:“normal”)
注意: 不支持使用 SQL、Oracle、Teradata、SAP HANA DirectQuery 连接的数据集,也不支持通过 XMLA 终结点修改的数据集。
7. query_dataset
对数据集执行 DAX 查询。
参数:
dataset_id(必需):数据集 IDdax_query(必需):DAX 查询(必须以 “EVALUATE” 开头)workspace_id(可选):工作区 ID(“My workspace” 可省略)
DAX 查询示例
基本表扫描:
EVALUATE
'Sales'
排序后取前 N 项:
EVALUATE
TOPN(10, 'Sales', [Amount], DESC)
筛选结果:
EVALUATE
FILTER('Sales', [Year] = 2024)
计算列:
EVALUATE
ADDCOLUMNS(
'Sales',
"Profit", [Revenue] - [Cost]
)
汇总摘要:
EVALUATE
SUMMARIZE(
'Sales',
'Product'[Category],
"Total Sales", SUM('Sales'[Amount])
)
⚠️ 故障排除
身份验证错误
错误:“Authentication failed”
- 确认
POWERBI_TENANT_ID、POWERBI_CLIENT_ID和POWERBI_CLIENT_SECRET正确 - 检查 Azure AD 中的客户端密钥是否已过期
- 确保服务主体已在 PowerBI 管理门户中启用
权限错误
错误:“403 Forbidden” 或 “Access denied”
- 确认已向服务主体授予工作区访问权限
- 检查工作区角色是否为 Admin、Member 或 Contributor(Viewer 不足以用于 API 访问)
- 确认已在 PowerBI 管理门户中启用“Service principals can use PowerBI APIs”
连接问题
MCP 客户端中未显示服务
- 添加配置后,重启 MCP 客户端
- 检查配置文件语法(JSON 必须有效)
- 对于本地克隆,请确认绝对路径正确
工具无法正常工作
- 确保已配置凭据
- 查看 MCP 客户端日志以获取详细错误消息
- 对于 Claude Code,请确认
.env文件位于当前工作目录中
📚 资源
💬 反馈与支持
- 问题:通过 GitHub Issues 报告错误或请求功能
- 讨论:在 GitHub Discussions 中提问
- 拉取请求:欢迎贡献!请参阅 DEVELOPER_GUIDE.md
🤝 贡献
有关开发和为此项目做贡献的信息,请参阅 DEVELOPER_GUIDE.md。
许可证
本项目采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。