Skip to content

Commit e24230d

Browse files
authored
Merge pull request modelcontextprotocol#1868 from conorkel/mcp-apps-blog
Mcp apps blog
2 parents b545e21 + cb67a33 commit e24230d

File tree

2 files changed

+125
-8
lines changed

2 files changed

+125
-8
lines changed

blog/content/posts/2025-11-20-adopting-mcpb.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ A basic bundle structure looks like:
1919
bundle.mcpb (ZIP file)
2020
├── manifest.json # Required: Bundle metadata and configuration
2121
├── server/ # Server implementation
22-
│ └── index.js
22+
│ └── index.js
2323
├── node_modules/ # Bundled dependencies
2424
└── icon.png # Optional: Bundle icon
2525
```
@@ -38,20 +38,20 @@ Anthropic originally developed this format (previously called DXT) for Claude's
3838

3939
## What this means for developers
4040

41-
**Servers:** You can now package your local MCP servers for distribution across multiple clients. The `mcpb` CLI helps you create a `manifest.json` and package your server into a `.mcpb` file. Once packaged, users can install your server with a single click in any client that supports MCP Bundles.
41+
**Servers:** You can now package your local MCP servers for distribution across multiple clients. The `mcpb` CLI helps you create a `manifest.json` and package your server into a `.mcpb` file. Once packaged, users can install your server with a single click in any client that supports MCP Bundles.
4242

4343
**Clients:** You can add support for MCP Bundles to your application using the open-source toolchain. The repository includes the schemas and key functions used by Claude for macOS and Windows to implement bundle support, which you can adapt for your own client.
4444

4545
## Getting started
4646

47-
Check out the repo to get started: [modelcontextprotocol/mcpb](https://github.com/modelcontextprotocol/mcpb). We encourage feedback and contributions.
47+
Check out the repo to get started: [modelcontextprotocol/mcpb](https://github.com/modelcontextprotocol/mcpb). We encourage feedback and contributions.
4848

4949
## Acknowledgements
5050

5151
Thanks to the MCP contributors and maintainers involved in making this happen, including:
5252

53-
* David Soria Parra (MCP Lead Maintainer)
54-
* Adam Jones (MCP Maintainer)
55-
* Joan Xie (MCPB Maintainer)
56-
* Felix Rieseberg (MCPB Maintainer)
57-
* Alex Sklar (MCPB Maintainer)
53+
- David Soria Parra (MCP Lead Maintainer)
54+
- Adam Jones (MCP Maintainer)
55+
- Joan Xie (MCPB Maintainer)
56+
- Felix Rieseberg (MCPB Maintainer)
57+
- Alex Sklar (MCPB Maintainer)
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
+++
2+
date = '2025-11-21T22:00:00+00:00'
3+
publishDate = '2025-11-21T22:00:00+00:00'
4+
draft = false
5+
title = 'MCP Apps: Extending servers with interactive user interfaces'
6+
author = 'Anton Pidkuiko (Maintainer), Olivier Chafik (Maintainer), Ido Salomon (MCP-UI), Liad Yosef (MCP-UI), Nick Cooper (Core Maintainer), Sean Strong (Anthropic), Jerome Swannack (Anthropic), Alexei Christakis (OpenAI), Bryan Ashley (OpenAI)'
7+
tags = ['apps', 'ui', 'user interfaces']
8+
+++
9+
10+
Today we're proposing an MCP extension to standardize support for interactive user interfaces in the Model Context Protocol. This addresses one of the most requested features from the MCP community and builds on proven work from [MCP-UI](https://github.com/idosal/mcp-ui) and [OpenAI Apps SDK](https://developers.openai.com/apps-sdk/).
11+
12+
MCP Apps is an optional extension that enables servers to deliver interactive user interfaces to hosts. It introduces a standardized pattern for declaring UI resources, linking them to tools, and enabling bidirectional communication between embedded interfaces and the host application.
13+
14+
The SEP was authored by MCP core maintainers at OpenAI and Anthropic, together with the MCP-UI creators and lead maintainers of the MCP UI Community Working Group.
15+
16+
## Standardization for interactive interfaces
17+
18+
Currently, MCP servers are limited to exchanging text and structured data with hosts. While this works well for many use cases, it creates friction when tools need to present visual information or gather complex user input.
19+
20+
Consider a data visualization server that returns chart data as JSON. The host application must interpret that data and render it, a burden that falls on every client implementation. Or imagine a configuration tool that needs to collect multiple related settings from users. Without UI support, these interactions become awkward exchanges of text prompts and responses.
21+
22+
The community has been creative in working around these limitations, but different implementations use different approaches, making it harder for servers to work consistently across hosts. With lack of standardization, there’s a real risk of fragmentation in the ecosystem.
23+
24+
## Building together
25+
26+
The [MCP-UI project](https://github.com/idosal/mcp-ui), created by Ido Salomon and Liad Yosef and maintained by a dedicated community, spearheaded the vision of agentic apps with interactive interfaces. The project developed patterns for delivering rich user interfaces as first-class MCP resources, proving that agentic apps fit naturally within MCP’s architecture. Backed by a large community and providing rich SDKs, it drove adoption at leading companies and projects such as Postman, Shopify, HuggingFace, Goose, and ElevenLabs.
27+
28+
The [OpenAI Apps SDK](https://developers.openai.com/apps-sdk/) further validated the demand for rich UI experiences within conversational AI interfaces. The Apps SDK enables developers to build rich, interactive applications inside ChatGPT using MCP as its backbone. To ensure interoperability and establish consistent security and usage patterns across the ecosystem, we (Anthropic, OpenAI and MCP-UI) are collaborating to create an official MCP extension for interactive interfaces.
29+
30+
## MCP Apps specification
31+
32+
We're proposing a specification for UI resources in MCP, but the implications go further. MCP Apps is starting to look like an agentic app runtime: a foundation for novel interactions between AI models, users, and applications. The proposal is intentionally lean, starting with core patterns that we plan on expanding over time.
33+
34+
### Key design decisions
35+
36+
**Predeclared resources**
37+
38+
UI templates are resources with the `ui://` URI scheme, then referenced in tool metadata.
39+
40+
```ts
41+
// Server registers UI resource
42+
{
43+
uri: "ui://charts/bar-chart",
44+
name: "Bar Chart Viewer",
45+
mimeType: "text/html+mcp"
46+
}
47+
48+
// Tool references it in metadata
49+
{
50+
name: "visualize_data_as_bar_chart",
51+
description: "Plots some data as a bar chart",
52+
inputSchema: {
53+
type: "object",
54+
properties: {
55+
series: { type: "array", items: .... }
56+
}
57+
},
58+
_meta: {
59+
"ui/resourceUri": "ui://charts/bar-chart",
60+
}
61+
}
62+
```
63+
64+
This approach enables hosts to prefetch and review templates before tool execution, improving both performance and security. It also separates static presentation (the template) from dynamic data (tool results), enabling better caching.
65+
66+
**MCP transport for communication**
67+
68+
Instead of inventing a custom message protocol, UI components communicate with hosts using MCP's existing JSON-RPC base protocol over `postMessage`. This means:
69+
70+
- UI developers can use the standard `@modelcontextprotocol/sdk`
71+
- All communication is structured and auditable
72+
- Future MCP features automatically work with the UI extension
73+
74+
**Starting with HTML**
75+
76+
The initial specification supports only `text/html` content, rendered in sandboxed iframes. This provides:
77+
78+
- Universal browser support
79+
- Well-understood security model
80+
- Screenshot and preview generation capabilities
81+
- A clear baseline for future extensions
82+
83+
Other content types such as external URLs, remote DOM and native widgets are explicitly deferred to future iterations.
84+
85+
**Security first**
86+
87+
Hosting interactive content from MCP servers requires careful security consideration. The proposal addresses this through multiple layers:
88+
89+
1. **Iframe sandboxing**: All UI content runs in sandboxed iframes with restricted permissions
90+
2. **Predeclared templates**: Hosts can review HTML content before rendering
91+
3. **Auditable messages**: All UI-to-host communication goes through loggable JSON-RPC
92+
4. **User consent**: Hosts can require explicit approval for UI-initiated tool calls
93+
94+
These mitigations create defense in depth against malicious servers while preserving the flexibility developers need.
95+
96+
**Backward compatibility**
97+
98+
MCP Apps is an optional extension. Existing implementations continue working without changes, and hosts can gradually adopt UI support at their own pace. Servers should provide text-only fallback for all UI-enabled tools and return meaningful content even when UI is unavailable, so they can serve both UI-capable and text-only hosts.
99+
100+
## What's next
101+
102+
The [UI Community Working Group](https://github.com/modelcontextprotocol-community/working-groups/issues/35) has been instrumental in shaping this proposal through extensive feedback and discussion. We have built an [early access sdk](https://github.com/modelcontextprotocol/ext-apps) to demonstrate the patterns & types described in the SEP. The [MCP-UI](https://mcpui.dev/) client and server SDKs support these patterns.
103+
104+
We invite you to:
105+
106+
- Review the full specification in [SEP-1865](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865)
107+
- Share feedback and concerns in the GitHub issue
108+
- Join the discussion in the `#ui-cwg` channel on [MCP Discord](https://discord.gg/modelcontextprotocol)
109+
- Test prototype implementations and share your experience
110+
111+
## Acknowledgements
112+
113+
This proposal wouldn't exist without the work of the maintainers at MCP-UI, OpenAI and Anthropic.
114+
115+
Ido Salomon and Liad Yosef, through MCP-UI and moderation of `#ui-cwg`, incubated and championed many of the patterns that MCP Apps now standardizes, and together with contributors demonstrated that UI resources can be a natural part of MCP. Sean Strong, Olivier Chafik, Anton Pidkuiko and Jerome Swannack from Anthropic helped steer the initiative and drive the collaboration. Nick Cooper, Alexei Christakis, and Bryan Ashley from OpenAI have provided valuable direction from their experience building the Apps SDK.
116+
117+
Special thanks to the UI Community Working Group members and everyone who contributed to the discussions that shaped this proposal.

0 commit comments

Comments
 (0)