TL;DR

FastMCP 3.2 ("Show Don't Tool", 2026-03-30) là bản "Apps release" — full support cho MCP Apps extension (SEP-1865). Tool giờ có thể trả về UI tương tác (chart, table, form, dashboard) render trực tiếp trong conversation thông qua sandboxed iframe. Bạn viết Python, user thấy React UI. Agent thậm chí có thể tự generate UI tại runtime. MCP server không còn chỉ là tool catalog — nó trở thành backend hoàn chỉnh cho app của bạn.

What's new

FastMCP 3.2.0 giới thiệu primitive mới FastMCPApp — tách UI tool khỏi backend tool, tự quản lý visibility, và gán stable tool identifier sống sót qua mọi namespace transform. Decorator @app.ui() (hoặc @mcp.tool(app=True)) biến 1 tool Python bất kỳ thành 1 app trả về PrefabApp thay vì JSON text.

Prefab là Python DSL compile sang React — bạn không rời Python vẫn ship được UI tương tác thật (hover chart, sortable table, form có validation). FastMCP kèm sẵn 5 built-in provider: FileUpload (drag-drop), Approval (human-in-the-loop), Choice (clickable), FormInput (Pydantic-backed), và GenerativeUI — cái cuối cho phép agent tự viết Prefab code tại runtime rồi render. Lệnh fastmcp dev apps mở browser preview kèm MCP message inspector để debug.

Why it matters

Từ khi MCP ra mắt, tool luôn trả về text/JSON — model phải đọc rồi re-render mỗi turn, user mất thời gian prompt lại khi muốn filter/sort/explore. MCP Apps flip kịch bản đó: UI là first-class primitive, state lưu ngay trong iframe, user interact trực tiếp. Một MCP server có thể thay thế dashboard nội bộ, portal quản trị, hoặc làm backend cho app SaaS — tất cả chạy trong Claude/ChatGPT/VS Code không cần viết frontend riêng.

Technical facts

from prefab_ui.app import PrefabApp
from prefab_ui.components import Column, Heading
from prefab_ui.components.charts import BarChart, ChartSeries
from fastmcp import FastMCP

mcp = FastMCP("Dashboard")

@mcp.tool(app=True)
def revenue_chart(year: int) -> PrefabApp:
    data = [
        {"quarter": "Q1", "revenue": 42000},
        {"quarter": "Q2", "revenue": 51000},
        {"quarter": "Q3", "revenue": 47000},
        {"quarter": "Q4", "revenue": 63000},
    ]
    with Column(gap=4, css_class="p-6") as view:
        Heading(f"{year} Revenue")
        BarChart(data=data, series=[ChartSeries(data_key="revenue", label="Revenue")], x_axis="quarter")
    return PrefabApp(view=view)
  • Protocol: UI resource register dưới scheme ui://, tool advertise _meta.ui.resourceUri.
  • Transport: JSON-RPC qua postMessage; spec khởi điểm chỉ chấp nhận text/html trong sandboxed iframe.
  • Install: pip install "fastmcp[apps]".
  • Built-in providers: FileUpload, Approval, Choice, FormInput, GenerativeUI.
  • Patch 3.2.4 (2026-04-14) thêm Keycloak OAuth, AuthKit audience binding per RFC 8707, FileUpload base64 size validation, và 232K-schema crash test từ APIs.guru vào CI.

Comparison

CapabilityFastMCP 3.0/3.1FastMCP 3.2
UI tool primitiveExperimental Prefab hookFastMCPApp first-class
Built-in UI providersNone5 (FileUpload, Approval, Choice, FormInput, GenerativeUI)
Stable tool IDs qua transformKhông
Dev inspectorCLI onlyfastmcp dev apps browser preview
MCP Apps spec (SEP-1865)PartialFull

So với OpenAI Apps SDK, FastMCP target chuẩn mở SEP-1865 nên cùng 1 server chạy không đổi trên Claude (web + desktop), ChatGPT, VS Code Insiders, Goose, AWS Kiro, và Google DeepMind Antigravity. JetBrains đang explore integration.

Use cases

  • Thay dashboard nội bộ: revenue chart, employee directory, ops monitor — query từ Claude thay vì mở Grafana/Metabase.
  • Data exploration không prompt lại: sortable table, hover chart, filter — user thao tác trực tiếp, không tốn token.
  • Workflow nhiều bước: configuration wizard, approval gate, Pydantic form có validation.
  • Generative UI: agent mô tả UI cần render, Prefab compile tại runtime — đúng điểm jlowin nhấn mạnh trong tweet.
  • SaaS backend đầy đủ: tool call + UI render + auth + state, 1 Python process, không cần frontend riêng.

Limitations & pricing

FastMCP mở mã Apache-2.0 — miễn phí. Prefab UI library vẫn được jlowin đánh dấu "under very active development", component set sẽ mở rộng dần. Spec hiện chỉ cho phép text/html trong sandboxed iframe — chưa có native widget, chưa hỗ trợ thêm media type. Host nào chưa ship MCP Apps sẽ fallback text bình thường. Surface là Python — server viết bằng ngôn ngữ khác phải làm việc trực tiếp với raw protocol SEP-1865.

What's next

Roadmap tập trung 3 hướng: (1) mở rộng Prefab component library, (2) thêm media type ngoài text/html trong các bản sửa spec kế tiếp, (3) host adoption rộng hơn (JetBrains, IDE khác, mobile). Với SEP-1865 là official MCP extension đầu tiên và 7+ host lớn đã ship, MCP Apps là cầu nối để MCP server thật sự trở thành "app platform" — không chỉ là tool registry.

Nguồn: gofastmcp.com, Model Context Protocol Blog, FastMCP releases, @jlowin.