mcpField
O
open-mcp-apps

open-mcp-apps

ローカル
openmcp.app開発ツール362 週間前に更新

open-mcp-apps について

open-mcp-appsはMCP Appsを基盤とし、AIが再利用可能なインタラクティブアプリを作成し、アプリとデータを保存できるエンジンです。対応ホスト向けに、アプリ登録機能、SQLiteによる永続化、ホストのテーマに対応するランタイムを提供します。

主な機能

  1. 01単一HTMLファイルのアプリ作成と保存
  2. 02チャットやホストをまたいだアプリとデータの再利用
  3. 03SQLiteによる永続化とバージョン管理
  4. 04MCP Appブリッジとホストテーマへの対応
  5. 05アプリストアとブラウザビューアーを内蔵

活用シーン

  1. 01必要に応じてボードや習慣トラッカーを作成
  2. 02後のチャットで保存済みアプリを再利用
  3. 03アプリの画面から共有データを閲覧・編集

MCP 対応

MCP Apps対応ホスト向けのMCP サーバーとして動作し、`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 など)に、拡張自体にはない次の 3 つの機能を提供します。

  1. AI が書き込めるアプリレジストリ。 存在しない UI をリクエストすると、AI は 作成ガイドを読み、簡潔な window.oma API に対応した単一ファイルの HTML アプリを作成して、 保存します。その時点から、このチャットでも今後のすべてのチャットでも、名前を指定して開けます。
  2. UI とは別に管理される、永続的でバージョン管理されたデータ。 アプリは SQLite と追記専用の change_event 台帳を基盤とする、汎用的なアイテムの コレクション にバインドされます。すべての 変更は、楽観的同時実行制御(expected_version)を備えた冪等なドメインコマンド(command_id)です。 AI と人間は同じストアを編集します。ウィジェットは単なるビューです。
  3. AI が作成したアプリを実際に動作させるシェルランタイム。 ui:// を提供する際、エンジンは 公式の MCP App ブリッジ、ホストのテーマ(Claude のデザイントークン、ライト/ダーク)、 window.oma データ API でアプリをラップします。作成するのはビューであり、プロトコル、 永続化、冪等性、テーマ設定はエンジンが処理します。

このエンジンが接続するホスト。 エンジンはマシン上で動作し、127.0.0.1 にバインドされるため、 同じマシン上のホストにサービスを提供します。対象は Claude Desktop、Claude Code、Codex、および組み込みのブラウザ ビューアーです。ブラウザホストはノート PC 上のループバックサーバーに接続できないため、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/ のプレフィックスを確認してください。このスコープだけが両者を見分ける目印です。

インストーラーを使う — 1 つのコマンドで

インストールにはシェルが必要なため、チャットアプリ(Claude Desktop、Codex)が自分でインストールすることはできません。代わりに、以下のいずれかを使ってください。

curl -fsSL https://raw.githubusercontent.com/2nd1st/open-mcp-apps/main/install.sh | sh

短い選択画面が開き、登録先のホスト(Claude Desktop、Claude Code、 Codex)と権限の設定を選べます。選択画面を省略するには -s -- --yes を、ホストを 1 つ指定するには -s -- --host codex を使ってください。

クローンの配置先は、シェルに何かを渡す前に ~/open-mcp-apps になります。別の場所に配置するには OMA_DIR を設定します。例:curl -fsSL <url> | OMA_DIR=~/src/oma sh。このワンライナーを再実行すると、2 つ目のクローンを作る代わりに、同じクローンがその場で更新されます。アプリとデータはその中にはありません(設定にあるユーザーごとのストアに保存されます)。そのため、このフォルダーは移動または削除しても問題ありません。また、node uninstall.mjs を実行しても、このフォルダーは削除されません。

コーディングエージェントを使う場合(Claude Code、Codex CLI — これらはシェルを使えます)は、以下を貼り付けてください。

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)は、設計上、同じデータを操作しながら、代わりにターミナルの横にあるブラウザー画面に UI を表示します。そこには、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ループバック上のブラウザービューアーです。0 にすると起動しません。
PORT8787ビューアーがリッスンするポートです。
OMA_DBユーザーごとのストアSQLite ストアへのパスです。ストアを分離するには、ここにパスを設定します。
OMA_APP_STORE_DIRS—追加の App Store ソースです。ストアパッケージの apps/ のように配置されたフォルダー(アプリごとに 1 フォルダー)を指定し、: で区切ります(Windows では ;)。インストール済みの @openmcp-app/oma-store パッケージより先に検索されます。同じ名前がある場合は、最初のソースが優先されます。
OMA_FUNCTIONSオン0 にするとアプリの関数(call_function)が無効になります。関数の本体はこのマシン上で実行され、ネットワークリクエストを送信する場合があります。

アプリ固有のツール。 すべてのアプリは open_app から開きます。特定のアプリに専用の open_<name> ツールも用意するには、ピン留めします。Settings → Installed → アプリ → Own tool の順に選択してください。ツール一覧が変わるのは、アプリをピン留め、ピン留め解除、または削除したときだけです。Claude.ai と ChatGPT では、コネクターのツール一覧を更新すると新しいツールが表示されます。

データの保存場所。 ストア全体は 1 つの SQLite ファイル open-mcp-apps.db に保存されます。保存先は、macOS では ~/Library/Application Support/open-mcp-apps/、Windows では %APPDATA%\open-mcp-apps\、Linux では $XDG_DATA_HOME が設定されていない場合は ~/.local/share/open-mcp-apps/ です。クローンの外部に保存されるため、どのホストからも同じアプリとデータを利用できます。

初回実行時の権限。 最初の数回のツール呼び出しでは、毎回承認ダイアログが表示されます。**「常に許可」**を選択してください。ツールセットは意図的に小さく、安定するようにしています。通常、読み取り専用ツールでは承認が不要で、単一の open_app ツールが、後から AI が作成するアプリも含め、すべてのアプリを開く役割を担い、その許可で対応するため、新たな承認を求められることはありません。古いエントリーに OMA_DYNAMIC_TOOLS=1 が残っていても何も起こりません。node install.mjs --check を実行すると stale と報告され、インストーラーを再実行するとこのキーが削除されます。 Settings → Connectors → open-mcp-apps → Tool permissions で承認をまとめて行うこともできます。

使い方

ホストで開始します。 インストール後、ホストを再起動してください。初めてですか? エンジンには get_started という MCP プロンプトが 1 つ付属しています。プロンプトを表示するホストでは 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 が作成し、3 冊の本がすでに記録された状態でインライン表示される

別のチャット、あるいは別のホストで開いても、データを保持したまま使えます。

Claude — 新しいチャットで同じ読書リストが開き、書籍が 8 冊に増えている

App Store には、すぐに使えるアプリが、動作するプレビューとワンクリックインストール機能付きで用意されています。アプリは 独自のパッケージ @openmcp-app/oma-store に含まれており、エンジンが依存関係としてインストールします。新しいストアアプリへの貢献は、こちらで受け付けています。

App Store — すぐに使えるアプリのライブプレビュー

Companion — 共有メモリを持つ AI キャラクターFamily Week — 夕食、家事のローテーション、買い物、週末の予定
Study Cards — 復習ヒートマップとデッキ一覧を備えた間隔反復学習Knowledge Cards — 保存した回答を視覚的に整理したライブラリ

上記のアプリはすべて、プレーンなデータコレクションに紐付けられた単一の HTML ファイルです。AI がアプリを作成する際に使うものと同じ window.oma API と作成ガイドを使って作られています。

1 つの会話内で複数のウィジェットを同時に使えます(habit-streaks と meal-planner を並べて表示するなど)。

ブラウザビューアーとバインドするポート

インストールごとに、http://127.0.0.1:8787 で小さなローカルウェブサーバーが起動します。チャットウィンドウの外でアプリを見るためのもので、アプリごとにページがあり、AI が読み取っているものと同じデータを表示します。また、ターミナルホストではアプリを見る唯一の方法となるため、AI がアプリを作成したり開いたりすると、リンクを渡します。

サーバーは自動的に起動します。上記の OMA_VIEWER と PORT で設定を変更できます。ポートが別の open-mcp-apps プロセスにすでに使用されている場合、そのプロセスが同じデータを配信しているため、こちらはそのアドレスを共有します。別のものに使用されている場合は、見知らぬサーバーへのリンクを渡す代わりに、ビューアーもリンクも利用できません。

パスワードは設定されていません。これは意図的なものです。 リスナーは 127.0.0.1 に固定されているため、別のマシンから応答する設定にはできません。ポートにアクセスできるコンピューター上のプログラムは、SQLite ファイルを直接開くことができます。パスワードを設定するのは、壁に開いた穴の横に鍵をかけるようなものです。インターネット経由でアクセスする唯一の方法は、自分で起動するトンネルです。それを使うかどうかも、自分で決める必要があります。トンネルが稼働している間は、その URL を秘密として扱ってください。 現状、インターネットとデータの間にあるのは、その URL だけだからです。

ホストのサポート

2026-07-22 時点で実機テスト済み(ChatGPT web は 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(「Codex GUI で MCP アプリをエンドツーエンドで動作させる」という enhancement)は 2026-08-05 に完了としてクローズされましたが、この失敗に該当し、第三者によってそこで再現された bug #30092 は 2026-08-16 時点でまだオープンでした。ここではどちらの状態も再テストしていないため、セルは ◐ のままです。KNOWN-ISSUES を参照✅✅
Claude Code — ターミナル内(claude mcp)— チャット内では設計上表示されません(テキストフォールバック)— ただし、ターミナルの横にある画面 を参照— チャット内では不可✅✅
Claude Code — Claude アプリ内の Code サーフェス✅ 2026-08-16 に実機テスト済み:汎用 open_app で開いたアプリはインライン表示され、チャットサーフェスと同じ形式ですこのサーフェスでは未測定✅✅
codex CLI / IDE— チャット内では設計上表示されません(テキストフォールバック)— ただし、ターミナルの横にある画面 を参照— チャット内では不可✅✅
ChatGPT web(Work モード)✅ 2026-07-28 に実機テスト済み(リモート HTTPS)— 高さ制限なしで全高表示されます。ページを再読み込みするとウィジェットのデータが失われます(対策はリリース済みですが、ここでは実機での再テスト待ちです — KNOWN-ISSUES を参照)✅ ウィジェットのボタンで行が追加され、保持されました✅✅

すべて MCP Apps ブリッジを介して動作するため、上流のホスト修正(例:#28912)は、変更なしでこのプロジェクトにも反映されます。

特に Claude Code について: これは 1 つの製品に 2 つのサーフェスがあり、描画できるのはそのうち 1 つだけです。そのため、行が 2 つあります。ターミナルにはインラインウィジェットのサーフェスがまったくありません。これは機能の不足ではなくアーキテクチャ上の仕様であり、まさにターミナルの横にある画面がそのためにあります。Claude アプリ内の Code サーフェスには UI があり、インライン表示されます。2026-08-16 に確認した動作は、汎用 open_app 経由でした。

特に Codex について: プラグインはウェブ側で登録されるため、ローカルにインストールされたエンジンにはプラグインではなく MCP サーバーとして接続します。これはセルフホスト可能なインストールにとっても適切な方法です。ChatGPT デスクトップアプリでのウィジェット表示は、サインイン方法にも左右されるようです(アカウントでサインインした場合は動作を確認していますが、API キーを使った場合はまだ確認できていません)。

ターミナルの隣に置く画面

この2つの—セルが示しているのは、チャットにテキストが表示されるということです。UIがないという意味ではありません。エンジンは最後に開いたアプリを記憶し、そのポインターを/eventsフレームでビューアーに送ります。また、アプリはoma.embed("@live", {into})という領域を配置でき、そこにAIが最後に開いたものをマウントし、AIが別のアプリを開くと切り替えます。App Storeにはそのアプリが1つあります。**live**をインストールし、http://127.0.0.1:8787/view/liveを、開いたままにしておくウィンドウで開きます。ターミナルでは会話が続き、その画面にはアプリが表示されます。AIがCLIからアプリを開いたり書き込んだりすると、画面が追従し、そこでクリックや編集、入力ができます。ヘッドレスCLIでの使用を想定して構築されています。

「その画面」を最も手軽に用意する方法は、同じタイル型ワークスペース内にブラウザペインを置くことです。エージェントの隣の列、つまり今作業しているウィンドウ内に置きます。同じマシン上なので、トンネルも別のデバイスも必要ありません。最近のターミナル環境のほとんどでは、シェルの隣にブラウザーを配置できます。必要なのはそれだけです。2台目のモニターでも、机のスペースが広くなるだけで同じことができます。別のデバイスに画面を置く場合も、下記の注意点を除けば同じ考え方です。

実際の制約についても、率直に説明しておく価値があります。トランスクリプト内にウィジェットはありません。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

受け付ける形式は 2 種類です。自己完結型の HTML ドキュメント 1 つ — サイズ上限はありません(軽量に保ってください。データはコレクションに保存され、ソースはウィンドウ単位で読み込まれます)。エンジンが最小限の基本スタイル、ホストのデザイントークン、window.oma を挿入します。もう 1 つは テンプレートとバンドル です。HTML は読みやすいマウントポイントとなり、独自のビルド出力(<script type="module" src="oma-asset:app.js">、<link rel="stylesheet" href="oma-asset:app.css">)を参照します。--asset はそれらのファイルをアプリのファイルプレーンに取り込み、ドキュメントがストアを離れる際にエンジンがインライン化します。ホストの iframe からこのマシンにアクセスすることはできません。

その代わり、AI はアプリを反復的に更新できなくなります。ファイルが信頼できる唯一の情報源となり、再ビルドして再インストールする必要があります。単一ドキュメント形式のアプリなら、AI は引き続きソースを読み取れます。テンプレートとバンドル形式のアプリでは、AI が読み取るのはテンプレートだけで、バンドルはユーザー自身が管理します(edit_app と AI の save_app は built_outside を返して拒否します。編集するには上記のコマンドを再実行します)。どちらの形式でも、アプリは他のアプリと同様にユーザーのデータを共有します。由来情報はどちらの方向にも上書きできないため、--sandboxed でインストールしたアプリは、削除するまでサンドボックス化されたままです。ウィジェットが接続できる対象は、アプリ自身の宣言(manifest.csp。MCP Apps の仕様に従ってホストに中継され、既定では何も許可されません)で決まります。また、アプリの 関数 はエンジン側で実行され、fetch を呼び出せます。RUNTIME.md の §5.1 と §6.1、およびアプリが利用できる内容を定義する 2 つの型ファイルを参照してください。@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 が 2 つのランタイムの実際のサーフェスとの一致を固定するため、知らないうちに仕様が乖離することはありません。

セキュリティモデル

アプリの信頼度は、その入手元に応じて段階的に設定されます。詳細は 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:// をレンダリングするあらゆるホストで、1 つのコードベースを利用できるようにします。
  • 複合型ではなく、単一目的。 各アプリは 1 つの利用シナリオと独自のコレクションを持ちます。エンジンは既存のアプリに機能を詰め込まず、新しいアプリを作成します。システムアプリ(設定、ダッシュボード)は意図的な例外です。エンジンが所有する特権アプリとして、複数のコレクションを横断して参照できます。

トラブルシューティング

症状内容
更新したのに、ホストに以前の動作が表示されるホストは、完全に終了するまで(ウィンドウを閉じるだけでなく、Cmd-Q)古いデータ上で古いサーバープロセスを実行し続けます。
Claude Desktop の自動更新後に承認ダイアログが再表示されるDesktop の自動更新で、こうした設定がリセットされることがあります(upstream #56954、2026-06-23 に not planned としてクローズ済み)。この issue による修正は予定されていないため、再度許可してください。
アプリごとに承認プロンプトが表示されるピン留めした各アプリ(Settings → Installed → the app → Own tool)には、それぞれ独自の open_<name> ツールがあり、ホストはツールごとに一度ずつ確認します。不要なものはピン留めを解除してください。2026-07-28~2026-08-16 にホストのエントリーに残された OMA_DYNAMIC_TOOLS=1 は、もう何もしません。node install.mjs --check では stale と表示され、インストーラーを再実行するとそのキーが削除されます。Configuration を参照してください。
ビューアーのリンクが表示されない、または他人のリンクが表示されるポートが open-mcp-apps 以外のプロセスに使用されています。空いているポートを PORT に設定してください。
ページを更新するとウィジェットのデータが失われる(ChatGPT web)既知の問題で、緩和策はリリース済みですが、実環境での再テストは未完了です。— KNOWN-ISSUES.md。
ウィジェットのクリックで更新はできるが、追加はできない(Codex desktop)ホスト側でブロックされています。包括的なリクエスト openai/codex#28912 は 2026-08-05 に完了としてクローズされましたが、これは enhancement であり、この不具合ではありません。該当する bug、#30092 は、2026-08-16 時点でまだオープンでした。Codex を更新して試してみてください。ただし、引き続き問題が発生する可能性があります。
完全に初期状態からやり直したいホストを完全に終了し、Configuration に記載されているストアディレクトリから 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.mjsアプリ生成前に AI が読み込む作成ガイド
install-app.mjs自分で作成したアプリをファイルからインストールします。AI を介さずにレジストリに登録する唯一の方法です
components/シード時にインストールされる 3 つのシステムアプリ(設定、ダッシュボード、アプリストア)。App Store のアプリは @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 デスクトップとブラウザビューアーでは、ベンダーをまたいだレンダリングと共有ストアの動作を確認済みです。

現在の状況:

  • エンジン:レジストリ + シェル + 汎用データコマンド + 台帳
  • システムアプリをインストール済み(設定、ダッシュボード、アプリストア);App Store アプリ(@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 にはすでに接続できます。この項目は、自分で運用できるようにするものです
  • シェルを使わないワンクリックインストール
  • アプリのエクスポート/インポート → 共有 → コミュニティ App Store(ここで審査 + ランナーのサンドボックスが有効になります)

ライセンス

リポジトリ全体(components/ 内のエンジンとシステムアプリを含み、App Store パッケージも同様です)は MIT ライセンスです(LICENSE · LICENSING.md)。使用、フォーク、変更、組み込み、変更版のホスト型サービスとしての実行が可能です。再配布する相当量の部分には著作権表示を残してください。義務はこれだけです。v0.5.2 まではディレクトリを分割して、エンジンに AGPL-3.0-only を適用していました。何が変わったのか、その理由については LICENSING.md をご覧ください。

open-mcp-apps、openmcp.app、SecondFirst、2nd1st の名称とロゴは、ライセンスの許諾対象ではありません。TRADEMARKS.md をご覧ください。コードは自由にフォークできますが、フォークには独自の名前を付けてください。

Copyright © 2026 2nd1st.

© 2026 2nd1st

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。