Erd Editor vs Open MCP Apps

A side-by-side look at the Erd Editor 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.

Erd Editor logoErd EditorDeveloper Tools · Local subprocess (stdio)Design database schemas as ERDs in your browser, VS Code, JetBrains IDEs or Obsidian. Import SQL, DBML and GraphQL, export DDL and code, and let coding agents edit live over MCP.71GreatAuth: no auth requiredOpen 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 Erd Editor 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?

Erd Editor logoChoose Erd Editor when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You want tools like erd_list_documents, erd_open_document, erd_save.
Explore Erd Editor

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.

SpecErd Editor logoErd EditorOpen MCP Apps logoOpen MCP Apps
CategoryDeveloper ToolsDeveloper Tools
Quality signal71/100 · Great65/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNo auth requiredNot declared
PricingFreeNot declared
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars1,73036
Directory activity 1 views 0 installs 0 upvotes 0 views 0 installs 0 upvotes
Tools7734

Tools & capabilities

Erd Editor tools 77

  • erd_list_documentsLists ERD documents with path, open, active, dirty and readonly. With an editor serving the working directory (the VS Code extension, the Obsidian plugin or the JetBrains IDE plugin) it lists that editor's, every open project's in a JetBrains IDE; otherwise the ERD files under the working directory.
  • erd_open_documentOpens a document for editing, in the ERD editor of the editor that serves it, if one does (the VS Code extension, the Obsidian plugin or the JetBrains IDE plugin). With create it makes the file first if missing; a name with no extension gets .erd.json.
  • erd_saveSaves a document an editor holds to disk. VS Code keeps edits unsaved until this is called; Obsidian and JetBrains IDEs save them as they save the user’s edits, and this writes them at once. On disk, with no editor, edits are written at once and this does nothing.
  • erd_undoReverts the last edit this agent made to the document, never the user’s edits. Calls that made no undo entry are skipped and named.
  • erd_redoApplies again the edit erd_undo last reverted.
  • erd_readReads a document as a snapshot, as DDL, as its raw JSON or, with the scripts format, its before and after scripts alone. The sql format of the whole document includes the document's before and after scripts. The sql format with tableIds, tableNames or groupNames gives the DDL of just those tables, the way to read a large schema; a read too large for one answer is refused with how to narrow it. For ids and details prefer erd_list and erd_get. Change a document only through the erd_ tools, never by writing its file.
  • erd_listLists a document: its settings and counts, then a page of tables, each with its id, position and size on the ERD canvas (the width approximate, the height exact), with their indexes and relationships (each relationship once, with one of its tables) and, for a table in a table group or with a logical name, its groupId or logicalName; after the tables come the table groups, the memos, then the rows of the domain, term and word dictionaries, each with its name and what it gives a physical name or column. A small schema fits in one page. On a larger one, nextOffset and note say how to go on: query finds tables by a word, namesOnly lists every table name in a call or a few. Columns, comments, memo text, the tables of a group and every field of a dictionary row come from erd_get; the foreign keys a table holds, from erd_read sql with tableNames.
  • erd_getGives the entities named, in full: tables with their columns and size, relationships with their columns, indexes with their columns, memos with their text, table groups with their tables, and words, terms and domains with every field. Ids and names that name nothing live are listed in missing; ids one answer has no room for are listed in notReturned, to ask for again.
  • erd_list_checksLists what the word, term and domain dictionaries find, as the Checks sheet of the editor's Dictionary tab does, and changes nothing. Errors: a name two rows of one dictionary share, a link to a domain the document does not list, a forbidden word in a logical name or a term's name. Warnings: a word no dictionary lists, a synonym used for a standard word, each in a logical name or a term's name, a physical name other than the one the term of its logical name gives, a column type other than its domain's. Each check names its target (a table, a column with its table, or a word, term or domain row) with its names, the field read, the text found and, where the dictionaries have them, the suggestions to use instead, and counts gives each code's total. The words, terms and domains come first in sheet order, then each table and its columns in document order. With no dictionary row nothing is checked. A long list comes a page at a time: pass nextOffset, or list again from offset 0 after fixing some, since a fixed check leaves the list.
  • erd_add_tableAdds an empty table at a free spot and returns its id in createdIds. Name it with erd_change_table_name.
  • erd_remove_tableRemoves a table with its columns, indexes and every relationship that touches it.
  • erd_change_table_nameRenames a table. The name is then its own: nameDerived goes off, so a later logical name leaves a name that is not empty as it is.
  • +65 more on the listing page

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.

Erd Editor

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "erd-editor": {
      "command": "npx",
      "args": [
        "-y",
        "@dineug/erd-editor-mcp"
      ]
    }
  }
}

Open MCP Apps

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

Frequently asked questions

Erd Editor 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 Erd Editor 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.

Erd Editor is listed as free. Auth: no auth required. 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 erd-editor and open-mcp-apps as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Erd Editor has a quality signal of 71/100 (Great) with 1 views, 0 installs and 1,730 GitHub stars. Open MCP Apps has 65/100 (Great) with 0 views, 0 installs and 36 GitHub stars.