Tabular Mcp について
Tabular Mcp(MCPBI)は、Power BI Desktop 上でローカル実行されているテーブルモデルに接続する MCP サーバーです。DAX クエリのデバッグ、分析、作成を行うユーザーを対象とし、LLM クライアントがモデル構造を把握してクエリを実行できるようにします。
主な機能
- 01テーブル、列、メジャー、リレーションシップの一覧取得
- 02DAX 関数の詳細とパラメーターの確認
- 03行数制限付きのカスタム DAX クエリ実行
- 04DAX 構文の検証とクエリパフォーマンスの分析
- 05任意のデータマスキング戦略
- 06クエリ結果の切り捨て情報
活用シーン
- 01不慣れな Power BI モデルの構造の把握
- 02既存のメジャー命名規則に沿った新規 DAX メジャーの作成
- 03DAX 式の反復的なデバッグ
MCP 対応
本プロジェクトはモデルオブジェクトの参照、DAX 関数の照会、DAX クエリの実行、構文検証などのツールを MCP クライアントに公開する MCP サーバーです。ADOMD.NET を使い、ポート指定でローカルの Power BI Desktop インスタンスに接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCPBI - Tabular Model MCP Server
これは、ローカルで実行されている Tabular Model、つまり PowerBI Desktop 上で実行されている PowerBI モデル向けの Model Context Protocol(MCP)サーバーです。
このサーバーにより、MCP 対応の LLM クライアントが表形式モデルと通信し、DAX クエリのデバッグ、分析、作成を支援できます。
例:MCP 経由で Tabular Model にクエリを実行する Copilot
仕組み
ADOMD.NET の AdomdConnection を使用して、ローカルで実行されている Tabular Model のインスタンスに接続します。
この接続を使用して、サーバーはクライアントが事前定義されたツールを通じて DAX クエリを実行し、モデルのメタデータ(DMV クエリを使用)を取得できるようにします。高い精度を実現するほか、デバッグや開発用のカスタム DAX クエリにも対応しています。
機能
設定オプション
ポート
接続する Power BI Desktop インスタンスのポートを指定します(必須)。
# Example: Connect to Power BI Desktop instance on port 56751
dotnet run -- --port 56751
難読化
設定可能な暗号化方式で機密データを保護します。
- なし(デフォルト):難読化しません
- すべて:すべての値をマスクします
- ディメンション:テキスト/日付フィールドのみをマスクします(数値データは表示したままにします)
- ファクト:数値フィールドのみをマスクします(ディメンションのコンテキストは保持します)
# Example: Protect customer/product names while keeping sales figures visible
dotnet run -- --port 56751 --obfuscation-strategy dimensions --encryption-key "YourSecureKey123!"
出力の切り捨て
包括的なメタデータを含めて、行数を自動的に制限します。
- デフォルトの上限は 500 行です(設定可能)
- レスポンスには
totalRows、displayedRows、truncated、hasMoreが含まれます
# Example: Increase row limit for analysis
dotnet run -- --port 56751 --max-rows 2000
ツール
list_objects
- モデル内のすべてのオブジェクト(テーブル、列、メジャー、リレーションシップ)を一覧表示します
- オブジェクトの種類、名前、基本的なメタデータを返します
get_object_details
- 特定のオブジェクト(テーブル、列、メジャー)の詳細なメタデータを取得します
- プロパティ、データ型、リレーションシップ、依存関係を返します
list_functions
- カテゴリまたは起源によるオプションのフィルタリングを指定して、利用可能な DAX 関数を一覧表示します
- 関数名、説明、インターフェースの分類、起源を返します
get_function_details
- 特定の DAX 関数について、すべてのパラメーター情報を含む詳細を取得します
- 関数シグネチャ、パラメーター要件、戻り値の型、DirectQuery との互換性を返します
run_query
- モデルに対してカスタム DAX クエリを実行します
- メタデータ(合計行数、切り捨て状態)とともにクエリ結果を返します
1. モデルの検出
[ListTables]、[GetTableColumns]、[GetTableRelationships] を使用すると、Power BI Desktop を手動でクリックして確認することなく、使い慣れていないモデルの構造をすばやく把握できます。
2. DAX の支援
LLM クライアントは [ListMeasures] と [GetMeasureDetails] を使用して既存の DAX パターンを把握し、命名規則や計算スタイルに沿った新しいメジャーを提案できます。
3. デバッグ
[RunQuery] と [ValidateDaxSyntax] を組み合わせると、DAX 式を繰り返しテスト、調整し、構文や結果に関するフィードバックをすぐに得られます。
validate_query
- 実行せずに DAX クエリの構文を検証します
- 構文の正否と、該当する場合はエラーメッセージを返します
analyze_query_performance
- DAX クエリのパフォーマンスを分析し、最適化の提案を提示します
- 実行時間、リソース使用量、改善案を返します
インストール
セットアップ手順
要件
- Power BI Desktop(検出するには PBIX ファイルを開いている必要があります)
- Windows OS
- Visual Studio Code(MCP サーバーとの統合用)
- .NET 8.0 Runtime
ビルド済みリリースからのセットアップ
-
リリースをダウンロードします。Releases ディレクトリまたは GitHub のリリースページからダウンロードし、お好みの場所に展開します。
-
作業する PBIX ファイルを開いた状態で、Power BI Desktop を起動します。
-
PowerBI インスタンス情報を取得します。
Power BI Desktop インスタンスを検出する方法はいくつかあります。 最も簡単な方法は、Tabular Editor を開き、接続文字列のポートを確認することです。
次の手順で、ポート(上記の例では 63717)を MCP サーバーの設定に追加するだけです(このサーバーは既定のモデルに接続するため、データベース ID は無視できます)。
Tabular Editor がない場合は、付属の検出ツールを使って、実行中のインスタンスとデータベースを見つけることができます。
PowerShell を開き、リリースディレクトリに移動して、次を実行します。
cd path\to\release
.\pbi-local-mcp.DiscoverCli.exe
注:PowerShell では、現在のディレクトリにある実行ファイルを実行する際に、.\ プレフィックスを付ける必要があります。
プロンプトに従って、次の操作を行います。
- Power BI Desktop インスタンス(ポートで識別)を選択します
- 接続するデータベース/モデルを選択します
これにより、リリースディレクトリに PBI_PORT と PBI_DB_ID を含む .env ファイルが作成されます。このファイルは MCP の設定から参照することも、ポートを直接指定する場合は無視することもできます。
- エディターでMCP サーバーを設定します。Roo を使用する VS Code の場合は、
.roo/mcp.jsonを作成または編集します。{ "mcpServers": { "MCPBI": { "type": "stdio", "command": "path\\to\\release\\mcpbi.exe", "cwd": "path\\to\\release", "args": ["--port", "YOUR_PBI_PORT"], "disabled": false, "alwaysAllow": [ "ListTables", "GetTableDetails", "GetTableColumns", "GetTableRelationships", "ListMeasures", "GetMeasureDetails", "PreviewTableData", "RunQuery", "ValidateDaxSyntax", "AnalyzeQueryPerformance", "ListFunctions", "GetFunctionDetails" ] } } }path\\to\\releaseを実際のリリースディレクトリのパスに、YOUR_PBI_PORTを PBI インスタンスのポート番号に置き換えます。
ソースからのセットアップ(開発用)
-
リポジトリをクローンします。
git clone <repository-url> cd MCPBI -
プロジェクトをビルドします。
dotnet build -
PBIX ファイルを開いた状態で、Power BI Desktop を起動します。
-
検出を実行して
.envファイルを作成します。dotnet run --project pbi-local-mcp/pbi-local-mcp.csproj discover-pbiプロンプトに従って、インスタンスとデータベースを選択します。
-
.roo/mcp.jsonでMCP サーバーを設定します。{ "mcpServers": { "mcpbi-dev": { "type": "stdio", "command": "dotnet", "cwd": "path\\to\\MCPBI", "envFile": "path\\to\\MCPBI\\.env", "args": [ "exec", "path\\to\\MCPBI\\pbi-local-mcp\\bin\\Debug\\net8.0\\pbi-local-mcp.dll" ], "disabled": false, "alwaysAllow": [ "ListTables", "GetTableDetails", "GetTableColumns", "GetTableRelationships", "ListMeasures", "GetMeasureDetails", "PreviewTableData", "RunQuery", "ValidateDaxSyntax", "AnalyzeQueryPerformance", "ListFunctions", "GetFunctionDetails" ] } } }path\\to\\MCPBIを実際のリポジトリのパスに置き換えます。
設定に関する注意事項
- ポートまたは envFile のいずれかを使用:ポートを
argsに直接指定するか、envFileを使って.envから読み込むことができます。 - ポート引数:リリース設定の
--port引数は、そのポートの特定の Power BI Desktop インスタンスに接続します - envFile:開発環境のセットアップでは
envFileを使って、.envからPBI_PORTとPBI_DB_IDを自動的に読み込みます - alwaysAllow:各呼び出しでユーザーの承認を求めずに使用できるすべてのツールを一覧表示します
- 作業ディレクトリ:
cwdパラメーターは、.envファイルがある作業ディレクトリを設定します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。