AIエージェントが対話的なUIを返す!MCP−UIで変わるユーザ体験
by
daitasu
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
AIエージェントが対話的なUIを返す! MCP−UIで変わるユーザ体験 Web UI 実装勉強会 #2 2025.11.12 @daitasu
Slide 2
Slide 2 text
自己紹介 Name: @daitasu Belong to: SEN, Inc. Favorite: Dinosaurus
Slide 3
Slide 3 text
会社紹介 写真を中心とした、幼保業界の DXプロダクトを展開
Slide 4
Slide 4 text
AIエージェントが対話的なUIを返す! MCP−UIで変わるユーザ体験
Slide 5
Slide 5 text
Model Context Protocol(MCP)とは? ● Anthropic社が公開しているオー プンソースのプロトコル ● アプリケーションがLLMに対して何 かしらのコンテキストを提供する際 のプロトコルを標準化したもの
Slide 6
Slide 6 text
MCPを構築する3つのコンポーネント ● host ○ 1つまたは複数のMCP client を 管理する AI アプリケーション (IDE 等) ● client ○ アプリ内でhost と server の 1:1 の接続を維持する ● server ○ MCP client に対し何かしらの context を提供する
Slide 7
Slide 7 text
MCP-UIはMCPを拡張し、 AIエージェントがインタラクティブなUI を返却することを可能にする仕組み
Slide 8
Slide 8 text
MCP-UIとは? ● MCPを拡張し、AIエージェントが 対話的なUIリソースを返却できる ようにする ● Chat UIに対してUIコンポーネン トを返却し、そのUI上でのアクショ ンも可能 ● Shopify の例: ○ チャットの返答として商品一 覧や購入フォームを提供 ○ https://shopify.engineering/mc p-ui-breaking-the-text-wall 1. チャットがUIコンポーネントを返却 2. UI上のボタンでアクションし、次の prompt や tool を呼べる
Slide 9
Slide 9 text
やってみよう
Slide 10
Slide 10 text
MCP-UI SDK ● MCP-UI は現在、Ruby、Python、TypeScript の3種のSDKを提供 ● 今回は TypeScript で実施 ● TypeScript SDK には下記2つがある ○ @mcp-ui/client ○ @mcp-ui/server ● 先に今回の完成物 ○ https://github.com/daitasu/mcp-ui-playground
Slide 11
Slide 11 text
Try 1. シンプルな「Hello World」の返却 ● 簡略化のため、AIエージェントは噛ませず、ブラウザから直接MCP-UI の tool を呼んでみる ● ① シンプルな「Hello world」をrawHtml として返却
Slide 12
Slide 12 text
server side ● server side は @mcp-ui/server を 用いて実装 ● registerTool に対し、下記を渡す ○ MCP tool 名 ○ メタデータ ○ createUIResource(提供するUI の情報) MCP tool 名 メタデータ UI リソースの 情報
Slide 13
Slide 13 text
server side - createUIResource createUIResource は下記を指定 ● uri ○ MCP client がMCP-UIを識別す る一意のURL(ui:// スキーマ) ● content.type ○ rawHtml, externalUrl, remoteDom ● encoding ○ text / blob
Slide 14
Slide 14 text
client side - fetch 部分 ● @mcp-ui/client を用いる ● streamableHttp でMCP サーバと接続 ● client.callTool でサーバ側で設定した toolName を呼び出し ○ 実際にはAIエージェントがここに介在 する
Slide 15
Slide 15 text
client side - UIResourceRenderer ● @mcp-ui/client が提供する UIResouceRenderer を利用 ● MCP server から返却されたUI リソース がここにレンダリングされる ● スクリプトやDOMは iframe 上のサンド ボックス環境で実行されることになる ● UIResouceRenderer には対話的なアク ションをiframe から受けたり、自前のコン ポーネントを提供することができる
Slide 16
Slide 16 text
Try 2. 自前のReactコンポーネントを提供し、対話的アクションを呼び出す ● 今度は自前のReactコンポーネント(CustomCounter)をMCPが返してみる ● また、コンポーネント内のアクションをクライアント側で受け取る
Slide 17
Slide 17 text
client side - ComponentLibrary ● ComponentLibraryの設定をすること で、MCPが固有の「Reactコンポーネント」 or 「WEBコンポーネント」を提供可能 ● サーバ側でprop やevent を指定するた め、マッピングを設ける必要がある ● @mcp-ui/client が標準で一部のサンプ ルコンポーネントも提供している ○ basicComponentLibrary
Slide 18
Slide 18 text
client side - UIResourceRendererの拡張 ● remoteDomProps ○ 設定した自前のコンポーネント定義を 配置する ○ サーバサイドで設定したコンポーネント の呼び出しが可能になる ● onUIAction ○ UIリソース上で発火したアクションを ブラウザ側で受け取ることが可能
Slide 19
Slide 19 text
server side - インタラクティブなアクションの設定 ● content.type ○ 何かしらのReactコンポーネントを返却する 際は「remoteDom」を指定 ● window.parent.postMessage ○ UIリソース上のアクションでチャットUI(AI エージェント)に次の指示を要求可能 ○ メッセージの主な種類は5種類 ■ tool ■ prompt ■ intent ■ link ■ notify ○ https://mcpui.dev/guide/embeddable-ui
Slide 20
Slide 20 text
ユーザ体験はどう変わる? Before After - MCP-UI によって、ユーザは開発者が設けた画面フローに沿う必要がなく なる - 自分の望む順序で欲しい UIにアクセス が可能(LLM が選択する) - よりユーザフレンドリーな体験になる(???)
Slide 21
Slide 21 text
まとめ ● MCP-UI で AIエージェントが対話的なUIを返却可能になる ● ユーザはMCPを通じて、自分の望むUIを直接得ることができる ● WEBのユーザ体験に大きな変化は産めそう ● ただし、使い勝手のイメージが難しく、ユーザにとっての良い体験にな るには試行錯誤が必要そう