[このトピックは、プレリリース ドキュメントであり、変更される場合があります。]
この記事では、GitHub Copilot CLI や Claude Code などの AI コード生成ツールを使用して、モデル駆動型 Power Apps MCP ツール用の対話型モデル コンテキスト プロトコル (MCP) アプリを生成する方法について説明します。 MCP アプリは、ツールの JSON 出力を、Microsoft 365 Copilot、Claude、Visual Studio Code など、MCP アプリと互換性のあるホスト内のカード、グラフ、ダッシュボード、またはマップとして視覚的にレンダリングする自己完結型 HTML ファイルです。
JSON データを返す MCP ツールがある場合、 generate-mcp-app-ui スキルは、チャット会話内で直接、そのデータをコンパクトなビジュアル形式で表示する洗練されたテーマ対応ウィジェットを生成できます。
Important
- これはプレビュー機能です。
- プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能は、お客様が早期にアクセスしてフィードバックを提供できるように、公式リリースの前に利用できます。
- Microsoft 365 Copilot Chat での MCP アプリのサポートは、2026 年 3 月の時点で一般公開されています。 宣言型エージェントでの MCP アプリに対する Power Apps のサポートは、現在パブリック プレビュー段階です。 完全なお知らせについては、「 Copilot Chat で MCP アプリを利用できるようになりました」を参照してください。
generate-mcp-app-ui スキルでできること
- 必要なものを記述し、ツールの JSON 出力を貼り付けることで、任意の MCP ツールのビジュアル ウィジェットを作成します。
- 数値傾向のグラフ、構造化レコードのカード、比較用のテーブル、座標のマップなど、データに適したビジュアルを選択します。
- Fluent UI デザイン トークンを使用して、明るいテーマと濃色のテーマを自動的にサポートします。
- ウィジェットが実行時にもう一度ツールを呼び出すことができるように、対話機能を追加します (たとえば、更新ボタン)。
- 自然言語での変更を記述して、UX を繰り返し調整します。 たとえば、「ギャラリーをコンパクトにする」、「グラフを追加する」、「カード レイアウトを使用する」などです。
前提条件
ソフトウェア要件
| コンポーネント | 最小バージョン | 詳細情報 |
|---|---|---|
| GitHub Copilot CLI、Claude Code、またはその他のコード生成ツール | 最新 | Claude Code、 GitHub Copilot CLI |
| モダン ブラウザー | どれでも | 生成されたウィジェットをローカルでプレビューする場合 |
追加条件
- JSON 出力を返す MCP ツール。 ツールの出力の種類を JSON に設定する必要があります。
- 動作中のインターネット接続。 ウィジェットは、実行時に Content Delivery Network (CDN) から Fluent UI やその他のライブラリを読み込みます。
プラグインをインストールする
GitHub Copilot CLI または Claude Code から次のインストーラー コマンドを実行します。 インストーラーは、使用可能なツールを自動的に検出し、 generate-mcp-app-uiを含むすべての Power Platform プラグインをインストールします。
/plugin marketplace add microsoft/power-platform-skills
MCP アプリ ウィジェット スキルのみをインストールするには:
/plugin install mcp-apps@power-platform-skills
ヒント
自動更新を有効にして、スキルの更新を自動的に受信します。
/pluginコマンドを使用し、Marketplace に移動し、マーケットプレースを選択して、自動更新を有効にします。
スキルの概要
| スキル | コマンド | Description |
|---|---|---|
| MCP Apps ウィジェット ジェネレーター | /generate-mcp-app-ui |
MCP ツールの JSON 出力用の自己完結型 MCP アプリ ウィジェット (HTML ファイル) を生成する |
スキルは、"ウィジェットの作成"、"ツールのウィジェットの作成"、"MCP アプリの作成" などの自然言語フレーズによってもトリガーされます。
ウィジェットを生成する
MCP ツール用の新しいウィジェットを作成するには、次の手順に従います。
モデル駆動型アプリ デザイナーからカスタム ツールを作成してテストし、完全な JSON 出力をコピーします。 ツールの出力の種類が JSON に設定されていることを確認します。 詳細: カスタム ツールの作成
スキルを呼び出 し、表示する内容を記述し、JSON 出力を会話に貼り付けます。
/generate-mcp-app-ui Visualizes flights using an animated arc map for routes and a synchronized Gantt timeline for departure and arrival schedules, enabling quick understanding of flight coverage, timing, and overlaps. Here's an example of the tool's output: {"flight_records":[{"Departure Time":"2024-07-02T05:00:00Z","Arrival Time":"2024-07-02T07:30:00Z","Flight Name":"Zava 1001","Status":"Active","Airport":"Seattle-Tacoma","Airport1":"Los Angeles Intl"},{"Departure Time":"2024-07-02T03:00:00Z","Arrival Time":"2024-07-02T10:00:00Z","Flight Name":"Zava 103","Status":"Active","Airport":"Seattle-Tacoma","Airport1":"Hartsfield-Jackson"}]}生成された HTML ファイルを確認します。 スキルは、
flight-map.htmlなどの自己完結型 HTML ファイルを作業ディレクトリに書き込みます。ブラウザーでプレビューします。 ウィジェットにテスト用のフォールバック オプションが含まれているので、HTML ファイルをローカルで開きます。 存在しない場合は、チャット エージェントにスタンドアロン HTML プレビューの追加を依頼できます。
繰り返します。 チャット内の変更を直接説明します。
- "マップを大きくする"
- "グラフにツール ヒントを追加する"
- "応答性の高いレイアウトとスクロール バーなしで、高さを下げ、250 ピクセルで収まる"
Note
スキルには、サンプル データやモック データではなく、ツールからの実際の JSON が必要です。 データシェイプによってウィジェットの生成が促進されます。 モック データを貼り付けると、実際のツールに接続しているときに、生成されたウィジェットが正しく動作しない可能性があります。
ウィジェットをデプロイする
ウィジェットの準備ができたら、対応するツールの UX 入力に HTML ファイルをコピーすると、ツールの UI 応答として返されます。 詳細については、 カスタム ツールの作成に 関するドキュメントを参照してください。
callServerTool で対話機能を追加する
スキルの呼び出し時にツールの名前も指定した場合、生成されたウィジェットに対話型のツール呼び出し統合を含めることができます。 これにより、ウィジェットは実行時にツールを再度呼び出すことができます。 たとえば、ツールのユーザーインターフェースにあるリフレッシュボタンが自身を呼び出すことができます。
/generate-mcp-app-ui Show the current weather conditions with a refresh button. Tool name: get_weather. Tool output: {"city":"Seattle","temp_f":54,"condition":"Overcast","humidity":78,"forecast":[...]}
ウィジェットの中でapp.callServerToolを設定し、ユーザーが更新を選択すると、ウィジェットがツールから直接更新されたデータを取得できるようにします。
ツール名を指定しない場合、ウィジェットは読み取り専用であり、 ontoolresult コールバックを介して配信されたデータのみをレンダリングします。
- Microsoft 365 Copilot チャット: テスト用のサイドローディング、組織で使用する Microsoft 365 管理センター経由での展開、Microsoft 365 エージェント ストアへの公開など、展開パスについては 、Copilot Chat の MCP アプリ を参照してください。
- Power Apps 宣言型エージェント: モデル駆動型アプリと MCP ツールを接続する方法については、 Power Apps MCP 宣言型エージェントのドキュメント を参照してください。
- その他の MCP ホスト: MCP アプリ ウィジェットの登録プロセスについては、ホストのドキュメントを参照してください。
ウィジェットの技術的な詳細
MCP アプリ プロトコル
ウィジェットは、App パッケージの @modelcontextprotocol/ext-apps クラスを使用してチャット ホストと通信します。 プロトコルは、これらのコールバックとメソッドを管理します。
| コールバック/メソッド | Description |
|---|---|
app.ontoolresult |
ホストがツール データを配信すると発生します。 データは常に result.structuredContentにあり、またはresult.dataそのものにはありません。 |
app.onhostcontextchanged |
テーマ (ctx.theme が 'light' または 'dark') を含め、ホスト コンテキストが変更されたときに発生します。 |
app.onteardown |
ウィジェットが会話から削除されると発生します。 |
app.connect() |
ホストとの通信を確立します。 すべてのイベント ハンドラーは、を呼び出すconnect()登録する必要があります。 |
app.getHostContext() |
connect()が完了した後、現在のホスト コンテキスト (初期テーマを含む) を返します。 |
app.callServerTool({ name, arguments }) |
ツールを対話形式で呼び出します。
result.isErrorとresult.structuredContentを返します。 |
CDN インポート
ウィジェットは CDN からすべての依存関係を読み込みます。 ビルド手順やローカル インストールは必要ありません。 依存関係には、次の 2 つの形式があります。
ECMAScript モジュール (ESM) は、
<script type="module">内で/+esmで終わる URL を使用してインポートされます汎用モジュール定義 (UMD) - プレーンな
<script src>タグを介して読み込まれ、副作用としてグローバルに登録されますライブラリ Format URL Purpose @modelcontextprotocol/ext-appsESM cdn.jsdelivr.net/npm/@modelcontextprotocol/ext-apps/+esmMCP アプリ Appクラス@fluentui/tokensESM cdn.jsdelivr.net/npm/@fluentui/tokens/+esmwebLightTheme/webDarkThemeトークン セット@fluentui/web-components@betaUMD unpkg.com/@fluentui/web-components@beta/dist/web-components.min.jsFluent UI カスタム要素
視覚状態
すべてのウィジェットは、次の 3 つの状態を処理します。
| 状態 | Guidance |
|---|---|
| 読み込んでいます | コンテキスト メッセージ (「アトラクションを検索中…」など) を <fluent-spinner> で表示します(「読み込み中…」ではなく)。 |
| ロード完了 | コンテンツをコンパクトにレンダリングします。 使用可能な幅全体を使用します。 |
| エラー | わかりやすいメッセージと [再試行] ボタンを表示します。 ウィジェットが callServerToolを使用している場合、ボタンによってツールが再度呼び出されます。 |
Fluent UI コンポーネント
ウィジェットでは、次の Fluent UI Web コンポーネントを使用できます。
<fluent-card>、 <fluent-button>、 <fluent-text-input>、 <fluent-textarea>、 <fluent-dropdown>、 <fluent-listbox>、 <fluent-option>、 <fluent-checkbox>、 <fluent-spinner>、 <fluent-divider>、 <fluent-badge>、 <fluent-switch>、 <fluent-tooltip>
テーマのサポート
ウィジェットは、Fluent UI デザイン トークンを使用して明るいテーマと濃色のテーマをサポートします。 ホストのテーマが onhostcontextchangedを介して変更されたときに、ウィジェットによって正しいトークン値が適用されます。 両方のテーマで正しいレンダリングを行うには、ハードコーディングされた色の値ではなく、常にトークン変数 ( var(--colorNeutralForeground1)など) を使用します。
カラー トークン
| 使用 | トークン |
|---|---|
| 主要テキスト | var(--colorNeutralForeground1) |
| 副テキスト | var(--colorNeutralForeground2) |
| 主な背景 | var(--colorNeutralBackground1) |
| カード/ホバーの背景 | var(--colorNeutralBackground2) |
| ブランド/アクセント | var(--colorBrandBackground) |
| ブランドサーフェス上のテキスト | var(--colorNeutralForegroundOnBrand) |
| 境界 | var(--colorNeutralStroke1) |
| エラー テキスト | var(--colorStatusDangerForeground1) |
| 成功メッセージ | var(--colorStatusSuccessForeground1) |
ハードコーディングされた 16 進数または RGB 値は使用しないでください。 ここに記載されていないトークン名を作成しないでください。
ベスト プラクティス
- 実際のテスト データを提供します。 スキルは、実際の JSON 構造を分析して、適切なビジュアルを選択します。 モック データは、実際のツールに接続すると中断するウィジェットを生成します。
- ビジュアルについて具体的に指定します。 マップ、グラフ、テーブル、カード レイアウトなど、目的の形式について説明します。 あいまいな説明は、一般的な結果につながります。
- 一つのビューから開始する。 ウィジェットはコンパクトな会話カードであり、完全なアプリケーションではありません。 チャット入力を複製するタブ、ページ ナビゲーション、または検索バーはありません。
- 両方のテーマでテストします。 明るいモードと暗いモードでプレビューし、コントラストと読みやすさを確認します。
- ビジュアルをデータと一致させます。 座標のマップ、数値または傾向データのグラフ、構造化レコードのカード、比較用のテーブル。
制限事項
- ウィジェットは、CDN からすべての外部ライブラリを読み込む必要があります。 実行時にはインターネット接続が必要です。
- 全画面表示モード では、スキルが生成するもの以外の追加の実装が必要です。
- このスキルでは、MCP サーバーの登録や Microsoft 365 管理センターへの展開は処理されません。 これらの手順は個別に完了する必要があります。
- 認証 (OAuth 2.1、Microsoft Entra SSO) は、ウィジェット HTML 自体ではなく、MCP ホスト環境によって処理されます。