3 編目までクライアントが何を見せるかは 我々がここに書いたから 分かっていた。今回は書かない。
三行
final read = await client.readResource('ui://desk');
final text = read.contents.first.text!;
final screen = jsonDecode(text) as Map<String, dynamic>;
ui://desk — 546 B, 6 lines, type "page", title "Desk"
nothing about this screen is written in the client
Flutter のホストならここから MCPUIRuntime.initialize(screen) へ渡る。講座のサンプルは誰でも回せるよう純粋な Dart に留め、届いたことと、それが画面であること までを確かめる。
何が無いのか
このファイルに無いものだ。
- ウィジェットツリー
- 色・文字の大きさ
- ボタンのラベル
- どのボタンがどの道具を呼ぶか
全部サーバーが渡した文書の中にある。クライアントは その文書を受け取ってランタイムに渡す配管 だ。
だからサーバーが画面を直してもクライアントは何もしなくていい。サーバー 4 編目で fontSize を 88 から 120 に変えてもサーバーを落とさなかったように、こちら側も作り直さない。
546 バイト
画面ひとつが 546 バイト。6 行だ。
この数字が小さく見えることが要点である。画面を運ぶ費用が小さければ、運ぶことが既定になる。 毎回アプリを配らねばならないなら画面はアプリの中にあるのが正しく、文書ひとつ受け取るだけなら外にあるのが正しい。