MCPサーバー
Power Portals Pro MCPサーバー は、AIコーディングアシスタントにこのフレームワークの直接的な知識を提供し、構築中に体験できます。これは モデルコンテキストプロトコル サーバーであり、フレームワークに付属しており、ライセンスキーもサインアップもありません。
なぜ存在するのか
ドキュメントだけでは得られない2つの要素があり、どちらもコードの破損を引き起こします。
- APIの表面は大きすぎて覚えていません。 両方のスタックに数百のコンポーネントがあり、それぞれに数十のパラメータがあります。パラメータ名を半分しか覚えていないエージェントは、コンパイルされない、あるいはコンパイルしても何もしない、もっともらしいものを書いてしまうのです。
- あなたのDataverseはどのドキュメントにも含まれていません。 テーブルやカラムの論理名、リレーションシップスキーマ名、オプションセットの値、そして何よりも保存されたビューGUIDは、あなたの環境にのみ存在します。このサイトのすべてのコードサンプルは、他に書けるものがないため、省略記号としてビューIDを書き込んでいます。
答えは何でしょうか
- フレームワーク — 両スタックのすべてのコンポーネントのパラメータおよびprop参照(型、デフォルト、許可値付き);このサイトから逐語的に採取した完全な作業サンプル;ガイド;
AGENTS.mdの慣例;そしてBlazor-to-Reactパリティ行列。インストールしたパッケージとバージョンマッチングされています。 - 環境、読み取り専用 — 実際に持っているテーブルや列、各列がどのエディタにマッピングされているか、関係名、オプションセットの値、そして保存したビューとそれぞれの実際のGUIDです。
注記
すべてのDataverseツールはメタデータを読み取ります。レコードの読み取り、書き込み、削除は行わないので、エージェントを本番環境に向けることで、アクセスせずにデータの形状を学習できます。
プロジェクトへの追加
二つの場所で生きられる
ここには明確に言う価値のある鶏が先か卵が先かの問題があります。テンプレートは構成をプロジェクトに書き込みますが、サーバーが最も役立つのは、そのプロジェクトが存在する 前 、つまりテンプレートとそのオプションを選ぶときに使われます。ですので、自分用に一度インストールして、そこからはプロジェクトごとのファイルに任せましょう。
マシンごとに1回、どのフォルダでも
これにより、サーバーはどこでも利用可能になり、今まさにスキャフォールドしようとしている空のフォルダも含まれます。どのテンプレートを使うか、オプションの意味、設定内容を教えてくれます。意図的にピン留めを解除し、最新リリースを追跡しています:
claude mcp add --scope user powerportalspro -- dnx PowerPortalsPro.Mcp --yes
Visual Studioはプロファイルフォルダからユーザーレベルの .mcp.json を読み取り、カーソルは ~/.cursor/mcp.jsonを使い、VS Codeの設定にはユーザーレベルのMCP設定があります。それぞれ同じ servers ブロックを使用します。
プロジェクトごとに、そのバージョンにピン留めされています
Power Portals Proテンプレートから作成されたプロジェクトはすでに配線されており、テンプレートはソリューションのルートに .mcp.json を書き込み、対応するサーバーバージョンにピン留めします。やることは何もありません。
既存のプロジェクトに追加するには、そのファイルを解決策のルートに自分で作成してください:
{
"servers": {
"powerportalspro": {
"type": "stdio",
"command": "dnx",
"args": [ "PowerPortalsPro.Mcp", "--yes" ]
}
}
}
編集者が読むファイル
Visual Studio 2022 17.14+とVisual Studio 2026はソリューションフォルダから
.mcp.json読み取り、Claude Codeも同様です。VS Codeは.vscode/mcp.jsonを読み込み、カーソルは.cursor/mcp.jsonを読み込みます。どちらも同じserversブロックを使うので、コピーしてください。
dnx すでに持っている.NET 10 SDKが付属しています。すべてのPower Portals Proプロジェクトは ASP.NET Coreでホストされており、React SPAも含まれます。最初の実行でパッケージをダウンロードしキャッシュします。
両方を持つことが意図されたセットアップです。2つのエントリは同じサーバー名を使うため、両方のスコープを理解しているクライアントはプロジェクトのものを使い、プロジェクト内ではバージョンマッチした回答を得られ、他の場所では最新の回答が得られます。
動作確認中
アシスタントにサーバーだけが答えられる質問をしてください。例えば「MainGridのすべてのパラメータをget_component_api表示してください」などです。ツールが利用できない場合は、クライアントが設定ファイルを取得していないことを意味します。ほとんどのツールは追加後に再起動が必要です。
Dataverseへの接続
ドキュメントツールは設定が不要です。メタデータツールは環境への接続が必要で、 その接続はマシンではなくフォルダに属します。プロジェクト内で一度だけ実行してください:
dnx PowerPortalsPro.Mcp login
フォルダごとに1つの環境
これにより、このフォルダは1つの環境に割り当てられます。複数の顧客間で作業する場合、各プロジェクトはそれぞれの環境にサインインしたままで、異なるフォルダのエージェント同士が交差しません。これは pac auth select 唯一できないことです。単一のマシン全体のプロファイルを切り替えるため、顧客を一箇所で変更するとどこでも変わります。
サインインはデフォルトでデバイスコードの流れを使うので、SSH上でコンテナ内やWSLで動作し、電話で仕上げることも可能です。開きたい場合は --browser パスしてください。
物が保管されている場所
- バインディングは フォルダ内に含まれ
.ppp/mcp.json。環境とアカウントに名前が付けられ、秘密は保持せず、安全にコミットできます。リポジトリをクローンするチームメイトは、知らされなくても正しい環境を指し示されます。 - あなたのトークン はユーザープロファイルに保持され、オペレーティングシステムのキーストア(WindowsではDPAPI、macOSではKeychain、Linuxではlibsecret)によって暗号化されています。リポジトリには決して書き込まれません。キーストアがなければ、サインインはディスク上のリフレッシュトークンをクリアにする代わりに拒否します。
トークンキャッシュは環境ごとにキー化されているため、同じ顧客のリポジトリの2つ目のクローンは再度サインインを求めませんが、別の顧客は常にサインインを求められます。
コマンド
これらはすべて、通過しない限り現在のフォルダに作用します --workspace。
login— サインインしてこのフォルダを環境にバインドします。オプション:--environment <url>、--pac-profile <name>、--username <upn>、--tenant <id>、--browser。status— このフォルダがどの環境を使っているか、どこから来たのか、どのアカウントがキャッシュされているのか、そして接続が正常かどうかを把握しています。logout— フォルダのバインドを解除してください。保存したサインインを削除するための--forgetを追加してください。environments— ミラーリング可能なPower Platform CLIプロファイルを一覧にしてください。
その他の接続方法
環境と資格情報はこの順番で解決されるため、最も明確な意図表明が勝つ。
- 環境変数 — サーバーの
envブロック内のPPP_D365_URL、PPP_D365_CLIENT_ID、PPP_D365_CLIENT_SECRET。サービスプリンシパルと、これをCIや共有コンテナで配線する方法。 - フォルダのサインイン —
loginが書いた。通常の経路。 - プロジェクト固有の設定、つまりポータル自体がユーザーの秘密や
appsettingsから読み取るのと同じ、D365:Url、D365:ClientId、D365:ClientSecret(またはD365:Secret)。したがって、設定されたPower Portals Proプロジェクトはサインインが不要になることが多いです。
Power Platform CLIプロファイル
すでに環境を pacに保持している場合は、URLを探す代わりに一つの環境から始めることができます:
dnx PowerPortalsPro.Mcp environments
dnx PowerPortalsPro.Mcp login --pac-profile "Acme Dev"
CLIにはアクセストークンを配布するコマンドがなく、認証情報は独自のストアに保管しているため、セッションを直接再利用することはできません。 --pac-profile は、環境とアカウントをプロファイルから取り出し、通常はプロンプトなしでサインインします。なぜなら、すでにセッションがあるからです。
注記
CLI自身のアクティブプロファイルは一切変更されません。
pac auth selectは意図的に使われていません。すべてのプロジェクトを一度に移動させるためです。
ツール
ツールの名前を挙げる必要はほとんどなく、アシスタントが説明から選びますが、何があるかを知っておくと役立ちます。
ドキュメントは常に入手可能です
search_docs Open questions across the guides, API reference and samples
get_doc One documentation section in full
get_component_api Every parameter or prop, with types, defaults and permitted values
get_example A complete working sample, verbatim
get_page_recipe Guide, both stacks' samples and API links for one topic
list_components Browse what the framework ships
find_parity Whether a component exists on the other stack
get_conventions The golden rules from AGENTS.md
whats_new Release notes
一度繋がった環境
list_tables Find a table's logical name
describe_table Columns, and the editor each one maps to
list_views Saved views with their real GUIDs
list_relationships Schema names for SubGrid and ManyToManyLookupEdit
list_choices Option-set values and labels
dataverse_status Which environment this folder uses, and whether it connects
新しいプロジェクトの立ち上げ
get_setup_plan The steps to a running portal, and what each one needs
get_setup_script A reviewable script that performs them, with your values filled in
check_setup What this folder still needs before the portal will start
他言語での活動
サーバーが返す知識は英語であり、それは意図的なものです。アシスタントがそれを読むのです—ツールの応答を直接見ることはありません—だからアシスタントはあなたの代わりに翻訳します。あなたの言語で尋ねれば、あなたの言語で答えます。ただし、翻訳してはいけないのはコードです。コンポーネント名、パラメータ名、列名はすべてのプロジェクトで英語であり、会話がどの言語であれ、参照英語を維持することが、存在しない翻訳パラメータ名をアシスタントが発明するのを防ぐのです。
注記
何か、つまり
“MainGrid Ansichten konfigurieren”の名前がついた質問は、コンポーネント名がどこでも同じなので、どの言語でも使えます。ツールはアシスタントに英語で検索するように指示しているので、名前が出ていない質問も使えます。
トラブルシューティング
- 「No Dataverse environment is bound to this project folder」 — そのフォルダで
loginを実行してください。自分がいると思うフォルダにいるか確認してください:status解決したワークスペースのルートを印刷します。 - 「保存されたサインインはもはや有効ではありません」 とは、リフレッシュトークンが期限切れまたは取り消されたか、テナントが新しいやり取りを必要としている場合です。再度
loginを実行してください。 - 「オペレーティングシステムのキーストアは利用できません」 というのは、libsecretデーモンがないヘッドレスLinuxボックスでよくあることです。代わりに
PPP_D365_*環境変数を通じてサービスプリンシパルを使いましょう。 - サインインしているのに環境が接続を拒否します — アカウントは認証済みですが、その環境にアクセスできません。URLを確認するか、別のユーザーとして
--usernameでサインインしてください。
