MCP server for SAP ABAP development via ADT API. Connect AI assistants to SAP: read, write, test, and deploy ABAP code without SAP GUI.
Server has 15 well-structured tools with explicit schemas and descriptions. Naming follows verb_noun convention (bsp_read_file, abap_query, ddic_element). Descriptions are detailed (100-300 chars) and include use-case guidance. However, several parameter descriptions lack format constraints, and output schemas are not documented in the tool definitions. Tool annotations (readOnlyHint, destructiveHint) are present and correctly applied. Error handling descriptions exist but lack recovery guidance. No critical gaps, but schema completeness and output documentation prevent higher scores.
Activate an ABAP object, making it the active version. Must be called after abap_set_source or abap_create. Returns success:true with empty messages if clean. Returns success:false with error messages if activation fails — read them, fix the source, and retry. For FUGR/FF (function modules): activation always targets the parent function group — provide fugr param.
Activate multiple ABAP objects in a single ADT request. More efficient than calling abap_activate repeatedly for each object. Returns activated:true if all objects activated cleanly, or activated:false with error messages if any failed. Use this after writing source for several objects at once (e.g. after a set of transport_assign calls).
Create a new ABAP object. For temporary objects use package=$TMP — no transport needed. For permanent objects, provide both a named package and transport. After creation, write source with abap_set_source and activate with abap_activate. BDEF (behavior definition) is supported — activation order is DDLS → BDEF → behavior pool class.
Delete an ABAP object. Locks the object, deletes it, and the lock is released implicitly by the delete. For objects in a transport, provide the transport number.
Output schemas not documented in tool definitions. LLMs cannot plan downstream calls or extract required fields without knowing response structure.
Parameter format constraints missing. 'sql' param in abap_query lacks OpenSQL syntax guidance; 'where' in abap_table lacks clause format examples. Descriptions state constraints verbally but lack formal enum/pattern declarations.
Error recovery guidance incomplete. abap_query notes 'Invalid query string' errors but does not guide LLM on retry strategy or alternative tools (e.g., use abap_run instead). Error descriptions lack actionable next steps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
Get metadata for an ABAP object: package, transport layer, active/inactive status, upgrade flag (upgradeFlag=true means object is in SPAU adjustment mode and cannot be edited via ADT), and structural information. Use this before attempting to edit an object you are unfamiliar with.
Execute a SQL query against the SAP database via ADT. Use OpenSQL syntax (FROM clause, WHERE, ORDER BY). For complex data investigations, prefer abap_run which gives full ABAP logic. NOTE: "Invalid query string. Only SELECT statement is allowed." errors come from the SAP ADT endpoint itself — not from client-side validation. This can occur for tables with special characters in names (e.g. /UI5/FILE), cluster tables, or views not accessible via the datapreview endpoint. In these cases, use abap_run with a SELECT INTO TABLE statement instead.
Search for ABAP objects by name pattern. Returns object names, types, and ADT URLs. IMPORTANT: Only TRAILING wildcards work. Use "/DSN/BIL*" not "/DSN/*BIL*". Leading wildcards (*SOMETHING) and mid-name wildcards (/DSN/*FOO*BAR*) will fail. If you need to find an object by partial name, put the known prefix first: /DSN/BIL*.
Read contents of an ABAP table or CDS view. Supports an optional WHERE clause including LIKE, BETWEEN, and comparisons. For multi-table joins or subqueries, use abap_query instead.
Read a file from a BSP / UI5 application repository, or list all files in the application. Uses the SAP ADT filestore endpoint (/sap/bc/adt/filestore/ui5-bsp). Without file_path: returns a list of all files in the app. With file_path: returns the raw content of that file (e.g. webapp/manifest.json). Use this to read manifest.json for component IDs, OData service URIs, and dependency info.
Search for a string inside the text files of a BSP / UI5 application. Lists all files in the app, reads each text file (.json, .js, .xml, .html, .css, .properties, etc.), and returns the file paths that contain the search string. This is the primary way to find which BSP file contains a specific component ID, OData service name, or any other string — without needing to know the file name in advance.
Retrieve DDIC metadata for a CDS view or data element — field names, data types, key flags, data element labels, lengths, decimals, and CDS annotations. Pass the CDS entity path (e.g. /DSN/C_MY_VIEW or SEPM_I_PRODUCT_E). For associations, set getTargetForAssociation=true to resolve the target entity's fields. For extension views, set getExtensionViews=true.
List all DDIC objects that reference a given CDS entity or data element. Returns each referencing object's URI, type, name, and path. Useful for understanding the impact of changing a data model.
Pull from a gCTS repository, importing commits into the SAP system. Used in the cherry-pick pipeline to import transports across systems.
List all gCTS repositories registered on this SAP system.
Look up UI5 application metadata from the SAP UI5 Application Index (/UI5/APPIDX). The app index is maintained by /UI5/APP_INDEX_CALCULATE and stores parsed manifest.json metadata: component ID, BSP application name, libraries, last updated timestamp. Faster than reading manifest.json directly — use this to find which BSP app owns a component ID, or to enumerate all UI5 apps on the system.
Pagination not implemented for list-like tools. git_repos and bsp_search_content lack limit/offset or cursor parameters. Large result sets risk context window exhaustion.
Confirmation/dry-run pattern missing for destructive operations. abap_delete and git_pull (WRITE risk) lack confirmation or preview steps. Agents can accidentally delete objects or pull unvetted commits.