
转变你的Power BI体验——用自然语言提问并即时获得数据洞察。
这是一个模型上下文协议(MCP)服务器,它使AI助手能够通过自然语言与Power BI数据集进行交互。查询数据、生成DAX,并在不离开AI助手的情况下获取洞察。

提出诸如“各地区的总销售额是多少?”这样的问题,并从你的Power BI数据中即时获得洞察。
| 平台 | Python | .NET运行时 | ADOMD.NET | 状态 |
|---|---|---|---|---|
| Windows | 3.10+ | ✅ 内置 | ✅ 可用 | ✅ 完整支持 |
| Linux | 3.10+ | ✅ 可用 | ⚠️ Docker仅限 | ✅ Docker支持 |
| macOS | 3.10+ | ✅ 可用 | ❌ 不可用 | ❌ 不支持 |
注意:对于Linux系统,请使用Docker来运行包含所有依赖项的服务器。
克隆仓库
git clone https://github.com/yourusername/powerbi-mcp-server.git
cd powerbi-mcp-server
安装依赖项
pip install -r requirements.txt
配置环境变量
cp .env.example .env
# 编辑.env文件以包含你的凭据
测试连接
python quickstart.py
添加到你的Claude Desktop配置文件:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"powerbi": {
"command": "python",
"args": ["C:/path/to/powerbi-mcp-server/src/server.py"],
"env": {
"PYTHONPATH": "C:/path/to/powerbi-mcp-server",
"OPENAI_API_KEY": "your-openai-api-key"
}
}
}
}
⚠️ 重要:Docker容器不使用.env文件。为了安全起见,.env文件被排除在Docker构建上下文之外。你需要通过docker run -e、Docker Compose或云平台提供环境变量。
构建容器镜像:
docker build -t powerbi-mcp .
运行服务器:
docker run -it --rm -e OPENAI_API_KEY=<key> powerbi-mcp
默认情况下,容器监听端口8000。你可以通过环境变量或命令行参数覆盖主机或端口:
docker run -it --rm -e OPENAI_API_KEY=<key> -p 7000:7000 powerbi-mcp \
python src/server.py --host 0.0.0.0 --port 7000
服务器在/sse暴露一个Server-Sent Events端点。客户端应连接到此端点,然后向初始endpoint事件提供的路径(通常是/messages/)POST JSON-RPC消息。
容器包括pythonnet和pyadomd所需的.NET运行时。它设置PYTHONNET_RUNTIME=coreclr和DOTNET_ROOT=/usr/share/dotnet,以便自动检测.NET运行时。
重要:Docker容器不使用.env文件。出于安全原因,本地目录中的任何.env文件都会通过.dockerignore排除在Docker镜像之外。相反,通过以下方式提供环境变量:
docker run -e VARIABLE=value可用的环境变量与.env.example中的相同。
一旦配置完成,你可以通过Claude与你的Power BI数据进行交互:
连接到Power BI数据集在powerbi://api.powerbi.com/v1.0/myorg/YourWorkspace
有哪些可用的表?
显示销售表的结构
按产品类别划分的总销售额是多少?
展示过去12个月的收入趋势
哪个商店的毛利最高?
执行DAX: EVALUATE SUMMARIZE(Sales, Product[Category], "Total", SUM(Sales[Amount]))
Power BI XMLA端点
powerbi://api.powerbi.com/v1.0/myorg/WorkspaceNameAzure AD服务主体
OpenAI API密钥 (可选)
gpt-4o-mini(比GPT-4便宜200倍)创建一个.env文件(OpenAI设置是可选的):
# OpenAI配置(可选)
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_MODEL=gpt-4o-mini # 默认为gpt-4o-mini
# 可选:默认Power BI凭证
# 当`connect_powerbi`动作不提供tenant_id、client_id或client_secret时使用这些值。
DEFAULT_TENANT_ID=your_tenant_id
DEFAULT_CLIENT_ID=your_client_id
DEFAULT_CLIENT_SECRET=your_client_secret
# 日志
LOG_LEVEL=INFO
powerbi-mcp-server/
├── src/
│ └── server.py # 主MCP服务器实现
├── docs/ # 文档
├── examples/ # 示例查询和用例
├── tests/ # 测试套件
├── .env.example # 环境变量模板
├── requirements.txt # Python依赖项
├── quickstart.py # 快速测试脚本
└── README.md # 此文件
.env文件并将它们放在.gitignore中运行标准测试套件:
python -m pytest tests/
测试特定功能:
python tests/test_connector.py
python tests/test_server_process.py
与实际Power BI数据集的真实集成测试可用但默认禁用。这些测试会连接到实际的Power BI服务,并可能会消耗API配额。
启用集成测试:
配置测试环境
cp .env.example .env
# 编辑.env文件并设置:
ENABLE_INTEGRATION_TESTS=true
设置测试数据集配置
# 测试Power BI数据集配置
TEST_XMLA_ENDPOINT=powerbi://api.powerbi.com/v1.0/myorg/YourTestWorkspace
TEST_TENANT_ID=your_tenant_id
TEST_CLIENT_ID=your_client_id
TEST_CLIENT_SECRET=your_client_secret
TEST_INITIAL_CATALOG=YourTestDatasetName
# 可选:预期测试数据用于验证
TEST_EXPECTED_TABLE=Sales
TEST_EXPECTED_COLUMN=Amount
TEST_DAX_QUERY=EVALUATE TOPN(1, Sales)
TEST_MIN_TABLES_COUNT=1
运行集成测试
# 带有安全检查的交互式运行器
python run_integration_tests.py
# 或直接使用pytest
python -m pytest tests/test_integration.py -v
# 带有自动确认(CI/CD)
python run_integration_tests.py --yes
集成测试覆盖率:
⚠️ 警告:集成测试连接到真实的Power BI数据集,并可能消耗:
仅在专用测试环境中运行集成测试。
我们欢迎贡献!请参阅CONTRIBUTING.md了解详情。
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)# 检查环境兼容性
python scripts/check_test_environment.py
# 运行单元测试
python -m pytest tests/ -k "not test_integration" -v
# 运行集成测试(需要.env配置)
python -m pytest tests/test_integration.py -v
找不到ADOMD.NET
连接失败
超时错误
详见TROUBLESHOOTING.md中的详细解决方案。
本项目根据MIT许可发布 - 详情见LICENSE文件。