Skip to main content
Glama
abap0917

abap-adt-mcp

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

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

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