关于 open-mcp-apps
open-mcp-apps 是基于 MCP Apps 的引擎,让 AI 创建可复用的交互式应用,并将应用和数据持久保存。它面向支持 MCP Apps 的主机,提供应用注册表、SQLite 数据存储和带主题适配的运行环境。
主要功能
- 01创建并保存单文件 HTML 应用
- 02跨聊天和主机复用应用及数据
- 03SQLite 持久化与版本控制
- 04提供 MCP App 桥接和主题适配
- 05内置应用商店和浏览器查看器
适用场景
- 01按需创建看板或习惯追踪器
- 02在不同聊天中继续使用已保存应用
- 03通过应用界面查看和编辑共享数据
MCP 相关
它作为 MCP 服务连接兼容 MCP Apps 的主机,并通过 `ui://` 提供交互式应用界面。工具、提示词及 `window.oma` 数据 API 支持应用创建、打开和持久化数据操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @2nd1st/open-mcp-appsOMA_DBPath to the SQLite store. Defaults to a fixed per-user data directory; set this to isolate a store.OMA_VIEWERBrowser viewer on loopback. On by default; set to 0 to turn it off.OMA_DYNAMIC_TOOLSSet to 1 to also expose one open_<name> tool per saved app. Off by default, because it costs prompt cache.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
33收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| app | string | 是 | 注册表中的应用名称(参见 list_apps) |
| collection | string | 否 | 绑定的数据集合(默认:应用声明的数据集合;未声明时使用应用自身的名称) |
详细介绍
open-mcp-apps
English | 简体中文
为你的 AI 提供持久、可重复使用的 UI。它只需构建一次——你就能永久使用。
open-mcp-apps 是基于 MCP Apps
(ui://、io.modelcontextprotocol/ui)构建的开放引擎——它是核心 Model Context Protocol
规范的扩展,也是首个官方扩展,
自 2026 年 1 月 26 日起正式上线。它为任何支持 MCP Apps 的宿主(Claude Desktop、claude.ai、Codex、
ChatGPT,……)提供了该扩展本身未提供的三项能力:
- AI 可以写入的应用注册表。 如果你需要一个尚不存在的 UI,AI 会阅读
编写指南,基于简洁的
window.omaAPI 编写单文件 HTML 应用, 并保存下来。从那一刻起,你就能在当前聊天以及之后的每次聊天中按名称打开它。 - 持久化、带版本的数据,与 UI 分离。 应用绑定到通用的
集合,其中的项目由 SQLite 和只追加的
change_event账本提供支持。每次 修改都是幂等的领域命令(command_id),并采用乐观并发控制 (expected_version)。AI 和用户编辑的是同一数据存储——小组件只是一个视图。 - 让 AI 编写的应用真正运行的 Shell 运行时。 引擎通过
ui://提供服务,并使用官方 MCP App 桥接层、 宿主主题(Claude 的设计令牌、浅色/深色模式) 和window.oma数据 API 包装应用。你编写的是视图;协议、 持久化、幂等性和主题则由引擎负责。
这个引擎能连接哪些宿主。 它在你的机器上运行并绑定到 127.0.0.1,因此
可为同一台机器上的宿主提供服务:Claude Desktop、Claude Code、Codex,以及自带的浏览器
查看器。浏览器宿主无法访问笔记本电脑上的回环服务器,因此 claude.ai 和 ChatGPT 网页版
需要远程部署——目前可使用托管服务 openmcp.app,它会为你运行同一引擎。
自行运行这种远程部署模式已列入路线图,目前尚未实现。
| 版本 | 0.10.1 (CHANGELOG.md) |
| 许可证 | MIT,适用于整个代码仓库 (LICENSE · LICENSING.md) |
| npm | @2nd1st/open-mcp-apps——带作用域;不带作用域的同名包是无关的另一个包 |
| 命令 | npx -y @2nd1st/open-mcp-apps——宿主 MCP 配置运行的命令行;这是一个 stdio 服务,而不是供手动运行的程序(在终端中输入后,它只会等待并说明这一点) |
| 要求 | Node 22 或更高版本。安装流程还需要 git |
| 功能 | 34 个工具 · 内置 App Store · 预置 3 个系统应用 |
| 平台 | macOS · Windows · Linux |
| 宿主 | Claude Desktop · Claude Code · Codex · ChatGPT 网页版——请参阅宿主支持 |
| 托管服务 | openmcp.app——远程部署模式,也是连接浏览器宿主(claude.ai、ChatGPT)的方式 |
安装
open-mcp-apps 作为本地 MCP 服务运行。首先将它连接到你的宿主(见下文);然后 在宿主内单独完成引导——AI 会在这里构建你的第一个应用。
从 npm 获取——无需克隆
如果你熟悉编辑宿主的配置文件,可以将其指向已发布的软件包,然后让 npx 获取引擎。这种方式只需要 Node 22——无需 git,也无需保留并持续更新克隆。将以下内容粘贴到宿主的 MCP 服务配置中:
{
"mcpServers": {
"open-mcp-apps": {
"command": "npx",
"args": ["-y", "@2nd1st/open-mcp-apps"]
}
}
}
下面的安装程序唯一额外做的事,就是将服务注册到它找到的每个宿主中。无论采用哪种方式,服务启动时都会预置系统应用(设置、仪表板、App Store),而你的数据会保存在同一个固定的用户级存储中,因此你可以在 npx 服务和克隆的服务之间切换,无需迁移任何内容。
关于 npm 的说明:本项目以带作用域的名称发布:
@2nd1st/open-mcp-apps。注册表中的无作用域open-mcp-apps不是本项目——该名称属于一个无关的软件包。请确认名称以@2nd1st/为前缀;作用域是区分两者的唯一标识。
使用安装程序——一条命令
安装需要使用 shell,因此聊天应用(Claude Desktop、Codex)无法自行安装——请改用以下方式之一:
curl -fsSL https://raw.githubusercontent.com/2nd1st/open-mcp-apps/main/install.sh | sh
安装程序会打开一个简短的选择器,让你选择要注册的宿主——Claude Desktop、Claude Code、Codex——以及权限偏好。使用 -s -- --yes 可跳过选择器;使用 -s -- --host codex 可指定一个宿主。
克隆存放位置,先说明这一点,再让你将内容传入 shell:~/open-mcp-apps。设置 OMA_DIR 可将其放到其他位置——curl -fsSL <url> | OMA_DIR=~/src/oma sh。再次运行这条命令会就地更新同一个克隆,而不是再创建一个。你的应用和数据不在克隆中(它们保存在配置所述的用户级存储中),因此可以放心移动或删除该文件夹——而 node uninstall.mjs 不会替你删除它。
使用编码 Agent(Claude Code、Codex CLI——它们有 shell)时,粘贴:
阅读 https://raw.githubusercontent.com/2nd1st/open-mcp-apps/main/install.md 并按说明操作。
无论采用哪种方式,install.mjs 都会以幂等方式将服务注册到你选择的每个宿主中——不会覆盖你的其他服务,会固定使用稳定的 node 启动器(原生 SQLite ABI),报告更改内容,并清理可能遗留的重命名前条目。你的数据保存在固定的用户级存储中(不在克隆内),因此所有宿主共用同一批应用和数据。
从克隆安装——用于开发
git clone https://github.com/2nd1st/open-mcp-apps && cd open-mcp-apps
npm install
node install.mjs # same picker as the one-liner above
若要手动将克隆接入宿主,可将其指向检出的代码库——这就是 install.mjs 写入的配置形式:
{
"mcpServers": {
"open-mcp-apps": {
"command": "node",
"args": ["/absolute/path/to/open-mcp-apps/src/server.mjs"]
}
}
}
托管服务
openmcp.app 会为你运行引擎。本仓库中的引擎按设计绑定到 127.0.0.1,因此目前不支持自托管的远程部署形式——请参阅状态与路线图。
卸载
node uninstall.mjs 会从它找到的每个宿主中注销服务——但保留你的数据:共享存储会原样保留,因此之后重新安装时,每个应用和所有数据都会恢复。它也会将安装程序克隆(~/open-mcp-apps,或 OMA_DIR 指定的位置)留在磁盘上——这里的任何操作都不会删除该文件夹,因此如果你想移除检出的代码库,请自行删除。
node uninstall.mjs # unregister from all detected hosts — keeps your data
node uninstall.mjs --purge # also delete the shared store (apps + data), irreversible
node uninstall.mjs --check # read-only: show what's registered and what would change
要求
- Node 22 或更高版本,支持 macOS、Windows 或 Linux。
git——仅安装程序方式需要。上文的npx方式不需要git,也不需要检出代码库。如果缺少任一项,安装程序会检查并提示后停止,而不会只完成一半的安装。- 如果你想在对话中显示小组件,需要使用能够渲染
ui://的宿主。终端宿主(终端中的 Claude Code、codex CLI)按设计会驱动相同的数据,并在终端旁边的浏览器窗口中显示界面;浏览器窗口会跟随操作,显示 AI 刚打开的内容。各宿主的详情请参阅宿主支持。 - 安装或更新后,请彻底退出并重新打开宿主(按 Cmd-Q,而不只是关闭窗口)——彻底退出之前,宿主会继续使用旧的数据运行旧的服务进程。
配置
每项设置都是一个环境变量,需设置在宿主 MCP 服务条目的 env 块中:
{
"mcpServers": {
"open-mcp-apps": {
"command": "npx",
"args": ["-y", "@2nd1st/open-mcp-apps"],
"env": {
"OMA_VIEWER": "1",
"PORT": "8787"
}
}
}
}
| 变量 | 默认值 | 作用 |
|---|---|---|
OMA_VIEWER | 1 | 在 loopback 上运行浏览器查看器。设为 0 可完全停止启动。 |
PORT | 8787 | 查看器监听的端口。 |
OMA_DB | 按用户存储 | SQLite 存储的路径。设置此项可隔离存储。 |
OMA_APP_STORE_DIRS | — | 额外的 App Store 来源:目录结构与商店包的 apps/ 相同(每个应用一个文件夹),多个来源以 : 分隔(Windows 上用 ;)。搜索顺序早于已安装的 @openmcp-app/oma-store 包;优先采用第一个包含该名称的来源。 |
OMA_FUNCTIONS | on | 设为 0 可关闭应用函数(call_function)。函数体会在本机运行,并可发起网络请求。 |
应用自己的工具。 每个应用都通过 open_app 打开。要让某个应用也拥有自己的 open_<name>
工具,请将其固定:Settings → Installed → 应用 → Own tool。只有在固定、取消固定或删除已固定的应用时,工具列表才会变化;刷新连接器的工具列表后,Claude.ai 和 ChatGPT 就会显示新工具。
数据存储位置。 整个存储是一个 SQLite 文件 open-mcp-apps.db,位于
~/Library/Application Support/open-mcp-apps/(macOS)、%APPDATA%\open-mcp-apps\(Windows),或
$XDG_DATA_HOME,否则位于 ~/.local/share/open-mcp-apps/(Linux)。它位于任何克隆目录之外,因此每个宿主都使用相同的应用和数据。
首次运行时的权限。 前几次工具调用都会显示审批对话框,请选择
"Always allow"。工具集经过有意设计,保持精简且稳定:只读工具通常无需审批,而唯一的 open_app 工具可在这项授权下打开所有应用(包括之后由 AI 创建的应用),因此不会再有新工具请求授权。较旧配置中遗留的 OMA_DYNAMIC_TOOLS=1 不会产生任何作用;node install.mjs --check 会将其报告为 stale,重新运行安装程序会移除该键。
你也可以在 Settings → Connectors → open-mcp-apps → Tool permissions 中批量审批。
用法
在宿主中启动。 安装后重启宿主。初次使用?此引擎自带一个 MCP 提示词 get_started。会显示提示词的宿主会将其列为 Get started with open-mcp-apps;将提示词显示为斜杠命令的宿主则会写作 /mcp__open-mcp-apps__get_started。选择它后,AI 就会开始整个引导流程。并非所有宿主都会显示提示词;如果你的宿主不显示,也不会有任何损失,因为提示词只是一句话,你可以自己说:"我刚安装了 open-mcp-apps——请用几个示例告诉我如何使用,并推荐几个适合我工作方式的应用。"
无论哪种方式,它都会查看你已有的内容和 App Store 中现有的应用,向你提几个问题,并为你设置一个量身打造的首个应用。此步骤与安装分开,在宿主中进行。你也可以直接提出要求:
- "为我现在手头的事情做一个看板" → AI 会编写并填充看板,然后打开它(持久保存)
- "给我做一个习惯追踪器" → 看着它读取指南、编写应用、保存并打开
- 关闭应用,再打开并再次提问 → 一切都还在
工作循环
"make me a kanban"
│
▼
list_apps ── exists? ──► open_app {app: "kanban"} (reuse, instant)
│ no
▼
get_app_guide ──► AI writes HTML ──► save_app
│
▼
open_app {app: "kanban"} → rendered inline, themed, persistent — reusable in every future chat
应用会不断累积。每个应用都独立且专用于一项任务——看板、追踪器、拆分器——为当前任务量身打造,并保留下来供下次使用。
效果展示
应用会以内嵌形式显示在你正在进行的聊天中。你提出需求后,AI 会编写应用:

换到另一场聊天,或另一个宿主中,它仍然在那里,并保留着你的数据:

应用商店提供开箱即用的应用,带有可用的预览和一键安装功能。它们位于独立的软件包 @openmcp-app/oma-store 中,由引擎作为依赖项安装——新的商店应用也会在此贡献:

![]() | ![]() |
![]() | ![]() |
上面的每个应用都是一个独立的 HTML 文件,绑定到纯数据集合——使用的正是 AI 为你构建应用时会用到的 window.oma API 和创作指南。
在同一场对话中使用多个小组件也完全没问题(habit-streaks 和 meal-planner 并排显示)。
浏览器查看器及其绑定端口
每次安装都会运行一个小型本地 Web 服务器,地址为 http://127.0.0.1:8787。你可以通过它在聊天窗口之外查看应用——每个应用对应一个页面,使用的就是 AI 正在读取的同一份数据。在终端宿主中,这是查看应用的唯一方式,因此 AI 会在构建或打开应用时把链接发给你。
查看器会自动启动;上文中的 OMA_VIEWER 和 PORT 可以更改此设置。如果该端口已被另一个 open-mcp-apps 进程占用,说明那个进程已在提供同一份数据,因此当前进程只会共用它的地址;如果端口被其他程序占用,你将无法使用查看器,也不会收到链接,而不会被引导至陌生服务器。
查看器没有密码保护,这是有意为之。 监听地址被硬性固定为 127.0.0.1,因此没有任何设置能让它响应来自其他机器的请求。你电脑上任何能够访问该端口的程序都已经可以直接打开 SQLite 文件——加一道密码锁,就像在敞开的墙边装一把锁。只有通过你自行启动的隧道才能连接到互联网;这是你自己做出的选择。隧道开启期间,请将其 URL 视为秘密,因为目前只有它能隔开互联网和你的数据。
主机支持
实时测试于 2026-07-22(ChatGPT 网页版为 2026-07-28),带有各自日期的单元格除外。日期表示该单元格当时的状态,并不表示此后重新检查过。
| 主机 | 渲染小组件 | 用户点击小组件 | AI 操作数据 | 同一存储 |
|---|---|---|---|---|
| Claude Desktop(本地 stdio) | ✅ — 2026-08-16 在 1.30096.5 上重新检查:通用的 open_app 可在聊天中渲染,无需 1.24012.9 版附带的 OMA_DYNAMIC_TOOLS 变通方案(参见 KNOWN-ISSUES) | ✅ 完整流程,包括 sendMessage 回复 | ✅ | ✅ |
Browser viewer(/view/<name>) | ✅ | ✅(未附带聊天 — sendMessage 会降级为通知) | 通过 CLI AI | ✅ |
Codex desktop(ChatGPT 应用,enable_mcp_apps 标志)— 已针对本地引擎测试;远程尚未确认 | ✅ 实验性 | ◐ 小组件点击可正常更新/切换;添加操作被主机端阻止。总括性请求 openai/codex#28912(一项 enhancement:“让 MCP 应用在 Codex GUI 中端到端正常工作”)于 2026-08-05 关闭,状态为已完成 — 但 #30092 这个与该故障完全匹配的 bug,曾由第三方在此复现,且截至 2026-08-16 仍未关闭。此处未重新测试,无论结果如何,单元格仍标为 ◐。参见 KNOWN-ISSUES | ✅ | ✅ |
Claude Code — 在终端中(claude mcp) | — 按设计,聊天中不会显示(文本回退)— 但参见**终端旁边的屏幕** | — 聊天中不会显示 | ✅ | ✅ |
| Claude Code — Claude 应用内的 Code 界面 | ✅ 2026-08-16 实时测试:通过通用的 open_app 打开的应用会以内嵌方式渲染,与聊天界面呈现的形态相同 | 此界面上未测量 | ✅ | ✅ |
| codex CLI / IDE | — 按设计,聊天中不会显示(文本回退)— 但参见**终端旁边的屏幕** | — 聊天中不会显示 | ✅ | ✅ |
| ChatGPT 网页版(Work 模式) | ✅ 2026-07-28 实时测试(远程 HTTPS)— 按完整高度渲染,不会被截断;页面刷新后小组件会丢失数据(缓解措施已发布,等待在此处进行实时重新测试 — 参见 KNOWN-ISSUES) | ✅ 小组件按钮添加了一行,且内容保留了下来 | ✅ | ✅ |
所有功能都通过 MCP Apps 桥接,因此上游主机修复(例如 #28912)无需任何更改即可惠及本项目。
**具体来说,关于 Claude Code:**它是一个有两个界面的产品,只有其中一个能绘制小组件 — 这就是它占据两行的原因。终端中完全没有内嵌小组件界面:这是架构所致,并非功能缺失,而这正是终端旁边的屏幕的用途。Claude 应用内的 Code 界面有 UI,并能以内嵌方式渲染;2026-08-16 在该界面上的观察结果来自通用的 open_app。
**具体来说,关于 Codex:**插件在 Web 端注册,因此本地安装的引擎是作为 MCP 服务接入,而不是作为插件 — 对可自托管的安装方式来说,这本就是正确路径。ChatGPT 桌面应用中的小组件渲染似乎也取决于登录方式(我们已确认账号登录时可用;API 密钥方式尚未确认)。
终端旁边的一块屏幕
这两个 — 单元格表示聊天会显示文本,并不意味着没有 UI。引擎会记住上次打开的应用,并在 /events 帧中将其指针推送给查看器;应用可以放置一个区域 — oma.embed("@live", {into}) — 用来挂载 AI 上次打开的内容,并在 AI 打开其他内容时切换。App Store 提供了一个:安装 live,在一个窗口中打开 http://127.0.0.1:8787/view/live,然后不再操作该窗口;终端会保留对话,而这块屏幕会显示应用。AI 从 CLI 打开或编写内容,屏幕就会跟随,你可以在那里点击、编辑和输入内容。它就是为无头 CLI 使用场景而构建的。
“那块屏幕”最省事的形式,就是在同一个平铺工作区中放一个浏览器窗格 — 与 Agent 相邻的一列,就在你当前使用的窗口里。同一台机器,无需隧道,也无需第二台设备;大多数现代终端配置都能在 Shell 旁边放一个浏览器,而这就够了。第二台显示器只是桌面空间更大的同一思路;另一台设备上的屏幕也是同一思路,不过有下文所述的限制。
相关代价确实存在,值得直说:对话记录中仍然没有小组件。在独立页面中,sendMessage 会降级为一条通知,这与浏览器查看器行中的情况完全相同 — 点击会更改数据,但不会向聊天发送消息。查看器必须处于运行状态(OMA_VIEWER 默认启用),并且要有浏览器连接到它;这并非零配置。此外,监听器绑定到 127.0.0.1,因此“墙上的备用平板”显示的是这台机器的屏幕,除非你搭建上文所述的隧道,并接受该部分提到的影响。在聊天宿主内部,同一个区域会有意显示占位内容,而不是跟随任何内容。
根据现有代码描述,未经宿主环境实测 — 上文的实时测试日期仅适用于表格,不适用于本节。
自己编写应用
通常由 AI 编写应用,但并非只能如此——应用的可能性不应受限于 AI 的上下文窗口。你可以在自己的编辑器中,用自己的打包工具构建应用并安装:
node install-app.mjs ./my-app.html # yours, full trust — same as an AI-authored app
node install-app.mjs ./my-app.html --sandboxed # untrusted: runs behind the runner, no capabilities
node install-app.mjs --list # what's installed, and under whose provenance
# a build pipeline's output: a readable template + its bundle, plus the declaration as its own file
node install-app.mjs ./ui.html --name my-app --manifest ./manifest.json \
--asset ./dist/app.js --asset ./dist/app.css --update
支持两种形式。一个独立的 HTML 文档——大小不限(尽量精简:数据存放在集合中,源码按窗口读取)——引擎会注入最简基础样式、宿主的设计令牌以及 window.oma。或者 模板加打包文件:HTML 是一个易读的挂载点,并引用自己的构建输出(<script type="module" src="oma-asset:app.js">、
<link rel="stylesheet" href="oma-asset:app.css">),--asset 会将这些文件推送到应用的文件层;文档离开存储区时,引擎会立即将它们内联——宿主 iframe 无法访问这台机器。
代价是:AI 无法再迭代修改该应用——你的文件是唯一可信来源,你需要重新构建并安装。AI 仍可读取单文档应用的源码;对于模板加打包文件的应用,它会读取模板,而打包文件则由你掌控(edit_app 和 AI 的 save_app 会以 built_outside 为由拒绝操作;重新运行上面的命令即可编辑)。无论哪种形式,应用都能像其他应用一样共享你的数据。来源信息无法向任一方向覆盖,因此通过 --sandboxed 安装的应用会一直处于沙盒模式,直到你将其删除。小组件可以连接到什么,由应用自身的声明决定(manifest.csp 会根据 MCP Apps 规范转交给宿主——默认不允许任何连接);而应用的 函数 在引擎端运行,可以执行 fetch——参见 RUNTIME.md §5.1 和 §6.1,以及以下两个类型文件,了解应用可访问的内容:@2nd1st/open-mcp-apps/types/window-oma(window.oma API)和 @2nd1st/open-mcp-apps/types/oma-function(函数体获取的 args/api)——二者都通过包的 exports 解析。
RUNTIME.md 是契约——涵盖两种模式下的 window.oma API、沙盒应用仍可执行的操作,以及只有非 AI 作者才会遇到的陷阱。该文件带有版本号,test/runtime-contract.mjs 会将其与两个运行时的实际接口绑定,因此内容不会在不知不觉中与实际接口脱节。
安全模型
信任级别取决于应用的来源——详情见 SECURITY.md。
- 本地,完全信任:你的应用、AI 构建的应用、系统应用,以及从 App Store 安装的所有应用——包括
OMA_APP_STORE_DIRS文件夹中的应用。它们以直接模式运行,可使用真实的window.oma。 - 沙盒模式:通过
--sandboxed安装的应用,以及通过分享打开的应用,都在运行器后方运行——运行器是一个沙盒化的srcdociframe,其桥接层只能访问应用自身的集合,除非获得更多权限。 - 应用函数在你的机器上运行,并且可以发出网络请求。 默认开启;设置
OMA_FUNCTIONS=0可将其关闭。 - AI 可以像你一样操作已打开的应用(
screen_read/screen_act),但无法代替你确认删除操作。 - 通用数据写入无法访问保留的
security:*/policy:*配置键;HTTP 传输绑定到回环地址。
设计理念(为何如此构建)
- UI 和数据分别持久化,且各自带版本。 应用是视图;集合是事实依据;账本记录历史。替换其中一方,不会丢失另一方。
- AI 使用领域命令交流,绝不使用 SQL,也不操作原始状态。 这让人类和 AI 能够安全地并发编辑(通过命令层实现幂等性和乐观并发控制)。
- 优先扩展。 一切都通过 MCP Apps 桥接层运行——不使用宿主私有 API。一套代码应当能适用于所有可渲染
ui://的宿主。 - 专注单一用途,而非组合多种用途。 每个应用负责一个场景,并拥有自己的集合;引擎会创建新的集合,而不是将新功能塞进旧集合。系统应用(设置、仪表板)是有意设定的例外——它们由引擎管理,拥有特权,可以查看多个集合。
故障排查
| 症状 | 原因 |
|---|---|
| 更新后,宿主仍显示旧行为 | 宿主会继续使用旧数据运行旧服务进程,直到完全退出(按 Cmd-Q,而不只是关闭窗口)。 |
| Claude Desktop 自动更新后,审批对话框又出现了 | Desktop 自动更新偶尔会重置这些决定(上游问题 #56954,于 2026-06-23 以 not planned 关闭)——该问题不会带来修复,因此只需重新允许即可。 |
| 每个应用都有一个审批提示 | 你固定的每个应用(Settings → Installed → the app → Own tool)都有自己的 open_<name> 工具,宿主会对每个工具询问一次。取消固定不需要的应用即可。你在 2026-07-28–2026-08-16 期间留在宿主配置中的 OMA_DYNAMIC_TOOLS=1 已不再起作用;node install.mjs --check 会将它标记为 stale,重新运行安装程序会移除这个键。请参阅配置。 |
| 没有查看器链接,或链接指向别人的查看器 | 端口被非 open-mcp-apps 进程占用。将 PORT 设置为未占用的端口。 |
| 页面刷新后小组件丢失数据(ChatGPT web) | 已知问题,缓解方案已发布,等待线上复测——KNOWN-ISSUES.md。 |
| 小组件点击可以更新,但无法新增(Codex desktop) | 受宿主端限制。总请求 openai/codex#28912 于 2026-08-05 以已完成关闭,但那是一个 enhancement,并非此缺陷:对应的 bug #30092 在 2026-08-16 仍处于开放状态。请更新 Codex 并尝试,但仍可能遇到此问题。 |
| 想要彻底从头开始 | 完全退出宿主,然后从配置中所述的存储目录删除 open-mcp-apps.db(以及对应的 -wal/-shm 文件)。所有应用和数据都会被永久删除,但安装仍会保留。 |
开发
src/server.mjs | stdio MCP 服务;单一 open_app 路径(外加用户固定的每个应用对应的 open_<name> 工具) |
src/http.mjs | /mcp(无状态 Streamable HTTP)+ /view/<name> 浏览器查看器,绑定到 127.0.0.1 |
src/store.mjs | SQLite:条目 + 应用注册表 + change_event 账本(幂等、OCC) |
src/shell-runtime.js | 注入每个应用的浏览器运行时(window.oma) |
src/shell.mjs | 提供服务时,使用运行时 + 设计令牌回退方案包装存储的 HTML |
src/guide.mjs | AI 在生成应用前读取的创作规范 |
install-app.mjs | 从文件安装你自己编写的应用——这是唯一一条不经由 AI 进入注册表的途径 |
components/ | 种子安装时安装的 3 个系统应用(设置、仪表板、应用商店)。应用商店中的应用是 @openmcp-app/oma-store 依赖项——不会自动安装;浏览应用商店应用,可使用示例数据查看实时预览并一键安装 |
npm test # every suite below, plus the static invariants and budget checks
node test/server-smoke.mjs # 471 assertions over real stdio — incl. runtime app creation
node test/http-smoke.mjs # 85 assertions over the HTTP transport (incl. SSE /events, viewer)
node test/provenance.mjs # 39 assertions that an app's author — its trust tier — is not overwritable
node test/seed-smoke.mjs # 30 assertions on the seed pipeline
node test/files-smoke.mjs # 24 assertions on the per-app file store (dedup, integrity, GC races)
贡献无需签署任何内容——MIT 许可输入,MIT 许可输出(CONTRIBUTING.md)。
状态与路线图
早期 v0 阶段——已在 Claude Desktop 上验证端到端流程;已在 Codex 桌面端和浏览器查看器中验证跨供应商渲染和共享存储。
当前进展:
- 引擎:注册表 + shell + 通用数据命令 + 账本
- 已安装系统应用(设置、仪表板、应用商店);应用商店应用(
@openmcp-app/oma-store包)支持实时预览和一键安装 - AI 应用创建流程(引导 → 保存 → 打开)
- 上下文内引导(
get_started提示词 → AI 根据你的工作方式构建首个应用) - 安全基础:信任层级 + 沙箱化运行器 + 保留的配置键
- 多宿主发现安装程序(Claude Desktop · Claude Code · Codex)+ 每位用户共享存储
-
npx一键安装(npm 上的@2nd1st/open-mcp-apps) - 可自托管远程服务(Streamable HTTP),作为受支持的部署形式 → 供 claude.ai / ChatGPT / 移动端使用,运行在你自己启动的引擎上——传输层已实现(
src/http.mjs),并已通过 HTTPS 实测;目前缺少的是托管方案,因为引擎按设计绑定到127.0.0.1。这些浏览器宿主已可连接托管在 openmcp.app 上的服务;此项旨在支持自行部署 - 无需 shell 的一键安装
- 应用导出/导入 → 分享 → 社区应用商店(在此阶段启用审核 + 运行器沙箱)
许可证
整个代码库均采用 MIT 许可证——引擎和 components/ 中的系统应用都包括在内(应用商店包也采用 MIT 许可证)(LICENSE ·
LICENSING.md)。你可以使用、分叉、修改、嵌入,也可以将修改后的版本作为托管服务运行;重新分发大量代码时,请保留版权声明。除此之外没有其他义务。直到 v0.5.2,引擎都按目录拆分方式仅采用 AGPL-3.0 许可证——请参阅 LICENSING.md,了解变更内容和原因。
许可证不授予 open-mcp-apps、openmcp.app、SecondFirst 和 2nd1st 这些名称及其徽标的使用权——请参阅 TRADEMARKS.md。你可以自由分叉代码,但请为你的分叉另取名称。
版权所有 © 2026 2nd1st。
© 2026 2nd1st
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。



