Mirror of https://github.com/modelcontextprotocol/ext-apps — Official repo for spec & SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers
  • TypeScript 76.4%
  • MDX 19.3%
  • JavaScript 4.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jonathan Hefner 4e08951da6 Move HostContext field descriptions to JSDoc comments
Converted the HostContext interface documentation from a separate "Field
Descriptions" section to JSDoc-style comments above each field. This
improves consistency with other interfaces in the specification and
keeps documentation closer to the code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 14:49:25 -06:00
examples/simple-server Merge branch 'main' of https://github.com/modelcontextprotocol/ext-apps 2025-11-21 20:24:26 +00:00
specification/draft Move HostContext field descriptions to JSDoc comments 2025-11-21 14:49:25 -06:00
src AppHost -> AppBridge 2025-11-21 17:51:33 +00:00
.gitignore Initial commit 2025-11-21 11:56:27 +00:00
app.ts Initial commit 2025-11-21 11:56:27 +00:00
build.bun.ts build w/ bun to avoid internal deps hell 2025-11-21 19:28:45 +00:00
build.esbuild.ts build w/ bun to avoid internal deps hell 2025-11-21 19:28:45 +00:00
message-transport.ts Initial commit 2025-11-21 11:56:27 +00:00
package.json Update package.json 2025-11-21 19:35:25 +00:00
README.md Update README.md 2025-11-21 20:40:15 +00:00
tsconfig.json Initial commit 2025-11-21 11:56:27 +00:00
types.ts ui/notifications/tool-input* (singular to match inputSchema) 2025-11-21 14:03:20 +00:00

@modelcontextprotocol/ext-apps

This repo contains the SDK and specification for MCP Apps Extension (SEP-1865).

MCP Apps are proposed standard inspired by MCP-UI and OpenAI's Apps SDK to allow MCP Servers to display interactive UI elements in conversational MCP clients / chatbots.

This repo provides:

  • types.ts: Types of JSON-RPC messages used to communicate between Apps & their host

    • Note that MCP Apps also use some standard MCP messages (e.g. tools/call for the App to trigger actions on its originating Server - these calls are proxied through the Host), but these types are the additional messages defined by the extension
  • examples/simple-example: Example Server + Apps

    • server.ts: MCP server with two tools that declare UI resources of Apps to be show in the chat when called
    • ui-react.tsx: React App returned by the create-ui-react tool shows how to use the useApp hook to register MCP callbacks
    • ui-vanilla.tsx: vanilla App returned by the create-ui-vanilla
  • main/specification/draft/apps.mdx: The Draft Extension Specification. It's still... in flux! Feedback welcome! (also see discussions in SEP-1865).

  • message-transport: PostMessageTransport class that uses postMessage to exchange JSON-RPC messages between windows / iframes

  • app.ts: App class used by an App to talk to its host

  • app-bridge.ts: AppBridge class used by the host to talk to a single App

What this repo does NOT provide:

  • There's no host implementation here (beyond the AppBridge just used for communications).
    • We have contributed a tentative implementation of hosting / iframing / sandboxing logic to the MCP-UI repository, and expect OSS clients may use it, while other clients might roll their own hosting logic.
    • A prior iteration of an e2e prototype w/ client, server and hosting parts is available in this gist

Installation

This repo is in flux and isn't published to npm (when it is, it will use the @modelcontextprotocol/ext-apps package). Please install it from git for now:

npm install git+https://github.com/modelcontextprotocol/ext-apps.git

Development Notes

Build tools in dependencies

The build tools (esbuild, tsx, typescript) are in dependencies rather than devDependencies. This is intentional: it allows the prepare script to run when the package is installed from git, since npm doesn't install devDependencies for git dependencies.

Once the package is published to npm with pre-built dist/, these can be moved back to devDependencies.