Mellos Mapping vs Open MCP Apps

A side-by-side look at the Mellos Mapping and Open MCP Apps MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Mellos Mapping logoMellos MappingDeveloper Tools · Local subprocess (stdio)Live layered dependency map for bottom-up development, drawn by the agent in a terminal pane.67GreatAuth: not declaredOpen MCP Apps logoOpen MCP AppsDeveloper Tools · Local subprocess (stdio)Interactive MCP Apps the AI builds once and you both reuse — data outlives the chat65GreatAuth: not declared

Verdict: choose Mellos Mapping for developer tools work as a local process; choose Open MCP Apps for developer tools as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Mellos Mapping logoChoose Mellos Mapping when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like mmap_declare, mmap_update, mmap_read.
Explore Mellos Mapping

Open MCP Apps logoChoose Open MCP Apps when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like open_app, get_app_html, get_app_guide.
Explore Open MCP Apps

Feature & specification comparison

Rows where the two servers differ are marked.

SpecMellos Mapping logoMellos MappingOpen MCP Apps logoOpen MCP Apps
CategoryDeveloper ToolsDeveloper Tools
Quality signal67/100 · Great65/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNot declared
PricingNot declaredNot declared
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars11536
Directory activity 2 views 0 installs 0 upvotes 0 views 0 installs 0 upvotes
Tools834

Tools & capabilities

Mellos Mapping tools 8

  • mmap_declareGrow the Mellos map: set the title and diagram kind, add layer bands, lanes and groups (labeled subsystems within ONE band — declare them when a single band grows crowded, roughly five or more nodes in that band; a group must be a strict subset of its band, and a map spread thin across many bands needs none), add nodes, add dependency edges. Declare the missing design after reading existing pages with mmap_read; reuse verified nodes. Edges must point strictly downward (a node may only use nodes on lower layers); the batch is all-or-nothing. Title and kind can also be changed with mmap_update; this legacy form remains supported. Revising what already exists (moving, renaming, relabeling, clearing) is mmap_update.
  • mmap_updateThe revision tool, all-or-nothing. Record progress on nodes: in-progress when starting a node (the pane spins), done with evidence when its verification passes, regressed with evidence when a done node breaks. Revise what the ghost design got wrong: move a node to another band, join or leave a group or lane, rename a band (or re-rank it, which reorders the whole map), relabel a group or a lane. Every clearable field takes null to empty it — that is how a field is cleared, never an empty string. Bands, groups and lanes are applied before the node updates, and within one node update `layer` moves the node before its other fields. The map is a ledger: report honestly, it never blocks you.
  • mmap_readRead existing pages before creating a map. Returns structured IDs, revisions and bounded results. pages lists summaries; map reads page metadata/context; nodes/edges/layers/groups/lanes read editable records; neighborhood reads related nodes; changes compares saved source hashes with local files. New conversations and compacted context should resume the existing effort. mmap_view remains the picture.
  • mmap_batchAtomically combine additions, updates and removals on ONE page. Checks the final graph, so a coordinated move or edge replacement needs no intermediate saves. Read IDs and revision with mmap_read first. Cross-page deletion is excluded.
  • mmap_removeRemove edges, nodes, groups and empty layer bands (in that order, all-or-nothing). Removing a node also removes every edge touching it; removing a group merely ungroups its members. Use when the ghost design turns out wrong — the map is a hypothesis, revising it is honest work. `pages` is the other scale: it DELETES whole page files, so a finished effort can be cleaned up instead of accumulating tabs forever. A bare `{pages: ["slug"]}` with no other field is the normal form; combined with map edits, the edits are applied first and the pages are deleted after. The deletion is permanent and cannot be undone, so delete only pages whose effort is over — and only ever with the user behind it. An unknown slug is refused with the project's real page list (naming a page that does not exist is a typo, not a request). The default page has no slug and is not deletable here. A node elsewhere still pointing at a deleted page with `submap` stays legal — a submap reference has no existence invariant — but it has nowhere to dive until the page comes back.
  • mmap_setupGet or set the mapping policy — WHEN the assistant opens a Mellos map. Call with no arguments to read it: the reply names the policy chosen for the USER (every project), the one this PROJECT overrides it with if any, and which of them is in effect. If it reports "not set", ask the USER to choose (never pick for them): always = map every structured task — workflows, designs, architecture, technical dependencies; complex = map only medium or complex tasks — several modules, a new subsystem, roughly an hour or more; on-request = map only when the user explicitly asks. Then call again with their choice to persist it. It defaults to user scope, which is the normal one — the question is about how someone works, so it is asked once ever, not once per repository. Pass scope: "project" only when the user wants THIS project to differ from that habit. The policy guides you; it never blocks the tools, and an explicit user request for a map always wins.
  • mmap_viewRender the current Mellos map as monochrome text — the same picture the split-pane watcher shows live. Use it to check the map state or to show it inline in conversation. Every response ends with a `pages:` line naming the pages this project actually has and which one you are looking at, so this is also how you discover whether a map exists at all and under which slugs — never probe the files.
  • mmap_openFor automatic display beside the current ChatGPT desktop conversation in Codex mode, use surface: "web-terminal", then call open_in_codex with the returned browser hostOpen object. No paste or Computer Use is needed. For the native host terminal, use surface: "codex-terminal": prepare absolute watcher commands for the current project, then ask the host to open its right terminal. This does not launch the watcher or type into that terminal. Agent exec PTYs cannot be attached using their numeric session ids. For a document panel, use surface: "markdown": generate MD + SVG files, enable automatic preview updates after successful map writes, then use the HOST file-opening tool to display the returned absolute Markdown path on the right of the current conversation. Generated does not mean visible: this server cannot open or observe the desktop side panel. For interactive maps, choose surface: "web": start or reuse a project-local web viewer and pass the returned URL to the host browser-opening tool. Markdown and terminal remain available. The default surface is "terminal", preserving the terminal workflow. Put the live map on the user's screen: a terminal pane beside this conversation that redraws on every write. Call it whenever a result says `pane: CLOSED` — and do NOT ask permission first, because a user who has set a mapping policy has already said they want to see the map. With a pane already open this RETARGETS it to `page` instead of opening a second one, so it is also how you show the user a particular page when they ask for one. It never closes a pane: taking the map off the screen belongs to the user (the `q` key in the pane, or typing `mmap` in a terminal). The reply says whether a pane actually reported itself in afterwards, not merely that a command was run. Automatic terminal opening supports Windows Terminal, tmux on Linux/macOS, and Pebrel, which splits the conversation's own pane. omp (Oh My Pi) has no side panel of its own: there the routes are this same terminal pane (a Windows Terminal split, or a tmux split on Linux/macOS) and the web viewer, whose URL the session opens with its own browser tool. If opening fails, relay the reason and copyable command; retry only after the environment changes or the user asks.

