用途
Power BI Analyst MCP 是一个本地 MCP 服务器,旨在将 Power BI 语义模型连接到 LLM(如 Claude)以进行数据分析。它解决的核心瓶颈是分析翻译:将数据转化为决策所需的人工技能和时间。此服务器将翻译工作交由 LLM 处理,让用户通过自然语言提问即可获得基于实时 DAX 的答案,无需了解 DAX 或等待分析师。
主要能力
- 跨模型复合推理:代理可连续运行多个查询,每个查询基于前一个结果,综合推理并在几分钟内得出结论。例如询问“EMEA 利润率下降的原因是什么?”,Claude 会探索度量值、深入市场、检查时间趋势,并给出解释。
- 自然语言分析:任何利益相关者都可以用自然语言提问并获得实时 DAX 支持的真实答案。
- 主动异常检测:可定期对关键度量值运行 Claude,查询数据并与前期比较,用通俗语言标记超出预期范围的情况。
- 自文档化语义模型:Claude 可探索架构并生成数据字典,用于入职、治理和理解模型内容。
- 大数据集自动处理:大型查询结果自动保存为本地 CSV,代理获得紧凑摘要(行数、列名、5 行预览),并按需分页读取。
- 查询历史积累:每次成功的 DAX 查询记录在本地 JSONL 审计跟踪中,包括用户提问、生成的 DAX、返回列和 CSV 保存位置。代理可搜索历史以复用 DAX 模式和结果文件。
- 本地数据安全:查询、结果和令牌不经过云中继。服务器本地运行,使用 OAuth 设备代码流认证,令牌存储在操作系统原生安全存储(Keychain/DPAPI/LibSecret)。
使用方式
前提条件
- Power BI Pro、Premium Per User (PPU) 或 Premium 容量许可证
- Azure AD 应用注册(免费,约 5 分钟)
步骤 1 — 创建 Azure AD 应用注册
- 转到 portal.azure.com → Azure Active Directory → 应用注册 → 新注册。
- 命名(如 PowerBI MCP),选择“仅此组织目录中的账户(单租户)”,点击注册。
- 在“身份验证” → “平台配置”下添加“移动和桌面应用程序”,勾选重定向 URI:https://login.microsoftonline.com/common/oauth2/nativeclient
- 在“身份验证” → “高级设置”下,将“允许公共客户端流”设为“是”,保存。
- 在“API 权限” → “添加权限” → “Power BI 服务”中,添加:Dataset.Read.All、Workspace.Read.All。若租户需要管理员同意,请让管理员授予。
- 从“概述”页复制“应用程序(客户端) ID”和“目录(租户) ID”。 注意:Power BI 租户设置“数据集执行查询 REST API”必须在 Power BI 管理门户(集成设置)中启用,execute_dax 才能工作。
步骤 2 — 安装和连接
服务器已发布在 PyPI。最快方式是使用 uvx,无需手动安装或虚拟环境。 将以下内容添加到 claude_desktop_config.json: 配置文件位置: macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json POWERBI_TENANT_ID 对几乎所有用户都是必需的。设置为步骤 1 中的目录(租户) ID。 在项目中添加 .cursor/mcp.json 文件(或使用全局配置),然后替换 uvx 命令块。 .mcpb(MCP Bundle)是一个 ZIP 归档,Claude Desktop 可通过拖放安装,无需手动编辑配置。首次运行时自动安装所有 Python 依赖,唯一前提是 Python 3.10+。bundle/ 中有两个清单。构建组织 bundle:编辑 bundle/manifest.json 并在 mcp_config.env 中设置值。POWERBI_OUTPUT_DIR 可选,省略则使用默认 ~/powerbi_output。分发:将 dist/*.mcpb 分享给同事,拖放到 Claude Desktop → 设置 → 开发者。bundle/manifest.json 和 dist/ 均被 gitignore,只提交无凭据模板。
典型分析工作流
连接后,让 LLM 自然遵循此序列:注意始终使用 list_apps(而非 list_workspaces)来发现工作区 ID。在应用管理的组织中,数据集访问通过 Power BI 应用授予,使用 list_workspaces 的工作区 ID 可能导致权限错误。
大型结果处理
大型结果返回的摘要包含:rowCount(总行数)、columns(列名和类型)、preview(前 5 行)、savedTo(CSV 绝对路径)。代理随后可用 read_query_result 分页读取:返回 rows、totalRows、offset、limit 和 hasMore。通过增加 offset 获取下一页。
execute_dax 参数控制结果大小。输出目录默认为 ~/powerbi_output,可通过 POWERBI_OUTPUT_DIR 覆盖。CSV 文件和查询历史日志不会自动清理,需手动管理或添加保留策略。
适用场景
- 业务用户无需 DAX 知识即可获得数据答案
- 分析师需快速探索数据并自动生成解释
- 定期监控关键指标并自动标记异常
- 生成数据字典以理解语义模型
- 处理数十万行的大型数据集而不中断 AI 会话
限制
- 只读。不支持创建、修改和删除 Power BI 工件。
- execute_dax 限制:每次查询最多 100,000 行或 1,000,000 个值(Power BI API 硬上限)。
- 速率限制:每用户每分钟 120 个 DAX 查询请求。
- list_tables、list_measures 和 list_columns 使用 DAX INFO.VIEW.* 函数,需要启用 XMLA 读取访问的 Import 或 DirectQuery 模型。
- execute_dax 写入的 CSV 文件不会自动清理。
- 令牌通过 msal-extensions 持久化:macOS 使用 Keychain,Windows 使用 DPAPI 加密文件,Linux 使用 LibSecret(gnome-keyring/KWallet),若不可用则回退到加密文件。缓存文件位于 ~/.powerbi_mcp_token_cache.bin,被 .gitignore 覆盖。服务器不记录访问令牌。所有数据访问受用户自身的 Power BI 权限控制(委托 OAuth 2.0,无服务主体,无客户端密钥)。