PackagePackagetypeA library you install and call yourself.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

@arc-mcp/adt-ls

A TypeScript SDK over adt-ls, the headless language server SAP ships inside ABAP Development Tools for VS Code, so a program drives it without the discovery, JVM and handshake work.

SAP's adt-lsc runs inside the sapse.adt-vscode extension and speaks LSP over a named pipe, and reaching it means discovery, a JVM, the handshake, the reentrance logon and TLS before a single object is read. createAdtLs() does that and returns one namespaced client: repository for object search and file access, source and lifecycle for create, update, activate, unit tests and delete, navigation for hover, completion, references and pretty-printer formatting, quality for ATC and ABAP Unit coverage, services and transport, and raw for any adt-ls call it does not wrap. The credential is a strategy the caller passes: basic for an on-premise fixed user, bearer for BTP ABAP, an interactive sign-in the consumer opens itself, or clientCert for X.509 mutual TLS. Its scope section draws the line at adt-ls alone, with no direct ADT HTTP, no MCP server and no Cloud Connector bridge inside the library, which is the layer arc-1-lsp and abapify/openadt keep for themselves; the README names both as the first-party duplication the library was written to end. The runtime is not shipped with it, because adt-ls comes under the SAP Developer License and is not redistributable.

Facts

Latestv0.7.0ReleasedLast pushLicenceApache-2.0

Where it sits

Lives in
Provides
Editor supportABAPEditor supportcapabilityWorking in source code with the editor helping rather than treating it as text — completion, go-to-definition, inline errors, refactoring and preview.
Requires
ABAP Development Tools for VS CodeABAP Development Tools for VS Codeartifactthe sapse.adt-vscode extension, which ships the adt-lsc runtime the library discovers and starts; it is licensed to the installer rather than redistributed with the package

Who is behind it

ARC MCPARC MCPOrganisationMaintains this
In the atlas: maintains 9
@arc-mcp
Marian ZeisMarian ZeisPersonMaintains this
In the atlas: maintains 35, contributes to 86, wrote 25
@marianfoo
maintainers

Before choosing this

Conditions

PracticalFunctional boundary

What adt-ls cannot do headless the maintainer puts out of scope, so a consumer that needs an ADT call the language server does not expose is back to speaking ADT itself. The README states the current runtime compatibility as verified on macOS arm64, against adt-ls 1.1.2 as the minimum and 1.1.2.202608131517 as the version tested. An Eclipse installation does not supply that runtime: SAP versions the two separately, so the VS Code extension has to be installed even where nobody opens VS Code.

What it declares

Every artifact

Type
Package
Origin
Independently maintained
Runtime
Node.js

As a package

Where it runs
In your own program
Distributed through
npm

Connections4

Install

npm add @arc-mcp/adt-ls

Derived from the package name. No recipe recorded; the README has the configuration.

Where it sits in your app

Download
Your program (Node.js)Your SAP BTP subaccountadt-ls README, checked 2026-10-18: “headless OAuth bearer (BTP ABAP / Steampunk).”OAuth 2.0, outboundadt-ls README, checked 2026-10-18: “against a real S/4HANA system”outbounddocumentedrequiresSAP S/4HANA, SAP solutionSAP S/4HANASAP solution@arc-mcp/adt-ls, module@arc-mcp/adt-lsABAP Development Tools for VS Code, moduleABAP DevelopmentTools for VS CodeSAP BTP ABAP environment, service instanceSAP BTP ABAPenvironment
SAPnot SAP's, or the project's ownauthenticationstated in the documentdocumented only

README

quoted from arc-mcp/adt-ls under Apache-2.0, read
arc-mcp/adt-ls/README.mdOn GitHub

@arc-mcp/adt-ls

npm license: Apache-2.0

