本文へスキップ
Material 3 Expressivev1.3.0-rc.1

React向けMCP Apps

ツールにMaterialのインターフェースを追加できます。

Material 3 ExpressiveホストにMCP Appsを埋め込むことも、ホストのテーマに従うMaterialアプリを作ることもできます。ツールの結果を、ユーザーが確認して操作できるインターフェースに変えます。

連携パッケージは公式MCP Apps SDKをMaterialコンポーネント、テーマコンテキスト、表示モードに接続します。

ここで試す

操作できるツールの結果

天気予報を取得し、日付を選び、アプリ内から更新できます。全画面表示やピクチャーインピクチャーを試してから戻っても、選択内容は保持されます。上部のテーマコントロールもアプリに反映されます。

スクリプトによるデモです。LLMやAPIキーは必要ありません。

アプリの状態: 接続中。

ローカルデモを読み込み中…

仕組み

ツール呼び出しからアプリへ

  1. ツールがアプリを指定する

    MCPツールはui:// HTMLリソースを宣言します。接続されたクライアントがそのリソースを読み込み、McpAppFrameに渡します。

  2. フレームが接続する

    SDKブリッジがサンドボックス内のアプリを初期化し、ホスト機能、Materialスタイル変数、ライトモードまたはダークモード、コンテナーの寸法を渡します。

  3. 結果が操作可能になる

    ホストがツールの入力と結果を送信します。McpAppProviderはuseToolCallを通じてMaterialコンポーネントから利用できるようにします。

  4. 操作内容をホストに返す

    アプリはサーバーツールの呼び出し、表示モードの要求、モデルコンテキストの更新、チャットメッセージの追加を要求できます。有効にする機能はホストが決めます。

開発を始める

ひとつの連携パッケージ、ふたつの側面

MCP Appをホストする

McpAppFrameがiframeとSDKブリッジを管理します。リソースを読み込み、ツールの結果を渡し、ホストが対応するコールバックを有効にします。アプリは任意のUIフレームワークで作成できます。

Materialアプリを作る

McpAppProviderがアプリをホストに接続します。ツール呼び出しを読み取り、ホスト機能を利用し、ライトモードまたはダークモードに従い、使い慣れたMaterialコンポーネントを使えます。

import { Material3Provider } from '@language-lit/material3-expressive'
import { McpAppFrame, useMcpAppResource } from
  '@language-lit/material3-expressive-mcp-apps'

export function ToolApp({ client, uri, toolResult }) {
  const { resource, error } = useMcpAppResource(client, uri)
  if (error) return <p role="alert">{error.message}</p>
  return <Material3Provider>
    {resource && <McpAppFrame client={client} resource={resource}
      toolResult={toolResult} title="Tool app" sandboxUrl={sandboxUrl}
      onAuthorizeToolCall={authorizeToolCall} />}
  </Material3Provider>
}

各ドキュメントでは連携パッケージのスタイルシートより先にコアのスタイルシートを読み込みます。スタートガイドではローカルへのインストールとアプリリソースの登録方法を説明します。

互換性

互換性とホストのポリシー

このプレビューではext-appsと分割されたMCPクライアント/サーバーSDKの2.0.0、Material 3 Expressiveの1.3.0-rc.1、React 19でテストしています。連携パッケージはReact 18と19をpeer依存関係として宣言しています。外部ホストとの相互運用性は認定されていません。

全画面表示は終了操作を備えたCSS表示モードで、モーダルダイアログではありません。ホストのライトモードまたはダークモードは自動で反映されます。カスタムMaterialパレットを反映するにはテーマの共有が必要です。この連携パッケージはコアのMaterial準拠マトリックスには含まれません。

ホストが制御します

  • リソースの信頼性、ツールの認可、許可ドメイン、メッセージの振り分けはホストが管理します。
  • ブラウザーに埋め込む場合は、別オリジンのサンドボックスプロキシが必要です。
  • ホストが各ツール呼び出しを明示的に認可しない限り、アプリからの呼び出しは拒否されます。