Power BI MCPサーバーをClaudeにつなぐ — DAX修正とモデル文書化の手順
Power BIにはモデルを書き換えるAuthoring MCPと、データを読むFabric IQの2種類があります。Claude Codeから使い分ける条件、登録コマンド、権限の落とし穴を示します。
Power BIのMCPサーバーは2種類あります。セマンティックモデルのテーブル、列、メジャーを書き換える「Power BI Authoring MCPサーバー」と、レポートやモデルの中身を読んでDAXクエリを流す「Fabric IQ」です。DAXの修正やモデルの説明文づくりをClaudeに任せたいなら、使うのは前者です。
Microsoftの資料はGitHub Copilotを前提に書かれています。Claude Codeでは登録コマンドと認証の取り回しが変わるので、ここでは使い分けの判断、Claude Codeへの登録、モデルを壊さないための運用を順に示します。
どちらを選ぶか — 書き換えるならAuthoring、読むだけならFabric IQ
目的で決まります。Microsoftの比較表を、Claudeに頼む作業に置き換えると次のとおりです。
| Claudeに頼みたいこと | 使うサーバー |
|---|---|
| メジャーやリレーションシップ、計算グループ、セキュリティロールを作る・直す | 使うサーバーAuthoring |
| DAXをリファクタする、ベストプラクティス違反を直す、説明文を一括で付ける | 使うサーバーAuthoring |
| Power BI Desktopで開いているモデル、ソース管理下のPBIP/TMDLを扱う | 使うサーバーAuthoring(ローカル) |
| 売上の地域別集計など、業務の問いにデータで答えさせる | 使うサーバーFabric IQ |
Microsoftは両者を補い合う関係と位置づけています。モデルの構築と文書化にAuthoringを使い、その後に全員が問い合わせできるようFabric IQを使う流れです。
逆の使い方は勧められていません。Authoringサーバーでもモデル検証のためにDAXを実行できますが、エンドユーザーの業務の問いに答える用途は想定外と明記されています。消費側の用途ならFabric IQを使います。
Authoringサーバーの2つの形態
Authoringサーバーは1つで、配備方法が2つあります。
Authoringサーバーの配備2種
ホスト型
Microsoftが運用するエンドポイントに、Streamable HTTPでつなぎます。インストール不要です。Fabricワークスペース上のセマンティックモデルだけが対象で、Power BI Desktopやディスク上のPBIPには届きません。トランザクションとトレースも使えません。
ローカル
自分のマシンでstdio経由で動きます。Power BI Desktopで開いたモデル、ディスク上のPBIP/TMDL、サービスプリンシパル認証、トランザクション、Analysis Servicesのトレースが使えます。ただしmacOSは非対応です。
選び方の筋道は単純です。Fabricワークスペースのモデルだけを触るならホスト型、Desktopやファイルを触るならローカル型です。Macで作業する場合、ローカル型は選べないのでホスト型になります。
両方を同時に登録しない点も、Microsoftが注意しています。エージェントから見て似たツールが2組になり、どちらを呼ぶか曖昧になるうえ、リクエストごとにトークンも余計に消費するためです。
前提条件
- セマンティックモデルのWrite権限。Build権限だけだと、サーバーはDAXクエリの実行しかできません
- ローカル型でFabricワークスペースのモデルを扱うなら、キャパシティ側でXMLAエンドポイントを読み取り/書き込み(Read Write)にする
- ホスト型なら、Fabric管理者がテナント設定「Users can use the Power BI Model Context Protocol server endpoint」を有効にしている
- 推論力の高いモデル。Microsoftは、モデルの選択が結果の質に大きく影響すると書いています
DAXの書き換えが途中で止まる場合、Microsoftのトラブルシューティングは「深い推論ができるモデルに替え、依頼を小さく分け、文脈を足す」としています。
Claude Codeに登録する
ローカル型は、Microsoftが示すMCP設定のコマンドをそのままstdioサーバーとして渡します。
claude mcp add --transport stdio powerbi-authoring-local \
-- npx -y @microsoft/powerbi-modeling-mcp@latest --start--より後ろはサーバーにそのまま渡されます。npmパッケージ名は@microsoft/powerbi-modeling-mcpで、VS Code拡張としても配布されています。
ホスト型のエンドポイントは次のURLです。
claude mcp add --transport http powerbi-authoring-remote \
https://api.fabric.microsoft.com/v1/mcp/powerbi/authoring初回のツール呼び出しでMicrosoft Entraのサインインが求められ、以後はサインインした本人の権限で動きます。ここに注意点が2つあります。
動的クライアント登録が使えないとき
ホスト型はEntra IDのOAuth認証が必須です。Microsoftの資料は、MCPクライアントの中には動的クライアント登録(dynamic OAuth client registration)に依存するものがあり、Entra IDはそれをサポートしないので接続できない、と書いています。回避策は、ローカル型を使うか、自分でEntraアプリを登録することです。登録の詳細は、Microsoft Learnの「Register the hosted Power BI MCP servers with external MCP clients」にあります。
Claude Code側には、事前登録したOAuthクライアントを渡す仕組みがあります。
claude mcp add --transport http \
--client-id <アプリのクライアントID> --client-secret --callback-port 8080 \
powerbi-authoring-remote \
https://api.fabric.microsoft.com/v1/mcp/powerbi/authoring--client-secretはシークレットを伏せ字で入力させるフラグです。--callback-portは、アプリに登録したリダイレクトURI(http://localhost:8080/callbackの形)のポートに合わせます。Power BIの資料にClaude Codeでの手順はありません。上の2つの事実から組んだ例なので、実環境ではEntra側のアプリ登録を管理者と確認してください。
Entra連携で出るエラー
Entra IDで保護したMCPサーバーにClaude Codeのネイティブ認証でつなぐと、AADSTS9010010で止まる報告があります。原因と切り分けはClaude Code MCPでAADSTS9010010が出る原因にまとめています。Power BIのホスト型が同じ症状になるかどうかは、Power BIの資料に記載がありません。つながらないときは、ローカル型に切り替えて原因を絞れます。
接続してDAXの修正とドキュメント生成を頼む
登録後、/mcpでサーバーが接続済みになっていることを確かめます。次に、どのモデルで作業するかを伝えます。Microsoftが示す文面は次のとおりです。
Connect to semantic model '[Semantic Model Name]' in Fabric workspace '[Workspace Name]'ローカル型なら、Desktopで開いたモデルやPBIPフォルダも指定できます。
Connect to '[File Name]' in Power BI Desktop
Open semantic model from PBIP folder '[Path to the definition folder in the PBIP]'接続できたら、まず「このモデルのテーブルとメジャーを列挙して」のような読み取りだけの質問で動作を確かめてから、変更を頼みます。Microsoftが例に挙げているプロンプトは次の5種類です。
| 目的 | プロンプトの趣旨 |
|---|---|
| 命名の統一 | プロンプトの趣旨Salesテーブルの命名規則を分析し、モデル全体に同じパターンを適用する |
| モデルの文書化 | プロンプトの趣旨すべてのメジャー、列、テーブルに、DAXのロジックを業務の言葉で説明する説明文を付ける |
| 翻訳 | プロンプトの趣旨テーブル、列、メジャーを含めてフランス語の翻訳を生成する |
| 計算グループ化 | プロンプトの趣旨12か月平均と6か月平均のメジャーを計算グループにまとめ、24か月と3か月の版を足す |
| Direct Lakeモデルの作成 | プロンプトの趣旨レイクハウスのテーブルを使ってDirect Lakeのセマンティックモデルを作る |
Microsoftはこの一覧を、固定の機能範囲ではなく可能なシナリオの例だと説明しています。DAXのリファクタは「計算グループ化」の行が近い例です。
影響を見るためにdiffを残す
Claudeに書き換えさせる前に、変更を追える状態にします。PBIPはモデルをテキストで保存する形式なので、Gitの管理下に置けばエージェントの変更が差分として残ります。コミット前に確認でき、結果が期待と違えば戻せます。Microsoftも、作業前のバックアップとPBIPのGit管理を挙げています。
Claude CodeのプロジェクトにはCLAUDE.mdで作業ルールを書けます。例えば次のような断片が使えます。これはMicrosoftの資料にある内容ではなく、上の注意点を運用に落とした一例です。
## Power BI モデルの編集ルール
- 変更前に必ず `git status` を確認し、未コミットの変更があれば止まる
- 1回の依頼で触るのは1テーブルまたは1計算グループまで
- メジャーを変えたら、変更前後のDAXクエリを実行して値を比較する
- 削除系の操作は、対象の一覧を示して確認を取ってから行うDAXクエリの実行ツールには、1回あたり10万行という上限があります。値の比較は集計して行数を絞ってから行います。
権限とデータの流れ
MCPサーバーは、サインインしたユーザーのFabricロールベースアクセス制御(RBAC)の権限で操作を実行します。Microsoftは、自律的に動くクライアントや設定ミスのあるクライアントが破壊的な操作をする可能性を明記し、最小権限のロールを推奨しています。破壊的操作をブロックするフラグのような安全装置は、MCP仕様で標準化されておらず、対応しないクライアントもあります。
Claude Code側でできる制御もあります。サーバー単位の許可ルールはmcp__<サーバー名>の形で書けるので、書き換え系をまとめて確認制にしたいなら、そのサーバーをaskに入れておく方法があります。Authoringサーバーのツール名の一覧は資料に載っておらず、「オブジェクトの種類別にツールが並ぶ」とだけ書かれています。ツール単位で絞る前に、エージェントに「何ができるか例つきで説明して」と尋ねる方法をMicrosoftは案内しています。
{
"permissions": {
"ask": ["mcp__powerbi-authoring-local"]
}
}データの流れにも注意が要ります。メタデータ、スキーマ、クエリ結果はMCPクライアントに渡り、クライアントがそれを大規模言語モデルのプロバイダーに会話の文脈として転送する場合があります。Claudeを使う場合は、そのデータが社内のAIデータ取り扱い規程の範囲に収まるかを先に決めておく必要があります。MCPサーバーはアクセス範囲を広げませんが、データは動かします。
つながらないときの切り分け
Microsoftのトラブルシューティングを、Claude Codeの操作に引き直すと次のとおりです。
Authoringサーバーがうまく動かないとき
- Q/mcpの一覧にサーバーが出ているか?答えがいいえのとき答えがはい
登録コマンドをやり直し、
claude mcp listで状態を確認します。 - Q変更だけが全部失敗し、読み取りは通るか?答えがいいえのとき答えがはい
Build権限のみでWrite権限がない可能性が高い状態です。Fabricワークスペースのモデルなら、XMLAエンドポイントが読み取り/書き込みかも確認します。
- Q毎回モデルへの再接続を求められるか?答えがいいえのとき答えがはい
ホスト型はセッションを保持する作りで、クライアントが
mcp-Session-Idヘッダーを返さないと新しいセッションになります。続くなら、ローカル型に切り替えます。
Desktopのファイルが見つからない
ホスト型はあなたのマシンに届きません。Desktopとディスク上のPBIPは、ローカル型で扱います。
ホスト型のサインインが失敗するときは、管理者がテナント設定を有効にしているかも確かめてください。
Fabric IQを併用する
モデルが整ったあと、業務の問いに答えさせる側がFabric IQです。エンドポイントはhttps://fabriciq.svc.cloud.microsoft/v1/mcp/fabriciqで、一般提供です。概要ページのエンドポイント表記は末尾がFabricIQの大文字混じり、セットアップのページはfabriciqの小文字です。ここではセットアップのページに合わせました。つながらないときは表記の違いも疑えます。
概要ページは「自然言語の質問に答える」と説明しますが、セットアップのページには、自然言語で答えるツールは公開していないと書かれています。公開されているのは6つの読み取りツールで、DAXを組み立てて結果を説明するのは呼び出し側のエージェントです。
| ツール | 役割 |
|---|---|
| DiscoverArtifacts | 役割レポートとセマンティックモデルを名前で検索 |
| ResolveFabricItem | 役割Fabricアイテムのブラウザー用URLを、他のツールで使える形に解決 |
| GetReportMetadata | 役割レポートのメタデータを取得 |
| GetSemanticModelSchema | 役割セマンティックモデルのスキーマを取得 |
| ValueSearch | 役割モデル内に保存された値を検索 |
| ExecuteQuery | 役割セマンティックモデルにDAXクエリを実行 |
Authoringとの違いで効くのは、権限と認証です。
- 必要なのは読み取り系の委任権限です。ワークスペースのロールもモデルのBuild権限も要らず、既存のFabric権限が適用されます。RLS(行レベルセキュリティ)とOLS(オブジェクトレベルセキュリティ)も効くので、同じ質問でもユーザーによって結果が変わります
- サービスプリンシパル認証とアプリケーション専用認証には対応しません
ExecuteQueryは1回で1つのモデルが対象で、maxRowsを指定しないと最大250行です- ダッシュボード、ページ分割(RDL)レポート、Power BIアプリは対象外です
- テナントのホームリージョンがすべてのFabricワークロードに対応している必要があり、Power BI専用リージョンとソブリンクラウドでは使えません
Microsoftがセットアップ手順として示しているクライアントはGitHub Copilot CLIだけです。Claude Codeに登録するなら、Authoringのホスト型と同じく、事前登録のEntraアプリを使う形になります。アプリには、Power BI Serviceの委任権限としてItem.Read.All、Item.Execute.All、Dataset.Read.Allを付けます。登録コマンドの形は先に示した--client-id方式と同じです。
claude mcp add --transport http \
--client-id <アプリのクライアントID> --client-secret --callback-port 8080 \
fabric-iq https://fabriciq.svc.cloud.microsoft/v1/mcp/fabriciqAuthorizationヘッダーにベアラートークンを直書きすると、対話的なOAuthが無効になります。Microsoftは推奨構成ではヘッダーを付けないよう書いています。
まとめ
Claudeに任せる作業が「モデルの書き換え」ならAuthoring、「データを読んで答える」ならFabric IQです。Macで書き換えたいときはホスト型一択になり、そのEntraアプリ登録が最初の関門です。AuthoringはPBIPをGitに置いてから、Fabric IQは権限を絞ったアプリで始めると、最悪でも元に戻せる範囲に収まります。
BIツールとの連携を比べたいときは、Claudeのコネクタから読み取り中心でつなぐClaudeとTableauの連携が参考になります。外部サービスをMCPで接続するときの許可範囲の考え方はMCPセキュリティガイドにあります。