io.github.mario-andreschak/mcp-abap-abap-adt-api MCP Server
io.github.mario-andreschak/mcp-abap-abap-adt-api
MCP server for ABAP development workflows via SAP ADT API—lock, edit, check syntax, and manage transports.
What is the io.github.mario-andreschak/mcp-abap-abap-adt-api MCP server?
The ABAP-ADT-API MCP server is a wrapper around abap-adt-api that enables seamless communication between ABAP systems and MCP clients. It provides tools for object management, transport handling, code analysis, and session management to support full read/write ABAP development workflows against SAP systems.
This server exposes lower-level ADT API capabilities for ABAP development, including object locking/unlocking, source code editing, syntax checking, transport request management, and DDIC (Data Dictionary) access. Use it when you need fine-grained control over ABAP object modifications and development workflows in SAP systems.
How to install io.github.mario-andreschak/mcp-abap-abap-adt-api
Copy-paste configuration for popular MCP clients.
SAP_URLrequiredBase URL of the SAP system, e.g. https://host:44300
SAP_USERrequiredSAP username
SAP_PASSWORDrequiredsecretSAP password
SAP_CLIENTSAP client number, e.g. 100
SAP_LANGUAGELogon language, e.g. EN
NODE_TLS_REJECT_UNAUTHORIZEDSet to 0 to allow self-signed certificates (development only), 1 to enforce TLS verification
Tools & capabilities
Tools this server exposes to the agent.
searchObject— Finds ABAP objects by query string and returns the object URI.transportInfo— Retrieves transport information and details for a given ABAP object.lock— Locks an ABAP object for editing and returns a lock handle.unLock— Unlocks a previously locked ABAP object using the lock handle.setObjectSource— Modifies the source code of an ABAP object with a lock handle and optional transport request.getObjectSource— Retrieves the source code of an ABAP object.syntaxCheckCode— Performs syntax validation on ABAP source code.activate— Activates an ABAP object after modifications.objectStructure— Retrieves structure and metadata of an ABAP object from its URI.ddicElement— Retrieves details of a DDIC element (data element or domain).ddicRepositoryAccess— Reads DDIC repository information for a given path.tableContents— Retrieves the contents (rows) of a table.login— Authenticates with an ABAP system.logout— Terminates the session with an ABAP system.dropSession— Clears cached session data.
Use cases
- Modify ABAP source code in classes, programs, and other objects with lock/unlock workflows
- Perform syntax checks and activate ABAP objects after code changes
- Manage transport requests for moving ABAP objects between SAP systems
- Query DDIC (Data Dictionary) structures and table definitions
- Retrieve and inspect ABAP object source code and metadata
io.github.mario-andreschak/mcp-abap-abap-adt-api MCP server FAQ
It is a wrapper around the abap-adt-api library that provides MCP tools for ABAP development workflows. It enables you to lock, edit, check syntax, activate, and manage transports for ABAP objects in SAP systems via the ADT (ABAP Development Tools) API.
Yes, the server is open-source under the MIT License and available on npm as mcp-abap-abap-adt-api.
Add it to your MCP client configuration using npx: set command to 'npx' with args ['-y', 'mcp-abap-abap-adt-api'] and provide SAP credentials via environment variables (SAP_URL, SAP_USER, SAP_PASSWORD, SAP_CLIENT, SAP_LANGUAGE). Alternatively, use FLUJO for a GUI-based installation.
You need valid SAP system credentials: the system URL, username, password, and client number. The /sap/bc/adt service must be active in your SAP system (transaction SICF), and your user must have ADT authorizations.
This server (mcp-abap-abap-adt-api) exposes lower-level ADT API tools for full read/write workflows: lock/unlock, edit source, transports, activation, syntax checks, and DDIC access. The separate mcp-abap-adt server provides higher-level, read-oriented tools like GetProgram, GetClass, and GetTable.
Yes, for development only, set the environment variable NODE_TLS_REJECT_UNAUTHORIZED to '0' in your MCP client configuration.
README (reference)
Source of truth, from the repository.
DISCLAIMER: This server is still in experimental status! Use it with caution!
ABAP-ADT-API MCP-Server
Description
The MCP-Server mcp-abap-abap-adt-api is a Model Context Protocol (MCP) server designed to facilitate seamless communication between ABAP systems and MCP clients. It is a wrapper for abap-adt-api and provides a suite of tools and resources for managing ABAP objects, handling transport requests, performing code analysis, and more, enhancing the efficiency and effectiveness of ABAP development workflows.
The server is published on npm as mcp-abap-abap-adt-api and listed in the MCP Registry as io.github.mario-andreschak/mcp-abap-abap-adt-api, so most MCP clients can install it with a single command (or a single click — see FLUJO below).
Related project: For higher-level, read-oriented ABAP tools (
GetProgram,GetClass,GetTable, …) see the separatemcp-abap-adtserver. This server (mcp-abap-abap-adt-api) exposes the lower-level ADT API (lock/unlock, edit source, transports, activation, syntax checks, DDIC access, …) for full read/write development workflows.
Features
- Authentication: Securely authenticate with ABAP systems using the
logintool. - Object Management: Create, read, update, and delete ABAP objects seamlessly.
- Transport Handling: Manage transport requests with tools like
createTransportandtransportInfo. - Code Analysis: Perform syntax checks and retrieve code completion suggestions.
- Extensibility: Easily extend the server with additional tools and resources as needed.
- Session Management: Handle session caching and termination using
dropSessionandlogout.
Prerequisites
- An SAP ABAP System reachable via ADT (ABAP Development Tools). You'll need the system URL, a username and password, and the client number. Ensure the
/sap/bc/adtservice is active in transactionSICF(your basis administrator can help). - Node.js and npm — download the LTS version from nodejs.org. Verify with
node -vandnpm -v.
Installation
There are three ways to use this server, from easiest to most manual:
Integrating with FLUJO (recommended)
FLUJO is the easiest way to use this server — no cloning, building, or hand-editing JSON config:
- In FLUJO, navigate to MCP.
- Click Add Server.
- On the Marketplace tab, search for
mcp-abap-abap-adt-apiand select it. - FLUJO fetches the npm package automatically and opens the Local Server tab. Enter your SAP URL, User, Password (and optionally client/language), then click Save.
That's it — FLUJO downloads and runs the npm package for you and keeps your SAP credentials with the installed server.
Streamable HTTP transport (via FLUJO)
mcp-abap-abap-adt-api runs over stdio. If you need to reach it over streamable HTTP — for example from another app on your machine or a client that only speaks HTTP — let FLUJO re-host it: install the server in FLUJO as above, then toggle "Expose to external apps" on the server. FLUJO's built-in mcp-proxy then serves it over HTTP at http://localhost:4200/mcp-proxy/mcp-abap-abap-adt-api, and any HTTP-capable MCP client can connect with a config like:
{
"mcpServers": {
"mcp-abap-abap-adt-api": {
"type": "http",
"url": "http://localhost:4200/mcp-proxy/mcp-abap-abap-adt-api"
}
}
}
FLUJO keeps your SAP credentials with the installed server, so the HTTP config itself carries none.
Quick start with npx (any MCP client)
The server is published on npm, so you don't need to clone or build anything — most MCP clients can launch it directly via npx. Add it to your MCP client configuration (e.g. Cline, Claude Desktop, Claude Code):
{
"mcpServers": {
"mcp-abap-abap-adt-api": {
"command": "npx",
"args": ["-y", "mcp-abap-abap-adt-api"],
"env": {
"SAP_URL": "https://your-sap-server.com:44300",
"SAP_USER": "YOUR_SAP_USERNAME",
"SAP_PASSWORD": "YOUR_SAP_PASSWORD",
"SAP_CLIENT": "100",
"SAP_LANGUAGE": "EN"
}
}
}
}
If your SAP system uses a self-signed certificate, add "NODE_TLS_REJECT_UNAUTHORIZED": "0" to the env block (development only).
Windows tip: if
npxisn't found, set"command": "npx.cmd", or use the full path tonodewith the absolute path todist/index.jsfrom a source install (see below).
Build from source
-
Clone the Repository
git clone https://github.com/mario-andreschak/mcp-abap-abap-adt-api.git cd mcp-abap-abap-adt-api -
Install Dependencies
npm install -
Configure Environment Variables
An
.env.examplefile is provided in the root directory as a template for the required environment variables. To set up your environment:a. Copy the
.env.examplefile and rename it to.env:cp .env.example .envb. Open the
.envfile and replace the placeholder values with your actual SAP connection details:SAP_URL=https://your-sap-server.com:44300 SAP_USER=YOUR_SAP_USERNAME SAP_PASSWORD=YOUR_SAP_PASSWORD SAP_CLIENT=YOUR_SAP_CLIENT SAP_LANGUAGE=YOUR_SAP_LANGUAGENote: The SAP_CLIENT and SAP_LANGUAGE variables are optional but recommended.
If you're using self-signed certificates, you can also set:
NODE_TLS_REJECT_UNAUTHORIZED="0"IMPORTANT: Never commit your
.envfile to version control. It's already included in.gitignoreto prevent accidental commits. -
Build the Project
npm run build -
Run the Server
npm run startWhen integrating a source build into an MCP client, point
commandatnodewith an absolute path to the build output:{ "mcpServers": { "mcp-abap-abap-adt-api": { "command": "node", "args": ["PATH_TO_YOUR/mcp-abap-abap-adt-api/dist/index.js"], "disabled": false, "autoApprove": [] } } }
Custom Instruction
Use this Custom Instruction to explain the tool to your model:
## mcp-abap-abap-adt-api Server
This server provides tools for interacting with an SAP system via ADT (ABAP Development Tools) APIs. It allows you to retrieve information about ABAP objects, modify source code, and manage transports.
**Key Tools and Usage:**
* **`searchObject`:** Finds ABAP objects based on a query string (e.g., class name).
* `query`: (string, required) The search term.
* Returns the object's URI. Example: `/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model`
* **`transportInfo`:** Retrieves transport information for a given object.
* `objSourceUrl`: (string, required) The object's URI (obtained from `searchObject`).
* Returns transport details, including the transport request number (`TRKORR` or `transportInfo.LOCKS.HEADER.TRKORR` in the JSON response).
* **`lock`:** Locks an ABAP object for editing.
* `objectUrl`: (string, required) The object's URI.
* Returns a `lockHandle`, which is required for subsequent modifications.
* **`unLock`:** Unlocks a previously locked ABAP object.
* `objectUrl`: (string, required) The object's URI.
* `lockHandle`: (string, required) The lock handle obtained from the `lock` operation.
* **`setObjectSource`:** Modifies the source code of an ABAP object.
* `objectSourceUrl`: (string, required) The object's URI *with the suffix `/source/main`*. Example: `/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model/source/main`
* `lockHandle`: (string, required) The lock handle obtained from the `lock` operation.
* `source`: (string, required) The complete, modified ABAP source code.
* `transport`: (string, optional) The transport request number.
* **`syntaxCheckCode`:** Performs a syntax check on a given ABAP source code.
* `code`: (string, required) The ABAP source code to check.
* `url`: (string, optional) The URL of the object.
* `mainUrl`: (string, optional) The main URL.
* `mainProgram`: (string, optional) The main program.
* `version`: (string, optional) The version.
* Returns syntax check results, including any errors.
* **`activate`:** Activates an ABAP object. (See notes below on activation/unlocking.)
* `object`: The object to be activated.
* **`getObjectSource`:** Retrieves the source code of an ABAP object.
* `objectSourceUrl`: (string, required) The object's URI *with the suffix `/source/main`*.
**Workflow for Modifying ABAP Code:**
1. **Find the object URI:** Use `searchObject`.
2. **Read the original source code:** Use `getObjectSource` (with the `/source/main` suffix).
3. **Clone and Modify the source code locally:** (e.g., `write_to_file` for creating a local copy, and using `read_file`, `replace_in_file` for modifying this local copy).
4. **Get transport information:** Use `transportInfo`.
5. **Lock the object:** Use `lock`.
6. **Set the modified source code:** Use `setObjectSource` (with the `/source/main` suffix).
7. **Perform a syntax check:** Use `syntaxCheckCode`.
8. **Activate** the object, Use `activate`..
9. **unLock the object:** Use `unLock`.
**Important Notes:**
* **File Handling:** SAP is completly de-coupled from the local file system. Reading source code will only return the code as tool result - it has no effect on file. Files are not synchronized with SAP but merely a local copy for our reference. FYI: It's not strictly necessary for you to create local copies of source codes, as they have no effect on SAP, but it helps us track changes.
* **File Handling:** The local filenames you will use will not contain any paths, but only a filename! It's preferable to use a pattern like "[ObjectName].[ObjectType].abap". (e.g., SAPMV45A.prog.abap for a ABAP Program SAPMV45A, CL_IXML.clas.abap for a Class CL_IXML)
* **URL Suffix:** Remember to add `/source/main` to the object URI when using `setObjectSource` and `getObjectSource`.
* **Transport Request:** Obtain the transport request number (e.g., from `transportInfo` or from the user) and include it in relevant operations.
* **Lock Handle:** The `lockHandle` obtained from the `lock` operation is crucial for `setObjectSource` and `unLock`. Ensure you are using a valid `lockHandle`. If a lock fails, you may need to re-acquire the lock. Locks can expire or be released by other users.
* **Activation/Unlocking Order:** The exact order of `activate` and `unLock` operations might need clarification. Refer to the tool descriptions or ask the user. It appears `activate` can be used without unlocking first.
* **Error Handling:** The tools return JSON responses. Check for error messages within these responses.
Efficient Database Access
SAP systems contain vast amounts of data. It's crucial to write ABAP code that accesses the database efficiently to minimize performance impact and network traffic. Avoid selecting entire tables or using broad WHERE clauses when you only need specific data.
-
Use
WHEREclauses: Always useWHEREclauses in yourSELECTstatements to filter the data retrieved from the database. Select only the specific rows you need. -
UP TO 1 ROWS: If you only need a single record, use theSELECT SINGLEstatement, if you can guarantee that you can provide ALL the key fields for theSELECT SINGLEstatement. Otherwise, use theSELECTstatement with theUP TO 1 ROWSaddition. This tells the database to stop searching after finding the first matching record, improving performance. Example:SELECT vgbel FROM vbrp WHERE vbeln = @me->lv_vbeln INTO @DATA(lv_vgbel) UP TO 1 ROWS. EXIT. " Exit any loop after this. ENDSELECT.
Checking Table and Structure Definitions
When working with ABAP objects, you may encounter errors related to unknown field names or incorrect table usage. Use the following tools to inspect DDIC (Data Dictionary) objects:
objectStructure: Retrieves the structure/metadata of an ABAP object (including DDIC tables and structures) from its object URI. UsesearchObjectfirst to resolve the object name to a URI.ddicElement: Retrieves details of a DDIC element (e.g. a data element or domain).ddicRepositoryAccess: Reads DDIC repository information for a given path.tableContents: Retrieves the contents (rows) of a table, not its definition. UserunQueryfor ad-hocSELECTs.
Note: Earlier versions of this README listed
GetTable,GetStructure, andGetTypeInfo. Those tools are not part of this server — they belong to the separatemcp-abap-adtproject. This server (mcp-abap-abap-adt-api) exposes the lower-level ADT API tools listed above instead.
Troubleshooting
npxcan't find the package / client won't start it: ensure Node.js is installed and on your PATH (node -v,npm -v). On Windows try"command": "npx.cmd", or use a source build with an absolute path tonode dist/index.js.- SAP connection errors: verify your credentials (
SAP_URL,SAP_USER,SAP_PASSWORD,SAP_CLIENT), confirm the system is reachable, that your user has ADT authorizations, and that/sap/bc/adtis active inSICF. - TLS / self-signed certificate errors: for development only, set
NODE_TLS_REJECT_UNAUTHORIZED=0(env var or in the clientenvblock).
Contributing
Contributions are welcome! Please follow these steps to contribute:
-
Fork the Repository
-
Create a New Branch
git checkout -b feature/your-feature-name -
Commit Your Changes
git commit -m "Add some feature" -
Push to the Branch
git push origin feature/your-feature-name -
Open a Pull Request
License
This project is licensed under the MIT License.
Related MCP servers
Connect Claude and Cline to your SAP ABAP system via ADT to read programs, classes, tables, and CDS objects.

MCP Audio Studio
A digital audio workstation MCP App with sequencing, mixing, effects, automation, and rendering.

MCP CAD Studio
A self-contained parametric CAD studio MCP server with an interactive MCP App.

MCP VS Code
A self-hosted VS Code workbench embedded as an interactive MCP App.
Browse Imgflip meme templates and generate memes (caption images, AI memes) via the Imgflip API

50 tools to manage Rundeck jobs, executions, projects, nodes, and system via MCP

