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 |
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
| 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