The objects land in the studio's own runtime in abapGit layout, not in an ABAP system: reaching one means exporting the app as an abapGit repository, with the studio's abapGit button or its abapgit command, and pulling it in, and importing that export into a real system has not been tried yet. The build itself writes no service binding: the runtime serves the service from its definition, and the export is the step that writes one binding per service. The chat needs a Claude Code CLI installed and logged in on the same machine, which RAP Studio starts headless in the app folder; other agents are not supported yet.
RAP Studio
A local ABAP runtime with a browser workbench: RAP sources in abapGit layout are activated on Node.js, kept in SQLite or PostgreSQL and served as OData V4 and V2 to SAP Fiori elements and SAPUI5 apps, with no SAP server attached.
RAP work normally needs a system to activate against: a SAP BTP ABAP environmentSAP BTP ABAP environmentSAP's ABAP runtime on BTP: ABAP systems developed in the ABAP Cloud model on SAP HANA Cloud, for cloud apps, OData services and side-by-side extensions of SAP S/4HANA.sap official, btp or an S/4HANA client for the CDS, the behavior definition and the handler classes. RAP Studio activates the same sources on Node.jsNode.jsA cross-platform JavaScript runtime that servers, command line tools and scripts written in JavaScript are run with. For the things here, the prerequisite a repository names when its build is a set of npm scripts. and keeps them in abapGitabapGitA Git client written in ABAP that runs inside the system, so objects are cloned, pulled and pushed without leaving it; with no package manager in ABAP, a cloned repository is how code is distributed.community org, abap layout: CDS view entities become real database views in SQLiteSQLiteAn embedded SQL database engine used as a selectable local cache store by CAP caching plugins. or PostgreSQLPostgreSQLA relational database. For CAP it is the production database when the answer is not HANA, reached through an adapter that translates CDS queries into its SQL., writes go through the RAP transaction buffer, where determinations and validations run before the save sequence writes one database transaction, and each service is served as OData V4 with the draft protocol and again as OData V2 at the SAP Gateway URL. A second engine, built from open-abap-coreopen-abap-coreReusable ABAP functionality for code transpiled by @abaplint/transpiler: the core ABAP artifacts that code runs against on Node.js.community org, abap, open-abap-guiopen-abap-guiA library of GUI controls for ABAP transpiled to JavaScript, such as cl_gui_alv_grid and cl_gui_html_viewer, marked work in progress in its README.community org, abap and @abaplint/transpiler@abaplint/transpilerTranspiles ABAP 7.02 syntax to ES6 JavaScript, so ABAP code and its unit tests run on Node.js in CI without an ABAP system, with optional SQLite, PostgreSQL, Snowflake or SAP HANA drivers.community org, abap, runs classic programs on the same database: reports with selection screens and ALV, module pools with dynpros, function groups, background jobs, application logs and Adobe print forms. Every system also carries an SAP standard layer of 341 tables and 202 released CDS views with seed data, so ABAP Cloud code can read I_Customer where a classic program reads KNA1. The workbench in the browser holds the code editor, a debugger, the code checks, an SQL trace and a data preview, and its abapgit command writes an app out as an abapGit repository to pull into a real system.
Facts
Where it sits
Who is behind it
In the atlas: maintains 1@NabheetCloudmaintainer
Before choosing this
Conditions
PracticalFunctional boundary
The SAP standard layer's definitions are RAP Studio's own with a subset of SAP's fields, so a field has to be checked against a real system before anything relies on it, and importing the abapGitabapGitA Git client written in ABAP that runs inside the system, so objects are cloned, pulled and pushed without leaving it; with no package manager in ABAP, a cloned repository is how code is distributed.community org, abap export into a real SAP system has not been tried yet. Client fields (abap.clnt) are dropped, which makes a system single tenant, SET LOCKS is a no-op, and precheck and function in a behavior definition are parsed without being run. Building by chat works only with a local Claude Code CLI; other agents are not supported yet.
PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your codeAn MCP server calls ADT or another SAP API of a running system for an agent.
- § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
- § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
- § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.
An agent that plans and executes ADT calls is the case section 2.2.2 names. Check that the endpoints are published for the intended use, and that the design runs within a pathway SAP identifies for it.
SAP API Policy 4.2026a →What it declares
Every artifact
- Type
- App
- Origin
- Independently maintained
- Runtime
- Node.js
As an app
- Where it runs
- does not say
- Distributed through
- does not say
For OData
- Protocols
- odata-v4odata-v2
For agent access to ABAP code
- Read
- sourcesearchwhere-usedDDICCDStable data
- Change
- writecreateactivatetransportsgit
- Check
- syntaxATCABAP Unit
- Run
- run codedumps
Tasks this contributes to
Create the RAP objects for a service and activate themAn agent takes a description of a business object and creates the table, the CDS view, the behaviour definition, the service definition and the service binding in the system, and activates them.
Connections
Letting a coding agent read and act on your project or system
Seeing what running code did between input and result
Running the whole stack on a laptop against real bindings
Exposing data and operations through OData
Catching problems in code before execution
The host SAP serves the SAPUI5 SDK from, and where ui5-task-check-eocpui5-task-check-eocpA UI5 builder task that matches the UI5 version in ui5.yaml against the versions retrieved from ui5.sap.com and warns during the build once that version's End of Cloud Provisioning quarter has been reached.independent, ui5 retrieves the list of UI5 versions available to match a project's declared version against.
Static analysis for ABAP source outside a system
Transpiles ABAP to JavaScript to run on Node.js
Shim running an ABAP ICF handler behind an Express 4.x server
Application logging for ABAP transpiled to JavaScript on Node.js
Core ABAP artifacts for code transpiled by @abaplint/transpiler
GUI controls for ABAP transpiled to JavaScript
Concurrent and cross-session locking for open-abap on PostgreSQL
Standalone PDF generator written in ABAP
A relational database. For CAP it is the production database when the answer is not HANA, reached through an adapter that translates CDS queries into its SQL.
An embedded SQL database engine used as a selectable local cache store by CAP caching plugins.
Download
Install
npm add RAP StudioDerived from the package name. No recipe recorded; the README has the configuration.
README
quoted from NabheetCloud/ABAP-Runtime under Apache-2.0, readRAP Studio — an open runtime for SAP RAP applications
Build, run and change end-to-end RAP / SAP Fiori applications without an SAP server, by chatting or by hand. You (or the AI agent) write standard ABAP RAP sources: CDS, behavior definitions, behavior pools, projections, metadata extensions and service definitions. RAP Studio activates them on Node.js, stores data in SQLite or PostgreSQL, and serves real OData V4. Real SAP Fiori elements and SAPUI5 apps run against it. The sources stay in abapGit layout, so the same files can later be pulled into SAP BTP ABAP environment or S/4HANA.
apps/<app>/ one folder per application
CLAUDE.md platform rules for the AI agent
src/ztravel_a.tabl.cds define table ... (or abapGit .tabl.xml)
src/zr_travel.ddls.asddls define root view entity ... composition / association
src/zr_travel.bdef.asbdef managed behavior definition with draft, side effects, actions
src/zbp_r_travel.clas.locals_imp.abap behavior handlers (determinations, validations, actions, features)
src/zc_travel.ddls.asddls / .bdef projection layer
src/zc_travel.ddlx.asddlxs @UI annotations (metadata extension)
src/zui_travel.srvd.srvdsrv service definition
data/*.json seed data
webapp/<ui>/ SAP Fiori elements / SAPUI5 apps
.rap/ the app's database (not part of the sources)
What is supported
| Area | What you can build, run and debug |
|---|---|
| RAP | managed and unmanaged business objects, draft and collaborative draft with locks, early and late numbering, unmanaged / additional save, determinations, validations, actions, side effects, feature control, authorizations, ETags, business events, change documents, behavior extensions, custom entities, CDS parameters, table functions, hierarchies, access controls, attachments, ABAP Unit |
| OData and UI | OData V4 (with $batch, $apply, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps |
| Dictionary, by hand | domains (fixed values, value tables, CURR / QUAN), data elements with or without a domain, structures, table types, database tables (field grid, check tables, currency / quantity references, technical settings), lock objects, message classes, exception classes (T100) |
| Classic programs, by hand | reports (selection screens, text elements, WRITE lists with colors, ALV), function groups and function modules (parameter editor, test page like SE37), module pools (screen painter with dictionary field picker, table-control and tabstrip wizards, GUI status, transactions), classes used from all of them, lock objects with ENQUEUE_/DEQUEUE_, background jobs, application logs |
| Print forms | SAP Adobe forms: form interfaces, a visual layout designer, Adobe LiveCycle XDP import, live PDF preview, print programs (FP_JOB_OPEN / form function module / FP_JOB_CLOSE) and the ABAP Cloud form APIs, output queue |
| Developer tools | debugger (breakpoints in classes, reports, FORMs, function modules and PAI modules; step into / over / return; watches; variables, call stack, system fields), runtime errors like ST22, SQL trace like ST05, code checks like ATC, SAP's ABAP cleaner, data preview like SE16 |
| System | SQLite or PostgreSQL, apps that share master data like one SAP system, an S/4HANA standard layer (341 tables, 202 released views, with data), users, roles and authorizations, abapGit export |
| Learning | Practice ABAP: 54 exercises with ABAP Unit tests, checks and clean-up |
Everything runs on your machine with Node.js: no SAP server and no cloud account. The sections below give the details.
Quick start
You need Node.js 22.5 or later and git. Tested on macOS and Linux; on Windows use WSL.
git clone https://github.com/NabheetCloud/ABAP-Runtime.git
cd ABAP-Runtime
npm install
npm run setup
npm run studio
npm run setup installs the classic ABAP engine (reports, module pools, function modules) once. Open
http://localhost:4004: open one of the demo apps (Travel, Purchase orders, Classic ABAP Showcase, …), start a blank app
and build it by hand, or describe an app to the build agent (needs the Claude Code CLI, see below).
Or without cloning: npx rap-studio (then npx rap-studio setup for the classic engine).
The chat (describing an app to the build agent) needs the Claude Code CLI installed and logged in on this machine; see Building by chat. Building by hand needs nothing else.
The studio listens on this machine only (127.0.0.1). To reach it from other machines, create an administrator and
start it with --host 0.0.0.0; see SECURITY.md.
Building by chat (with your local Claude Code CLI)
For now the chat works only with a local Claude Code CLI. The build agent behind the chat (new-app prompts, the app chat, "Fix with AI") is the Claude Code command line tool, installed on your machine and logged in to your own account; RAP Studio starts it for you and uses your account. Without it everything else works: build apps by hand with + New, run, debug, check and preview them. Other agents are not supported yet. If
claudeis not on your PATH, setRAP_CLAUDE_BINto its full path.
- The studio creates
apps/<name>/with aCLAUDE.mdthat teaches the agent the platform rules and points it at the reference app (examples/travel). - It runs your local Claude Code CLI headless in that folder (
claude -p … --output-format stream-json, continuing the conversation with--resume). The CLI may only edit files and run the platform's own commands:rap check(activation + abaplint),rap run(console classes),rap fiori(generate Fiori apps) andrap odata(calls the app's OData service on the local studio). - Every step streams into the chat: plan, files created and edited, checks run.
Attach documents and screenshots to any message (📎, paste or drag and drop: images, PDFs, Word, Excel, PowerPoint,
text files; up to 10 files of 25 MB). They are kept in the app's
.rap/attachments; the agent reads them with the message (Office files as extracted text): specifications for the requirements, mockups and screenshots for what to build, screenshots of errors for what to fix. - Every file change re-activates the app. The workbench tabs are Preview (the running app: the built-in UI, generated
Fiori elements apps, UI5 apps), Code (Monaco: ABAP, CDS, BDEF, UI5 XML/JS; editable), Problems (compiler and
abaplint findings, with "Fix with AI"), Data (tables and views) and Console (
if_oo_adt_classrun). - Download returns the app as a zip of abapGit-layout sources.
Example result: the prompt "a library app to manage books and loans…" produced 17 RAP objects with 0 errors in about 4 minutes. A follow-up "add an optional, validated member email" changed tables, views, BDEF, handler, message class and annotations, and migrated the existing data in place.
SAP Fiori elements and SAPUI5
Each service is a full OData V4 service at /a/<app>/odata/<service>/:
$metadata(EDMX) withUI,Common,Capabilities,Aggregation,Measuresannotations generated from CDS annotations and the BDEF. That covers line items, facets, field groups, selection fields, header info, value lists, text arrangements, currencies, side effects, draft root/node, operation availability from instance feature control, insert/update/delete restrictions, charts and aggregation.$batch(multipart with atomic change sets and Content-ID references, and JSON batch),$apply(filter,groupby,aggregate;$filterapplies to its result, as OData V4 defines),$filter,$search,$expandwith nested options,$count,/$count.- The draft protocol:
IsActiveEntity,HasDraftEntity,SiblingEntity,DraftAdministrativeData, and the Edit / Prepare / Activate / Discard / Resume actions.
Generate a Fiori elements app (or use + Fiori app in the studio's Preview tab):
node bin/rap.js fiori apps/travel --template lrop --service zui_travel --entity Travel --name travel-fe
| Template | Verified in the browser |
|---|---|
lrop List Report + Object Page | list with draft editing-status filter, value helps, actions enabled per instance; object page with facets; Edit → draft → live recalculation via side effects → Save (Prepare + Activate) |
worklist | list without filter bar |
alp Analytical List Page | chart + table from $apply, measures from @Aggregation.default, chart from @UI.chart |
fpm Flexible Programming Model | custom XML view with FilterBar / Table building blocks |
ovp Overview Page | runs in the SAP Fiori launchpad sandbox; list and table cards from @UI.lineItem, analytical chart cards from @UI.chart, global filter bar |
freestyle SAPUI5 | your own UI as a real component: list and detail pages with routing, search, the composition child table and action buttons, generated from the annotations as a starting point |
Every UI, Fiori elements or freestyle, is an SAPUI5 component: Component.js, manifest.json (OData V4 data source and
default model, routing), i18n, and an index.html that only starts the component (sap/ui/core/ComponentSupport).
The studio's Preview opens the app's own UI5 app. The lightweight built-in UI is still there as "Built-in data browser".
When you describe a new app and do not say which UI you want, the chat asks: SAP Fiori elements or freestyle SAPUI5? If you pick Fiori elements, it asks which template. The same happens in the app chat when you ask for a new UI. The agent then generates that app.
Freestyle UI5 apps go in webapp/<ui>/. For example, apps/travel/webapp/travels is a component whose view calls the
RAP action acceptTravel.
Where is the data saved?
Every app has its own database. You choose it with --db (or the RAP_DB environment variable):
| Option | Where the data lives |
|---|---|
sqlite (default) | apps/<app>/.rap/data.db, one SQLite file per app (WAL mode) |
pglite | apps/<app>/.rap/pgdata: embedded PostgreSQL 18 (WebAssembly), no server needed |
postgres://user:pw@host:5432/db | your PostgreSQL server, one schema per app (app_<name>) |
node bin/rap.js studio apps --db postgres://rap:secret@localhost:5432/rapdb
How it maps:
define tablebecomes a real database table with the same column names and the key as primary key. Client fields (abap.clnt) are dropped (single tenant).- CDS view entities become real database views (joins, association paths,
case,cast, functions), so reads are plain SQL. Draft-enabled entities get a draft twin view (<view>$d) over the draft table (ztravel_d). - Writes never go straight to the database. OData and EML changes are collected in the RAP transaction buffer.
Determinations run on modify; at save, determinations on save and validations run. Only if nothing failed does the
save sequence write all
INSERT/UPDATE/DELETEs in one database transaction; otherwise everything is rolled back and the messages go back to the UI. Admin fields (createdBy,lastChangedAt, …) are filled at save time. - Drafts are saved to the draft tables on every change without validations. Activate copies the draft (with its children) into the active tables in one transaction and deletes the draft.
- Late numbering: new instances and drafts carry a preliminary key until save. Then the saver's
adjust_numbersassigns the final keys, and the runtime rewrites the keys of the children before anything is written. - Unmanaged save (
managed with unmanaged save): the runtime skips its ownINSERT/UPDATE/DELETEand calls the saver'ssave_modified, which writes the tables with ABAP SQL. The calls still run inside the same database transaction. Seeexamples/orders(sales orders with items, both features, with draft). - Schema changes (new fields) migrate in place: new columns are added and existing rows are kept. Views are rebuilt on every activation.
- Seed data (
data/<table>.json) is loaded only into empty tables. - Back up by copying
.rap/(SQLite, PGlite) or withpg_dump(server).
PostgreSQL drivers are asynchronous while the ABAP runtime executes synchronously, like ABAP. The PostgreSQL adapter
runs the driver in a worker thread and waits for each statement with Atomics.wait. All SQL goes through a small
dialect layer (src/db), and the full test suite passes on both databases (npm test, npm run test:pg).
One system: apps share master data
All apps of a studio form one system, like one SAP system. An app can use the tables and CDS views of other apps
(products, customers, suppliers…) by name, in select from, joins, associations, value helps and expose, without
copying them. At activation the runtime finds the owner app, loads its definitions read-only, and reads its data live:
- SQLite: the owner's
data.dbis attached and read through temporary views. - PostgreSQL server: a view on the owner's schema (
app_<owner>). - Embedded PostgreSQL (
pglite) keeps every app in its own database, so sharing is not available there (activation says so).
The data stays with the owner, and only the owner's business object changes it. When the owner app changes, the apps
using it are re-activated. rap catalog <words> lists what exists. The AI agent searches it before creating master data,
and the new-app prompt lists reusable objects. Small lists (@ObjectModel.resultSet.sizeCategory: #XS) become drop-downs.
SAP standard layer (S/4HANA)
Every system comes with SAP's standard objects, like an S/4HANA client in use: organisational units, configuration,
master data and business documents as tables with SAP's names and keys (T001, T001W, TCURR, BUT000, KNA1,
LFA1, MARA, MARD, MBEW, SKA1, CSKS; VBAK/VBAP/VBEP/VBFA, LIKP/LIPS, VBRK/VBRP,
PRCD_ELEMENTS, EBAN, EKKO/EKPO/EKBE, RBKP/RSEG, MATDOC, BKPF/BSEG, ACDOCA, AUFK/AFKO/AFRU,
STKO/STPO, EQUI, QMEL, QALS, ANLA, PRPS, COEP, BPGE, CDHDR, PA0001 … and EWM/TM tables with their
namespace: /SCWM/LAGP, /SCWM/QUAN, /SCWM/ORDIM_C, /SCMTMS/D_TORROT … 341 tables) and the released CDS views on top
(I_CompanyCode, I_Customer, I_Product, I_SalesOrder, I_DeliveryDocument, I_BillingDocument,
I_SDDocumentProcessFlow, I_PurchaseOrderAPI01, I_MaterialStock_2, I_JournalEntryItem, I_GLAcctBalanceCube,
I_OutboundDelivery, I_PurchaseOrder, I_ProductionOrder, I_ManufacturingOrder, I_MaintenanceOrder, I_InspectionLot,
I_FixedAsset, I_Network, I_EWMWarehouseTask, I_FreightOrder … 202 views, plus the compatibility views MKPF, MSEG,
VBAKUK, VBAPUK, BSID/BSAD, BSIK/BSAK, BSIS/BSAS, GLPCA, COSP/COSS, ANEK/ANEP/ANLC), with seed data: company codes 1010 (DE), 1710 (US) and 4110 (IN) with plants,
storage locations, sales and purchasing organizations, customers, suppliers, products with prices, G/L accounts, cost
and profit centers, currencies and exchange rates; and the year's documents, which follow each other as in a real
system: sales orders → deliveries → goods issues → billing → journal entries → payments, purchase requisitions →
purchase orders → goods receipts → supplier invoices → payments, production orders with confirmations, maintenance
and quality, fixed assets, projects with networks and budgets, CO line items, HR infotypes, EWM warehouse tasks
and TM freight orders for the deliveries. Every journal entry balances, and the stock is what the material documents leave.
Apps use them by name like another app's views: RAP and ABAP Cloud code through the released views (portable to a
real S/4HANA system), classic programs also through the tables. The names follow SAP's
Cloudification Repository (the tables are "not to be released", the views
are their released successors). The definitions are RAP Studio's own, with a subset of SAP's fields: check them
against a real system before relying on a field. In the studio, SAP S/4HANA Standard (read-only) shows the
objects and their data. Sources: standard/s4hana, generated by python3 standard/generate.py (organisation and master
data) and standard/transactional.py (the documents' tables, views and data, from standard/dictionaries.json, which
standard/extract_dictionaries.py reads from S/4HANA data dictionary documents).
Several users and draft locks
Every request runs as a user: the x-rap-user header, HTTP Basic auth, or the rap_user cookie that the studio's user
button (👤) sets. Without one, the user is DEVELOPER. sy-uname and the admin fields follow the user.
The same button sets the user's date format (SAP's six formats: DD.MM.YYYY, MM/DD/YYYY, MM-DD-YYYY,
YYYY.MM.DD, YYYY/MM/DD, YYYY-MM-DD), which classic screens, ALV grids, WRITE lists, DATE = USER templates,
printed forms and the function module test page use; it is kept per user in apps/.rap-user-settings.json.
- A draft belongs to the user who created it and locks the active instance. Other users see the active data with
"Locked by …" (
DraftAdministrativeData.InProcessByUser). They get HTTP 409 when they try to edit, delete or run an action on it. - The lock expires after 15 minutes without changes (
RAP_DRAFT_LOCK_MINUTES). After that, Edit withPreserveChanges: truereports the other user's unsaved changes (409). Fiori elements then asks whether to discard them, and Edit without PreserveChanges takes the instance over. - The Fiori elements editing-status filter ("Own draft", "Locked by another user", "Unsaved changes by another user") works.
Users, roles and access control
Without users, the system runs in development mode: no login, the user is just a name, and everyone has all authorizations. Once a user exists, every request must log on (login page with a session cookie, or HTTP Basic):
node bin/rap.js user apps alice --password secret --admin # administrators use the studio
node bin/rap.js user apps bob --password secret --role Z_SALES_EMEA
node bin/rap.js role apps Z_SALES_EMEA ZSALES ACTVT=03 ZREGION=EMEA # an authorization (values may end with *)
node bin/rap.js users apps
Only administrators (--admin) use the studio and an app's development functions (activate, run, debug, code
checks, generators, SQL trace, tests); other users get the apps themselves: their UIs, OData services, value helps and
classic programs. Users live in apps/.rap-users.json (passwords hashed with scrypt). Roles hold authorizations like PFCG roles, and are
checked by AUTHORITY-CHECK in ABAP and by CDS access controls (.dcls.asdcls) in OData reads and ABAP SQL.
$session.user, sy-uname and cl_abap_context_info return the logged-on user.
RAP features
Managed and unmanaged BOs, draft and collaborative draft with locks, early and late numbering, unmanaged/additional save,
determinations, validations, actions, side effects, feature control, authorization, ETags (If-Match, HTTP 412),
business events with event handlers (rap events <dir>), change documents (/api/changes), behavior extensions,
custom entities (query provider classes), CDS parameters, table functions (AMDP), hierarchies, access controls,
attachments (stream properties) and ABAP Unit (rap test <dir>). Details: docs/LANGUAGE-COVERAGE.md.
Classic ABAP: reports, module pools, function groups
Apps can also hold classic programs: reports (src/z<name>.prog.abap + .prog.xml, selection screens, WRITE lists,
ALV with cl_salv_table), module pools with dynpros and transactions, function groups and classic DDIC objects
(data elements, domains, table types). They run on a second engine built from the
open-abap projects (MIT): abaplint's transpiler
compiles them to JavaScript, open-abap-core provides the standard classes, and open-abap-gui converts reports and
dynpros into web screens. The engine reads and writes the same SQLite database as the app's RAP business objects,
and reads tables of other apps in the system from their owner's database (read-only).
Every classic object can be created by hand from + New in the studio, with a form or visual editor where SAP has one: domains and data elements (SE11), tables with a field grid, check tables and references, structures and table types, lock objects, message classes, function groups and function modules with a parameter editor (SE37), reports with text elements (SE38), module pools with a screen painter, field picker from the dictionary, table-control and tabstrip wizards and a GUI status editor (SE51 / SE41), transactions (SE93), Adobe forms with their form interface (SFP), and classes and exception classes (SE24).
Instead of the SAP GUI window chrome, programs get the RAP Studio look: a launcher with one tile per program, a header with the program's actions, card-style selection screens and lists, light and dark mode.
npm run setup:open-abap # once: clone the open-abap repositories into vendor/ and build the converter
node bin/rap.js gui <dir> [--port 4005] # compile the app's classic programs and serve them
node bin/rap.js gui <dir> --build-only # compile only, print errors
From an app folder, the programs also run on the command line, which is how the AI agent tests what it builds and answers "run …" requests in the chat (they use the studio's engine for the app, or start one):
node bin/rap.js programs # programs and transaction codes
node bin/rap.js program ZCFLIGHT_REPORT P_CARR=AA # run a report, print the list
node bin/rap.js transaction ZCFL GV_CARRIER=LH GV_CONNECTION=0400 --step SHOW --step SAVE GV_PRICE=610
node bin/rap.js job schedule ZCFLIGHT_REPORT P_CARR=LH [--at 2026-11-05T06:00:00Z] [--every 1440]
node bin/rap.js jobs | job <nr> | job cancel <nr> | job delete <nr>
node bin/rap.js logs | log <handle>
node bin/rap.js form ZCFL_FLIGHT_LIST [--data '{…}'] [--print] [--out list.pdf]
node bin/rap.js outputs | output delete <nr>
node bin/rap.js table zcflight_a carrier_id=LH
examples/classic is the reference set of classic objects the agent copies from.
What runs, each covered by test/classic.test.mjs:
| Reports | selection screens (parameters, select-options, checkboxes), WRITE lists, ALV |
| Value help (F4) | every screen field with a check table, domain fixed values or a domain value table gets a value-help button; F4 or the button opens a searchable list of the values with their texts (parameters, select-options, dynpro fields) |
| Module pools | dynpros with PBO/PAI, GUI status functions, transactions (.tran.xml); each dialog step commits |
| Lock objects | ENQUEUE_/DEQUEUE_ function modules, locks per user session, FOREIGN_LOCK with the owner |
| Function groups | function modules with exceptions; the group metadata is generated from the interface comment; Functions page tests a function module like SE37 (typed parameters, fixed values, exports, exceptions), also rap fm Z_FUNCTION IV_X=value |
| DDIC | data elements, domains with fixed values (RTTS), table types |
| Application logs | cl_bali_log saved to the app's database; Logs page |
| Background jobs | JOB_OPEN/JOB_SUBMIT/JOB_CLOSE, periodic jobs, "Run in background" on selection screens; spool on the Jobs page |
| Print forms | SAP Adobe forms: layouts in src/<form>.form.json, edited in a visual designer (object library, drag and drop, data binding, properties) or as JSON: master pages, tables with repeated headers, groups and totals, calculations (FormCalc-like expressions, row by row), conditions, text modules, images, embedded TrueType fonts (any script), 2D and linear barcodes (QR, Data Matrix, PDF417, Aztec, Code 128 / 39 / 93, GS1-128, EAN / UPC, ITF, Codabar), fillable fields with calculations, digital signatures, PDF/A-2b, AES-256 passwords and permissions; Adobe LiveCycle Designer XDP import with JavaScript / FormCalc scripts and dynamic (flowed) layouts converted. ABAP: the ABAP Cloud APIs (cl_fp_form_reader, cl_fp_fdp_services data providers, cl_fp_ads_util=>render_pdf, print queue), the classic FP_JOB_OPEN / generated function module / FP_JOB_CLOSE, cl_fp PDF objects (extract data, sign, verify), zcl_rap_form; Output and Forms pages |
| XCO | xco_cp=>… (open-abap-xco) |
| Tables | Tables page: the app's tables with filters (like SE16) |
To try all of it, open the Classic ABAP Showcase app (apps/classic-showcase) in the studio and pick
Classic ABAP programs in the preview: run the reports, transaction ZCFL (open it in two browser tabs to see the
lock), the price check (log and background job) and the print report, then look at the Jobs, Logs, Output (PDF
viewer), Forms and Tables pages.
In the code editor every object has Check (Ctrl+F2: the code checks of that object, on the unsaved text), Activate (Ctrl+F3) and Save (Ctrl+S), and runnable objects a Run button (F8): tables and CDS views open the data preview, function modules their test page, reports and transactions start on the classic engine, console classes run. Print form layouts open in a visual designer (Design) and next to a live PDF preview (Preview) that follows the editor, with the layout's sample data or a record of its data provider and a choice of locale. abapGit XML objects (data elements, domains, table types, transactions, lock objects, program attributes with screens and GUI status) open as a readable form, with a Source tab to edit.
In the studio, the preview menu shows Classic ABAP programs for apps that have them; the engine is built and
started on demand (one process per app) and rebuilt when a program changes. RAP Studio's own additions to the
open-abap libraries are in src/classic/abap (job function modules, log tables, zcl_rap_form), and two small fixes
to open-abap are applied as patches by the setup (scripts/open-abap-patches/). Code: src/classic/.
OData V2
Every service is also served as OData V2, at the SAP Gateway URL /sap/opu/odata/sap/<SERVICE>/ below the app
(for example /a/travel/sap/opu/odata/sap/ZUI_TRAVEL/): $metadata (EDMX 1.0 with sap: annotations), JSON in the
V2 format, $inlinecount, $expand, V2 filter functions and literals, MERGE, $batch with change sets, and
function imports for the actions and the draft actions (TravelEdit, TravelActivate, …). Requests are translated
to the V4 service, so the RAP behavior is the same. Tested in test/odata-v2.test.mjs and with the SAPUI5
sap.ui.model.odata.v2.ODataModel. In the studio, the preview menu of every app with a service has OData V2
services (SAPUI5 test): a SAPUI5 page on the V2 model that lists the entity sets, opens records, calls the function
imports (actions, draft) and links the $metadata.
Developer tools: debugger, runtime errors, SQL trace
- Debugger: click the margin next to a line number in the code editor to set a breakpoint, then Debug
(Shift+F8) on a console class, or Debug / Debug tests in the Console tab. The run stops at the breakpoints
(without any, at the first statement) and shows the line, the variables (tables, structures and objects can be
expanded), the attributes of
me, the call stack and the system fields. Step into (F5), Step over (F6), Return (F7), Continue (F8), Stop, as in the SAP debugger. Breakpoints can change while it runs. The run happens in a worker thread with a debug build of the app, on the app's database: a stopped run does not commit. - Runtime errors (like ST22): an exception that no ABAP code catches (console runs, OData requests, application jobs, background processes) is recorded with its class, text, the ABAP call stack (class, method, file and line of every frame) and the source around the failing statement; listed in the Problems tab, a click opens the line.
- SQL trace (like ST05): the switch in the Console tab records every ABAP SQL statement with its time, rows, parameters and the ABAP method that ran it (also inside the debugger).
Code quality: checks, ABAP cleaner, conformance
- Code checks (like ATC):
node bin/rap.js atc <dir> [--fix]and the studio's Problems tab run a check variant written in markdown (knowledge/checks/variants/default.md: categories Syntax and correctness, ABAP Cloud readiness, Security, Performance, Robustness, Clean ABAP, each check with a severity). The checks are abaplint rules plus RAP Studio'sreleased_apicheck, which uses SAP's Cloudification Repository to report non-released objects in ABAP Cloud code with their released successor (KNA1→I_Customer). Findings explain themselves (abaplint's documentation and the abapOpenChecks descriptions inknowledge/abapopenchecks), and many have automatic fixes. An app can adjust rows in itschecks.md. - ABAP cleaner:
npm run setup:abap-cleanerfetches SAP's ABAP cleaner (stand-alone build with its own Java).node bin/rap.js clean <dir> [file]and Clean up in the code editor apply its cleanup rules; when the cleaned code would not activate, the change is undone. - Conformance with real-world ABAP:
npm run conformance:exercismcompiles and unit-tests the reference solutions of exercism's ABAP track: all 55 exercises (602 tests).npm run conformance:cheatsheetsruns SAP's ABAP cheat sheets (every class withif_oo_adt_classrun, to the end): all 28 run, all 65 classes compile. knowledge/holds the markdown the platform and the agent read (seeknowledge/README.md).
Practice ABAP (exercises)
Practice ABAP in the studio header opens the practice exercises of
exercism's ABAP track (MIT): 54 exercises by level (Easy, Medium, Hard), from
internal tables and strings to ciphers and the knapsack problem. Each one has the task, a class to complete and its
ABAP Unit tests. Write the class in the editor (saved as you type), press Run tests (F8) and see each test pass or
fail with expected and actual values; syntax errors are listed with their line. Check runs the code checks,
Clean up SAP's ABAP cleaner. The reference solution unlocks once the tests pass (or on request), and the list keeps
your progress. The track is downloaded on first use (vendor/exercism-abap); your work is in apps/.exercises/.
Tests run in a separate process with a time limit, so an endless loop only stops that run.
Moving an app to an SAP system
node bin/rap.js abapgit <dir> <out-dir> (or the studio's abapGit button) writes the app as an abapGit repository:
the sources plus object XML, CDS tables converted to DDIC table XML, and an OData V4 UI service binding per service.
Push it to a Git repository and pull it into a package with abapGit in ADT. The XML is generated: check the first import.
How it works
sources (abapGit layout)
├─ CDS ──────────────► src/ddl/cds.js ─┐
├─ BDEF ──────────────► src/ddl/bdef.js ─┤
└─ ABAP classes ──┬───► abaplint (syntax check against the SAP grammar, ABAP Cloud)
└───► src/abap/compiler.js ──► JavaScript classes (+ src/abap/runtime.js)
│
activation: src/rap/model.js → tables, views, draft tables, handlers bound
│
HTTP: src/studio (workbench, agent) ─► src/server/odata.js (OData V4) ─► src/rap/rap.js (RAP runtime) ─► src/db (SQLite | PostgreSQL)
- ABAP → JavaScript. Each ABAP class becomes a JavaScript class. The ABAP control flow maps 1:1, and value
semantics (copying structures/tables, field symbols, ABAP comparison and conversion rules) live in
$rt. EML statements call the RAP runtime; ABAP SQL is translated to SQL. - Syntax checking uses abaplint. Parser errors block activation and semantic findings show
as warnings. Released SAP APIs are provided as ABAP stubs in
src/check/stdlib. - Conformance is measured against SAP's ABAP cheat sheets
(
node test/conformance.mjs <dir>/src). All of its CDS sources and BDEFs parse, and 60 of its 65 sources compile. See docs/LANGUAGE-COVERAGE.md.
Commands
node bin/rap.js [studio] [apps] [--db ...] [--host 127.0.0.1] [--port 4004] # the studio for all apps
node bin/rap.js setup [--cleaner] # install the classic engine (and SAP's ABAP cleaner)
node bin/rap.js serve <dir> [--db ...] # serve one app (built-in Fiori-like UI at /)
node bin/rap.js check <dir> # activate + abaplint, exit code 1 on errors
node bin/rap.js run <dir> <class> # run an if_oo_adt_classrun class
node bin/rap.js fiori <dir> --template lrop|worklist|alp|ovp|fpm|freestyle --service <srvd> --entity <Set> [--name app]
node bin/rap.js catalog [words] # tables and views of the other apps in the system (run in an app folder)
node bin/rap.js odata GET|POST|PATCH|DELETE <path> [json] [--user NAME] # call the app's OData service on the studio
node bin/rap.js test <dir> [filter] # ABAP Unit tests (classes FOR TESTING)
node bin/rap.js events <dir> # business events raised by the app
node bin/rap.js user|role|users <apps-dir> ... # users and roles (see above)
node bin/rap.js abapgit <dir> <out-dir> # export as an abapGit repository
node bin/rap.js atc <dir> [--fix] # code checks (check variant in knowledge/checks/variants)
node bin/rap.js clean <dir> [file] # SAP's ABAP cleaner (npm run setup:abap-cleaner first)
node bin/rap.js gui <dir> [--port 4005|--build-only] # classic reports and module pools (npm run setup:open-abap first)
node bin/rap.js js <dir> <class> # show the generated JavaScript
npm test # end-to-end tests on SQLite
npm run test:pg # the same tests on PostgreSQL (embedded)
Not supported yet
- A few uncommon ABAP statements (see docs/LANGUAGE-COVERAGE.md) and XSLT 2.0.
- Importing the abapGit export into a real SAP system has not been tried yet.
Credits
RAP Studio stands on the work of these open source projects. Thank you to their authors and contributors.
| Project | Used for | License |
|---|---|---|
abaplint (@abaplint/core) | ABAP parser, syntax checks and most code-check rules | MIT |
abaplint transpiler (@abaplint/transpiler-cli, @abaplint/runtime) | compiles classic ABAP to JavaScript for the classic engine | MIT |
| open-abap: open-abap-core, open-abap-gui, express-icf-shim, open-abap-bal, open-abap-pdf, open-abap-lock, open-abap-jobs, open-abap-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by npm run setup:open-abap | MIT (see each repository) |
| ABAP cleaner (SAP) | clean-up rules; downloaded by npm run setup:abap-cleaner | Apache 2.0 |
| abapOpenChecks | check descriptions in knowledge/abapopenchecks | MIT |
| Cloudification Repository (SAP) | released objects and successors for the released_api check | Apache 2.0 |
| ABAP cheat sheets (SAP samples) | conformance tests of the runtime | Apache 2.0 |
| exercism ABAP track | Practice ABAP exercises and conformance tests | MIT |
| Forms service by Adobe samples, ABAP partner reference application (SAP samples) | the Adobe forms reference app and XDP test layouts | Apache 2.0 |
| PGlite, node-postgres, Express | embedded PostgreSQL, PostgreSQL driver, the classic engine's HTTP server | Apache 2.0, MIT, MIT |
| bwip-js, qrcode-generator, Arimo | barcodes, QR codes and the default font of print forms | MIT, MIT, OFL 1.1 |
| Monaco Editor, PDF.js | the code editor and the PDF viewer (loaded from jsDelivr) | MIT, Apache 2.0 |
| SAPUI5 (SAP) | Fiori elements and SAPUI5 apps, loaded from SAP's CDN | SAP's terms of use |
SAP, ABAP, Fiori, SAPUI5 and other SAP product names are trademarks of SAP SE. RAP Studio is an independent project, not affiliated with or endorsed by SAP.
License
RAP Studio is open source under the Apache License 2.0. Material from other projects keeps its own license; see NOTICE.
Others providing
- abap2UI5 Playgroundabap2UI5 PlaygroundABAP in the editor on the left and the abap2UI5 app it builds on the right, both inside one browser tab: the framework is transpiled to JavaScript at build time and the class in the editor is compiled when Run is pressed.community org, abapIn-browser ABAP editor beside the abap2UI5 app it builds
- web-abap2UI5web-abap2UI5A build pipeline and the page it deploys: the abap2UI5 backend downported, transpiled to JavaScript and webpacked into one script that runs inside a browser tab, with no server and no SAP system behind it.community org, abapabap2UI5 transpiled to JavaScript and run in a browser tab
- abap_trial_dockerabap_trial_dockerShell scripts that build a Docker image from the SAP NetWeaver ABAP Developer Edition 7.52 SP04 installation files and run it as an unprivileged container, setting the stable hostname the installer wants.independent, abapScripts running the ABAP Developer Edition in Docker
- open-steamgateopen-steamgateAn ABAP application server you clone and run on your own machine: transpiled ABAP serving classic /IWBEP/ OData v2 to Fiori over a local database, with no SAP system attached.independent, abapLocal ABAP server serving /IWBEP/ OData v2 without an SAP system
- pokrakam/abapDevSysInitpokrakam/abapDevSysInitA single ABAP report that automates setting up a new ABAP Developer Edition or trial system, from the user profile and a GitHub RFC destination to fetching abapGit and pulling repositories.independent, abapABAP report setting up a new ABAP Developer Edition or trial system
- ABAP Cloud Developer TrialABAP Cloud Developer TrialSAP’s Docker image of an AS ABAP with its SAP HANA database, free for education and demo purposes on a developer’s own machine.sap official, abapDocker image of an ABAP system, for education and demo purposes
- launchpad-kpilaunchpad-kpiAn OData service and a one-method ABAP interface that put a number from an abap2UI5 app on a SAP Fiori launchpad tile.community org, abapPuts a number from an abap2UI5 app on a Fiori launchpad tile
- odata-fwodata-fwA framework for building OData services in ABAP with each entity implemented as its own class, reusable across services, so a model change no longer forces the SEGW service to be regenerated.independent, abapABAP framework for OData services with one class per entity
- open-steamgateopen-steamgateAn ABAP application server you clone and run on your own machine: transpiled ABAP serving classic /IWBEP/ OData v2 to Fiori over a local database, with no SAP system attached.independent, abapLocal ABAP server serving /IWBEP/ OData v2 without an SAP system
- open-abap-odataopen-abap-odataA set of OData and Gateway shims in ABAP that serve services built the SEGW way, from a model provider and a data provider class, on Node.js and in "Steampunk".community org, abapOData and Gateway shims serving SEGW-style services on Node.js
- @root3287/cap-segw@root3287/cap-segwA CAP build tool that compiles a CDS service into the ABAP Model Provider and Data Provider classes a SAP Gateway SEGW project expects, for OData V4 by default or V2.independent, capCompiler from a CDS service to SEGW model and data provider classes
- OData Batch CreatorOData Batch CreatorBuilds the payload for an OData batch request from an uploaded $metadata XML file, generating sample data from the metadata rather than asking for it by hand.independent, abapBuilds OData batch request payloads from an uploaded $metadata file
- @abap2ui5/mcp-server@abap2ui5/mcp-serverAn MCP server that puts the abap2UI5 development loop on the machine an agent runs on: check the view the ABAP builds, photograph it, deploy the class into a sandbox, boot the app headless and read the errors.community org, abapMCP server for the abap2UI5 check, deploy and run loop
- arc-1-bopf-enharc-1-bopf-enhAn extension of four tools for arc-1, with an ABAP service behind it, that lets an agent read and maintain classic BOPF enhancements of SAP standard business objects.independent, abaparc-1 extension for reading and maintaining BOPF enhancements
- HammerHammerA native macOS code editor for ABAP and CDS, with an Object Navigator, Transport Organizer, Data Browser and Gateway Client in the same app as the editor.independent, abapNative macOS code editor for ABAP and CDS
- arc-1-lsparc-1-lspAn edition of ARC-1 that hands every ADT interaction to SAP's own embedded adt-ls language server instead of a hand-rolled HTTP client.independent, abapEdition of ARC-1 that runs ADT calls through adt-ls
- arc-1arc-1An MCP server in front of the ADT REST API that runs locally and on Cloud Foundry with twelve tools that read, search, write, activate, lint and transport ABAP objects.independent, abapMCP server over the ADT REST API for ABAP objects
- arc1-abap-bridgearc1-abap-bridgeA VS Code extension between arc-1 and ABAP Development Tools for VS Code, so GitHub Copilot can open an ABAP object by name, diff the inactive version and ask the system whether an edit would be accepted.independent, abapVS Code bridge between arc-1 and ADT for VS Code
- arc1-adt-abap-mcp-extarc1-adt-abap-mcp-extOne JAR in Eclipse's dropins that turns on SAP's own ADT MCP server and adds read-only repository tools beside it — so an AI client reads your system without leaving Eclipse.independent, abapEclipse add-on enabling the ADT MCP server with read-only tools
- ABAP Accelerator MCP ServerABAP Accelerator MCP ServerAWS's ABAP MCP server for Amazon Q Developer and Kiro, deployable locally, in Docker or centrally on ECS Fargate with OAuth principal propagation; its repository is no longer maintained.partner, abapAWS's ABAP MCP server for Amazon Q Developer and Kiro
- Modernization Agents for SAP on AWSModernization Agents for SAP on AWSAWS's suite of agents for SAP modernisation work: custom ABAP converted for S/4HANA, PI/PO interfaces moved to Integration Suite, BW objects moved to SAP Datasphere, deployed into a customer's own AWS account and reached only after registration.partner, abapAWS agents for ABAP, PI/PO and BW modernisation work
- @mcp-abap-adt/core@mcp-abap-adt/coreA descendant of the Andreschak and fr0ster servers rebuilt on its own architecture, published as an npm scope and a Claude Code plugin, with Korean and Japanese documentation beside the English.independent, abapABAP ADT MCP server published as an npm scope and plugin
- chandrashekhar-mahajan/abap-mcp-serverchandrashekhar-mahajan/abap-mcp-serverFifteen ADT tools behind five pluggable authentication strategies — Kerberos/SPNEGO, OAuth 2.0, X.509, browser SSO and basic — for systems where basic auth is not an option.independent, abapABAP MCP server with ADT tools and five authentication strategies
- ADAMADAMAn MCP server that debugs ABAP on a connected system over ADT, as one-shot captures or an interactive session, over stdio next to the assistant or as a shared server on SAP BTP Cloud Foundry.independent, abapMCP server driving SAP's ABAP debugger over ADT for an agent
- dassian-adtdassian-adtA fork of mcp-abap-abap-adt-api hardened for use: 25 tools, input validation, error intelligence, MCP elicitation, session recovery and a test suite.independent, abapFork of mcp-abap-abap-adt-api with 25 tools and session recovery
- erpl-adterpl-adtOne C++ binary that speaks the ADT REST API as a CLI and as an MCP server — no Eclipse, no NetWeaver RFC SDK, no JVM — and reaches BW/4HANA modelling as well as ABAP.independent, abapC++ binary speaking the ADT REST API as a CLI and MCP server
- bw-modeling-mcpbw-modeling-mcpReads, creates and modifies BW/4HANA modelling objects through the same internal APIs Eclipse BWMT and the BW/4HANA Cockpit use — and can run centrally on BTP with each caller reaching BW as themselves.independent, btpMCP server for BW/4HANA modelling objects
- EPOD ADT MCP ServerEPOD ADT MCP ServerAn MCP server for ABAP that runs inside ABAP Development Tools for Eclipse on the ADT session of each connected project, with a standalone mode that runs with no IDE open.independent, abapMCP server for ABAP on the ADT session, in Eclipse or standalone
- ZARC1_EXTENSION_FORMSZARC1_EXTENSION_FORMSAn extension of four tools for arc-1, with an ABAP backend behind it, that reaches the classic form objects ADT has no API for: SAPscript layout sets, Smart Styles and the TADIR record of a Smart Form.independent, abaparc-1 extension for SAPscript and Smart Forms objects
- fgalastri/MCP_ABAPfgalastri/MCP_ABAPValidates an ABAP class before it is deployed by converting the global class to a local one and syntax-checking that — plus CDS DDL and table metadata retrieval.independent, abapValidates an ABAP class before it is deployed by converting the global class to a local one and syntax-checking that — plus CDS DDL and table metadata retrieval.
- fr0ster/mcp-abap-adtfr0ster/mcp-abap-adtFull CRUD across on-premise and ABAP Cloud systems, with five authentication methods and three transports: a library under Apache-2.0 and a standalone server under AGPL-3.0-only.independent, abapABAP MCP server with full CRUD on on-premise and ABAP Cloud
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writes
- sap-ai-dev-toolkitsap-ai-dev-toolkitAn MCP proxy that pins an agent's ABAP tools to one SAP system: setup reads the BAS destinations or the local SAP GUI landscape and writes one stdio server per system, leaving the credentials in the destination or in the editor's own login prompts.independent, abapMCP proxy pinning an agent's ABAP tools to one SAP system
- ABAP MCPABAP MCPA VS Code extension that deploys a bundled ABAP MCP server into each workspace folder on open: 25 ADT and OData tools and five spec-driven-development prompts over one SAP session.independent, abapVS Code extension deploying an MCP server with ADT and OData tools
- aibap.mcpaibap.mcpA Go server that closes the loop: after create, write and activate it can run the class it just wrote through ADT's classrun and hand the console output back.independent, abapGo MCP server that writes, activates and runs ABAP classes via ADT
- BellaBellaAn Eclipse plugin that puts Claude into ABAP Development Tools: explain, generate, rework and implement from the editor's context menu, completion as ghost text, and a chat whose tools reach the system through the developer's existing ADT logon.independent, abapEclipse plugin bringing Claude into ABAP Development Tools
- Maherd18/sap-mcp-serverMaherd18/sap-mcp-serverAn MCP server for ABAP development over the ADT resources: eight tools, each checked against a JSON policy file before the call reaches the system, with activation and transport release held for a person to approve.independent, abapPolicy-checked MCP server for ABAP development over ADT
- sapdumpmcpsapdumpmcpAn MCP server for SAP dumps: it connects to an ABAP system over the ADT resources and lets an MCP client ask a dump for its description and call stack.independent, abapMCP server reading ABAP short dumps over ADT
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystem
- mcp-abap-abap-adt-apimcp-abap-abap-adt-apiThe write half of the same pair: a thin wrapper over Marcello Urbani's abap-adt-api, exposing lock, edit, activate, transport and syntax check for a full development loop.independent, abapWrite-oriented MCP server over abap-adt-api
- mcp-abap-adtmcp-abap-adtThe read-oriented half of a pair of ABAP MCP servers: high-level tools such as GetProgram, GetClass and GetTable that fetch from a system, aimed at understanding it rather than changing it.independent, abapRead-oriented MCP server fetching ABAP programs, classes, tables
- SAP MCP Connection ManagerSAP MCP Connection ManagerA Windows desktop manager that holds SAP connections and hands them to Claude Desktop or Codex through a local MCP server, each connection carrying a policy that decides what the assistant may change and what data it may read.independent, abapWindows desktop manager handing SAP connections to assistants over MCP
- ABAPilotABAPilotAn MIT-licensed MCP connector for ECC and on-premise S/4HANA that reads ABAP source and dictionary context, whose SAP-side half is a licensed product you install in the system.independent, abapMCP connector for ECC and on-premise S/4HANA with a licensed SAP side
- vibing-steampunkvibing-steampunkAn ADT-to-MCP bridge in Go that reaches past what ADT exposes — cluster tables decoded, spool and job logs read as tables, the IMG searched, selection texts written back.independent, abapADT-to-MCP bridge in Go reaching past what ADT exposes
- ADT MCP ServerADT MCP ServerSAP's own MCP server for ABAP development, shipped in ABAP Development Tools for Eclipse and ABAP Development Tools for VS Code; in VS Code a preference starts it as a local HTTP server on a port you choose.sap official, abapMCP server shipped in ABAP Development Tools for Eclipse and VS Code
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloud
- SAP Joule for Developers, ABAP AI capabilitiesSAP Joule for Developers, ABAP AI capabilitiesSAP's AI for ABAP development in ADT for Eclipse and VS Code: chat, code completion, explain, test and CDS generation, RAP logic prediction, and since June 2026 an agentic mode over the ADT MCP Server, metered in AI units through the ABAP AI Hub Service on BTP.sap official, abapSAP's AI for ABAP development in ADT for Eclipse and VS Code
- ABAPDocMCPABAPDocMCPTurns a transport request into a WRICEF technical specification: reads the transport's objects and source over ADT and writes a structured Markdown document with an object-relationship diagram.independent, abapMCP server turning a transport request into a WRICEF specification
- claude-sap-kitclaude-sap-kitA Claude Code plugin of three skills that extends arc-1 with five Custom_* tools for an on-premise ABAP system: running a report and reading its ALV as JSON, previewing a NAST message as PDF, and reading, writing and replacing SmartForms as XML.independent, abapClaude Code plugin adding Custom_* tools to arc-1
- Skybuffer AI MCP serverSkybuffer AI MCP serverAn ABAP add-on that serves SAP business data, transactions and development context as MCP tools from an ICF node inside SAP ECC and S/4HANA, each call running as the signed-in user under PFCG authorization checks.independent, abapABAP add-on serving business data and transactions as MCP tools
- abap-adt-cliabap-adt-cliPulls an ABAP package to local files over the ADT REST API in parallel, and pushes edited objects back under a transport — bulk sync rather than one object at a time in SE80 or Eclipse.independent, abapCLI that pulls and pushes ABAP packages as local files over ADT
- workskong/mcp-abap-adtworkskong/mcp-abap-adtA deliberately light MCP adapter over ABAP ADT for object search, source, DDIC metadata, a data preview and runtime diagnostics, read-only in practice and documented in Korean.independent, abapLight MCP adapter for ABAP over ADT, documented in Korean
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skills
- pyrfc-mcppyrfc-mcpAn MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.independent, abapMCP server calling RFC-enabled function modules behind an allowlist
- ABAP-AI-CODE-TOOLSABAP-AI-CODE-TOOLSAn optional abapGit package that adds create, modify and delete tools to ABAP AI Code, for ABAP programs and classes, with each diff block approved before it is saved.independent, abapabapGit package adding create, modify and delete tools to ABAP AI Code
- ABAP AI CodeABAP AI CodeAn agentic coding assistant written in ABAP that runs as a SAP GUI report and reads, explains and reviews repository objects inside the system, running an LLM's tool calls as ABAP.independent, abapAgentic coding assistant in ABAP that runs as an SAP GUI report
- VERTEXVERTEXAn extension for ABAP Development Tools for Eclipse and VS Code that shows Simple Data Explorer, AVE and ACE in the editor over the developer's ADT connection.independent, abapADT extension for Eclipse and VS Code showing three SAP GUI tools
- dbg_value_statementdbg_value_statementAn ABAP Debugger script that turns a variable's structure or table into the VALUE statement that recreates it, with a tree explorer, also callable as a function module from a report.independent, abapDebugger script generating a VALUE statement for a variable
- dump_infodump_infoDisplays the variables an ABAP short dump captured, for dumps selected on a selection screen; its documentation does not state which dumps it reads, which releases it runs on or how it installs.independent, abapDisplays the variables of ABAP short dumps
- ADAMADAMAn MCP server that debugs ABAP on a connected system over ADT, as one-shot captures or an interactive session, over stdio next to the assistant or as a shared server on SAP BTP Cloud Foundry.independent, abapMCP server driving SAP's ABAP debugger over ADT for an agent
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writes
- ABAP Debugger Data View ExtensionABAP Debugger Data View ExtensionAn extension of the ABAP New Debugger that renders the internal table or structure on screen as a typed VALUE statement, ready to paste into an ABAP Unit test.independent, abapDebugger menu entry rendering a table or structure as VALUE code
- ABAP-Object-VisualizerABAP-Object-VisualizerA debugger script that writes an object hierarchy to the clipboard at a breakpoint as a Graphviz description, for pasting into a renderer such as webgraphviz.com.independent, abapDebugger script exporting an object hierarchy as Graphviz
- abap_debugger_object_graph_extensionabap_debugger_object_graph_extensionAn ABAP debugger extension that shows the object on the debugger's Objects tab as a Graphviz graph in a browser window, built on ABAP Graph and Graphviz-browser and tested on NetWeaver 7.5.independent, abapABAP debugger extension drawing objects as a Graphviz graph
- Graphviz-browserGraphviz-browserA static page that draws a Graphviz graph in a browser, written for the ABAP debugger object graph extension and deployable as BSP pages in the system the debugger runs in.independent, abapStatic page drawing Graphviz graphs for the ABAP debugger extension
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystem
- ABAP Development Tools for EclipseABAP Development Tools for EclipseSAP's Eclipse plugins for ABAP: source, dictionary and CDS editors, Project Explorer, Outline and ABAP Unit, calling ADT resources on the connected system.sap official, abapSAP's Eclipse plugins for ABAP development over ADT
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloud
- Smart DebuggerSmart DebuggerA debugger script for the SAP GUI New Debugger that records every step and variable change of an ABAP program, so execution can be stepped backwards with F5 and F8.independent, abapSAP GUI debugger script recording steps so execution can run backwards
- @abap2ui5/linter@abap2ui5/linterA command line that checks an abap2UI5 app class together with the UI5 view its builder chain produces, with no SAP system and no UI5 project.community org, abapCommand-line checker for abap2UI5 app classes and their views
- abap2UI5 Playgroundabap2UI5 PlaygroundABAP in the editor on the left and the abap2UI5 app it builds on the right, both inside one browser tab: the framework is transpiled to JavaScript at build time and the class in the editor is compiled when Run is pressed.community org, abapIn-browser ABAP editor beside the abap2UI5 app it builds
- abapcdsgrammarabapcdsgrammarAn ANTLR4 grammar for ABAP CDS, with the lexer and parser generated from it, so CDS source can be read as a parse tree outside a system.independent, abapANTLR4 grammar, lexer and parser for ABAP CDS
- @abapify/acds@abapify/acdsA parser for ABAP CDS DDL source — tokenizer, parser and a typed AST covering tables, structures, simple types, service definitions and metadata extensions.independent, abapParser for ABAP CDS DDL source with a typed AST
- abaplint-sci-clientabaplint-sci-clientThe ABAP-side client that hands objects to the abaplint Server, so the checks of abaplint surface inside SAP Code Inspector, ABAP Test Cockpit and abapGit.community org, abapABAP client surfacing abaplint checks in Code Inspector and ATC
- abaplintabaplintStatic analysis for ABAP that runs outside a system on serialised source in a repository, so ABAP checks run in a pull request and in CI before the code ever reaches a system.community org, abapStatic analysis for ABAP source outside a system
- BellaBellaAn Eclipse plugin that puts Claude into ABAP Development Tools: explain, generate, rework and implement from the editor's context menu, completion as ghost text, and a chat whose tools reach the system through the developer's existing ADT logon.independent, abapEclipse plugin bringing Claude into ABAP Development Tools
- abapOpenChecksabapOpenChecksAn open-source rule pack for SAP Code Inspector and ABAP Test Cockpit, installed via abapGit and activated as a check variant.independent, abapOpen-source rule pack for SAP Code Inspector and ATC
- upDOWNciupDOWNciA tool that uploads and downloads SAP Code Inspector check variants as XML files, one variant at a time or several in one ZIP file, installed through abapGit.independent, abapUploads and downloads Code Inspector check variants as XML
- abaplint-Ext-for-abapGitabaplint-Ext-for-abapGitSurfaces abaplint results inside abapGit itself, at the point where a developer is already looking.independent, abapShows abaplint results inside abapGit
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystem
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloud
- code pal for ABAPcode pal for ABAPATC and Code Inspector checks for the parts of Clean ABAP a static analyser can actually check, installed into a system with [abapGit](artifact:abapgit-abapgit) rather than delivered with it.sap official, abapATC and Code Inspector checks for Clean ABAP
- Project KernseifeProject KernseifeA custom ABAP Test Cockpit check that scores how custom code uses SAP objects against a classification the customer writes, as a measure of clean core technical debt.sap official, abapCustom ATC check scoring SAP object usage against your classification
- Clean-Core.ioClean-Core.ioA free hosted workspace that reads one piece of custom ABAP, redraws its business process as BPMN with a line anchor on every element, grades the SAP objects it uses Level A–D and ends in a keep, rebuild, move-to-standard or retire decision.independent, abapHosted workspace redrawing custom ABAP as BPMN and grading it
- ACEACEA SAP GUI tool that parses ABAP source statically to show call flow, data dependencies, control structure and code metrics such as McCabe complexity, without running the code.independent, abapSAP GUI tool for static analysis of ABAP call flow and code metrics
Details
Sources
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
Flavors
“Build, run and debug SAP ABAP RAP and classic ABAP applications on your laptop” — rap-studio — npm, package description
“Syntax is additionally checked with [abaplint](https://github.com/abaplint/abaplint) against the ABAP Cloud grammar.” — ABAP-Runtime — docs/LANGUAGE-COVERAGE.md
“OData V4 (with `$batch`, `$apply`, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps” — NabheetCloud/ABAP-Runtime — README, What is supported
“OData V4 (with `$batch`, `$apply`, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps” — NabheetCloud/ABAP-Runtime — README, What is supported
History in the atlas
- First seen.
For your agent
- Ref
artifact:nabheetcloud-rap-studio- JSON
- /artifacts/nabheetcloud-rap-studio.json
- MCP
- Connecting an agent