https://github.com/datazoode/erpl-adt
CLI and MCP server for the SAP ADT REST API — search, read/write ABAP source, run tests, manage transports. No Eclipse, no RFC SDK, no JVM.
https://github.com/datazoode/erpl-adt
abap abap-development abap-oo sap
Last synced: 2 months ago
JSON representation
CLI and MCP server for the SAP ADT REST API — search, read/write ABAP source, run tests, manage transports. No Eclipse, no RFC SDK, no JVM.
- Host: GitHub
- URL: https://github.com/datazoode/erpl-adt
- Owner: DataZooDE
- License: apache-2.0
- Created: 2026-02-11T15:37:05.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-02-16T17:57:16.000Z (3 months ago)
- Last Synced: 2026-02-17T13:03:56.011Z (3 months ago)
- Topics: abap, abap-development, abap-oo, sap
- Language: C++
- Homepage: https://erpl.io
- Size: 950 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# erpl-adt
CLI and MCP server for the SAP ADT REST API — a single binary that talks the same HTTP endpoints Eclipse ADT uses. No Eclipse, no SAP NW RFC SDK, no JVM.
[](https://github.com/datazooDE/erpl-adt/actions/workflows/build.yaml)
Part of the [Datazoo](https://datazoo.de) ERPL family.
## What it does
- **Search and browse** ABAP objects, packages, data dictionary tables, CDS views
- **Read and write** source code with lock management and transport integration
- **Run tests** — ABAP Unit and ATC quality checks from the command line
- **Manage transports** — create, list, and release transport requests
- **MCP server** — expose all capabilities to AI agents over JSON-RPC (MCP 2024-11-05)
Every command accepts `--json` for machine-readable output.
## Quick examples
```bash
# Save connection credentials (prompts for password)
erpl-adt login --host sap.example.com --port 44300 --https --user DEVELOPER
# Search for classes matching a pattern
erpl-adt search ZCL_MY_* --type CLAS --max 20
# Read object metadata and source code
erpl-adt object read /sap/bc/adt/oo/classes/zcl_my_class
erpl-adt source read /sap/bc/adt/oo/classes/zcl_my_class/source/main
# Write source code (auto-locks, writes, unlocks)
erpl-adt source write /sap/bc/adt/oo/classes/zcl_my_class/source/main --file impl.abap
# Write and activate in one step
erpl-adt source write /sap/bc/adt/oo/classes/zcl_my_class/source/main --file impl.abap --activate
# Activate an object by name
erpl-adt activate ZCL_MY_CLASS
# Run unit tests and ATC checks (by name or URI)
erpl-adt test ZCL_MY_CLASS
erpl-adt check ZCL_MY_CLASS --variant DEFAULT
# Create a transport request and release it
erpl-adt transport create --desc "Feature XYZ" --package ZPACKAGE
erpl-adt transport release NPLK900042
# Browse packages and data dictionary
erpl-adt package tree ZPACKAGE --type CLAS
erpl-adt ddic table SFLIGHT
erpl-adt ddic cds I_AIRLINE
# Check syntax
erpl-adt source check /sap/bc/adt/oo/classes/zcl_my_class/source/main
```
## Installation
The quickest way to run erpl-adt — no download needed:
```bash
uvx erpl-adt --help
```
Or install permanently:
```bash
pip install erpl-adt
```
Alternatively, download the binary for your platform from the [latest release](https://github.com/datazooDE/erpl-adt/releases/latest), or [build from source](#building-from-source).
| Platform | Architecture |
|----------|-------------|
| Linux | x86_64 |
| macOS | arm64, x86_64 |
| Windows | x64 |
## Full reference
```
erpl-adt - CLI for the SAP ADT REST API
Talks the same HTTP endpoints Eclipse ADT uses. No Eclipse, no RFC SDK, no JVM.
All commands accept --json for machine-readable output.
USAGE
erpl-adt [global-flags] [args] [flags]
SEARCH — Search for ABAP objects
search Search for ABAP objects
--type Object type: CLAS, PROG, TABL, INTF, FUGR
--max Maximum number of results
OBJECT — Read, create, delete, lock/unlock ABAP objects
create Create an ABAP object
--type Object type (e.g., CLAS/OC, PROG/P) (required)
--name Object name (required)
--package Target package (required)
--description Object description
--transport Transport request number
delete Delete an ABAP object
--handle Lock handle (skips auto-lock if provided)
--transport Transport request number
lock Lock an object for editing
--session-file Save session for later unlock
read Read object structure
unlock Unlock an object
--handle Lock handle (required)
--session-file Session file for stateful workflow
SOURCE — Read, write, and check ABAP source code
check Check syntax
read Read source code
--version active or inactive (default: active)
write Write source code
--file Path to local source file (required)
--handle Lock handle (skips auto-lock if provided)
--transport Transport request number
--session-file Session file for stateful workflow
--activate Activate the object after writing
ACTIVATE — Activate inactive ABAP objects
activate Activate an ABAP object
TEST — Run ABAP Unit tests
test Run ABAP unit tests
CHECK — Run ATC quality checks
check Run ATC checks
--variant ATC variant (default: DEFAULT)
TRANSPORT — List, create, and release transports
create Create a transport
--desc Transport description (required)
--package Target package (required)
list List transports
--user Filter by user (default: DEVELOPER)
release Release a transport
DATA DICTIONARY — Tables and CDS views
cds Get CDS source
table Get table definition
PACKAGE — List contents and check package existence
exists Check if package exists
list List package contents
tree List package contents recursively
--type Filter by object type: CLAS, PROG, TABL, INTF, FUGR
--max-depth Maximum recursion depth (default: 50)
DISCOVER — Discover available ADT services
services Discover ADT services
CREDENTIALS
login Save connection credentials
logout Remove saved credentials
GLOBAL FLAGS
--host SAP hostname (default: localhost)
--port SAP port (default: 50000)
--user SAP username (default: DEVELOPER)
--password SAP password
--password-env Read password from env var (default: SAP_PASSWORD)
--client SAP client (default: 001)
--https Use HTTPS
--insecure Skip TLS verification (with --https)
--json JSON output
--timeout Request timeout in seconds
--session-file Persist session for lock/write/unlock workflows
--color Force colored output
--no-color Disable colored output
-v Verbose logging (INFO level)
-vv Debug logging (DEBUG level)
Credential priority: flags > --password-env > .adt.creds (via login) > SAP_PASSWORD env var
EXIT CODES
0 Success 1 Connection/auth 2 Not found
3 Clone error 4 Pull error 5 Activation error
6 Lock conflict 7 Test failure 8 ATC check error
9 Transport error 10 Timeout 99 Internal error
```
## MCP server
erpl-adt includes a built-in MCP server (Model Context Protocol, version 2024-11-05) that exposes all ADT operations as tools over JSON-RPC 2.0 on stdin/stdout. This lets AI agents search, read, write, test, and manage ABAP code directly.
```bash
erpl-adt mcp --host sap.example.com --port 44300 --https
```
Configure it in your MCP client (e.g., Claude Desktop, Claude Code):
```json
{
"mcpServers": {
"erpl-adt": {
"command": "erpl-adt",
"args": ["mcp", "--host", "sap.example.com", "--port", "44300", "--https"],
"env": {
"SAP_PASSWORD": "your_password"
}
}
}
}
```
## Deploy workflow
erpl-adt also includes the original `deploy` workflow for automated abapGit package deployment via YAML configuration:
```bash
cat > config.yaml <