# MCP Apps: Primitives, Discovery, and the Future of Software

Pietro Zullo, Manufact, Inc | AI Engineer World's Fair 2026 | 28:54

Source: https://www.youtube.com/watch?v=sAOBXCDiDOs
Channel: AI Engineer (https://www.youtube.com/@aiDotEngineer). Summarised by AIE Talks.
Page: https://aietalks.com/talks/mcp-apps-primitives-discovery-and-the-future-of-software
Published: 2026-07-05
Tags: developer-experience, mcp, tool-use

## TL;DR
- MCP Apps add a bidirectional UI layer to MCP servers, with widgets rendered in sandboxed iframes and live communication between the model, host, and UI.
- MCP Apps can update the model's context, send follow-up messages, call additional tools, stream partial tool inputs into a widget, and keep selected data out of the model's context.
- Stores for ChatGPT, Claude, and Cursor provide submission, review, and one-click installation, while Claude is beginning to discover connectors dynamically for tasks.

## Summary
Pietro Zullo explains MCP Apps as an interaction layer for MCP servers. A server can return a UI resource declared with a `ui://` resource, which the host renders in a sandboxed iframe. The model and widget can then exchange state, messages, and tool calls. Zullo walks through model-context updates, follow-up messages, streaming tool arguments into a live interface, display modes, and privacy patterns where the user sees data that is withheld from the model. He also shows MCP Apps in Cursor, Claude, and ChatGPT, including analytics and an Excalidraw canvas that updates as Mermaid input streams in. The talk then turns to distribution. ChatGPT, Claude, and Cursor have self-serve submission routes that check annotations, authentication, test cases, and prompts. Zullo argues that store listings matter because users can install servers with one click, and Claude can already search its registry when a task has no known connector.

## Key ideas
### MCP Apps return rendered interfaces alongside tool results
[06:12](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=372s)
An MCP App keeps the familiar model, host, tool, and MCP server structure, but the tool can return a widget instead of only a JSON string. The host renders that widget in a sandboxed iframe. The app declares UI resources during initialization, and the tool can populate the resource with its arguments before the client displays it. Zullo contrasts this with a wall of text: the interface can organize the same information into something a person can read and use. The iframe also has a communication channel back to the host, so the widget is interactive rather than a static attachment.

### A widget can push its live state into the model context
[08:32](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=512s)
The model cannot inspect everything happening inside a widget on its own. MCP Apps provide a state primitive that lets the UI tell the model what is currently displayed or selected. Zullo uses an article interface as the example. The initial state tells the model that no article is selected. If the user changes the selection, the widget sends the new state, and a later user message is handled with that information available. This lets the model respond to interaction inside the app without requiring the user to describe the interaction again in chat.

### UI message lets an app start a follow-up conversation
[10:03](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=603s)
An MCP App can send a message from a button or another UI interaction back into the conversation. In Zullo's shoe example, a user can click to learn more about the Trey Blazer Pro. The app sends a follow-up message, and the model starts providing information about that product. Hosts do not all handle this the same way. Claude places the message in the chat input and lets the user decide whether to send it. OpenAI sends it directly to the model and starts streaming the response. The app can therefore connect a specific interface action to a conversational response.

### Streaming tool arguments can update a widget while they arrive
[11:05](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=665s)
Tool inputs do not have to wait until the complete call is available. As the model streams tokens into the tool arguments, the app can use the partial input to update its UI incrementally. Zullo describes interfaces that render an SVG or a video while their source is arriving. Manufact built a Remotion MCP App that creates a video with React and renders the result inside the widget in real time. This pattern also appears in the Excalidraw demo, where Mermaid syntax streams into a canvas and the diagram changes as the input is produced.

### Apps can call more tools and separate user-visible data from model-visible data
[12:20](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=740s)
A widget can include controls that trigger additional tool calls, allowing the user to request more information from the same MCP server. Zullo also describes a privacy pattern based on separate outputs. A tool can send structured data to the widget while returning different text, or no sensitive data, to the model. The user might see a card containing private information, while the model receives only an instruction such as, "The user is seeing his private information in the widget above." This allows an app to present data that the provider's model should not receive, unless the developer explicitly chooses to share it.

### Hosts support different display modes and capabilities
[15:27](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=927s)
An MCP App can request inline display, full-screen display, or picture-in-picture. Full-screen mode can turn the chat area into the widget with the input box overlaid, which Zullo suggests for video editing interfaces. Apps can open external links and listen to the operating system's theme so their appearance matches the host. Client support differs across products and versions. Zullo names Claude Desktop, Claude Cowork, ChatGPT, Codex, Cursor, and VS Code as clients that support MCP Apps in some form. Developers can inspect host metadata and return a widget only when the client can render it, while providing an alternative output for clients that cannot.

### MCP Apps can be built as ordinary MCP tools with registered UI resources
[20:40](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=1240s)
With the mcp-use SDK, developers define the MCP server and its tools in the usual way, then return widgets from those tools. Widget files placed in a resources folder are automatically registered as UI resources. A widget is a React component that is compiled into HTML and CSS and linked to the tool. Zullo also points to the `npx create-mcp-app` template as a way to start a project. The SDK handles protocol details beneath the server code, while the developer works with the server, tools, and existing UI components.

### Store submission turns MCP distribution into an installation flow
[21:52](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=1312s)
ChatGPT, Claude, and Cursor each provide a self-serve path for submitting MCP servers or apps. The submitted remote server is scanned for correctly annotated tools, valid arguments, and declared authentication. Developers provide test cases and test prompts, and the submission is partly automated and partly manual. Accepted listings appear in ChatGPT's app directory, Claude's connectors directory, or Cursor's directory. A listing gives users a one-click install URL instead of requiring them to copy a JSON configuration file. Zullo says Manufact's cloud can run checks and generate submission artifacts such as screenshots and test cases.

### Dynamic connector discovery makes store presence affect product selection
[24:59](https://www.youtube.com/watch?v=sAOBXCDiDOs&t=1499s)
Zullo says Claude can search its MCP registry when a task does not have a specific tool assigned. The model can choose a connector that matches the user's intent, rather than waiting for the user to know the product or install it first. He describes this as a route for products to be found inside the chat by people already asking for something they need. ChatGPT was expected to add similar discovery soon. Zullo connects this to his own workflow, where Granola meeting notes, Linear tickets, a codebase, and MCP-enabled agents pass context between systems and turn feedback into implementation work.

## Notable quotes
- "MCP apps are not only returning JSON. And that allows much richer experiences." (04:40)
- "So, from the widget itself, you can call other tools." (12:20)
- "You don't have to share that ugly JSON file anymore with your MCP configuration." (24:42)
- "AI apps are the new browsers." (27:40)
- "I don't want to look at your dashboard anymore. I want to use it in Cloud." (28:28)

## Tools & references mentioned
- Manufact, Inc
- mcp-use
- MCP Inspector
- Model Context Protocol
- MCP UI
- ChatGPT
- Claude
- Claude Desktop
- Claude Cowork
- Claude Code
- Codex
- Cursor
- VS Code
- Character AI
- OpenAI
- Perplexity
- Excalidraw
- Remotion
- Pulsar MCP
- Granola MCP
- Linear
- Paul Graham
- Y Combinator

## Who should watch
- You are building an MCP server and need to add an interactive UI without inventing the host integration yourself.
- Your product has a dashboard or other human-facing interface, and you need to understand how users might access it through ChatGPT, Claude, or Cursor.
- You are ready to publish an MCP server and need practical details about store submission, authentication checks, test prompts, and one-click installation.