Generic, reusable TypeScript SDK over SAP's headless adt-ls — the adt-lsc language server shipped inside the official sapse.adt-vscode extension. It hides the painful setup (discovery, JVM, named-pipe + LSP handshake, reentrance logon, TLS/truststore, session resilience) so that driving adt-ls is a few lines of code.

Status: published on npm; current runtime compatibility verified on macOS arm64. The full SAP authoring lifecycle (search → create → update → read → activate → run-tests → delete), plus code intelligence, quality gates, ABAP formatting, transport, and OData service info, all run end-to-end through createAdtLs() against a real S/4HANA system (adt-ls 1.1.2.202608131517). Runs under Node ≥ 20 and Bun (both verified live).

Install

npm install @arc-mcp/adt-ls

You bring adt-ls (SAP Developer License — not redistributable): install the sapse.adt-vscode extension (VS Code / Cursor) and the library auto-discovers it, or vendor the per-platform VSIX for CI. New here → docs/setup.md: which platform build to download, CI vendoring, and connecting with auth. Eclipse users: Eclipse ADT and the headless runtime have separate versions. Your Eclipse installation does not supply this SDK's runtime; install/update SAPSE.adt-vscode as described above. Current compatibility research and migration notes.

This release requires adt-ls >= 1.1.2 and is verified against 1.1.2.202608131517.

Quickstart

import { createAdtLs, basic } from '@arc-mcp/adt-ls';

const adt = await createAdtLs({
  connection: { systemUrl: 'https://my-s4:50001', selfSigned: true, client: '001' },
  auth: basic('DEVELOPER', process.env.SAP_PW!), // or bearer(token) / interactive({ openUrl }) / clientCert({ cert, key })
});

const hits = await adt.repository.search('CL_ABAP*', { types: ['CLAS/OC'] });
const src = await adt.source.read({ name: 'ZCL_FOO', objectType: 'CLAS/OC' });

await adt.lifecycle.create({ objectType: 'CLAS/OC', name: 'ZCL_BAR', packageName: '$TMP', description: 'demo' });
await adt.lifecycle.activate({ name: 'ZCL_BAR', objectType: 'CLAS/OC' });

await adt.dispose();
Auth strategies

The on-the-wire logon is always a reentrance ticket; auth supplies the credential:

  • basic(user, password) — headless user/password (on-prem fixed user).
  • bearer(token | getToken) — headless OAuth bearer (BTP ABAP / Steampunk).
  • interactive({ openUrl }) — the consumer opens the SSO URL; a human signs in (the lib ships no browser/TTY).
  • clientCert({ cert, key }) — passwordless X.509 mutual TLS, no browser. The reverse proxy presents the client cert on every upstream hop, so the backend authenticates the TLS connection itself and the reentrance handler runs with no credential. Requires connection.selfSigned. Server-side this is the standard AS ABAP X.509 client-certificate logon
    • rule-based mapping (CERTRULE); it needs no KDC and no license (unlike Kerberos/SPNEGO). In an enterprise the cert is typically issued by SAP Secure Login Service (often from a Kerberos/SAML logon) or a corporate PKI. Consumers wire the cert source + server setup; arc-1-lsp ships a full guide.
import { createAdtLs, clientCert } from '@arc-mcp/adt-ls';
import { readFileSync } from 'node:fs';

const adt = await createAdtLs({
  connection: { systemUrl: 'https://my-s4:50001', selfSigned: true, client: '001' },
  auth: clientCert({ cert: readFileSync('client.crt'), key: readFileSync('client.key') }),
});
Low-level building blocks

Consumers that drive adt-ls themselves — e.g. proxying its MCP endpoint to external agents — can skip createAdtLs() and use the primitives directly (this is what abapify/openadt adopts):

import { resolveAdtLsPath, AdtLsDriver, startMcpServer } from '@arc-mcp/adt-ls';

