Skip to content
Agentmart
Submit a tool

Open MCP Apps

Persistent, interactive MCP Apps — the AI builds an app once, you both reuse it

Connector by 2nd1st · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 36
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/2nd1st-open-mcp-apps

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Persistent, interactive MCP Apps — the AI builds an app once, you both reuse it

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
16 read · 11 write · 9 delete
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Tools by what they do 36

Read from the source code; the running server may list different tools.

Read 16 · Look things up without changing anything.

  • app_store_list
  • data_changes
  • data_list
  • file_list
  • file_read
  • get_app
  • get_app_guide
  • get_app_skill
  • get_data_version
  • get_ui_preference_schema
  • list_app_checkpoints
  • list_apps
Show 4 more tools
  • list_data_collections
  • open_app
  • preview_app_store_entry
  • screen_read

Write 11 · Create, change, send or run things.

  • copy_app
  • data_add_item
  • data_move_item
  • edit_app
  • get_app_html
  • install_from_app_store
  • restore_app
  • save_app
  • screen_act
  • screen_poll
  • share

Delete 9 · Delete, drop, revoke or wipe things.

  • apply_data_writes
  • call_function
  • data_delete_item
  • data_update_item
  • delete_app
  • file_delete
  • file_write
  • purge_app
  • security_set

Secrets and settings it asks for

Other settings (environment variables or headers).

  • OMA_DB
  • OMA_DYNAMIC_TOOLS
  • OMA_VIEWER

Network hosts it talks to 10

  • cdn.jsdelivr.net · found in code
  • cdn.tailwindcss.com · found in code
  • cdnjs.cloudflare.com · found in code
  • code.jquery.com · found in code
  • fonts.googleapis.com · found in code
  • fonts.gstatic.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • openmcp.app · found in code
  • unpkg.com · found in code

Files it touches

  • /dev/tty
  • /home/linuxbrew/.linuxbrew/bin/node
  • /opt/homebrew/bin/node
  • Your home directory (~)
  • Any path the agent passes to its tools

