用途
Power BI MCP Server 是一个 MCP(Model Context Protocol)服务器,旨在让 AI 智能体使用自然语言来管理 Power BI 工作区、数据集以及刷新(refresh)操作。对于刷新故障场景,服务器会把数据集上下文、执行错误、同工作区报表依赖以及可选的本地 PBIP 源码线索汇集到一个证据包中,供智能体提出下一步排查建议,而修复与运维决策仍由操作员负责。
主要能力
根据资料,服务器提供以下能力分区:
- 认证与发现(Authentication & Discovery):通过
pbi_auth完成一次认证,之后智能体可发现工作区、数据集并使用返回的 ID。 - 数据集与刷新管理(Dataset & Refresh Management):管理数据集与刷新任务,资料提到包含表级轮询与重试。
- 诊断与源码(Diagnostics & Source Code):通过
pbi_diagnose(workspace_id: str, dataset_id: str, refresh_id: str = "") -> str进行刷新诊断;当refresh_id为空时,会读取最近 10 条刷新记录,并按 API 响应顺序选择第一条status == "Failed"且refreshType == "ViaEnhancedApi"的记录。该工具返回 JSON 编码字符串,包含执行消息、对象、错误分类以及 PBIP 源码查找结果。 - 查询与报告(Query & Reporting):DAX 查询(含 RLS 模拟)与刷新报告。
资料中还提到实现参考包含:诊断工具、分类与 PBIP 查找、错误目录、数据集/报表上下文、刷新历史/详情。
诊断流程示例(模拟,非真实执行)
资料给出的示例流程为:智能体先发现工作区,再列出数据集并使用返回的 ID(如“Demo Operations”映射到特定 GUID)。随后调用诊断工具,获取证据,包括:
- 第一条带
location.SourceObject.Table的Error消息会指出初始排查候选表及其分区。 - 错误码
0xC1450012对应MashupDataAccessError,消息匹配错误目录中的EmptyColumnReference模式;后续的取消可能是级联所致。 - 当启用 PBIP 查找且提取成功时,
root_cause_source.partition_source_m会包含提取出的 TMDL 分区主体(含source =)。资料中的虚构本地 TMDL 示例显示Table.SelectColumns请求了空列名,而源仅定义OrderId与SalesAmount,从而佐证错误模式。工具不会选择预期的替换列。
示例中的智能体结论为:从 fact_sales 的 M 表达式开始检查,在确认预期列与上游架构后再编辑;若意图是选择 SalesAmount,在检查后再将 {""} 替换为 {"SalesAmount"};在 Power Query/Power BI Desktop 中验证更改,确认本地 PBIP 版本与已部署模型一致,然后按常规审批流程发布并重试,最后查看下一次刷新结果以验证恢复。
使用方式
资料给出的接入步骤:
- 安装依赖(未提供具体命令文本)。
- 在 MCP 客户端中注册:将配置添加到 MCP 客户端配置中,资料提到 Cursor / Windsurf / Antigravity IDE 使用
mcp.json。 - 一次性认证:首次使用时,智能体会调用
pbi_auth并显示提示;操作包括:在浏览器打开链接、输入显示的代码、使用 Microsoft 工作账户登录、批准权限。令牌缓存到~/.powerbi-mcp/token.json并自动刷新,除非撤销访问,否则无需重复。
服务器内置公开 client_id,开箱即用;可在项目根目录创建 config.json 进行自定义。资料还提到包含 setup.ps1 脚本,用于通过 Azure CLI 自动化创建应用注册。
适用场景
- 刷新故障排查:将执行错误、同工作区报表依赖与本地 PBIP 源码线索汇集为证据包,帮助操作员定位候选表与可能仍显示过期数据的报表。
- 数据集与刷新管理:通过自然语言管理工作区、数据集与刷新任务。
- 查询与报告:执行 DAX 查询(含 RLS 模拟)并生成刷新报告。
限制
- 资料强调诊断示例为模拟演示,不是真实 Power BI 执行;所有名称、ID、路径、服务响应、源码和智能体结论均为虚构,不表示生产事故、成功修复或实测时间节省。
- 当
refresh_id为空时,选择的是按 API 响应顺序第一条符合条件的失败记录,可能不同于最近一次的定时或按需失败;要调查已知事件,应传入其requestId作为refresh_id。 - 工具不会选择预期的替换列;修复与运维决策由操作员负责。
- 资料提到故障排查情形:组织可能阻止公共客户端流(AADSTS7000218)、需要管理员同意(AADSTS65001)、需要 MFA(AADSTS50076/50079)、令牌过期需重新调用
pbi_auth、刷新详情返回 403 通常表示权限不足或刷新记录已过期。 - 服务器基于 FastMCP(
mcp[cli] ≥ 1.6.0)与httpx ≥ 0.27.0。