Interactive MCP Apps the AI builds once and you both reuse โ data outlives the chat
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
English | ็ฎไฝไธญๆ
Give your AI a persistent, reusable UI. It builds the app once โ you keep it forever.
open-mcp-apps is an open engine built on MCP Apps
(ui://, io.modelcontextprotocol/ui) โ an extension to the core Model Context Protocol
specification, and the first official one,
live since 26 January 2026. It gives any MCP-Apps-capable host (Claude Desktop, claude.ai, Codex,
ChatGPT, โฆ) three things the extension itself doesn't provide:
window.oma API,
and saves it. From that moment you can open it by name, in this chat and every future one.change_event ledger. Every
mutation is an idempotent domain command (command_id) with optimistic concurrency
(expected_version). The AI and the human edit the same store โ the widget is just a view.ui://, the engine wraps
the app with the official MCP App bridge, host theming (Claude's design tokens,
light/dark), and the window.oma data API. What you write is a view; the protocol,
persistence, idempotency and theming are the engine's problem.Which of those hosts this engine reaches. It runs on your machine and binds 127.0.0.1, so it
serves the hosts on that same machine: Claude Desktop, Claude Code, Codex, plus its own browser
viewer. A browser host cannot reach a loopback server on your laptop, so claude.ai and ChatGPT web
need a remote deployment โ today that means the hosted openmcp.app, which
runs this same engine for you. Running that remote shape yourself is on the roadmap and not done.
| Version | 0.5.9 (CHANGELOG.md) |
| License | MIT, whole repository (LICENSE ยท LICENSING.md) |
| npm | @2nd1st/open-mcp-apps โ scoped; the unscoped name is an unrelated package |
| Command | npx -y @2nd1st/open-mcp-apps โ the line your host's MCP config runs; a stdio server, not something to run by hand (typed into a terminal it just waits, and says so) |
| Requires | Node 22 or newer. git too, on the installer path |
| Surface | 33 tools ยท a built-in App Store ยท 3 system apps seeded |
| Platforms | macOS ยท Windows ยท Linux |
| Hosts | Claude Desktop ยท Claude Code ยท Codex ยท ChatGPT web โ see Host support |
| Hosted | openmcp.app โ the remote shape, and the way to reach browser hosts (claude.ai, ChatGPT) |
open-mcp-apps runs as a local MCP server. First get it connected to your host (below); then onboarding happens inside the host, separately โ that's where the AI builds your first app.
If you are comfortable editing your host's config file, point it at the published package and
let npx fetch the engine. This path needs only Node 22 โ no git, and no checkout for you to
keep updated. Paste this into your host's MCP server config:
Two things the installer below does that this path does not: it registers the server into every
host it finds, and it pre-seeds the built-in system apps (settings, dashboard, App Store) into
your store โ so on the npx path your registry starts empty and your AI installs what it needs
from the App Store on demand, which is fully available either way. Your data lives in the same
fixed per-user store, so you can move between an npx server and a cloned one without migrating
anything.
A note on npm: this project publishes under the scoped name
@2nd1st/open-mcp-apps. The unscopedopen-mcp-appson the registry is not this project โ that name is held by an unrelated package. Check for the@2nd1st/prefix; the scope is the only thing telling the two apart.
Installing needs a shell, so the chat apps (Claude Desktop, Codex) can't install themselves โ use one of these instead:
It opens a short picker to choose which hosts to register into โ Claude Desktop, Claude Code,
Codex โ plus your permission preference. Skip it with -s -- --yes, or target one host with
-s -- --host codex.
Where it puts the clone, before you pipe anything into a shell: ~/open-mcp-apps. Set OMA_DIR
to put it somewhere else โ curl -fsSL <url> | OMA_DIR=~/src/oma sh. Re-running the one-liner
updates that same clone in place instead of making a second one. Your apps and data are not in it
(they live in the per-user store under Configuration), so the folder is safe to
move or delete โ and node uninstall.mjs does not delete it for you.
With a coding agent (Claude Code, Codex CLI โ they have a shell), paste:
Read https://raw.githubusercontent.com/2nd1st/open-mcp-apps/main/install.md and follow it.
Either way, install.mjs registers the server into each host you pick, idempotently โ it never
clobbers your other servers, pins a stable node launcher (native SQLite ABI), reports what
changed, and cleans up a pre-rename entry if one lingers. Your data lives in a fixed per-user
store (not inside the clone), so every host shares the same apps and data.
To wire a clone into a host by hand instead, point it at the checkout โ this is the shape
install.mjs writes:
openmcp.app runs the engine for you. The engine in this repository binds
127.0.0.1 by design, so a self-hosted remote deployment is not a supported shape yet โ see
Status and roadmap.
node uninstall.mjs unregisters the server from every host it finds โ but keeps your data:
the shared store stays put, so re-installing later restores every app and all data. It also leaves
the installer's clone (~/open-mcp-apps, or wherever OMA_DIR pointed) on disk โ nothing here ever
deletes that folder, so remove it yourself when you want the checkout gone.
git โ only on the installer path. The npx path above needs neither git nor a checkout.
The installer checks for both and stops with a message rather than half-installing if either is
missing.ui:// if you want widgets in the conversation. Terminal hosts (Claude
Code in a terminal, codex CLI) drive the same data by design and put the UI on a browser screen
beside the terminal instead โ one that can follow along, showing whatever the AI just opened. The
per-host detail is in Host support.Every setting is an environment variable, set in the env block of your host's MCP server entry:
| Variable | Default | What it does |
|---|---|---|
OMA_VIEWER | 1 | The browser viewer on loopback. 0 doesn't start it at all. |
PORT | 8787 | Where the viewer listens. |
OMA_DYNAMIC_TOOLS | 0 | 1 also publishes one open_<name> tool per saved app. Off by default because it costs prompt cache โ and one approval prompt per app. |
OMA_DB | per-user store | Path to the SQLite store. Set it to isolate a store. |
Where your data lives. The whole store is one SQLite file, open-mcp-apps.db, in
~/Library/Application Support/open-mcp-apps/ (macOS), %APPDATA%\open-mcp-apps\ (Windows), or
$XDG_DATA_HOME else ~/.local/share/open-mcp-apps/ (Linux). It is outside any clone, which is
why every host shares the same apps and data.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/open-mcp-apps)<a href="https://allmcps.com/mcp/open-mcp-apps"><img src="https://allmcps.com/api/badge/open-mcp-apps?style=directory" alt="Open MCP Apps on AllMCPs" /></a>