ext-apps
MCP ServerFreeOfficial repo for spec & SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers
Capabilities14 decomposed
iframe-sandboxed ui rendering with postmessage json-rpc protocol
Medium confidenceRenders HTML-based user interfaces in sandboxed iframes that communicate bidirectionally with MCP hosts via JSON-RPC 2.0 over postMessage. The protocol enforces strict message validation, capability negotiation during initialization, and secure request/response routing between View (iframe) and Host layers without direct DOM access or network exposure. Uses a three-party architecture where MCP servers declare ui:// URI resources that hosts fetch and render, with the View layer isolated from host context except through explicit RPC calls.
Implements a three-party architecture (Server → Host → View) with explicit capability negotiation and tool-UI linkage via ui:// URI scheme, rather than generic iframe embedding. Uses JSON-RPC 2.0 over postMessage with strict message validation and initialization handshake, ensuring both parties agree on supported capabilities before communication begins.
More secure and standardized than ad-hoc iframe communication because it enforces protocol versioning, capability negotiation, and explicit tool linking rather than relying on window.parent references or global message listeners.
ui resource declaration and server-side tool-ui linkage
Medium confidenceEnables MCP servers to declare interactive HTML resources using the ui:// URI scheme and link them to specific tools via _meta.ui.resourceUri metadata. The server SDK provides helper functions to register UI resources with MIME type text/html, versioning, and optional display mode hints (inline, modal, sidebar). When a tool is executed, the host automatically fetches the linked UI resource and renders it in an iframe, establishing the communication channel between the View and the server's tool execution context.
Uses a declarative ui:// URI scheme with tool metadata linking rather than imperative iframe creation. Servers declare resources once; hosts handle fetching, sandboxing, and lifecycle management. This separates concerns: servers focus on tool logic and UI content, hosts handle rendering and security.
Cleaner than embedding UI URLs in tool responses because the UI is declared upfront with versioning support, allowing hosts to pre-fetch and cache resources, and enabling capability negotiation before tool execution.
logging and message event streaming from views to host
Medium confidenceProvides APIs for Views to send log messages and events to the host via JSON-RPC notifications. Views can emit structured log messages with severity levels (debug, info, warn, error) and arbitrary event data. The host collects these messages and can display them in a debug console, forward them to a logging service, or use them for monitoring. Messages are sent as one-way notifications (no response expected), reducing latency compared to request-response patterns. The SDK provides logging utilities that format messages consistently.
Provides structured logging via JSON-RPC notifications with severity levels and event data, rather than relying on console.log which may not be visible in sandboxed iframes. One-way notifications reduce latency compared to request-response logging.
More reliable than console.log because messages are guaranteed to reach the host via the JSON-RPC protocol. More structured than string-based logging because it supports severity levels and arbitrary event data.
server sdk helpers for ui resource registration and tool metadata
Medium confidenceProvides server-side helper functions (JavaScript/TypeScript and Python) for registering UI resources, declaring tool-UI linkage, and managing tool metadata. Helpers simplify the process of adding ui:// resources to the MCP server's resource list and linking them to tools via _meta.ui.resourceUri. The SDK validates resource declarations against the SEP-1865 specification and provides TypeScript types for tool metadata. Helpers support both inline HTML (as strings) and file-based resources.
Provides language-specific helper functions (TypeScript and Python) that abstract away the details of resource registration and tool metadata construction. Helpers validate declarations against the SEP-1865 specification and provide TypeScript types for compile-time checking.
More convenient than manual resource object construction because helpers handle validation and type checking. More maintainable than hardcoded resource declarations because helpers can be updated to support new specification versions.
protocol specification and message schema validation
Medium confidenceDefines the complete MCP Apps Extension protocol (SEP-1865) with detailed message schemas, initialization handshake, tool lifecycle, and error handling. The specification is published as a formal document (specification/2026-01-26/apps.mdx) and includes JSON Schema definitions for all message types. The SDK generates TypeScript types and validation code from these schemas, enabling compile-time and runtime validation of messages. The specification covers three-party architecture, security model, display modes, and capability negotiation.
Provides a formal, versioned protocol specification (SEP-1865) with JSON Schema definitions and generated TypeScript types, rather than relying on informal documentation or examples. Schema validation is built into the SDK, enabling both compile-time and runtime checking.
More rigorous than informal protocol documentation because it uses JSON Schema for formal specification. More maintainable than hardcoded message handling because schema changes can be applied consistently across the SDK.
example gallery and scaffolding tools for rapid prototyping
Medium confidenceProvides production-ready example servers demonstrating real-world MCP Apps use cases (map viewer, PDF viewer, system monitor, data explorer, etc.) and AI agent skills for scaffolding new Views and servers. Examples include both basic framework examples (minimal setup) and domain-specific examples (complex interactions). The repository includes build configuration (Vite), test infrastructure, and development tools for building and testing MCP Apps locally. Agent skills enable developers to generate boilerplate code for new Views and servers.
Provides both production-ready examples and AI agent skills for scaffolding, enabling developers to learn from working code and rapidly generate new projects. Examples cover diverse domains (maps, PDFs, monitoring) rather than generic hello-world patterns.
More practical than documentation-only approaches because developers can run and modify working examples. More efficient than starting from scratch because scaffolding tools generate boilerplate automatically.
app class lifecycle management with server tool invocation
Medium confidenceProvides the App class (View-side SDK) that manages the iframe lifecycle, initializes communication with the host via postMessage, and exposes methods to call server tools with typed parameters and receive results. The App class handles initialization handshake (exchanging protocol versions and capabilities), maintains a request-response mapping for async tool calls, and provides hooks for lifecycle events (onReady, onClose). Tool calls are wrapped in JSON-RPC requests with automatic ID generation and timeout handling, with results returned as Promise-based responses.
Implements a Promise-based async tool calling API with automatic request ID generation and response correlation, rather than callback-based patterns. The App class handles the full lifecycle from initialization handshake through tool invocation to cleanup, abstracting away JSON-RPC details from the developer.
Simpler than raw postMessage usage because it provides typed tool calling, automatic error handling, and lifecycle hooks. More flexible than framework-specific solutions because it works with vanilla JavaScript, React, Vue, or any framework.
react integration with useapp and useappbridge hooks
Medium confidenceProvides React hooks (useApp, useAppBridge) that wrap the App and AppBridge classes, enabling declarative tool calling and host integration within React components. The useApp hook returns the initialized App instance with automatic cleanup on unmount, while useAppBridge provides host-side access to the bridge for managing Views and forwarding requests. Hooks handle the initialization timing, ensuring the App is ready before components attempt tool calls, and provide TypeScript support for tool schemas and parameters.
Provides React hooks that abstract away postMessage and JSON-RPC details while maintaining full TypeScript type safety for tool schemas. The hooks handle initialization timing and cleanup automatically, reducing boilerplate compared to manual App class usage.
More idiomatic for React developers than imperative App class usage because it follows React hooks patterns. Provides better TypeScript support than generic postMessage wrappers because it can infer tool parameter types from MCP server schemas.
appbridge host-side request forwarding and capability negotiation
Medium confidenceProvides the AppBridge class (Host-side SDK) that manages iframe lifecycle, forwards tool requests from Views to MCP servers, and handles capability negotiation during initialization. AppBridge intercepts JSON-RPC requests from Views, validates them against declared tool schemas, forwards them to the appropriate MCP server, and returns results back to the View. It also manages host context (styling, display mode) and sends notifications to Views. Capability negotiation ensures both View and Host agree on protocol version and supported features before tool execution begins.
Implements a request forwarding layer that validates View requests against server tool schemas before forwarding, preventing invalid tool calls from reaching the server. Capability negotiation is explicit and bidirectional, ensuring both parties understand protocol version and feature support.
More robust than direct View-to-Server communication because it adds a validation and routing layer. Capability negotiation prevents version mismatches and incompatible feature usage, reducing runtime errors compared to unversioned iframe communication.
postmessagetransport abstraction for json-rpc 2.0 messaging
Medium confidenceProvides a PostMessageTransport class that abstracts the low-level postMessage API into a JSON-RPC 2.0 transport layer. It handles message serialization/deserialization, request-response correlation via message IDs, error handling, and timeout management. The transport validates incoming messages against the JSON-RPC 2.0 spec, maintains a pending request map, and routes responses to the correct handlers. It supports both request-response patterns (for tool calls) and one-way notifications (for logs, events).
Provides a reusable JSON-RPC 2.0 transport abstraction over postMessage with automatic request-response correlation and timeout handling, rather than requiring developers to implement these patterns manually. Validates messages against the JSON-RPC 2.0 spec to catch protocol errors early.
More reliable than raw postMessage usage because it handles request-response correlation, timeouts, and error handling automatically. More standardized than custom transport implementations because it strictly follows JSON-RPC 2.0 specification.
host context and styling propagation to views
Medium confidenceEnables hosts to send context information (theme, display mode, viewport size) and CSS styling to Views via JSON-RPC messages. The host can declare supported display modes (inline, modal, sidebar) and the View can query or subscribe to host context changes. The SDK provides styling utilities that generate CSS variables and theme classes based on host context, allowing Views to adapt their appearance to the host's design system. Context is propagated during initialization and can be updated dynamically.
Provides a declarative styling system where Views receive CSS variables and theme information from the host, rather than hardcoding styles. Styling utilities generate CSS that adapts to host context dynamically, enabling Views to match different host design systems without code changes.
More flexible than hardcoded styling because Views automatically adapt to host themes. More maintainable than inline styles because styling is centralized in host context and CSS variables, reducing duplication across Views.
progressive rendering and streaming responses from server tools
Medium confidenceSupports progressive rendering where server tools can send partial results to Views via streaming or chunked responses. The View can display intermediate results as they arrive, improving perceived performance for long-running operations. The protocol supports both complete responses (single JSON-RPC response) and streaming responses (multiple messages with a completion marker). The SDK provides utilities for handling streaming results and updating the UI incrementally.
Supports streaming responses from server tools via multiple JSON-RPC messages with completion markers, rather than requiring the entire result to be buffered and sent in a single response. Views can render partial results incrementally, improving UX for long-running operations.
Better UX than waiting for complete responses because users see partial results immediately. More efficient than polling because the server pushes updates to the View as they become available.
state persistence and local storage management in views
Medium confidenceProvides patterns and utilities for Views to persist state locally (in browser storage) or request persistence from the server. Views can store UI state (form inputs, scroll position, selected items) locally to survive iframe reloads, or request the server to store application state. The SDK provides helper functions for serializing/deserializing state and managing storage quotas. State can be scoped to the View instance or shared across multiple Views of the same type.
Provides patterns for both local (browser storage) and server-side state persistence, allowing Views to choose the appropriate strategy based on their needs. State can be scoped to individual Views or shared across multiple Views, enabling flexible state management patterns.
More flexible than browser-only storage because it supports server-side persistence for sensitive or large state. More explicit than automatic state management because developers control what is persisted and when.
tool visibility control and conditional ui rendering
Medium confidenceEnables MCP servers to control which tools are visible to which Views via tool metadata and visibility rules. Tools can be marked as hidden, visible only in certain display modes, or visible only to specific View types. The host respects these visibility rules when forwarding requests and rendering UIs. Views can query the host for available tools and their visibility status, allowing them to conditionally render UI elements based on tool availability. This enables servers to provide different tool sets to different Views without duplicating tool definitions.
Provides tool visibility rules at the server level, allowing servers to declare which tools are visible to which Views without requiring the host to implement custom access control logic. Visibility is declarative and enforced by the host, reducing the burden on View developers.
More secure than client-side visibility control because the server declares visibility rules and the host enforces them. More flexible than static tool lists because visibility can vary based on display mode and View type.
Capabilities are decomposed by AI analysis. Each maps to specific user intents and improves with match feedback.
Related Artifactssharing capabilities
Artifacts that share capabilities with ext-apps, ranked by overlap. Discovered automatically through the match graph.
@modelcontextprotocol/ext-apps
MCP Apps SDK — Enable MCP servers to display interactive user interfaces in conversational clients.
openui
OpenUI let's you describe UI using your imagination, then see it rendered live.
RooCode
An AI-powered autonomous coding agent integrated directly into VS Code. [#opensource](https://github.com/RooCodeInc/Roo-Code)
claude-mem
A Claude Code plugin that automatically captures everything Claude does during your coding sessions, compresses it with AI (using Claude's agent-sdk), and injects relevant context back into future sessions.
Beamcast
Enhance productivity with seamless AI browser...
deer-flow
An open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.
Best For
- ✓MCP server developers building interactive visualizations (maps, dashboards, data explorers)
- ✓Host application developers (Claude, ChatGPT) integrating third-party UI extensions
- ✓Teams building conversational AI products that need rich, interactive UI components
- ✓MCP server developers building domain-specific tools (PDF viewers, map tools, data analyzers)
- ✓Teams migrating from REST APIs with custom UIs to MCP with standardized UI delivery
- ✓Developers building tools that benefit from rich visualization (charts, 3D models, interactive forms)
- ✓Developers building Views that need to emit diagnostic information
- ✓Teams building monitoring and observability into MCP Apps
Known Limitations
- ⚠No direct DOM access from View to Host — all communication must go through JSON-RPC message passing, adding latency per request
- ⚠Iframe sandbox restrictions prevent certain browser APIs (localStorage, cookies, cross-origin requests) unless explicitly granted via sandbox attributes
- ⚠Message size is limited by postMessage implementation (~1MB per message in most browsers); large data transfers require chunking or streaming patterns
- ⚠No built-in persistence layer — Views must implement their own state management or request persistence from the server
- ⚠UI resources must be valid HTML/CSS/JavaScript; no server-side templating or dynamic generation at declaration time
- ⚠Tool-UI linkage is static — a tool can only link to one UI resource; multiple UIs require multiple tools
Requirements
Input / Output
UnfragileRank
UnfragileRank is computed from adoption signals, documentation quality, ecosystem connectivity, match graph feedback, and freshness. No artifact can pay for a higher rank.
Repository Details
Last commit: Apr 21, 2026
About
Official repo for spec & SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers
Categories
Alternatives to ext-apps
Are you the builder of ext-apps?
Claim this artifact to get a verified badge, access match analytics, see which intents users search for, and manage your listing.
Get the weekly brief
New tools, rising stars, and what's actually worth your time. No spam.
Data Sources
Looking for something else?
Search →