mcpField
P
PowerBI MCP Server

PowerBI MCP Server

本地服务
github.com/gurvinder-dhillon数据与分析038 周前更新

关于 PowerBI MCP Server

PowerBI MCP Server 将 PowerBI REST API 的工作区、数据集和 DAX 查询能力提供给 AI 助手。它也可查询模型架构、报表、刷新记录及数据集参数。

主要功能

  1. 01列出可访问的工作区与数据集
  2. 02查看数据集架构和表
  3. 03列出工作区报表
  4. 04查询刷新历史和参数
  5. 05执行 DAX 查询

适用场景

  1. 01查找可访问的数据集
  2. 02检查数据集中的表和关系
  3. 03查看报表及最近刷新状态
  4. 04通过 DAX 分析销售数据

MCP 相关

该 MCP 服务向 MCP 客户端提供 PowerBI REST API 工具,用于浏览工作区和数据集、获取架构信息及执行 DAX 查询。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"gurvinder-dhillon-powerbi": {
"command": "uvx",
"args": [
"powerbi-mcp"
],
"env": {
"POWERBI_TENANT_ID": "<POWERBI_TENANT_ID>",
"POWERBI_CLIENT_ID": "<POWERBI_CLIENT_ID>",
"POWERBI_CLIENT_SECRET": "<POWERBI_CLIENT_SECRET>"
}
}
}
}
启动命令uvx powerbi-mcp
需要配置的环境变量
POWERBI_TENANT_IDAzure AD Tenant ID for PowerBI authentication
POWERBI_CLIENT_IDAzure AD Application (Client) ID with PowerBI API access
POWERBI_CLIENT_SECRET密钥Azure AD Client Secret for service principal authentication

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypipowerbi-mcp0.1.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PowerBI MCP 服务

PyPI Python Versions License: MIT

一个用于与 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 应用注册
  1. 前往 Azure Portal
  2. 导航至 Azure Active Directory > App registrations
  3. 点击 New registration
  4. 输入名称(例如,“PowerBI MCP Server”)
  5. 点击 Register
获取凭据

注册后,收集以下值:

  • Tenant ID:可在应用的 Overview 页面中找到(Directory ID)
  • Client ID:可在应用的 Overview 页面中找到(Application ID)
  • Client Secret:
    • 前往 Certificates & secrets
    • 点击 New client secret
    • 添加说明并设置到期时间
    • 复制密钥 Value(此值只能查看一次!)
在 PowerBI 中启用服务主体
  1. 前往 PowerBI Admin Portal
  2. 导航至 Tenant settings > Developer settings
  3. 启用 Service principals can use PowerBI APIs
  4. 将应用添加到安全组,或为整个组织启用
  5. 点击 Apply

说明

服务主体可以访问已明确授予其权限的工作区(Admin、Member 或 Contributor 角色)。

授予工作区访问权限

对于要访问的每个工作区:

  1. 在 PowerBI 中前往该工作区
  2. 点击工作区设置(⚙️)> Access
  3. 点击 Add people or groups
  4. 搜索应用名称
  5. 分配角色:Admin、Member 或 Contributor
  6. 点击 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:克隆到本地(贡献者)

适用于想要从本地克隆的仓库运行服务的贡献者:

  1. 克隆仓库:
git clone https://github.com/gurvinder-dhillon/powerbi-mcp.git
cd powerbi-mcp
  1. 安装依赖项:
uv sync
  1. 添加到 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 部分)。

🚀 快速开始

安装完成后,尝试以下步骤开始使用:

  1. 验证连接:询问 Claude“我可以访问哪些 PowerBI 工作区?”
  2. 探索数据:“显示工作区 [workspace-name] 中的数据集”
  3. 查看架构:“数据集 [dataset-name] 中有哪些表?”
  4. 运行查询:“在 [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(必需):数据集 ID
  • workspace_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(必需):数据集 ID
  • workspace_id(可选):工作区 ID(“My workspace” 可省略)
  • top(可选):要返回的刷新记录数量(默认:5,最大:60)
  • format(可选):响应格式——“markdown” 或 “json”(默认:“markdown”)
6. get_parameters

获取数据集中定义的参数。

参数:

  • dataset_id(必需):数据集 ID
  • workspace_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(必需):数据集 ID
  • dax_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 文件位于当前工作目录中

📚 资源

💬 反馈与支持

🤝 贡献

有关开发和为此项目做贡献的信息,请参阅 DEVELOPER_GUIDE.md。

许可证

本项目采用 MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。