🚀 Power BI MCP Server
Power BIの使用体験を変革します。自然言語で質問を投げかけ、データから即座に洞察を得ることができます。
このModel Context Protocol (MCP)サーバーは、AIアシスタントが自然言語を通じてPower BIデータセットと対話できるようにします。AIアシスタント内でデータをクエリし、DAXを生成し、洞察を得ることができます。
🚀 クイックスタート
前提条件
- Python 3.8以上
- ADOMD.NETを搭載したWindows、またはLinux上のDocker(コンテナにはランタイムが含まれています)
- SQL Server Management Studio (SSMS)またはADOMD.NETクライアントライブラリ(Windowsのみ)
- XMLAエンドポイントが有効になっているPower BI Pro/Premium
- Power BIデータセットへのアクセス権を持つAzure AD Service Principal
- 自然言語機能を使用する場合はOpenAI APIキー(オプション)
インストール
- リポジトリをクローンする
git clone https://github.com/yourusername/powerbi-mcp-server.git
cd powerbi-mcp-server
- 依存関係をインストールする
pip install -r requirements.txt
- 環境変数を設定する
cp .env.example .env
- 接続をテストする
python quickstart.py
Claude Desktopでの設定
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
コンテナイメージをビルドします。
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
コンテナにはpythonnetとpyadomdに必要な.NETランタイムが含まれています。PYTHONNET_RUNTIME=coreclrとDOTNET_ROOT=/usr/share/dotnetを設定することで、.NETランタイムが自動的に検出されます。環境変数は.env.exampleと同じで、-e VAR=valueで渡すか、ビルドコンテキストに.envファイルを提供します。
✨ 主な機能
- 🔗 Power BIへの直接接続 - XMLAエンドポイントを介して任意のPower BIデータセットに接続できます。
- 💬 自然言語クエリ - 平易な英語で質問を投げかけ、DAXクエリと結果を取得できます。
- 📊 自動DAX生成 - GPT-4o-miniを使用したAIによるDAXクエリ生成機能があります。
- 🔍 テーブル探索 - テーブル、列、メジャーを自動的に探索できます。
- ⚡ 最適化されたパフォーマンス - 非同期操作とインテリジェントなキャッシュ機能があります。
- 🛡️ 安全な認証 - Azure ADを使用したService Principal認証方式を採用しています。
- 📈 スマートな提案 - データに基づいた関連する質問の提案を取得できます。
🎥 デモ
「地域別の総売上はいくらですか?」のような質問を投げかけ、Power BIのデータから即座に洞察を得ることができます。
💻 使用例
基本的な使用法
Connect to Power BI dataset at powerbi://api.powerbi.com/v1.0/myorg/YourWorkspace
What tables are available?
Show me the structure of the Sales table
What are the total sales by product category?
Show me the trend of revenue over the last 12 months
Which store has the highest gross margin?
Execute DAX: EVALUATE SUMMARIZE(Sales, Product[Category], "Total", SUM(Sales[Amount]))
🔧 設定
必要な資格情報
- Power BI XMLAエンドポイント
- 形式:
powerbi://api.powerbi.com/v1.0/myorg/WorkspaceName
- Power BI管理ポータル → ワークスペース設定で有効にします。
- Azure AD Service Principal
- Azureポータル → アプリ登録で作成します。
- Power BIワークスペース → アクセス設定でアクセス権を付与します。
- OpenAI APIキー (オプション)
- 自然言語機能を使用する場合にのみ必要です。
- このキーが設定されていない場合、GPTモデルに依存するエンドポイントは非表示になります。
- OpenAI Platformから取得します。
- 使用するモデル:
gpt-4o-mini(GPT-4より200倍安価)
環境変数
.envファイルを作成します(OpenAIの設定はオプションです)。
# OpenAI Configuration (optional)
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_MODEL=gpt-4o-mini # Defaults to gpt-4o-mini
# Optional: Default Power BI Credentials
# These values are used when the `connect_powerbi` action does not supply
# tenant_id, client_id or client_secret.
DEFAULT_TENANT_ID=your_tenant_id
DEFAULT_CLIENT_ID=your_client_id
DEFAULT_CLIENT_SECRET=your_client_secret
# Logging
LOG_LEVEL=INFO
🏗️ アーキテクチャ
powerbi-mcp-server/
├── src/
│ └── server.py # Main MCP server implementation
├── docs/ # Documentation
├── examples/ # Example queries and use cases
├── tests/ # Test suite
├── .env.example # Environment variables template
├── requirements.txt # Python dependencies
├── quickstart.py # Quick test script
└── README.md # This file
主要コンポーネント
- PowerBIConnector - XMLA接続とDAX実行を処理します。
- DataAnalyzer - AIによるクエリ生成と解釈を行います。
- PowerBIMCPServer - MCPプロトコルの実装を行います。
🔐 セキュリティのベストプラクティス
- 資格情報をコミットしない -
.envファイルを使用し、.gitignoreに登録してください。
- Service Principalを使用する - 個人の資格情報ではなくService Principalを使用します。
- 最小限の権限を付与する - データセットに必要な最小限のアクセス権のみを付与します。
- シークレットを定期的に更新する - Service Principalのシークレットを定期的に更新します。
- 安全な接続を使用する - 常にHTTPS/TLSを使用します。
🧪 テスト
テストスイートを実行します。
python -m pytest tests/
特定の機能をテストします。
python tests/test_connection.py
python tests/test_dax_generation.py
🤝 コントリビューション
コントリビューションを歓迎します!詳細はCONTRIBUTING.mdを参照してください。
- リポジトリをフォークします。
- 新しい機能ブランチを作成します (
git checkout -b feature/AmazingFeature)。
- 変更をコミットします (
git commit -m 'Add some AmazingFeature')。
- ブランチにプッシュします (
git push origin feature/AmazingFeature)。
- プルリクエストを作成します。
📊 パフォーマンス
- 接続時間: 2 - 3秒
- クエリ実行時間: 複雑さに応じて1 - 5秒
- トークン使用量: GPT-4o-miniを使用した場合、クエリあたり約500 - 2000トークン
- コスト: 通常の使用では1日あたり約$0.02 - 0.06
🐛 トラブルシューティング
一般的な問題
- ADOMD.NETが見つからない
- Windowsの場合はSQL Server Management Studio (SSMS)をインストールしてください。
- Linuxの場合は、クロスプラットフォームのADOMD.NETランタイムが含まれている提供されたDockerイメージを使用してください。
- 接続に失敗する
- Power BIでXMLAエンドポイントが有効になっていることを確認してください。
- Service Principalがワークスペースにアクセスできることを確認してください。
- データセット名が正確に一致することを確認してください。
- タイムアウトエラー
- Claude Desktopの設定でタイムアウト時間を増やしてください。
- Power BIへのネットワーク接続を確認してください。
詳細な解決策はトラブルシューティングガイドを参照してください。
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細はLICENSEファイルを参照してください。
🙏 謝辞
📬 サポート