{"id":44590351,"url":"https://github.com/datazoode/erpl-adt","last_synced_at":"2026-03-07T08:08:10.065Z","repository":{"id":337946920,"uuid":"1155506154","full_name":"DataZooDE/erpl-adt","owner":"DataZooDE","description":"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.","archived":false,"fork":false,"pushed_at":"2026-02-16T17:57:16.000Z","size":973,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-17T13:03:56.011Z","etag":null,"topics":["abap","abap-development","abap-oo","sap"],"latest_commit_sha":null,"homepage":"https://erpl.io","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DataZooDE.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-11T15:37:05.000Z","updated_at":"2026-02-16T17:47:25.000Z","dependencies_parsed_at":"2026-02-17T10:01:43.326Z","dependency_job_id":null,"html_url":"https://github.com/DataZooDE/erpl-adt","commit_stats":null,"previous_names":["datazoode/erpl-adt"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/DataZooDE/erpl-adt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataZooDE%2Ferpl-adt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataZooDE%2Ferpl-adt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataZooDE%2Ferpl-adt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataZooDE%2Ferpl-adt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DataZooDE","download_url":"https://codeload.github.com/DataZooDE/erpl-adt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataZooDE%2Ferpl-adt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29576848,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abap","abap-development","abap-oo","sap"],"created_at":"2026-02-14T07:03:45.918Z","updated_at":"2026-02-23T09:49:27.363Z","avatar_url":"https://github.com/DataZooDE.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# erpl-adt\r\n\r\nCLI 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.\r\n\r\n[![Build](https://github.com/datazooDE/erpl-adt/actions/workflows/build.yaml/badge.svg)](https://github.com/datazooDE/erpl-adt/actions/workflows/build.yaml)\r\n\r\nPart of the [Datazoo](https://datazoo.de) ERPL family.\r\n\r\n## What it does\r\n\r\n- **Search and browse** ABAP objects, packages, data dictionary tables, CDS views\r\n- **Read and write** source code with lock management and transport integration\r\n- **Run tests** — ABAP Unit and ATC quality checks from the command line\r\n- **Manage transports** — create, list, and release transport requests\r\n- **MCP server** — expose all capabilities to AI agents over JSON-RPC (MCP 2024-11-05)\r\n\r\nEvery command accepts `--json` for machine-readable output.\r\n\r\n## Quick examples\r\n\r\n```bash\r\n# Save connection credentials (prompts for password)\r\nerpl-adt login --host sap.example.com --port 44300 --https --user DEVELOPER\r\n\r\n# Search for classes matching a pattern\r\nerpl-adt search ZCL_MY_* --type CLAS --max 20\r\n\r\n# Read object metadata and source code\r\nerpl-adt object read /sap/bc/adt/oo/classes/zcl_my_class\r\nerpl-adt source read /sap/bc/adt/oo/classes/zcl_my_class/source/main\r\n\r\n# Write source code (auto-locks, writes, unlocks)\r\nerpl-adt source write /sap/bc/adt/oo/classes/zcl_my_class/source/main --file impl.abap\r\n\r\n# Write and activate in one step\r\nerpl-adt source write /sap/bc/adt/oo/classes/zcl_my_class/source/main --file impl.abap --activate\r\n\r\n# Activate an object by name\r\nerpl-adt activate ZCL_MY_CLASS\r\n\r\n# Run unit tests and ATC checks (by name or URI)\r\nerpl-adt test ZCL_MY_CLASS\r\nerpl-adt check ZCL_MY_CLASS --variant DEFAULT\r\n\r\n# Create a transport request and release it\r\nerpl-adt transport create --desc \"Feature XYZ\" --package ZPACKAGE\r\nerpl-adt transport release NPLK900042\r\n\r\n# Browse packages and data dictionary\r\nerpl-adt package tree ZPACKAGE --type CLAS\r\nerpl-adt ddic table SFLIGHT\r\nerpl-adt ddic cds I_AIRLINE\r\n\r\n# Check syntax\r\nerpl-adt source check /sap/bc/adt/oo/classes/zcl_my_class/source/main\r\n```\r\n\r\n## Installation\r\n\r\nThe quickest way to run erpl-adt — no download needed:\r\n\r\n```bash\r\nuvx erpl-adt --help\r\n```\r\n\r\nOr install permanently:\r\n\r\n```bash\r\npip install erpl-adt\r\n```\r\n\r\nAlternatively, 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).\r\n\r\n| Platform | Architecture |\r\n|----------|-------------|\r\n| Linux    | x86_64      |\r\n| macOS    | arm64, x86_64 |\r\n| Windows  | x64         |\r\n\r\n## Full reference\r\n\r\n```\r\nerpl-adt - CLI for the SAP ADT REST API\r\n\r\n  Talks the same HTTP endpoints Eclipse ADT uses. No Eclipse, no RFC SDK, no JVM.\r\n  All commands accept --json for machine-readable output.\r\n\r\nUSAGE\r\n  erpl-adt [global-flags] \u003ccommand\u003e [args] [flags]\r\n\r\nSEARCH — Search for ABAP objects\r\n  search \u003cpattern\u003e                        Search for ABAP objects\r\n      --type \u003ctype\u003e                       Object type: CLAS, PROG, TABL, INTF, FUGR\r\n      --max \u003cn\u003e                           Maximum number of results\r\n\r\nOBJECT — Read, create, delete, lock/unlock ABAP objects\r\n  create                                  Create an ABAP object\r\n      --type \u003ctype\u003e                       Object type (e.g., CLAS/OC, PROG/P)  (required)\r\n      --name \u003cname\u003e                       Object name  (required)\r\n      --package \u003cpkg\u003e                     Target package  (required)\r\n      --description \u003ctext\u003e                Object description\r\n      --transport \u003cid\u003e                    Transport request number\r\n  delete \u003curi\u003e                            Delete an ABAP object\r\n      --handle \u003chandle\u003e                   Lock handle (skips auto-lock if provided)\r\n      --transport \u003cid\u003e                    Transport request number\r\n  lock \u003curi\u003e                              Lock an object for editing\r\n      --session-file \u003cpath\u003e               Save session for later unlock\r\n  read \u003curi\u003e                              Read object structure\r\n  unlock \u003curi\u003e                            Unlock an object\r\n      --handle \u003chandle\u003e                   Lock handle  (required)\r\n      --session-file \u003cpath\u003e               Session file for stateful workflow\r\n\r\nSOURCE — Read, write, and check ABAP source code\r\n  check \u003curi\u003e                             Check syntax\r\n  read \u003curi\u003e                              Read source code\r\n      --version \u003cversion\u003e                 active or inactive (default: active)\r\n  write \u003curi\u003e                             Write source code\r\n      --file \u003cpath\u003e                       Path to local source file  (required)\r\n      --handle \u003chandle\u003e                   Lock handle (skips auto-lock if provided)\r\n      --transport \u003cid\u003e                    Transport request number\r\n      --session-file \u003cpath\u003e               Session file for stateful workflow\r\n      --activate                          Activate the object after writing\r\n\r\nACTIVATE — Activate inactive ABAP objects\r\n  activate \u003cname-or-uri\u003e                  Activate an ABAP object\r\n\r\nTEST — Run ABAP Unit tests\r\n  test \u003cname-or-uri\u003e                      Run ABAP unit tests\r\n\r\nCHECK — Run ATC quality checks\r\n  check \u003cname-or-uri\u003e                     Run ATC checks\r\n      --variant \u003cname\u003e                    ATC variant (default: DEFAULT)\r\n\r\nTRANSPORT — List, create, and release transports\r\n  create                                  Create a transport\r\n      --desc \u003ctext\u003e                       Transport description  (required)\r\n      --package \u003cpkg\u003e                     Target package  (required)\r\n  list                                    List transports\r\n      --user \u003cuser\u003e                       Filter by user (default: DEVELOPER)\r\n  release \u003cnumber\u003e                        Release a transport\r\n\r\nDATA DICTIONARY — Tables and CDS views\r\n  cds \u003cname\u003e                              Get CDS source\r\n  table \u003cname\u003e                            Get table definition\r\n\r\nPACKAGE — List contents and check package existence\r\n  exists \u003cname\u003e                           Check if package exists\r\n  list \u003cname\u003e                             List package contents\r\n  tree \u003cname\u003e                             List package contents recursively\r\n      --type \u003ctype\u003e                       Filter by object type: CLAS, PROG, TABL, INTF, FUGR\r\n      --max-depth \u003cn\u003e                     Maximum recursion depth (default: 50)\r\n\r\nDISCOVER — Discover available ADT services\r\n  services                                Discover ADT services\r\n\r\nCREDENTIALS\r\n  login                                     Save connection credentials\r\n  logout                                    Remove saved credentials\r\n\r\nGLOBAL FLAGS\r\n  --host \u003chost\u003e                           SAP hostname (default: localhost)\r\n  --port \u003cport\u003e                           SAP port (default: 50000)\r\n  --user \u003cuser\u003e                           SAP username (default: DEVELOPER)\r\n  --password \u003cpass\u003e                       SAP password\r\n  --password-env \u003cvar\u003e                    Read password from env var (default: SAP_PASSWORD)\r\n  --client \u003cnum\u003e                          SAP client (default: 001)\r\n  --https                                 Use HTTPS\r\n  --insecure                              Skip TLS verification (with --https)\r\n  --json                                  JSON output\r\n  --timeout \u003csec\u003e                         Request timeout in seconds\r\n  --session-file \u003cpath\u003e                   Persist session for lock/write/unlock workflows\r\n  --color                                 Force colored output\r\n  --no-color                              Disable colored output\r\n  -v                                      Verbose logging (INFO level)\r\n  -vv                                     Debug logging (DEBUG level)\r\n\r\n  Credential priority: flags \u003e --password-env \u003e .adt.creds (via login) \u003e SAP_PASSWORD env var\r\n\r\nEXIT CODES\r\n  0  Success          1  Connection/auth     2  Not found\r\n  3  Clone error      4  Pull error          5  Activation error\r\n  6  Lock conflict    7  Test failure        8  ATC check error\r\n  9  Transport error  10 Timeout             99 Internal error\r\n```\r\n\r\n## MCP server\r\n\r\nerpl-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.\r\n\r\n```bash\r\nerpl-adt mcp --host sap.example.com --port 44300 --https\r\n```\r\n\r\nConfigure it in your MCP client (e.g., Claude Desktop, Claude Code):\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"erpl-adt\": {\r\n      \"command\": \"erpl-adt\",\r\n      \"args\": [\"mcp\", \"--host\", \"sap.example.com\", \"--port\", \"44300\", \"--https\"],\r\n      \"env\": {\r\n        \"SAP_PASSWORD\": \"your_password\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Deploy workflow\r\n\r\nerpl-adt also includes the original `deploy` workflow for automated abapGit package deployment via YAML configuration:\r\n\r\n```bash\r\ncat \u003e config.yaml \u003c\u003cEOF\r\nconnection:\r\n  host: localhost\r\n  port: 50000\r\n  use_https: false\r\n  client: \"001\"\r\n  user: DEVELOPER\r\n  password_env: SAP_PASSWORD\r\n\r\nrepos:\r\n  - name: flight\r\n    url: https://github.com/SAP-samples/abap-platform-refscen-flight.git\r\n    branch: refs/heads/main\r\n    package: /DMO/FLIGHT\r\n    activate: true\r\nEOF\r\n\r\nexport SAP_PASSWORD=your_password\r\nerpl-adt deploy -c config.yaml\r\n```\r\n\r\nThe deploy workflow is an idempotent state machine: `discover → create package → clone → pull → activate`. Each step checks preconditions and skips if already satisfied. Re-running is safe. Supports multi-repo deployments with `depends_on` for topological ordering.\r\n\r\n## Building from source\r\n\r\n```bash\r\ngit clone --recurse-submodules https://github.com/datazooDE/erpl-adt.git\r\ncd erpl-adt\r\nmake release\r\n```\r\n\r\nRequires CMake 3.21+, Ninja, and a C++17 compiler (GCC 13+, Apple Clang 15+, or MSVC 17+). vcpkg is included as a git submodule.\r\n\r\nTo run the tests:\r\n\r\n```bash\r\nmake test                          # Unit tests (offline, no SAP system needed)\r\nmake test-integration-py           # Integration tests (requires SAP system)\r\n```\r\n\r\n## Docker\r\n\r\n```bash\r\ndocker build -t erpl-adt .\r\ndocker run --rm -v $(pwd)/config.yaml:/config.yaml \\\r\n    -e SAP_PASSWORD=your_password \\\r\n    erpl-adt deploy -c /config.yaml\r\n```\r\n\r\nOr use Docker Compose for end-to-end provisioning with a SAP ABAP Cloud Developer Trial:\r\n\r\n```bash\r\ndocker compose up\r\n```\r\n\r\n## License\r\n\r\n[Apache License 2.0](LICENSE) — Copyright 2026 Datazoo GmbH\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatazoode%2Ferpl-adt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatazoode%2Ferpl-adt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatazoode%2Ferpl-adt/lists"}