mcpField
O
open-mcp-apps

open-mcp-apps

本地服务
openmcp.app开发工具362 周前更新

关于 open-mcp-apps

open-mcp-apps 是基于 MCP Apps 的引擎,让 AI 创建可复用的交互式应用,并将应用和数据持久保存。它面向支持 MCP Apps 的主机,提供应用注册表、SQLite 数据存储和带主题适配的运行环境。

主要功能

  1. 01创建并保存单文件 HTML 应用
  2. 02跨聊天和主机复用应用及数据
  3. 03SQLite 持久化与版本控制
  4. 04提供 MCP App 桥接和主题适配
  5. 05内置应用商店和浏览器查看器

适用场景

  1. 01按需创建看板或习惯追踪器
  2. 02在不同聊天中继续使用已保存应用
  3. 03通过应用界面查看和编辑共享数据

MCP 相关

它作为 MCP 服务连接兼容 MCP Apps 的主机,并通过 `ui://` 提供交互式应用界面。工具、提示词及 `window.oma` 数据 API 支持应用创建、打开和持久化数据操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"2nd1st-open-mcp-apps": {
"command": "npx",
"args": [
"-y",
"@2nd1st/open-mcp-apps"
],
"env": {
"OMA_DB": "<OMA_DB>",
"OMA_VIEWER": "<OMA_VIEWER>",
"OMA_DYNAMIC_TOOLS": "<OMA_DYNAMIC_TOOLS>"
}
}
}
}
启动命令npx -y @2nd1st/open-mcp-apps
需要配置的环境变量
OMA_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@2nd1st/open-mcp-apps0.5.9

工具

33

收录的工具列表 · 更新于 2 周前

参数类型必填说明
appstring是注册表中的应用名称(参见 list_apps)
collectionstring否绑定的数据集合(默认:应用声明的数据集合;未声明时使用应用自身的名称)

详细介绍

open-mcp-apps

CI npm license node MCP Registry

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,……)提供了该扩展本身未提供的三项能力:

  1. AI 可以写入的应用注册表。 如果你需要一个尚不存在的 UI,AI 会阅读 编写指南,基于简洁的 window.oma API 编写单文件 HTML 应用, 并保存下来。从那一刻起,你就能在当前聊天以及之后的每次聊天中按名称打开它。
  2. 持久化、带版本的数据,与 UI 分离。 应用绑定到通用的 集合,其中的项目由 SQLite 和只追加的 change_event 账本提供支持。每次 修改都是幂等的领域命令(command_id),并采用乐观并发控制 (expected_version)。AI 和用户编辑的是同一数据存储——小组件只是一个视图。
  3. 让 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_VIEWER1在 loopback 上运行浏览器查看器。设为 0 可完全停止启动。
PORT8787查看器监听的端口。
OMA_DB按用户存储SQLite 存储的路径。设置此项可隔离存储。
OMA_APP_STORE_DIRS—额外的 App Store 来源:目录结构与商店包的 apps/ 相同(每个应用一个文件夹),多个来源以 : 分隔(Windows 上用 ;)。搜索顺序早于已安装的 @openmcp-app/oma-store 包;优先采用第一个包含该名称的来源。
OMA_FUNCTIONSon设为 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 会编写应用:

Codex — 请求创建一个阅读追踪器;AI 编写应用,并以内嵌形式显示,此时已有三本书

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

Claude — 新聊天打开了同一份书单,现在已有八本书

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

应用商店 — 开箱即用应用的实时预览

Companion — 具有共享记忆的 AI 角色Family Week — 晚餐、家务轮值、购物和周末计划
Study Cards — 带有复习热力图和卡组架的间隔重复学习Knowledge Cards — 已保存答案的可视化资料库

上面的每个应用都是一个独立的 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 安装的应用,以及通过分享打开的应用,都在运行器后方运行——运行器是一个沙盒化的 srcdoc iframe,其桥接层只能访问应用自身的集合,除非获得更多权限。
  • 应用函数在你的机器上运行,并且可以发出网络请求。 默认开启;设置 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.mjsstdio MCP 服务;单一 open_app 路径(外加用户固定的每个应用对应的 open_<name> 工具)
src/http.mjs/mcp(无状态 Streamable HTTP)+ /view/<name> 浏览器查看器,绑定到 127.0.0.1
src/store.mjsSQLite:条目 + 应用注册表 + change_event 账本(幂等、OCC)
src/shell-runtime.js注入每个应用的浏览器运行时(window.oma)
src/shell.mjs提供服务时,使用运行时 + 设计令牌回退方案包装存储的 HTML
src/guide.mjsAI 在生成应用前读取的创作规范
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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。