abap-adt-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SAP_URL | Yes | The URL of the SAP ABAP system with ADT enabled (e.g., https://s4h.example.com:44300) | |
| SAP_USER | Yes | SAP system user with S_DEVELOP authorization | |
| SAP_CLIENT | Yes | SAP client number (e.g., 100) | |
| SAP_PASSWORD | Yes | Password for the SAP user | |
| ABAP_MCP_READONLY | No | Set to 'true' to disable write tools completely | false |
| ABAP_MCP_AUDIT_LOG | No | File path for audit log (JSON lines) | ./abap-mcp-audit.log |
| ABAP_MCP_SYSTEM_ROLE | No | Set to 'prod' to force read-only mode regardless of READONLY flag | dev |
| ABAP_MCP_ALLOWED_PREFIXES | No | Comma-separated list of allowed object name prefixes (default only Z and Y) | Z,Y |
| SAP_SSL_REJECT_UNAUTHORIZED | No | Set to 'false' for development with self-signed certificates | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| adt_write_function_module_sourceA | Edit an existing function module's source (lock -> write -> unlock -> optional activate). Accepts the classic |
| 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 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| adt_system_info |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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