Open MCP Apps tools 34

  • open_appOpen 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).
  • get_app_htmlInternal: 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_guideThe 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.
  • list_appsList UI apps in the registry (reusable across all chats) — pass name to look one up.
  • get_appRead 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_skillAn 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.
  • save_appCreate 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 IMMEDIATELY with open_app.
  • edit_appSurgical 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.
  • call_functionRun 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.
  • data_listRead 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.
  • apply_data_writesApply 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.
  • data_changesWhat 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.
  • +22 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Mellos Mapping

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "mellos-mapping": {
      "command": "npx",
      "args": [
        "-y",
        "mellos-mapping"
      ]
    }
  }
}

Open MCP Apps

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "open-mcp-apps": {
      "command": "npx",
      "args": [
        "-y",
        "@2nd1st/open-mcp-apps"
      ]
    }
  }
}

Frequently asked questions

Mellos Mapping is categorized under Developer Tools and uses a local stdio subprocess. Open MCP Apps belongs to Developer Tools and uses a local stdio subprocess. Pick Mellos Mapping for developer tools work and Open MCP Apps for developer tools.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Mellos Mapping has no declared pricing — check the project's own site. Open MCP Apps has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add mellos-mapping and open-mcp-apps as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Mellos Mapping has a quality signal of 67/100 (Great) with 2 views, 0 installs and 115 GitHub stars. Open MCP Apps has 65/100 (Great) with 0 views, 0 installs and 36 GitHub stars.