Command Reference
Run erpl-adt --help for the live listing; this page documents the same surface offline. The CLI is organised as erpl-adt [global-flags] <group> <action> [args]. Every command accepts --json for machine-readable output.
SEARCHβ
search <pattern> Search for ABAP objects
--type <type> Object type: CLAS, PROG, TABL, INTF, FUGR, DTEL, β¦
--max <n> Maximum number of results
OBJECTβ
Read, create, delete, lock/unlock ABAP objects.
object create Create an ABAP object
--type <type> Object type (required, e.g. CLAS/OC, PROG/P)
--name <name> Object name (required)
--package <pkg> Target package (required)
--description <text> Object description
--transport <id> Transport request number
object delete <uri> Delete an ABAP object
--handle <handle> Lock handle (skips auto-lock if provided)
--transport <id> Transport request number
object lock <uri> Lock an object for editing
--session-file <path> Save session for later unlock
object read <name-or-uri> Read object structure
object run <class-name-or-uri> Run an ABAP console class (IF_OO_ADT_CLASSRUN)
object unlock <uri> Unlock an object
--handle <handle> Lock handle (required)
--session-file <path> Session file for stateful workflow
SOURCEβ
Read, write, and check ABAP source code.
source check <name-or-uri> Check syntax
source edit <name-or-uri> Open in $EDITOR and write back
--type <type> Object type for name resolution
--section <section> main | localdefinitions | localimplementations | testclasses
--transport <id> Transport request number
--activate Activate after writing
--no-write Open editor but do not write back
source read <name-or-uri> Read source code
--version <version> active (default) | inactive
--section <section> main (default) | localdefinitions | localimplementations | testclasses | all
--type <type> Disambiguate name resolution
--color / --no-color ANSI syntax highlighting
--editor Open in $VISUAL/$EDITOR (plain text)
source write <name-or-uri> Write source code
--file <path> Path to local source file (required)
--section <section> main (default) | localdefinitions | localimplementations | testclasses
--handle <handle> Lock handle (skips auto-lock if provided)
--transport <id> Transport request number
--session-file <path> Session file for stateful workflow
--activate Activate after writing
--optimistic Try lockless write first (pre-7.51 SAP)
ACTIVATEβ
activate <name-or-uri> Activate an inactive ABAP object
TEST / CHECKβ
test <name-or-uri> Run ABAP Unit tests
check <name-or-uri> Run ATC quality checks
--variant <name> ATC variant (default: DEFAULT)
TRANSPORTβ
transport create Create a transport
--desc <text> Transport description (required)
--package <pkg> Target package (required)
transport list List transports
--user <user> Filter by user (default: DEVELOPER)
transport release <number> Release a transport
DATA DICTIONARYβ
ddic cds <name> Get CDS source
ddic table <name> Get table definition (fetches abap_type + check_table by default)
--no-resolve-types Skip data-element lookup; show field names and types only (fast)
--raw Print raw SAP XML response
PACKAGEβ
package exists <name> Check if package exists
package list <name> List package contents (one level)
package tree <name> List package contents recursively (BFS)
--type <type> Filter: CLAS, PROG, TABL, INTF, FUGR, β¦
--max-depth <n> Maximum recursion depth (default: 50)
DISCOVERβ
discover services Discover ADT services
--workspace <name> Filter by workspace (e.g. "Object Repository")
CATALOGβ
Unified, cross-domain metadata catalog (ABAP + DDIC + CDS + BW) persisted in a single DuckDB file. See the Catalog guide for the full walkthrough. Every command needs an explicit scope (--package / --infoarea).
catalog build Build a unified cross-domain catalog (optionally persist/render it)
--sid <sid> SAP system id (labels the catalog)
--package <name> Scope: an ABAP/DDIC package (repeatable)
--infoarea <name> Scope: a BW InfoArea (repeatable)
--db <path> Persist into a DuckDB file (full rebuild)
--embed Also compute embeddings for semantic search (needs GEMINI_API_KEY)
--format <catalog|mermaid|openmetadata> Render the feed in this shape
catalog sync <db> Incrementally sync a scope into an existing DuckDB file
--sid <sid> SAP system id
--package <name> / --infoarea <name> Scope (repeatable)
--resume Resume an interrupted sync (skips removal detection)
catalog search <db> <query> Search a built catalog (cache-only, no SAP call)
--mode <fts|semantic|hybrid> Search mode (default: hybrid)
catalog annotate <db> Curate the business-overlay fields (never touches SAP)
--id <entity_id> Entity to annotate
--definition <text> / --owner <who> / --lob <name> Overlay fields
--file <overlay.yaml> Bulk annotate, keyed by entity_id
catalog webui <db> Serve the embedded web catalog client + API (blocking)
--port <n> Listen port (default: 8383)
--host <addr> Address to bind (default: 127.0.0.1)
--cors-origin <list> Extra browser origins allowed to call the API
--allowed-hosts <list> Host headers this server answers to beyond loopback and
IP literals; a browser using any other is refused
--auth-token <tok> Require 'Authorization: Bearer <tok>' on the API
--auth-token-env <var> Read that token from an environment variable
-c, --config <path> YAML file whose http: block supplies these settings
catalog webui and mcp --http share one access-control model β see the MCP guide.
BWβ
SAP BW/4HANA Modeling operations. See the BW guide for usage. Each subcommand below is documented as a top-level command; flags are listed exactly as erpl-adt bw <action> --help prints them.
bw activateβ
Activate BW objects.
bw activate <type> <name>
--validate Pre-check only, don't activate
--simulate Dry run of activation
--background Run as background job
--force Force activation even with warnings
--exec-check Set execChk=true in activation payload
--with-cto Set withCTO=true in activation payload
--sort Validate mode: sort dependency order
--only-ina Validate mode: only inactive objects
--transport <corrnr> Transport request
bw adturiβ
Show BW-to-ADT URI mappings.
bw adturi
bw applogβ
Read BW repository application logs.
bw applog
--username <user> Filter by user
--start <timestamp> Filter by start timestamp
--end <timestamp> Filter by end timestamp
bw changeabilityβ
Show BW changeability settings.
bw changeability
bw createβ
Create a BW object.
bw create <type> <name>
--package <pkg> Target package
--copy-from-name <name> Copy source object name
--copy-from-type <type> Copy source object type
--file <path> Optional XML payload file for create request body
bw datavolumesβ
Read BW data volumes.
bw datavolumes
--infoprovider <name> InfoProvider filter
--max <n> Max rows
bw dbinfoβ
Show HANA database info.
bw dbinfo
bw deleteβ
Delete a BW object.
bw delete <type> <name>
--lock-handle <handle> Lock handle (required)
--transport <corrnr> Transport request number
--transport-lock-holder <corrnr> Explicit Transport-Lock-Holder header
--foreign-objects <value> Foreign-Objects header
--foreign-object-locks <value> Foreign-Object-Locks header
--foreign-correction-number <corrnr> Foreign-Correction-Number header
--foreign-package <pkg> Foreign-Package header
bw discoverβ
Discover BW modeling services.
bw discover
bw export-areaβ
Export all objects in a BW InfoArea to JSON or Mermaid.
bw export-area <infoarea>
--mermaid Output Mermaid dataflow diagram instead of JSON
--shape <catalog|openmetadata> JSON output shape: catalog (default) or openmetadata
--max-depth <n> Max recursion depth for nested infoareas (default: 10)
--types <T1,T2,...> Comma-separated TLOGO type filter (e.g. ADSO,DTPA). Default: all
--no-lineage Skip DTP lineage graph collection (faster)
--no-queries Skip query graph collection
--no-search Skip search supplement, use BFS tree only (faster)
--no-xref-edges Skip xref-based INFOPROVIDERβQUERY edge collection
--no-elem-edges Skip orphan ELEM XML parsing for provider edge recovery
--iobj-edges Show InfoObject nodes (dimensions, filters, variables) in Mermaid
--version <a|m> Object version: a (active, default) or m (modified)
--out-dir <dir> Save {name}_catalog.json and {name}_dataflow.mmd to directory
--service-name <name> Service name for openmetadata FQN (default: erpl_adt)
--system-id <id> System ID for openmetadata FQN prefix
bw export-cubeβ
Export a single BW InfoProvider and its connected graph to JSON or Mermaid.
bw export-cube <cube-name>
--mermaid Output Mermaid dataflow diagram instead of JSON
--shape <catalog|openmetadata> JSON output shape: catalog (default) or openmetadata
--no-lineage Skip DTP lineage graph collection (faster)
--no-xref-edges Skip xref-based edge collection (faster, fewer API calls)
--no-elem-edges Skip orphan ELEM XML parsing for provider edge recovery
--iobj-edges Show InfoObject nodes (dimensions, filters, variables) in Mermaid
--version <a|m> Object version: a (active, default) or m (modified)
--out-dir <dir> Save {name}_catalog.json and {name}_dataflow.mmd to directory
--service-name <name> Service name for openmetadata FQN (default: erpl_adt)
--system-id <id> System ID for openmetadata FQN prefix
bw export-queryβ
Export a single BW query and its connected graph to JSON or Mermaid.
bw export-query <query-name>
--mermaid Output Mermaid dataflow diagram instead of JSON
--shape <catalog|openmetadata> JSON output shape: catalog (default) or openmetadata
--no-lineage Skip DTP lineage graph collection (faster)
--no-queries Skip query graph collection
--no-xref-edges Skip xref-based edge collection (faster, fewer API calls)
--no-elem-edges Skip orphan ELEM XML parsing for provider edge recovery
--iobj-edges Show InfoObject nodes (dimensions, filters, variables) in Mermaid
--version <a|m> Object version: a (active, default) or m (modified)
--out-dir <dir> Save {name}_catalog.json and {name}_dataflow.mmd to directory
--service-name <name> Service name for openmetadata FQN (default: erpl_adt)
--system-id <id> System ID for openmetadata FQN prefix
bw favoritesβ
List or clear BW backend favorites.
bw favorites
bw jobβ
BW background job operations.
bw job <action>
bw lineageβ
Build a canonical BW lineage graph rooted at a DTP. Returns typed nodes, typed edges, and per-call provenance. JSON output is intended to round-trip into OpenMetadata, DataHub, or a custom catalog.
bw lineage <dtp_name>
--trfn <name> Optional explicit transformation name
--version <v> Version: a (active, default), m (modified), d (delivery)
--max-xref <n> Maximum xref neighbors to include (default: 100)
--no-xref Disable xref expansion for a strict DTP/TRFN graph
bw lockβ
Lock a BW object for editing. Stateful β pair with bw save and bw unlock.
bw lock <type> <name>
--activity <code> Activity: CHAN (default), DELE, MAIN
--parent-name <name> Parent object name (lock context)
--parent-type <type> Parent object type (lock context)
--transport-lock-holder <corrnr> Explicit Transport-Lock-Holder header
--foreign-objects <value> Foreign-Objects header
--foreign-object-locks <value> Foreign-Object-Locks header
--foreign-correction-number <corrnr> Foreign-Correction-Number header
--foreign-package <pkg> Foreign-Package header
--session-file <path> Save session state for multi-step workflow
bw locksβ
Monitor and break BW object locks.
bw locks <list|delete>
--user <name> Filter / specify lock owner user
--search <pattern> Search pattern for list
--max <n> Maximum results (default: 100)
--table-name <name> Table name from list (for delete)
--arg <base64> Encoded arg from list (for delete)
--mode <code> Lock mode, default: E (for delete)
--scope <n> Lock scope, default: 1 (for delete)
--owner1 <base64> Owner1 from list (for delete)
--owner2 <base64> Owner2 from list (for delete)
bw messageβ
Resolve a BW message text.
bw message <identifier> <textype>
--msgv1 <value> Message variable 1
--msgv2 <value> Message variable 2
--msgv3 <value> Message variable 3
--msgv4 <value> Message variable 4
bw moveβ
List BW move requests.
bw move
bw nodepathβ
Resolve a BW object node path.
bw nodepath
--object-uri <uri> BW object URI (e.g. /sap/bw/modeling/adso/β¦) (required)
bw nodesβ
Show BW object node structure.
bw nodes <type> <name>
--datasource Use DataSource structure path instead of InfoProvider
--child-name <name> Filter by child name
--child-type <type> Filter by child type
bw qpropsβ
Read BW query properties rules.
bw qprops
bw readβ
Generic BW object reader. Use the family-specific readers (bw read-adso, bw read-dtp, β¦) when you want a parsed view.
bw read <type> <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
--source-system <name> Source system (required for RSDS, APCO)
--uri <path> Direct URI from search results (overrides type/name path)
--raw Output raw XML
bw read-adsoβ
Read BW ADSO field structure.
bw read-adso <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
bw read-dmodβ
Read BW DMOD topology.
bw read-dmod <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
bw read-dtpβ
Read BW DTP connection details (source, target, mode, runtime settings).
bw read-dtp <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
bw read-queryβ
Read a BW query-family component. Defaults to a Mermaid-rendered graph; switch to --format table or --json for structured output.
bw read-query <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
--format <f> Non-JSON output format: mermaid (default) or table
--layout <l> Mermaid layout: detailed (default) or compact
--direction <d> Mermaid direction: TD (default) or LR
--max-nodes-per-role <n> Reduce fan-out: keep at most n nodes per role; add summary nodes
--focus-role <r> Limit reduction to a specific role (rows|columns|free|filter|member|subcomponent|component)
--json-shape <s> JSON output shape: legacy (default), catalog (flat), or truth (lineage v3)
--upstream <m> Upstream resolution mode: explicit (default) or auto
--upstream-dtp <name> Compose query graph with upstream BW lineage rooted at DTP
--upstream-no-xref Disable xref expansion for upstream lineage composition
--upstream-max-xref <n> Maximum xref neighbors in upstream lineage composition (default: 100)
--lineage-max-steps <n> Maximum auto-upstream planner expansion steps (default: 4)
--lineage-strict Fail when auto-upstream resolution is ambiguous or incomplete
--lineage-explain Emit upstream resolution warnings/decisions for troubleshooting
bw read-rsdsβ
Read BW RSDS field structure.
bw read-rsds <name>
--source-system <logsys> Source system (required, e.g. ECLCLNT100)
--version <v> Version: a (active, default), m (modified), d (delivery)
bw read-trfnβ
Read BW transformation definition.
bw read-trfn <name>
--version <v> Version: a (active, default), m (modified), d (delivery)
bw reportingβ
Read BW reporting metadata.
bw reporting <compid>
--dbgmode Set dbgmode=true query parameter
--metadata-only MetadataOnly header
--incl-metadata InclMetadata header
--incl-object-values InclObjectValues header
--incl-except-def InclExceptDef header
--compact-mode CompactMode header
--from-row <n> FromRow header
--to-row <n> ToRow header
bw saveβ
Save a modified BW object. Pair with bw lock (to acquire the handle) and bw unlock (after save).
bw save <type> <name>
--lock-handle <handle> Lock handle from bw lock (required)
--transport <corrnr> Transport request number
--timestamp <ts> Server timestamp from lock response
--transport-lock-holder <corrnr> Explicit Transport-Lock-Holder header
--foreign-objects <value> Foreign-Objects header
--foreign-object-locks <value> Foreign-Object-Locks header
--foreign-correction-number <corrnr> Foreign-Correction-Number header
--foreign-package <pkg> Foreign-Package header
bw searchβ
Search BW objects across the catalog. Supports rich metadata filtering by type, subtype, status, change history, InfoArea assignment, and reverse dependency lookup.
bw search <pattern>
--type <code> Object type (ADSO, HCPR, IOBJ, TRFN, DTPA, RSDS, β¦)
--subtype <code> Object subtype (REP, SOB, RKF, β¦)
--max <n> Maximum results (default: 100)
--status <code> Object status: ACT, INA, OFF
--changed-by <user> Last changed by filter
--changed-from <date> Changed on or after date
--changed-to <date> Changed on or before date
--created-by <user> Created by filter
--created-from <date> Created on or after date
--created-to <date> Created on or before date
--depends-on-name <name> Filter by dependency object name
--depends-on-type <type> Filter by dependency object type
--infoarea <name> Filter by InfoArea assignment (e.g. 0D_NW_DEMO)
--search-desc Also search in descriptions
--search-name Search in names (default: true)
bw search-mdβ
Show BW search metadata.
bw search-md
bw sysinfoβ
Show BW system properties.
bw sysinfo
bw transportβ
Transport lifecycle for BW objects.
bw transport <check|write|list|collect>
--transport <corrnr> Transport number (for write/collect)
--package <pkg> Package name (for write)
--own-only Show only own transport requests
--rddetails <mode> Check/list detail mode: off|objs|all (default: all)
--rdprops Check/list include properties section
--allmsgs Include all messages where supported
--simulate Dry run (write only)
--mode <code> Collection mode (e.g. 000, 001, 002, 003, 004, 005, 033)
--transport-lock-holder <corrnr> Explicit Transport-Lock-Holder header
--foreign-objects <value> Foreign-Objects header
--foreign-object-locks <value> Foreign-Object-Locks header
--foreign-correction-number <corrnr> Foreign-Correction-Number header
--foreign-package <pkg> Foreign-Package header
bw unlockβ
Release a BW object lock.
bw unlock <type> <name>
bw validateβ
Validate (lint) a BW object.
bw validate <type> <name>
--action <name> Validation action name (default: validate)
bw valuehelpβ
BW value-help lookup.
bw valuehelp <domain>
--query <qs> Raw query string (k=v&k2=v2)
--max <n> Max rows
--pattern <text> Pattern filter
--type <code> Object type filter
--infoprovider <name> InfoProvider filter
bw virtualfoldersβ
Read BW virtual folders.
bw virtualfolders
--package <pkg> Package filter
--type <type> Object type filter
--user <user> User filter
bw xrefβ
Show BW cross-references.
bw xref <type> <name>
--version <v> Object version: A (active), M (modified)
--association <code> Filter by association code (001, 002, 003, β¦)
--assoc-type <type> Filter by associated object type (IOBJ, ADSO, β¦)
--max <n> Maximum number of results to return
MCP SERVERβ
mcp Start MCP server (JSON-RPC over stdio)
--catalog-db <path> Also expose the catalog_* tools over a DuckDB cache
--tools <families> Expose only these tool families (adt, bw, catalog;
comma-separated). Default: all registered families
Transport
--http Serve JSON-RPC over HTTP at POST /mcp instead of stdio
--mcp-host <addr> Address to bind with --http (default: 127.0.0.1)
--mcp-port <n> Port to bind with --http (default: 8383)
HTTP access control (--http only)
--cors-origin <list> Extra browser origins allowed to call /mcp. Same-origin,
loopback and non-browser requests are always allowed;
anything else is refused with 403. '*' allows every origin
--allowed-hosts <list> Host header values this server answers to, beyond loopback,
IP literals and the bound address. A browser request for any
other Host is refused with 403 β that is what DNS rebinding
looks like. Non-browser clients are unaffected.
'*' allows every Host
--auth-token <tok> Require 'Authorization: Bearer <tok>' on /mcp
--auth-token-env <var> Read that token from an environment variable
-c, --config <path> YAML file whose http: block supplies these settings
--allowed-hosts, --cors-origin and --auth-token are also settable as ERPL_ADT_ALLOWED_HOSTS, ERPL_ADT_CORS_ORIGIN and ERPL_ADT_AUTH_TOKEN (the SAP_* prefix works too). Precedence: flag > environment > config file.
See the MCP guide for client wiring, the access-control model, and the full tool catalogue.
CREDENTIALSβ
login Save connection credentials (~/.adt.creds, chmod 600)
logout Remove saved credentials
GLOBAL FLAGSβ
--host <host> SAP hostname (default: localhost)
--port <port> SAP port (default: 50000)
--user <user> SAP username (default: DEVELOPER)
--password <pass> SAP password
--password-env <var> Read password from env var (default: SAP_PASSWORD)
--client <num> SAP client (default: 001)
--language <iso> SAP logon language (ISO, e.g. EN, DE; default: EN)
--https Use HTTPS
--insecure Skip TLS verification
--json Machine-readable JSON output
--timeout <sec> Per-request read timeout in seconds (default: 600)
--session-file <path> Persist session for lock/write/unlock workflows
--color / --no-color ANSI colored output (auto-detects TTY)
-v Verbose logging (INFO level)
-vv Debug logging (DEBUG level)
Credential resolution: explicit --password flag > --password-env > .adt.creds (via login) > SAP_PASSWORD env var.
Every connection setting can also come from the environment under two spellings, project prefix first: ERPL_ADT_HOST / SAP_HOST, ERPL_ADT_PASSWORD / SAP_PASSWORD, and so on.
EXIT CODESβ
| Code | Meaning |
|---|---|
0 | Success |
1 | Connection / authentication error |
2 | Not found (object, package, etc.) |
3 | Clone error (deploy workflow) |
4 | Pull error (deploy workflow) |
5 | Activation error |
6 | Lock conflict |
7 | Test failure |
8 | ATC check error |
9 | Transport error |
10 | Timeout |
99 | Internal error |
Tip: erpl-adt <group> <action> --help prints command-specific examples and the latest flag listing β useful when a release adds something this page hasn't picked up yet.