ARC 1 vs Erd Editor
A side-by-side look at the ARC 1 and Erd Editor MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose ARC 1 for developer tools work as a local process; choose Erd Editor 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?
Choose ARC 1 when
- You need dedicated capabilities in the Developer Tools domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: other.
- You want tools like
SAPRead, SAPSearch, SAPNavigate.
Choose 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.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Developer Tools | Developer Tools |
| Quality signal | 63/100 · Good | 71/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | other | No auth required |
| Pricing | Free | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 238 | 1,730 |
| Directory activity | 0 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 9 | 77 |
| Full listing | View ARC 1 | View Erd Editor |
Tools & capabilities
ARC 1 tools 9
SAPReadRead SAP ABAP source, metadata and syntax results. For source purpose, explanations, specs, reviews or pre-change context, prefer SAPContext first. DDIC metadata: omit format (default text); structured is CLAS-only for ordinary reads. TABLE_QUERY: multi-column filters, data preview required; CDS needs SAP_BASIS 752+. TABLE_CONTENTS: single-column filter. INACTIVE_OBJECTS: no name. TABL/DTT: technical settings. SYNTAX: read-only SAP check (objectType+name, optional source for unsaved text). CLAS: method="*" for signatures, method="NAME" for one body, or grep. Global class declaration/implementation: MAIN (omit include). definitions/implementations contain local helpers.SAPSearchSearch for ABAP objects, exact object-directory entries, or source code. Modes: 1. Object search (default): name pattern with wildcards (*); returns type, name, package, description, ADT URI. 2. TADIR lookup (searchType="tadir_lookup"): exact cross-package lookup of one or more names (prefer over long SAPQuery TADIR IN-lists). 3. Source code search (searchType="source_code"): full-text search across source (SAP_BASIS ≥ 7.51). Tips: BOR objects appear as SOBJ; the uri field feeds SAPNavigate, objectType feeds SAPRead/SAPWrite/SAPActivate. Searches object NAMES only — for field names use SAPRead(type='DDLS', include='elements') or SAPQuery on DD03L.SAPNavigateNavigate code: definitions, references, completion, hierarchy. references: where-used objects by default; detail=positions/snippets adds bounded native usages; objectType filters results (e.g. CLAS/OC, PROG/P); type+name replaces uri. hierarchy queries SEOMETAREL for superclass/interfaces/direct subclasses: requires data/SQL opt-in + matching scope; otherwise inspect class MAIN with SAPRead. CDS (DDLS) impact: SAPContext(action="impact") classifies where-used into RAP buckets. Experimental relations: dependency maps or package neighborhoods, then selected reads. Consumer locations: references; objectType="CLAS/OC" for class-only; otherwise omit. Active metadata, not source-call/runtime proof. Coverage unknown. type+name required, no uri/source.SAPLintRun local abaplint rules on ABAP/CDS source (auto-selects cloud or on-prem rules by system type). Actions: - "lint": check source (errors+warnings) for ABAP (PROG/CLAS/INTF/FUNC) and CDS (DDLS). - "lint_and_fix": lint + auto-fix fixable issues (keyword case, obsolete statements); returns fixed source. - "list_rules": list rules + current config (no source). - "format": pretty-print via SAP's ADT formatter (needs source). - "get_formatter_settings" / "set_formatter_settings": read/update the system's global PrettyPrinter (indentation bool, style keywordUpper|keywordLower|keywordAuto|none; set is blocked read-only). lint/lint_and_fix/list_rules run locally; format/*_formatter_settings call SAP. Syntax: SAPRead(type="SYNTAX"); ATC/unit tests: SAPDiagnose.SAPDiagnoseABAP diagnostics: - "syntax": check objects[] (CLAS/INTF/PROG/DDLS; version active/inactive). Single: prefer SAPRead SYNTAX. - "unittest": harmless ABAP Unit for CLAS/PROG/FUGR or DEVC (exact; includeSubpackages recurses). - "unittest_ci": harmless package tests with source reconciliation; empty/incomplete runs fail. - "atc": ATC (name+type or objects [{type,name}], max 20). Omit variant for system default; unknown variant errors. "atc_variants": read variants/default, optional variant name filter. - "atc_ci": package ATC CI; requires available API and verified selection. - "cds_testcases": read suggested CDS Unit tests (name; SAP_BASIS 8.16+). - "object_state": active/inactive ETags/hashes/divergence (name+type; CLAS includes). No server-driven types. - "quickfix": proposals: name+type+source+line; optional column/sourceUri. - "apply_quickfix": text deltas, no save; quickfix inputs + proposalUri/proposalUserContent. - "dumps": ST22, newest: user/from/to/maxResults/filters; id=detail. - "feed_schema": optional dump filters; action only. - "traces": list profiler traces; id+analysis analyzes one. - "trace_start": arm NEXT matching execution (write; defaults HTTP, SQL on); reproduce, then read "traces". - "trace_requests": list armed traces. "trace_cancel": cancel by id (write). - "system_messages": list SM02 messages. "gateway_errors": list /IWFND/ERROR_LOG (on-prem; detailUrl or id+errorType for detail). - "odata_perf": read OData timing (url: host-relative; DB/ABAP/framework/auth); needs allowDataPreview. - "authorization_trace": read STUSERTRACE/SUAUTHVALTRC (on-prem; needs SAP_ALLOW_DATA_PREVIEW). - "cds_sql": read CDS native SQL (name). - "sql_trace_state" / "set_sql_trace_state" (sqlOn; needs SAP_ALLOW_WRITES) / "sql_trace_directory": ST05 SQL-trace control. Quickfix: syntax/ATC → quickfix → apply_quickfix → SAPWrite.SAPContextPrimary tool for understanding ABAP/CDS objects before specs, reviews, explanations, or changes — use instead of SAPRead when the user asks what an object does. Returns intent first (the object KTD when available) then compressed dependency contracts. Use SAPRead after SAPContext for exact source/method bodies/grep/drafts. Decision rule — pick the action from the user's question: - "What breaks if I change <CDS>?" / "Who consumes <I_*>?" / "Blast radius" → action="impact" (DDLS only). - "Which includes/appends extend <TABL>?" → action="structure", type="TABL". - "What does <object> do?" / "Explain" / "deps before editing" → action="deps" (default); type+name required. - "Find all callers of <object>" → action="usages" (live SAP where-used lookup). impact (CDS blast-radius): upstream AST deps + downstream where-used, classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other) + sibling-consistency hints. Use this instead of text-scanning DDDDLSRC/ACMDCLSRC with SAPQuery (it filters the noise). Optional includeIndirect, siblingCheck, siblingMaxCandidates. deps: target KTD when available + selected dependency contracts, derived from source (not SAP-native relationships or a complete inventory). Counts distinguish root candidates from recursive attempts. Standard helper names are filtered. For CDS, includes dependency DDL/field catalogs for cl_cds_test_environment. structure (TABL only): the DDIC include/append tree. Non-CDS reverse-lookup: SAPNavigate(references); CDS: impact. Full detail: docs_page SAPContext.SAPManageProbe and report SAP system capabilities. Use BEFORE operations that depend on optional features (abapGit, RAP/CDS, AMDP, HANA, UI5/Fiori, CTS transports, FLP). Also handles package (DEVC) lifecycle. Actions: - "features": cached feature status (fast, no round-trip; id, available, mode, probedAt). "probe": re-probe now (feature probes + auth + discovery refresh). "cache_stats": object cache health. - "create_package" / "delete_package" / "change_package": DEVC lifecycle via ADT packages API. - FLP read: flp_list_catalogs, flp_list_groups, flp_list_tiles (catalogId). FLP write: flp_create_catalog, flp_create_group, flp_create_tile, flp_add_tile_to_group, flp_delete_catalog. Classic designer tile/target-mapping model, deprecated since S/4HANA 2023; Work Zone exposure v2 needs LADIs (SAPRead type=UIAD). - "set_api_state": release/revoke an object's API release contract (objectUri, or name+objectType; apiState defaults RELEASED, contract defaults C1 — C0 for SRVD, C3 for classic views). Write counterpart of SAPRead(type="API_STATE"). Returns features + systemType ("onprem"/"btp"); "available: false" means do NOT attempt dependent operations.SAPTransportManage CTS transport requests (SE09/SE10). Actions: list (current user, modifiable), get (tasks + objects), create (always a Workbench (K) request — the package/target sets target & layer, not the request category; optional explicit target), release, delete, remove_object (keep the request), reassign (change owner), release_recursive (tasks then parent), check (does a package need a transport — type, name, package), history (legacy name: current object lock plus assignment candidates — type, name; not complete transport history; read-only, no write scope needed). IDs look like A4HK900123. Status: D/L=modifiable, O/P=releasing, R/N=released.SAPGitGit reads and gated abapGit workflows. gCTS mutations are quarantined. abapGit mutations need write/Git gates and allowedPackages ROOT/** or *; clone/pull evidence is unverified. external_info is gated HTTPS SAP egress.
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
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.
ARC 1
{
"mcpServers": {
"arc-1-2": {
"command": "npx",
"args": [
"-y",
"arc-1@latest"
]
}
}
}
Erd Editor
{
"mcpServers": {
"erd-editor": {
"command": "npx",
"args": [
"-y",
"@dineug/erd-editor-mcp"
]
}
}
}
Frequently asked questions
ARC 1 is categorized under Developer Tools and uses a local stdio subprocess. Erd Editor belongs to Developer Tools and uses a local stdio subprocess. Pick ARC 1 for developer tools work and Erd Editor 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.
ARC 1 is listed as free. Auth: other. Erd Editor is listed as free. Auth: no auth required. 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 arc-1-2 and erd-editor as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, ARC 1 has a quality signal of 63/100 (Good) with 0 views, 0 installs and 238 GitHub stars. Erd Editor has 71/100 (Great) with 1 views, 0 installs and 1,730 GitHub stars.