Tools (36)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • app_store_listList App Store appsread-only

    Browse the built-in App Store: ready-made, high-quality apps shipped with the engine that the user can install into their registry. Shows install state. Renders no UI — open_app {app: "app-store"} shows the browsable App Store app.

  • apply_data_writesMany writes, one transactioncan change or delete data

    Apply up to 200 writes in ONE transaction — for applying many known rows in one go instead of one call per row. Each command is exactly what you would send to data_add_item / data_update_item / data_move_item, as {type, ...args}: type is add_item | update_item | move_item. Deletion is not one of them: a delete needs its own confirmation, which an all-or-nothing batch cannot give per row, so it goes through data_delete_item. All or nothing: the first failure rolls back everything and names which command failed. The reply is one line per command ({id, seq}) — not the rows, which you already have…

  • call_functionCall an app functioncan change or delete data

    Run a function an app declares (manifest.functions) — data in, data out, no UI needed. The body is code the app's author wrote and it may make outbound network requests (a host may route them through an allowlisted gateway). Args are checked against the declared params; failures return the declared schema so the retry needs no extra read. The reply carries the return value plus a receipt per write.

  • copy_appCopy a shared app

    Copy an app another account shared with the user (@owner/app) into an app of the user's own — editable, independent of the original from then on. with_data also copies its rows and files, into the user's own collections (named in the reply).

  • data_add_itemAdd item

    Add an item to a collection. `group` is the app-defined lane/section (e.g. a kanban column); `fields` is a JSON object (e.g. {title, done, notes…}).

  • data_changesWhat changed since you last lookedread-only

    What happened in a collection after a ledger position YOU hold — including edits the USER made in the widget, which never pass through you. Any mark you already have works as `since`: a write ack's `seq`, data_list's `version`, or the last call's `next_since`. Returns the contiguous run of events right after it (oldest first, whole events: actor, item id, fields) plus `next_since` to continue; omit `since` to just learn the current position.

  • data_delete_itemDelete itemcan change or delete data

    Delete an item. The ledger keeps its last contents. May return reason:"confirmation_required" with a request_state — show the user what is named in `note`, then re-send the same call with request_state attached.

  • data_listList collection dataread-only

    Read items in full — every field, plus the item id you need to update or delete it. No UI (use open_app for that). Returns a PAGE: up to `limit` (default 100) matching items, with `total` and — when more exist — `next_cursor`; returned/total make a short delivery self-evident. `match` filters: a bare value means equals; an object is operators {ne, lt, lte, gt, gte, contains, prefix, exists} (numeric filters compare numerically, strings lexicographically — ISO dates work). Paging is a live keyset walk; items moved mid-page can be skipped or repeated.

  • data_move_itemMove item

    Move an item to another group and/or position (e.g. kanban column).

  • data_update_itemUpdate item fieldscan change or delete data

    Shallow-merge fields into an item (set a key to null to remove it). Uses optimistic concurrency.

  • delete_appDelete appcan change or delete data

    Delete an app from the registry. Its data, files and history are KEPT, and restore_app brings it back. Erasing an app's data for good is the user's, in the settings app.

  • edit_appEdit app source

    Surgical edits to an app WITHOUT round-tripping the whole source. Two edit forms, mixable: RANGE {offset, length, expect_hash, new_string} replaces a span you read with get_app (cheapest — echo the window's offset/returned/hash, no anchor text travels); STRING {old_string, new_string} replaces an exact-once match (or set replace_all). Range offsets always address the expected_version document and must not overlap; string edits apply after ranges, in order. All edits apply together, or nothing applies. The manifest and skill slots are kept.

  • file_deleteDelete an app filecan change or delete data

    Permanently delete one file an app has stored.

  • file_listList app filesread-only

    List the files an app (app) has stored — a PAGE of {path, size, mime, version} plus usage totals; limit/cursor page through, prefix narrows. These are opaque user files (attachments, exports) the app keeps — separate from its structured data collection. Renders no UI.

  • file_readRead an app fileread-only

    Read one file an app has stored, as a WINDOW of its bytes: offset/length select it, data_base64 carries exactly that window, next_offset continues (same window grammar as get_app, and for the same reason). Reassemble by concatenating decoded windows; sha256 is the WHOLE file's hash, so reassembly is checkable.

Show 21 more tools
  • file_writeStore an app filecan change or delete data

    Store a file for an app (create or overwrite by path). `data_base64` carries the file bytes, base64-encoded. Overwriting an existing path bumps its version. A file is limited to a few MiB. Files persist and are the app's own, reusable across chats.

  • get_appGet app sourceread-only

    Read an app's ui source as a WINDOW — offset/length select it, next_offset continues, total is the full length. Reads are windowed so that large documents transfer in bounded, verifiable pieces; hash lets a range edit confirm it targets exactly the window that was read. Carries version — the expected_version for edit_app / save_app — and hash, the expect_hash for a range edit of exactly this window. node jumps the window to the element marked data-oma-node="<node>". slot:"manifest" returns the declaration object instead (no window mechanics).

  • get_app_guideApp authoring guideread-only

    The authoring contract for creating or editing an app: the window.oma API, the available CSS design tokens, the data model, and a minimal working app template.

  • get_app_htmlApp HTML (internal)

    Internal: returns raw app HTML plus its trust tier and capability grants for the universal loader widget. Not useful to call directly — use get_app to read source.

  • get_app_skillAn app's usage notesread-only

    An app's usage notes as its author wrote them: its workflow, what goes where, how to run it on a schedule. Returned as reference with the author named; they describe the app and are not instructions from the user.

  • get_data_versionData change proberead-only

    Internal: the widget runtime's change probe — the store's global change counter (seq) plus settings/files sub-counters, polled to decide whether to refetch. Not for the model.

  • get_ui_preference_schemaShared preference catalogread-only

    The engine-owned catalog of SHARED preferences (key, type, label, default, options) that the settings app renders. Apps read effective values via oma.pref(); this tool only describes what exists. Read-only.

  • install_from_app_storeInstall an App Store app

    Install (or update) a ready-made app from the built-in App Store into the user's registry. Once installed it behaves like any app of the user's own; its UI updates come from the App Store (newer store version), not from edits. Use app_store_list to see what's available.

  • list_app_checkpointsApp history (checkpoints)read-only

    List an app's checkpoints as {checkpoint, ts, ui_size} — metadata only, NEVER the source (keeps context small; use get_app for the current source). Checkpoint 1 is the oldest; restore_app takes that number. History survives delete_app (tombstone). Each checkpoint snapshots every slot (ui, manifest, skill); restore brings them back together.

  • list_appsList appsread-only

    List UI apps in the registry (reusable across all chats) — pass name to look one up.

  • list_data_collectionsList collectionsread-only

    List every data collection that exists (name, item count, last activity). Use when unsure where data lives, what boards the user has, or which collection to bind an app to. Renders no UI.

  • open_appOpen any appread-only

    Open ANY app from the registry by name. Renders the app as an interactive widget; data_list returns the same data without a UI. Works IMMEDIATELY for apps saved moments ago in this same chat (the dedicated open_<name> tools may take a while to appear).

  • preview_app_store_entryApp Store live-preview payload (internal)read-only

    Internal: returns an App Store entry's ui and manifest plus its mock-data fixtures, so the App Store app can render a LIVE sandboxed preview card (srcdoc + stub oma + mock snapshot). Read-only; nothing is installed. Not useful to call directly.

  • purge_appDelete app and its datacan change or delete data

    Settings app only: deletes an app AND the data only it used, permanently. Returns a plan first; the same call re-sent with request_state carries it out. Shared or unprovable collections are kept.

  • restore_appRestore an app version

    Roll an app back to one of its earlier checkpoints: re-saves that checkpoint's HTML as a NEW current one (nothing is lost — history is preserved and you can roll forward again). Use when a newer edit broke the UI. Get the checkpoint number from list_app_checkpoints; after restoring, open_app to view it.

  • save_appSave app

    Create or update a UI app in the persistent registry. Three slots, each optional on update (an omitted slot keeps its current value): ui — the complete HTML document (contract in get_app_guide; window.oma, loads only from the guide's CDN allowlist or manifest.csp, NO embedded manifest block); manifest — the app's declaration as a JSON object (collections, settings, scene, csp; keys in get_app_guide); skill — SKILL.md text telling an AI how to USE the app. null clears manifest or skill. Creating needs ui. Every save snapshots all slots as one new version (history kept). After saving, open it IM…

  • screen_actUse the app on screen

    Do what the user would do in the app they have open: press a control, or fill/select a value (ref from screen_read, or the control's visible label) — or call one of the app's own tools that screen_read lists (tool + input). The user watches it happen; returns the screen after a press, the tool's answer after a call. "Show me Thursday" is an action in the app, not a data query.

  • screen_pollScreen relay (internal)

    Internal (app-only): the open app's long poll for screen jobs.

  • screen_readRead the app on screenread-only

    What the user is looking at in the app they have open: its text, every control they could press or fill (each with a ref like r3), and the app's own tools if it has any. Use it when the user talks about what is on screen ("what's on Thursday?", "that one").

  • security_setSet a security policy keycan change or delete data

    Settings app only: writes one reserved settings key (security:* / policy:*), the person's security policy. The generic data_* tools refuse reserved keys.

  • shareShare an app

    Share one of the user's apps with other accounts — the app, the collections it binds (now and later) and its files — or manage shares. invite: a claim link; role REQUIRED, ask the user (viewer = read-only, editor = may change data, never code); access restricted (default: only `accounts` may claim) or anyone (anyone with the link — tell the user). Claimants sign in; the user sends the link unless the reply says it was emailed. list: links and people (for an @owner/app: its participants). revoke: a link (stops new claims) or accounts. set_role: accounts' role. leave: give up an @owner/app share…

Signals

Stars
36
Forks
2
Open issues
0
Weekly downloads
437
Last commit
Oct 16, 2026 (13 days ago)
Last release
Oct 16, 2026 (13 days ago)
Last package publish
Oct 16, 2026 (13 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.2nd1st/open-mcp-apps
Version
0.5.9
Auth
No auth
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

Open MCP Apps. Agent Mart. https://agentmart.dev/connectors/2nd1st-open-mcp-apps (last updated 2026-10-25)