const driver = new AdtLsDriver(resolveAdtLsPath(), {
  extraArgs: ['-consoleLog', `-Djco.middleware.snc_lib=${sncLib}`], // SNC/JCo JVM flags
});
await driver.start(); // discovery + spawn + LSP initialize (short pipe; macOS-safe)
// register your own logon handlers: driver.setRequestHandler('adtLs/destinations/requestBrowserBasedLogon', …)
const { port, token } = await startMcpServer(driver, { port: 2240, token: myToken });
// → proxy http://localhost:${port}/mcp (Authorization: Bearer ${token}) however you like
await driver.dispose();

Capabilities

One namespaced client over both adt-ls channels (LSP + its own MCP) — the split is hidden:

  • capabilities() — fresh LSP providers and all MCP tool contracts, including schemas and annotations.
  • repository — object search, file read/write/delete, inactive-object list, name→URI resolver.
  • source / lifecycle — read; create, update, activate (native — per-phase diagnostics, forceActivation), run unit tests, delete; RAP generators; creatable-type catalog + creation-form (legal values per field), type-specific creation fields + validation.
  • navigation — document symbols, definition/declaration, references, type hierarchy, hover, completion (with resolve → method signatures + ABAP-Doc), syntax check, semantic tokens, and ABAP Pretty-Printer formatting.
  • quality — ATC static analysis + ABAP Unit code coverage.
  • services — run a console app, service-binding details/publish, and live OData service info (URL + entity sets).
  • transport — find / create / assign / list, lock status, and the transport decision oracle (check), and paged transport diffs (getDiff, backend-dependent).
  • raw — escape hatches to any adt-ls MCP tool or LSP method.

What maps to which adt-ls call: the capability matrix. What's reachable headless vs. not (with live evidence): the capability survey.

Documentation

  • Setup guide — start here: where to get the binary, which platform build, CI vendoring, and connecting with auth.
  • 📖 API reference (hosted) — the full TypeDoc site, auto-published to GitHub Pages on every push to main.
  • Usage guide — connecting, auth, the full API with examples, resilience, logging.
  • Use cases — dev-tool & CI/CD recipes (ABAP Unit gate, ATC, syntax check, MCP server, scaffolding) with the API to use.
  • API reference (Markdown) — the same reference rendered in-repo (npm run docs:api).
  • Capability matrix — the method surface + the object-type support boundary.
  • adt-ls capability survey — what the live binary offers vs. what's wrapped, and the known coverage gaps.
  • ADRs — the architecture decisions (0001–0013).

Why this exists

