open-mcp-apps
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
**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:
1. **An app registry the AI can write to.** Ask for a UI that doesn't exist — the AI reads
the authoring guide, writes a single-file HTML app against a tiny window.oma API,
and saves it. From that moment you can open it by name, in this chat and every future one.
2. **Persistent, versioned data — separate from the UI.** Apps bind to generic
*collections* of items backed by SQLite plus an append-only 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.
3. **A shell runtime so AI-written apps actually work.** Serving 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.10.0 (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** | 34 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) |
Install
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.
From npm — nothing to clone
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:
The one thing the installer below adds is registering the server into every host it finds. Either
way the server seeds the system apps (settings, dashboard, App Store) when it starts, and 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 *unscoped*
> open-mcp-apps on 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.
With the installer — one command
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 | 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.