Redditで興味深い投稿を見かけました。
FastMCPの作者であるjlowin氏が、バージョン3.2のリリースを告知していたのです。
FastMCP 3.2がもたらす変化について整理しました。
MCPツールが「テキストを返す」制約から解放された
従来、MCPツールが返せるのは基本的にテキストでした。
表形式のデータもチャートも地図も、最終的には文字列として表現する必要があったわけです。
そして、それをモデルに渡す形でしか扱えませんでした。
FastMCP 3.2が対応したMCP Appsは、この制約を根本から変えます。
ツールの戻り値として、対話型のアプリケーション本体を指定できるようになったのです。
返される中身は何でも構いません。
たとえば、データテーブル、フォーム、ファイルアップローダー、地図などが挙げられます。
これらが、会話の中に直接レンダリングされて表示されます。
ここが肝心なポイントです。
モデルに渡されるのは、コンパクトな構造化データだけ。
UIを支える大量のデータそのものは、コンテキストウィンドウに入りません。
なぜコンテキストウィンドウの話が重要なのか
Redditのコメント欄では、この「データがコンテキストに入らない」という部分を評価する声が目立ちました。
ツールが返す表形式や視覚的なデータを考えてみてください。
文字列としてコンテキストに詰め込んでも、モデルが十分に推論できる形にはなっていません。
つまり、トークンを消費しているわりに、得られる知的価値は小さいわけです。
モデルには、推論に必要な要約だけを渡す。
完全なUIは、人間の目に向けて表示する。
この役割分担こそが、本来あるべき形ではないでしょうか。
Prefabとの組み合わせで見えてくる全体像
数週間前、同じ作者はPrefabというフレームワークも発表していました。
shadcnコンポーネントをPythonから組み立てるためのツールです。
そして、JavaScriptを書かずに済ませられる点が特長になります。
FastMCP 3.2は、このPrefabとAppsプロトコルをつなぐ接着剤の役割を果たします。
つまり、両者は最初から対になって設計されていたわけです。
投稿で紹介されていたサンプルコードは、驚くほどシンプルでした。
from prefab_ui.components import DataTable
@mcp.tool(app=True)
def team_directory(department: str) -> DataTable:
...
ポイントは2つだけです。
デコレータに app=True を足す。
そして、戻り値の型をコンポーネントクラスにする。
たったこれだけで、マークダウンのダンプではなく、並び替えや検索に対応したテーブルが利用者の目の前に現れます。
FastMCPAppクラスがもたらす別の世界
より本格的な用途には、新しく追加された FastMCPApp クラスが用意されています。
このクラスを使うと、MCPサーバーがそのままバックエンドとして機能するようになります。
想定される用途は、以下のようなものです。
- 管理画面
- ワークフローツール
- 対話型ダッシュボード
いずれも、クリックのたびにモデルを経由する必要はありません。
完全なアプリケーションとして動作します。
UIからサーバーへは、直接コールバックが飛びます。
そのため、従来のように一挙一動をモデルが仲介する必要もなくなります。
補助的なヘルパーツールは、モデルのツールリストから隠しておけます。
これが地味に効いてきます。
なぜなら、モデルに見せる必要のない内部API的なものを、そのまま晒さずに済むからです。
双方向の「裏通信路」という発想
コメント欄でも指摘されていたことですが、MCP Appsは単なるUI機能の追加ではありません。
ツール呼び出しという行為そのものの捉え方を変えている、とも表現できます。
これまでのツールは、「呼び出して結果を返す」という一方向のやりとりでした。
一方、MCP Appsが可能にするのは、双方向の裏通信路です。
しかも、コンテキストを汚染せずに状態を扱えます。
言われてみれば確かに、これは別カテゴリの機能かもしれません。
GenerativeUIという選択肢
さらに興味深いのは、UIそのものをエージェントに生成させる選択肢も用意されている点です。
PrefabのDSLはトークン効率がよく、ストリーミングとの相性もよいとのこと。
そのため、GenerativeUI プロバイダを登録するだけで済みます。
それだけで、その場でUIが組み上がる使い方が成立します。
mcp.add_provider(GenerativeUI())
固定されたコンポーネントを呼び出すのではありません。
状況に応じたUIを、動的に描かせる。
こういう用途にも対応できるよう設計されているわけです。
まとめ
FastMCP 3.2が示しているのは、ある時代の終わりです。
具体的には、MCPツールの出力が「モデルが読むテキスト」に縛られていた時代のことを指します。
整理すると、変化のポイントは次の3つになります。
- モデルには、推論に必要な構造化データを渡す
- 人間には、対話型のUIを見せる
- データの重い部分は、コンテキストウィンドウから切り離す
この役割分担が標準化されていくと、ツールが扱える用途の幅は一気に広がるでしょう。
管理画面やダッシュボードをMCPサーバーとして実装する未来も、それほど遠くはなさそうです。