Two first-party projects already drive headless adt-ls and reimplement the same fragile, reverse-engineered plumbing: abapify/openadt (its @openadt/sap-adt-mcp-launcher) and arc-1-lsp (src/adt-ls/*). Both encode the identical landmines (the userAgentInfos NPE, HTTPS-only + hostname verification, silent session death, the reentrance-ticket dance). The fragmentation that actually hurt here is first-party duplication, and the cure is one shared library.

The thesis: adt-ls is the correct path (SAP-maintained CSRF/locking/activation/XML), but its setup is so much harder than calling ADT REST directly that people avoid it. This library makes adt-ls as easy to use as a plain API, so the easy choice is also the right one.

Scope — the hard line

adt-ls ONLY. No direct ADT/SAP HTTP, no SAP ADT SDK sidecar, no MCP server, no Cloud-Connector/BTP bridge inside the library. What adt-ls can't do headless is out of scope. See ADR-0001.

Current verification (2026-09-11)

Target: adt-ls 1.1.2.202608131517, bundled SAP Machine 21.12.0, macOS arm64, A4H over HTTPS port 443. The library's minimum runtime is 1.1.2 because activation, ABAP Unit, inactive-object listing and deletion contracts changed after the old baseline.

The test suite checks the real LSP handshake and presence of the MCP authoring tools; backend tests cover create/update/read/activate/test/delete, code intelligence, creation forms, service info, dictionary source and ABAP Unit coverage. Failure-path tests cover startup cleanup and MCP JSON/SSE, pagination, errors and timeouts.

See research and validation for measured results and the remaining platform/backend boundaries. This is not a claim of full Eclipse feature parity.

Consumers

  • arc-1-lsp — replaces its src/adt-ls/* entirely; keeps its own MCP server, BTP/Cloud-Connector bridge (via the connection.forwardProxy hook), authz, and write-safety as thin wrappers over the lib.
  • openADT — its TypeScript launcher core can converge onto this lib.
Apache-2.0, read

History

Latest

v0.7.0

Features 3, Fixes 4

Notes
Features
  • lifecycle: optional uri on ObjectRef skips the name search (#29) (783588e)
  • repository: typed readDirectory (#27) (132116c)
  • source: read active source versions safely (#28) (a7c52ac)
Bug Fixes
  • lifecycle: keep choice-field values in getCreationForm (#25) (e8d78b8)
  • repository: use the main type for subtypes adt-ls can't filter (#26) (9ca86dc)
  • services: refuse getServiceInfo on an un-published binding (#24) (dc961c8)
  • transport: name SAP's reason when the assign lock check fails (#23) (e3272b2)
  1. v0.6.1

    Fixes 1

    Notes
    Bug Fixes
    • use Node 24 for npm trusted publishing (#21) (f9cb9b4)
  2. v0.6.0

    Features 1, Fixes 5

    Notes
    Features
    • support current ADT 1.1.2 runtime contracts (#8) (72f788e)
    Bug Fixes
    • auth: send the destination client on ticket requests and honor the default client (#15, #16)
    • lifecycle: resolve subtyped references through their main type (#11)
    • lifecycle: reject transport backend refusals and incomplete results (#12, #18)
    • services: publish from binding details and reject empty bindings (#14, #17)
    • transport: verify assignments against CTS locks and reject failed checks (#13, #20)
  3. v0.5.0

    Features 1

    Notes
    Features
    • auth: clientCert — passwordless X.509 mutual-TLS logon (#6) (1f13553)
  4. v0.4.2

    Fixes 1

    Notes
    Bug Fixes
    • require adt-ls 1.0.1 baseline (f1853a0)
  5. v0.4.1

    Fixes 1

    Notes
    Bug Fixes
    • resilience: revive + retry a stateful write that races a session death (#3) (557f1ff)
  6. v0.4.0

    Features 3, Fixes 1

    Notes
    Features
    • lifecycle: getCreationForm — per-field legal values (value-help types + name regex) (96977e1)
    • live-verified capabilities — formatting, native activate, transport check, completion resolve, semanticTokens (5049f1a)
    • services: SRVB service info — listServices + getServiceInfo (OData URL + entity sets) (048e406)
    Bug Fixes
    • resilience: self-heal repository.search + raw.tool/LSP on session loss; honest backendLive (af2d272)
  7. v0.3.0

    Features 1

    Notes
    Features
    • typed metadata methods (destinations, creatable objects, generators) (0b5fa19)
47downloads per week, npm
Weekly downloads for @arc-mcp/adt-ls26 complete calendar weeks from 2026-04-20 to 2026-10-18; the latest total is 47.20 Apr – 26 Apr: 027 Apr – 3 May: 04 May – 10 May: 011 May – 17 May: 018 May – 24 May: 025 May – 31 May: 01 Jun – 7 Jun: 08 Jun – 14 Jun: 015 Jun – 21 Jun: 14222 Jun – 28 Jun: 829 Jun – 5 Jul: 156 Jul – 12 Jul: 813 Jul – 19 Jul: 920 Jul – 26 Jul: 527 Jul – 2 Aug: 103 Aug – 9 Aug: 510 Aug – 16 Aug: 517 Aug – 23 Aug: 624 Aug – 30 Aug: 931 Aug – 6 Sept: 87 Sept – 13 Sept: 314 Sept – 20 Sept: 3721 Sept – 27 Sept: 19428 Sept – 4 Oct: 2095 Oct – 11 Oct: 2212 Oct – 18 Oct: 47
Editor support
  1. abap-adt-apiJS/TS client for the ADT resources of an ABAP systemfrom ABAP
  2. abap2UI5 PlaygroundIn-browser ABAP editor beside the abap2UI5 app it buildsfrom ABAP
  3. abap2UI5 for VS CodeVS Code extension to preview, activate and lint abap2UI5 appsfrom ABAP
  4. vscode-tabl-ddicVS Code syntax highlighting for .tabl.ddic table definitionsfrom ABAP
  5. HammerNative macOS code editor for ABAP and CDSfrom ABAP
  6. cds-eclipse-pluginEclipse plugin for the CDS languagefrom CAP
  7. abapthemesThree colour themes for ABAP source in ADT for Eclipsefrom ABAP
  8. SAP Build CodeDevelopment environment on BTP for UI5, Fiori, mobile and CAPfrom BTP/BAIP
  9. SAP Business Application StudioBrowser-based development environment with dev spacesfrom BTP/BAIP
  10. SAP Web IDE Full-StackIDE service on SAP BTP for SAPUI5, Fiori and full-stack appsfrom BTP/BAIP
  11. cds-intellijSAP CDS language support for IntelliJ IDEAfrom CAP
  12. Cloud ALM Link for ADTEclipse plugin linking ABAP transports to SAP Cloud ALM featuresfrom ABAP
  13. ABAP Call HierarchyEclipse plugin showing the call hierarchy of ABAP membersfrom ABAP
  14. abap-call-hierarchyADT backend for the ABAP Call Hierarchy Eclipse pluginfrom ABAP
  15. abap-tags-backendADT backend for the ABAP Tags Eclipse pluginfrom ABAP
  16. ABAP TagsEclipse plugin for tagging ABAP repository objectsfrom ABAP
  17. BellaEclipse plugin bringing Claude into ABAP Development Toolsfrom ABAP
  18. ABAP Syntax HighlightingVS Code syntax highlighting for .abap filesfrom ABAP
  19. abapfs_extensionsABAP objects enabling ADT updates on systems older than 7.51from ABAP
  20. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
  21. ABAP Development Tools for EclipseSAP's Eclipse plugins for ABAP development over ADTfrom ABAP
  22. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code for editing, debugging, ATC and transportsfrom ABAP
  23. @sap/cds-lspLanguage server for CDSfrom CAP
  24. cds-textmate-grammarTextMate grammar for the CDS languagefrom CAP
  25. @sap/ux-cds-odata-language-server-extensionOData annotation features for the @sap/vscode-cds extensionfrom CAP
  26. @sap/vscode-cdsCDS language support for VS Code and Business Application Studiofrom CAP
  27. vscode-ui5-language-assistantVS Code extension for SAPUI5 and OpenUI5 XML views and manifestfrom UI5
  28. @saptools/hana-lensWorkspace-wide CSN cache for querying CAP entities and columnsfrom CAP
  29. @saptools/sqltoolsSQLTools connection from a Cloud Foundry app's HANA bindingfrom BTP/BAIP
  30. zed-cds-extensionCDS language support for the Zed editorfrom CAP
  31. my-ide-actionsCollection of ABAP Development Tools IDE Actionsfrom ABAP

Details

Sources4
GitHub APIdiscovered here, arc-mcpchecked
npm registry, @arc-mcp/adt-lsversion, releases, installschecked
github.com/git+https://github.com/arc-mcp/adt-ls.gittree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
latestv0.7.0
first release
releases and cadence3, ~98d median
discovered viaGitHub API · arc-mcp
first seen in the atlas
ecosystem and domainabap, developer-experience
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:arc-mcp-adt-ls
JSON
/artifacts/arc-mcp-adt-ls.json
MCP
Connecting an agent