I'm the author of FastMCP, the most popular Python framework for building MCP servers. I've been really excited about MCP Apps for a while. I think letting a server ship a fully interactive UI directly into the conversation is one of the most compelling additions to the protocol.
I wanted to make this a first-class experience in FastMCP, but I kept getting stuck on what it actually means for a Python framework to integrate with a frontend feature. The JavaScript ecosystem has extraordinary tooling for this. I didn't want to build a worse version of it just to stay in Python.
What changed my thinking was looking at how MCP is actually deployed. Most people think of it as a way to reach customers, but what we overwhelmingly see is companies using MCP internally — replacing dashboards, workflows, and internal tools. And for that, Python developers don't need the full JS ecosystem and its polished, branded, custom frontends. What they need is a way to compose the right components and data bindings.
So we built Prefab. It's a generative UI framework with 100+ shadcn components that you compose using Python context managers. It serializes to a JSON protocol that renders as a real React application, with full client-side interactivity, reactive state, actions, and no JavaScript required. And because context managers have no closing tags, a partial Prefab script is already a valid UI, which means an agent can stream an interface to the renderer as it generates, without waiting for the full program to complete.
Prefab is built right into FastMCP 3.2, but Prefab Apps can also run standalone or against any REST backend (like FastAPI).
Docs: https://prefab.prefect.io
Try the playground (no install required): https://prefab.prefect.io/docs/playground