Power Bi Analyst Mcp について
Power BI Analyst MCPは、分析担当者などがMCPクライアント経由でPower BIのセマンティックモデルを調べ、DAXクエリを実行するためのサーバーです。大きな結果はローカルCSVに保存して必要に応じて読み取り、クエリ履歴をセッション間で再利用できます。
主な機能
- 01Power BIアプリ、データセット、テーブル、メジャーの一覧表示
- 02セマンティックモデルへのDAXクエリ実行
- 03大きな結果のローカルCSV保存
- 04保存済みクエリ結果のページ読み込み
- 05クエリ履歴の記録と検索
活用シーン
- 01ライブDAXクエリによる業務上の質問への回答
- 02一括返却に大きすぎる結果の分析
- 03過去のセッションで使ったDAXパターンの再利用
- 04セマンティックモデルのメジャーの文書化
MCP 対応
Power BIの認証、モデル探索、DAXクエリ、結果のページ読み込み、クエリ履歴のツールをMCPクライアントに公開します。ローカルで動作し、大きな結果とクエリ履歴を端末に保存します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Power BI アナリスト MCP
Claude に Power BI データを分析させましょう。コンテキストウィンドウのクラッシュを防ぎ、回答を得られます。
Claude(または任意の MCP クライアント)を Power BI のセマンティックモデルに接続します。テーブルやメジャーを調べ、DAX クエリを実行し、実データを扱えます。数万行に及ぶデータセットでも対応できます。大量のクエリ結果は自動的にローカルファイルへ保存され、必要に応じてエージェントにページ単位で渡されるため、どれだけデータを取得しても AI セッションを高速かつ集中した状態に保てます。
すべての処理はお使いのマシン上で実行されます。データがサードパーティの中継サーバーを経由することはありません。
できるようになること
分析におけるボトルネックは、これまで本当の意味でデータアクセスではありませんでした。Power BI で、すでに誰もがデータにアクセスできるからです。ボトルネックは、データを意思決定につなげるために必要な、専門的で時間のかかる作業である「解釈」です。このサーバーは、その解釈を LLM に担わせます。
モデル全体にわたる複合的な推論 人間のアナリストは、クエリを一つ実行し、結果を読み、仮説を立て、別のクエリを実行します。この作業は順番に進めるため、何時間もかかります。エージェントなら、先の結果を踏まえながら、クエリを連続して20件実行し、そのすべてを総合して、筋道の通った結論を数分で提示できます。「EMEA で利益率が低下している要因は何ですか?」と尋ねると、Claude がメジャーを調べ、市場を掘り下げ、時系列の傾向を確認し、外れ値を特定して説明します。各手順を指示する必要はありません。
誰もが使える自然言語分析 どの関係者もデータについて質問し、DAX が何かを知らなくても、チケットを申請しなくても、回答を待たなくても、ライブ DAX に裏付けられた実際の答えを得られます。これまでは訓練を受けたアナリストが必要だった解釈の工程を、必要なときに実行できます。
プロアクティブな異常検知 主要なメジャーを対象に、スケジュールに従って Claude を実行できます。データをクエリして過去の期間と比較し、予想範囲を外れた値があれば、平易な言葉で通知します。問題を把握するために誰かがダッシュボードを開く前に検知できます。
自己文書化するセマンティックモデル 「このデータセット内のすべてのメジャーを一覧表示し、それぞれの計算内容を説明してください。」Claude がスキーマを調べてデータ辞書を作成します。オンボーディングやガバナンス、モデルに実際に何が含まれているかを把握したい人に役立ちます。
大規模データセットを自動で処理 Power BI のクエリは、数万行を返すことがあります。そのすべてをインラインで返すと、LLM のコンテキストウィンドウの大半を消費し、セッションがクラッシュするおそれがあります。このサーバーは、大きな結果をローカル CSV に保存し、行数、列名、5行のプレビューを含む簡潔な概要をエージェントに渡します。その後、必要に応じてファイルをページ単位で読み込めます。データセット全体を取得しながら、AI セッションを軽量に保てます。
使うほど蓄積されるクエリ履歴 成功した DAX クエリはすべて、ユーザーの質問、生成された DAX、返された列、CSV の保存先とともに、ローカルの JSONL 監査ログに記録されます。次のセッションでは、エージェントがこの履歴を検索し、再利用可能な DAX パターン、以前に計算した結果ファイル、過去の分析から得たコンテキストなど、関連する過去の作業を見つけます。使うほど、より速く賢くなり、すべての数値の出所を示す監査ログも常に残ります。
データはお使いのマシン上に保管 クエリ、結果、トークンがクラウドリレーを経由することはありません。サーバーはローカルで実行され、Power BI ウェブアプリと同じ OAuth デバイスコードフローで認証し、OS 標準のセキュアストア(Keychain / DPAPI / LibSecret)にトークンを保存します。
Microsoft 公式 MCP サーバーとの比較
Microsoft は Power BI 用の MCP サーバーを2つ公開しています。このサーバーは、目的もアーキテクチャも、どちらとも異なります。
| このサーバー | Microsoft Remote MCP | Microsoft Modeling MCP | |
|---|---|---|---|
| 目的 | 既存のモデルをクエリして分析 | 既存のモデルをクエリ | モデルの構築と変更 |
| 実行場所 | お使いのマシン上 | Microsoft のクラウドインフラストラクチャ | ローカル(Power BI Desktop) |
| データ経路 | Power BI REST API に直接接続 | Microsoft の MCP リレー経由 | ローカル XMLA |
| 認証 | OAuth デバイスコード(委任) | リモートサービス経由の OAuth | ローカルセッション |
| 大きな結果 | ローカル CSV に自動保存 | コンテキスト内のみ | 該当なし |
| 読み取り専用 | はい | はい | いいえ |
| 対象ユーザー | Claude / Cursor を使用するアナリスト | Copilot を使用するアナリスト | モデル開発者 |
表示例
You: Analyse revenue by market and product category for Q1 2025
Claude: Let me explore the dataset first.
[calls list_tables → list_measures → execute_dax]
The query returned 73,840 rows — saved to:
~/powerbi_output/dax_result_revenue_q1_2025_20260313_091204.csv
[pages through results with read_query_result]
Summary: EMEA leads at 44% of total revenue. The top category
is Premium Hardware in both EMEA and AMER. APAC shows the
strongest quarter-over-quarter growth at +18%...
エージェントがスキーマを調べて DAX を作成し、ファイルを処理して分析結果を届けるため、Power BI の UI を操作する必要はありません。
ツール
| ツール | 機能 |
|---|---|
authenticate | OAuth デバイスコードでサインインします。URL と 1 回限りのコードが返されます。完了するにはもう一度呼び出します |
logout | キャッシュされたトークンを消去します(再認証が必要になります) |
list_apps | アクセスできる Power BI アプリをすべて一覧表示します。まずはこちらから。各アプリの workspaceId が返されます |
list_datasets | ワークスペース内のデータセット/セマンティックモデルを一覧表示します(list_apps の workspaceId を使用します) |
get_dataset_info | データセットのメタデータと直近 5 件の更新履歴 |
list_tables | データセット内の表示可能なテーブルをすべて一覧表示します |
list_measures | 名前、テーブル、説明、書式文字列を含むメジャー |
list_columns | データ型とキーのフラグを含む列 |
execute_dax | DAX クエリを実行します。小さな結果はインラインで、大きな結果はローカル CSV で返します。query_summary を渡すと、今後参照できるようクエリが記録されます |
read_query_result | 大きな CSV の結果をすべてコンテキストに読み込まずに、ページ単位で取得します |
search_query_history | キーワード、データセット、期間を指定してローカルのクエリログを検索し、セッションをまたいで過去の DAX と結果を見つけます |
delete_query_log_entry | クエリログのエントリを削除します(例:アプローチが誤りだと判明した場合) |
ユーザーガイド
前提条件
- Python 3.10+
- Power BI Pro、Premium Per User(PPU)、または Premium 容量のライセンス
- Azure AD アプリの登録(無料、約 5 分。以下を参照)
ステップ 1 — Azure AD アプリを登録する
OAuth 2.0 では、どのアプリケーションがお客様に代わって処理を実行するのかを識別するためのクライアント IDが必要です。登録は無料で、クライアントシークレットは不要です。また、ここで使用する読み取り専用スコープ 2 つについて、Power BI 管理者の同意も必要ありません。
-
portal.azure.com に移動し、→ Azure Active Directory → App registrations → New registration を選択します。
-
名前を入力します(例:
PowerBI MCP)。アカウントの種類では Accounts in this organizational directory only(シングルテナント)を選択します。Register をクリックします。 -
Authentication → Platform configurations で、Mobile and desktop applications を追加し、次のリダイレクト URI にチェックを入れます。
https://login.microsoftonline.com/common/oauth2/nativeclient -
引き続き Authentication → Advanced settings で、Allow public client flows を Yes に設定します。保存します。
-
API permissions → Add a permission → Power BI Service で、次を追加します。
Dataset.Read.AllWorkspace.Read.All
テナントで管理者の同意が必要な場合は、管理者に同意を付与してもらってください。
-
Overview ページで次の 2 つをコピーします。ステップ 2 で必要になります。
- Application (client) ID
- Directory (tenant) ID
注:
execute_daxを使用するには、Power BI テナント設定の 「Dataset Execute Queries REST API」 を Power BI Admin Portal(Integration settings)で有効にする必要があります。
ステップ 2 — インストールして接続する
サーバーは PyPI で公開されています。実行する最も手軽な方法は uvx を使用することです。手動インストールや仮想環境は不要です。
Claude Desktop
claude_desktop_config.json に次の内容を追加します。
{
"mcpServers": {
"powerbi": {
"command": "uvx",
"args": ["powerbi-analyst-mcp"],
"env": {
"POWERBI_CLIENT_ID": "your-application-client-id",
"POWERBI_TENANT_ID": "your-directory-tenant-id"
}
}
}
}
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
ほとんどのユーザーに
POWERBI_TENANT_IDの設定が必要です。 多くの組織では Azure AD テナントが 1 つです。ステップ 1 で確認した Directory (tenant) ID を設定してください。organizations(既定値)のままにすると、認証に失敗したり、誤ったテナントが対象になったりします。
Cursor
プロジェクト内に .cursor/mcp.json ファイルを追加します(またはグローバル設定を使用します)。
{
"mcpServers": {
"powerbi": {
"command": "uvx",
"args": ["powerbi-analyst-mcp"],
"env": {
"POWERBI_CLIENT_ID": "your-application-client-id",
"POWERBI_TENANT_ID": "your-directory-tenant-id"
}
}
}
}
pip install(代替方法)
pip install powerbi-analyst-mcp
次に、uvx のコマンドブロックを次の内容に置き換えます。
"command": "powerbi-analyst-mcp",
"args": []
Claude Desktop バンドル(.mcpb)— 組織全体への配布向け
.mcpb(MCP バンドル)は、Claude Desktop がドラッグ&ドロップでインストールする ZIP アーカイブです。設定を手動で編集する必要はありません。初回実行時にバンドルがすべての Python 依存関係を自動的にインストールします。必要な前提条件は Python 3.10 以降のみです。
bundle/ には 2 つのマニフェストがあります。
| ファイル | 用途 | Git |
|---|---|---|
manifest.template.json | 汎用 — インストール時に Claude の UI から認証情報を入力するようユーザーに求めます | コミット済み |
manifest.json | 組織固有 — サイレントデプロイ用に認証情報をハードコードします | Gitignore 対象 — コミットしないでください |
組織用バンドルのビルド:
# 1. Create your org manifest (one-time setup)
cp bundle/manifest.template.json bundle/manifest.json
bundle/manifest.json を編集し、mcp_config.env に値を設定します。
"env": {
"POWERBI_CLIENT_ID": "your-application-client-id",
"POWERBI_TENANT_ID": "your-directory-tenant-id",
"POWERBI_OUTPUT_DIR": "/custom/output/path"
}
POWERBI_OUTPUT_DIR は任意です。省略すると、デフォルトの ~/powerbi_output が使用されます。
# 2. Build the bundle
chmod +x bundle/build.sh
./bundle/build.sh
# → dist/miinto-powerbi-analyst.mcpb (gitignored)
配布: dist/*.mcpb を同僚と共有します。Claude Desktop → Settings → Developer にドラッグ&ドロップしてもらいます。macOS と Windows で動作します。
セキュリティ:
bundle/manifest.jsonとdist/はどちらも Gitignore 対象です。認証情報を含まないテンプレートのみコミットしてください。Git で追跡されるファイルには、決して認証情報を追加しないでください。
典型的な分析ワークフロー
接続後、LLM に次の手順を自然に実行するよう依頼してください。
1. authenticate ← first run only; returns a URL + code to open in browser,
then call authenticate again to complete sign-in
2. list_apps → returns installed apps, each with a workspaceId
3. list_datasets workspace_id=<workspaceId from app> → returns dataset IDs
4. list_tables workspace_id=<id> dataset_id=<id>
5. list_measures workspace_id=<id> dataset_id=<id> [table_name=<name>]
6. list_columns workspace_id=<id> dataset_id=<id> [table_name=<name>]
7. search_query_history [keyword="revenue"] ← check if similar work exists from a prior session
8. execute_dax workspace_id=<id> dataset_id=<id>
dax_query="EVALUATE SUMMARIZECOLUMNS(...)"
[query_summary="Revenue by market and product for Q1 2025"]
[result_name="revenue by market q1"] ← names the saved CSV
[max_rows=500] ← optional row cap for sampling
9. read_query_result file_path=<savedTo> [offset=0] [limit=100]
← page through large results without filling context
注: ワークスペース ID の確認には、必ず
list_apps(list_workspacesではなく)を使用してください。アプリ管理の組織では、データセットへのアクセスは Power BI アプリを通じて付与されます。list_workspacesのワークスペース ID を使うと、権限エラーが発生する場合があります。
DAX クエリの例
-- Total sales by year
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Year],
"Total Sales", [Total Sales]
)
ORDER BY 'Date'[Year]
-- Top 10 customers by revenue
EVALUATE
TOPN(
10,
SUMMARIZECOLUMNS('Customer'[Name], "Revenue", [Revenue]),
[Revenue], DESC
)
-- Filtered subset
EVALUATE
CALCULATETABLE(
'Sales',
'Date'[Year] = 2024
)
大きな結果の処理 — 詳細
| 結果のサイズ | 動作 |
|---|---|
| ≤ 50 行 | JSON としてインラインで返されます — 手間はかかりません |
| > 50 行 | 結果全体がタイムスタンプ付き CSV に保存され、エージェントには簡潔な概要が返されます |
大きな結果に対して返される概要には、次の情報が含まれます。
rowCount— 書き込まれた行の合計数columns— 列名と型preview— 先頭 5 行savedTo— CSV ファイルの絶対パス
その後、エージェントは read_query_result を使ってファイルをページ単位で読み取れます。
read_query_result(
file_path = "/path/from/savedTo",
offset = 0, # zero-based row offset
limit = 100 # rows per page (default 100)
)
rows、totalRows、offset、limit、hasMore を返します。次のページを取得するには、offset に limit を加算します。
結果サイズを制御する execute_dax のパラメーター:
| パラメーター | 型 | 説明 |
|---|---|---|
query_summary | str(任意) | ユーザーの依頼内容の短い説明です。監査やセッション間での再利用のため、ローカルのクエリ履歴に記録されます。 |
result_name | str(任意) | CSV ファイル名に使用する短いラベルです。例:"gmv by market 2024" → dax_result_gmv_by_market_2024_20260305_143022.csv。最大 40 文字です。 |
max_rows | int(任意) | Power BI エンジンレベルで TOPN によって適用される上限です。DAX を書き換えずにすばやくサンプリングする場合に便利です。 |
出力ディレクトリのデフォルトは ~/powerbi_output です。MCP クライアントの env ブロックで POWERBI_OUTPUT_DIR を設定すると、上書きできます。CSV ファイルとクエリ履歴ログは自動的に削除されません。ディレクトリを手動で管理するか、保持ポリシーを追加してください。
制限事項
- 読み取り専用です。 Power BI アーティファクトの作成、変更、削除には対応していません。
execute_daxの制限:1 クエリあたり 100,000 行または 1,000,000 個の値(Power BI API のハード上限)。- レート制限:ユーザーごとに 1 分あたり 120 件の DAX クエリリクエスト。
list_tables、list_measures、list_columnsは DAX のINFO.VIEW.*関数を使用します。この関数には、XMLA 読み取りアクセスが有効になっている Import または DirectQuery モデルが必要です。execute_daxが書き込む CSV ファイルは自動的に削除されません。
セキュリティ
- トークンは、
msal-extensionsを使用し、OS 標準のセキュアストレージに保存されます。- macOS — Keychain
- Windows — DPAPI で暗号化されたファイル
- Linux — LibSecret(gnome-keyring / KWallet)。利用できない場合は、暗号化されたファイルにフォールバックします。
- キャッシュファイルは
~/.powerbi_mcp_token_cache.binに書き込まれ、.gitignoreの対象です。 - サーバーがアクセストークンをログに記録することはありません。
- すべてのデータアクセスには、ユーザー自身の Power BI 権限が適用されます(委任型 OAuth 2.0 — サービスプリンシパルもクライアントシークレットも使用しません)。
コントリビューション
プロジェクト構成、開発環境のセットアップ、アーキテクチャに関する説明、新しいツールの追加方法については、CONTRIBUTING.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。