Skip to main content
Glama
abap0917

abap-adt-mcp

by abap0917

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SAP_URLYesThe URL of the SAP ABAP system with ADT enabled (e.g., https://s4h.example.com:44300)
SAP_USERYesSAP system user with S_DEVELOP authorization
SAP_CLIENTYesSAP client number (e.g., 100)
SAP_PASSWORDYesPassword for the SAP user
ABAP_MCP_READONLYNoSet to 'true' to disable write tools completelyfalse
ABAP_MCP_AUDIT_LOGNoFile path for audit log (JSON lines)./abap-mcp-audit.log
ABAP_MCP_SYSTEM_ROLENoSet to 'prod' to force read-only mode regardless of READONLY flagdev
ABAP_MCP_ALLOWED_PREFIXESNoComma-separated list of allowed object name prefixes (default only Z and Y)Z,Y
SAP_SSL_REJECT_UNAUTHORIZEDNoSet to 'false' for development with self-signed certificatestrue

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
adt_pingA

Test connectivity to the SAP ABAP system and report session/role info. Call this first to verify the MCP server can reach SAP via ADT.

adt_search_objectsA

Search ABAP repository objects by name pattern (wildcards * and + are supported by ADT). Returns name, type, package and URI for each match. Use the URI with adt_read_source / adt_get_object_structure.

adt_browse_packageA

List the objects contained in an ABAP package (DEVCLASS), e.g. ZMY_PKG. Returns object type, name and URI for each child.

adt_read_sourceA

Read the ABAP source of an object. Accept either the object URI (e.g. /sap/bc/adt/oo/classes/zcl_x) or its /source/main URI. Supports line-range slicing and line-number prefixes. Large sources are truncated with a warning unless a range is given. Set attachContext=true to prepend a compressed prologue of the DDIC objects (domains/data elements) referenced by TYPE/LIKE clauses — saves the agent from issuing one lookup per referenced type (token optimisation).

adt_get_object_structureA

Get the structure/outline of an ABAP object (methods, attributes, includes, metadata). For classes, returns each include's sourceUri (definitions/implementations/main/testclasses) and the method/attribute outline (name + visibility). Use the include sourceUri with adt_read_source to read a single include, and the method names to request method-level edits. This is the token-optimised entry point for navigating large objects without reading their full source.

adt_syntax_checkA

Run an ABAP syntax check on provided source without locking or writing. Returns a list of errors/warnings with line numbers. Use before adt_write_source to pre-validate.

adt_list_transportsA

List open transport requests owned by a user, split into workbench and customizing targets (modifiable / released).

adt_get_table_dataA

Read rows from a DDIC table or CDS view (read-only). Supports an optional WHERE clause and a row limit. Values are decoded to human-readable form.

adt_read_textelementsA

Read the text elements (text pool) of an ABAP program: text symbols, selection texts and heading texts. Supports a language override to read translations. Useful for i18n audits and before editing texts.

adt_read_function_moduleA

Read a function module (SE37): its full source and its parsed parameter interface (IMPORTING / EXPORTING / CHANGING / TABLES / EXCEPTIONS). Optionally pass functionGroup to skip the lookup; otherwise the group is resolved from a repository search. Returns the normalized source (which you can edit and feed back to adt_write_function_module_source) plus a structured 'parameters' array for reasoning about the signature.

adt_list_function_groupA

List the function modules (and includes) contained in a function group (SE37). Returns each module's name, URI and description. Useful for discovering what a group offers before calling/reading a module.

adt_write_sourceA

AI-safe edit of an ABAP object. Orchestrates: optional conflict check → optional syntax check → lock → write (with transport) → unlock (always) → optional activate. Never leaves a dangling lock. Blocked in read-only mode; object name must match the allowed Z*/Y* prefix whitelist.

adt_activate_objectA

Activate an ABAP object (and its inactive parts). Use after adt_write_source with activate=false, or to activate a manually edited object. Blocked in read-only mode.

adt_create_objectA

Create a new ABAP object shell (no source yet) in a package (default $TMP). Returns the new object's URI so you can follow up with adt_write_source. Name must match the Z*/Y* prefix whitelist.

adt_manage_transportB

Transport request operations: create a new request, release one, or list a user's requests. Blocked in read-only mode.

adt_create_domainA

Create a DDIC domain (DOMA) with a technical type (CHAR/NUMC/DEC/...), length and decimals. The domain is created in the given package (default $TMP, local/no transport) and optionally activated. Name must match the allowed Z*/Y* prefix. Returns the object URI and activation status.

adt_create_dataelementA

Create a DDIC data element (DTEL) that references an existing domain. The technical type (CHAR/length/decimals) is derived automatically from the referenced domain. Field-label lengths default to short 10 / medium 20 / long 40 / heading 55; a longer supplied label uses its actual length. Created in the given package (default $TMP, local/no transport) and optionally activated. Name must match Z*/Y* prefix. Returns the object URI, referenced domain, derived type and activation status.

adt_create_tableA

Create a DDIC transparent table (TABL) using ABAP Dictionary DDL. Each field references a data element (e.g. MANDT, YTSTDE2_192637) or a built-in type (CHAR/NUMC/DEC/CURR/QUAN/INT4/DATS/TIMS/... with optional length/decimals). Technical attributes use SAP-recommended defaults (enhancement category, delivery class, data maintenance). By default a key MANDT field (data element MANDT, foreign key to check table T000) is auto-prepended as the first key; disable via autoClient=false or supply your own MANDT. Fields may carry a foreignKey. Created in the given package (default $TMP, local/no transport) and optionally activated. Name must match Z*/Y* prefix. Returns the object URI, field count, the generated DDL source and activation status.

adt_write_textelementsA

Write/replace the text elements (text pool) of an ABAP program. Orchestrates: transport resolution -> lock -> PUT text pool -> unlock (always) -> activate the text-pool sub-object (textelements URI, NOT the program URI — the latter does NOT reach the text pool). The provided entries fully replace the text pool for the (program, language). Blocked in read-only mode; program name must match the Z*/Y* prefix whitelist.

adt_edit_sourceA

AI-token-optimised precise edit of an ABAP object. Send only the fragments to change as {oldString, newString} pairs; the tool reads the current source, applies each replacement (oldString must match exactly once), then runs lock -> write -> unlock -> optional activate. Use this instead of adt_write_source when you only need to change a few spots — it can cut the request payload by ~90%+ for large objects. Each oldString must be unique; if not, include more surrounding context to disambiguate. Blocked in read-only mode; object name must match the Z*/Y* prefix whitelist.

adt_create_function_groupA

Create a function group (FUGR) in a package (default $TMP, local/no transport) and optionally activate it. Function modules must live inside a function group, so create this first. Name must match the Z*/Y* prefix. Returns the group URI and activation status.

adt_create_function_moduleA

Create a function module (FUGR/FF) inside an existing function group, write its source and optionally activate it. The function group must already exist (create it first with adt_create_function_group). Provide the full FM source in either the classic FUNCTION z_fm. ... ENDFUNCTION. form (with or without the "* Local Interface comment block) or the normalized form — it is auto-normalized to what ADT accepts. Name must match the Z*/Y* prefix. Returns the FM URI, activation status and the normalized source that was written.

adt_write_function_module_sourceA

Edit an existing function module's source (lock -> write -> unlock -> optional activate). Accepts the classic FUNCTION z_fm. ... ENDFUNCTION. form or the normalized form; it is auto-normalized to what ADT accepts. Blocked in read-only mode; name must match the Z*/Y* prefix. For a first-time create use adt_create_function_module instead.

adt_create_packageA

Create a development package (DEVC/K). A package must nest under an existing parent package and inherit that parent's software component + transport layer, so pass superPackage (a real customer package, e.g. ZRAP_TEST_192637 — NOT $TMP). softwareComponent/transportLayer are derived from the parent automatically; pass them explicitly only to override. Name must match the Z*/Y* prefix. Returns the package URI and the resolved attributes. NOTE: this is the 'create package' branch of the package/transport decision flow — use it when a write tool returns a package clarification.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
adt_system_info

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/abap0917/abap-adt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server