MCP serverMCP servertypeExposes tools to a coding agent over MCP.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

mcp-abap-abap-adt-api

The write half of the same pair: a thin wrapper over Marcello Urbani's abap-adt-api, exposing lock, edit, activate, transport and syntax check for a full development loop.

Where its sibling reads, this one changes: authentication through a login tool, create-read-update-delete on objects, createTransport and transportInfo, syntax checks and code completion, and session handling through dropSession and logout. It is deliberately close to the underlying abap-adt-api library rather than an opinionated layer on top, which is why several other servers in this corner are forks or descendants of it. Published on npm and in the MCP Registry.

Facts

Latestv0.1.1ReleasedLast pushLicenceMIT

Where it sits

Lives in
Provides
Agent access to your codeABAPAgent access to your codecapabilityLetting a coding agent read the project or the system you actually have, reach its model, its objects and its checks, and act on it. In file-based environments that works out of the box; complex systems need dedicated access capabilities. Whatever the environment, the agent also needs project- and framework-specific context, so it understands the thing in front of it rather than guessing from what it remembers of its training data. The transport is incidental: an MCP server, a language server or a CLI answer the same question, and what differs between them is how much of the real thing the agent can see. Distinct from [MCP servers](capability:mcp-servers), which is a protocol adapter on your own running service, and from [agent guidance](capability:agent-guidance), which is knowledge handed over as files rather than read from the thing itself.

Who is behind it

mario-andreschakmario-andreschakPersonMaintains this
In the atlas: maintains 3, contributes to 5
@mario-andreschak
maintainerHenry MaoPersonContributes to this
In the atlas: contributes to 4
@calclavia
FLUJOPersonContributes to this
In the atlas: contributes to 2
@flujo-app
2 contributors

Before choosing this

Conditions

PracticalFunctional boundary

Its own README opens by calling the server experimental. It also writes: locking, editing and activating in a system an agent can reach is a permissions decision before it is a tooling one.

PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your codeAn MCP server calls ADT or another SAP API of a running system for an agent.
  • § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
  • § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
  • § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.

An agent that plans and executes ADT calls is the case section 2.2.2 names. Check that the endpoints are published for the intended use, and that the design runs within a pathway SAP identifies for it.

SAP API Policy 4.2026a →

What it declares

Every artifact

Type
MCP server
Origin
Independently maintained
Runtime
Node.js

As an MCP server

Transport
stdio
Authentication
user and password
Read-only
nostates it is not
Guardrails
3 quoted from README show all
  • DISCLAIMER: This server is still in experimental status! Use it with caution!

  • (development only)

  • IMPORTANT: Never commit your .env file to version control.

For agent access to ABAP code

Read
sourcesearchwhere-usedDDICCDStable data
Change
writecreateactivatetransportsgit
Check
syntaxATCABAP Unit
Run
run codedumps
property statedstated nonot said

Connections4

Install

npm add mcp-abap-abap-adt-api

Derived from the package name. No recipe recorded; the README has the configuration.

Where mcp-abap-abap-adt-api runsmcp-abap-abap-adt-api — README, checked 2026-09-11: “`mcp-abap-abap-adt-api` runs over **stdio**.”stdioYour MCP client, actorYour MCP clientmcp-abap-abap-adt-api, modulemcp-abap-abap-adt-api
SAPnot SAP's, or the project's ownstated in the document

README

quoted from mario-andreschak/mcp-abap-abap-adt-api under MIT, read
mario-andreschak/mcp-abap-abap-adt-api/README.mdOn GitHub

ABAP ADT API MCP server

This server preserves 127 existing SAP ABAP tools and adds readResultPage for large results. Object CRUD, locking, activation, transports, queries, debugging, refactoring, Git and analysis share one SAP session owned by a trusted local stdio client. SAP authorizations determine what that session can read or change.

Installation and protocol

Use Node22.22.2+ or24.15.0+. Run npm ci and npm run build, then configure your MCP client to launch node with the absolute path to dist/index.js. Existing npm/registry releases do not contain this PR until the owner releases it. No release is published here.

{
  "mcpServers": {
    "abap-adt": {
      "command": "node",
      "args": ["/absolute/path/mcp-abap-abap-adt-api/dist/index.js"],
      "env": {
        "SAP_URL": "https://sap.example.invalid:44300",
        "SAP_USER": "YOUR_USER",
        "SAP_PASSWORD": "YOUR_PASSWORD",
        "SAP_CLIENT": "100",
        "SAP_LANGUAGE": "EN"
      }
    }
  }
}

Public TypeScript MCP2.0.0 supports modern2026-07-28 discovery and legacy2025-11-25 initialization, validated tools, cancellation and proper errors. This package exposes stdio; it is not an HTTP listener or MCP OAuth provider. Missing credentials still allow discovery. healthcheck reports local configuration and session recovery state, not verified SAP connectivity.

Environment comes from the MCP client. Dotenv loads only when SAP_ENV_FILE explicitly names a file. SAP_URL is an origin without a path, query or embedded credentials. For a private CA set NODE_EXTRA_CA_CERTS before launching Node. TLS verification cannot be disabled. Loopback HTTP is allowed for fixtures; a trusted private HTTP deployment requires SAP_ALLOW_HTTP=1 and exposes credentials to that network.

An authorized broker's static SAP_BEARER_TOKEN can replace the password. Rotate it by restarting the process; this does not implement XSUAA grants or prove tenant acceptance. No password-grant flow is introduced.

Session and limits

Only one operation runs at a time; overlaps receive a busy error. Debugger listeners also occupy this session until completed or cancelled. SAP_REQUEST_TIMEOUT_MS defaults to60000 and accepts100..120000, including login and every underlying HTTP request. Cancellation closes real sockets. The client does not follow redirects, inherit environment proxies, retry mutations or automatically reauthenticate a stateful call. An interrupted write may already have changed SAP: inspect writes and locks, then explicitly login, dropSession or logout to recover. Shutdown attempts a bounded logout; unreachable SAP can retain state until its own expiry.

HTTP stays on the configured origin under /sap/, with 2MiB requests,4MiB responses and verified TLS. XML entity declarations are rejected. Input JSON is bounded by bytes, nesting, arrays and field contracts. This is a trusted operator tool, not an OS sandbox or multi-user service. Git tools can ask SAP to contact a remote Git service with supplied credentials; those operations depend on SAP and remote permissions.

Schemas are derived from pinned abap-adt-api8.4.3 declarations, including objects, arrays and overloads. Previously documented JSON strings for object arguments remain accepted, parsed and validated. Unknown top-level arguments are rejected. scripts/generate-input-contracts.mjs and its report record the mapping; rerun and review on dependency updates. Its TypeScript6 compiler API is development-only; TypeScript7 builds the application.

Source snapshots from getObjectSource/successful setObjectSource can feed syntaxCheckCode when code is omitted (issue#2). The per-runtime cache is limited to8MiB,64entries and five minutes. Mutating/session operations clear old snapshots. Snapshots are the last observed text, not a guarantee against external edits. Explicit empty text is checked as an equivalent blank line because upstream rejects an empty string; results report emptySourceNormalized. Source options accept structured or JSON objects, including active/inactive versions. Existing line paging remains available. Class includes fetch class metadata first; a public-request adapter handles valid single-link class XML rejected by the upstream parser. Maps preserve their entries in JSON.

Above64KiB, results return an opaque resultId, a JSON page, nextOffset and expiry. Use readResultPage, concatenate pages and JSON-parse to recover the original tool result. Paging never repeats SAP requests or writes. At most four 4MiB results live for five minutes; mutations/session resets clear them. Expired results need an intentional repeat of the original read. Larger results fail clearly. Query/search/ATC defaults are100 with caps of1000 where available; an API may return an extra sentinel row. Other large structures use generic paging.

Validation and deployment acceptance

npm run build
npm test
npm run verify:stdio
npm run verify:package
npm audit
docker build -t mcp-abap-api .
node scripts/verify-stdio.mjs --offline docker run --rm -i --network none mcp-abap-api

Tests use real local HTTP/XML fixtures and installed modern/legacy protocol exchanges. Linux/Windows Node22/24 and non-root Docker run in CI. No SAP production credentials or writes are used. For an authorized read-only deployment canary set SAP_LIVE_TEST=1 and optional SAP_LIVE_SOURCE_URL, then run npm run verify:live. This checks login/discovery/optional source reading, not every SAP write/debug/Git/transport feature. Validate those on a development system. Permissions, credentials, API availability and support through the end of2026 remain deployment checks.

Existing PRs19/20/21/22 overlap errors, result sizing, class includes and login; all remain open for owner review. PR15's state restoration and refactoring JSON work already exists on the starting branch. PR10's proposed XSUAA implementation is not merged here.

References: abap-adt-api, MCP2026-07-28, Node private CA configuration.

Existing tool workflow reference

Original workflow examples follow. Runtime, schema and installation behavior above supersedes older client-specific examples.

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 `WHERE` clauses:** Always use `WHERE` clauses in your `SELECT` statements 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 the `SELECT SINGLE` statement, if you can guarantee that you can provide ALL the key fields for the `SELECT SINGLE` statement. Otherwise, use the `SELECT` statement with the `UP TO 1 ROWS` addition. This tells the database to stop searching after finding the first matching record, improving performance. Example:

    ```abap
    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. Use `searchObject` first 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. Use `runQuery` for ad-hoc `SELECT`s.

Troubleshooting

  • npx can'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 to node 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/adt is active in SICF.
  • TLS / self-signed certificate errors: configure NODE_EXTRA_CA_CERTS with the absolute path to a trusted CA certificate before Node starts. Verification stays enabled.

Contributing

Contributions are welcome! Please follow these steps to contribute:

  1. Fork the Repository

  2. Create a New Branch

    git checkout -b feature/your-feature-name
  3. Commit Your Changes

    git commit -m "Add some feature"
  4. Push to the Branch

    git push origin feature/your-feature-name
  5. Open a Pull Request

License

This project is licensed under the MIT License.

MIT, read

History

Latest

v0.1.0

Other 1

Notes
  • Initial project setup.
  1. v0.1.1

    Other 1

    Notes
    • Improved and unified the response structure.
18downloads per week, npm
Weekly downloads for mcp-abap-abap-adt-api26 complete calendar weeks from 2026-04-27 to 2026-10-25; the latest total is 18.27 Apr – 3 May: 04 May – 10 May: 011 May – 17 May: 018 May – 24 May: 025 May – 31 May: 01 Jun – 7 Jun: 08 Jun – 14 Jun: 015 Jun – 21 Jun: 022 Jun – 28 Jun: 029 Jun – 5 Jul: 06 Jul – 12 Jul: 16213 Jul – 19 Jul: 8720 Jul – 26 Jul: 11627 Jul – 2 Aug: 1033 Aug – 9 Aug: 10810 Aug – 16 Aug: 10517 Aug – 23 Aug: 14324 Aug – 30 Aug: 12531 Aug – 6 Sept: 1017 Sept – 13 Sept: 10514 Sept – 20 Sept: 11521 Sept – 27 Sept: 13428 Sept – 4 Oct: 1725 Oct – 11 Oct: 21112 Oct – 18 Oct: 6119 Oct – 25 Oct: 18
Declared alternatives
  1. mcp-abap-adtRead-oriented MCP server fetching ABAP programs, classes, tables
  2. dassian-adtFork of mcp-abap-abap-adt-api with 25 tools and session recovery
Agent access to ABAP code
  1. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loop
  2. arc-1-bopf-enharc-1 extension for reading and maintaining BOPF enhancements
  3. HammerNative macOS code editor for ABAP and CDS
  4. arc-1-lspEdition of ARC-1 that runs ADT calls through adt-ls
  5. arc-1MCP server over the ADT REST API for ABAP objects
  6. arc1-abap-bridgeVS Code bridge between arc-1 and ADT for VS Code
  7. arc1-adt-abap-mcp-extEclipse add-on enabling the ADT MCP server with read-only tools
  8. ABAP Accelerator MCP ServerAWS's ABAP MCP server for Amazon Q Developer and Kiro
  9. Modernization Agents for SAP on AWSAWS agents for ABAP, PI/PO and BW modernisation work
  10. @mcp-abap-adt/coreABAP ADT MCP server published as an npm scope and plugin
  11. chandrashekhar-mahajan/abap-mcp-serverABAP MCP server with ADT tools and five authentication strategies
  12. dassian-adtFork of mcp-abap-abap-adt-api with 25 tools and session recovery
  13. erpl-adtC++ binary speaking the ADT REST API as a CLI and MCP server
  14. bw-modeling-mcpMCP server for BW/4HANA modelling objects
  15. EPOD ADT MCP ServerMCP server for ABAP on the ADT session, in Eclipse or standalone
  16. ZARC1_EXTENSION_FORMSarc-1 extension for SAPscript and Smart Forms objects
  17. fgalastri/MCP_ABAPValidates an ABAP class before it is deployed by converting the global class to a local one and syntax-checking that — plus CDS DDL and table metadata retrieval.
  18. fr0ster/mcp-abap-adtABAP MCP server with full CRUD on on-premise and ABAP Cloud
  19. abapsmithABAP MCP server over ADT with a local journal that can undo writes
  20. sap-ai-dev-toolkitMCP proxy pinning an agent's ABAP tools to one SAP system
  21. aibap.mcpGo MCP server that writes, activates and runs ABAP classes via ADT
  22. BellaEclipse plugin bringing Claude into ABAP Development Tools
  23. Maherd18/sap-mcp-serverPolicy-checked MCP server for ABAP development over ADT
  24. sapdumpmcpMCP server reading ABAP short dumps over ADT
  25. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystem
  26. mcp-abap-adtRead-oriented MCP server fetching ABAP programs, classes, tables
  27. SAP MCP Connection ManagerWindows desktop manager handing SAP connections to assistants over MCP
  28. ABAPilotMCP connector for ECC and on-premise S/4HANA with a licensed SAP side
  29. vibing-steampunkADT-to-MCP bridge in Go reaching past what ADT exposes
  30. ADT MCP ServerLocal HTTP MCP server started from ABAP Development Tools for VS Code
  31. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code for editing, debugging, ATC and transports
  32. SAP Joule for Developers, ABAP AI capabilitiesSAP's AI for ABAP development in ADT for Eclipse and VS Code
  33. ABAPDocMCPMCP server turning a transport request into a WRICEF specification
  34. claude-sap-kitClaude Code plugin adding Custom_* tools to arc-1
  35. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP tools
  36. abap-adt-cliCLI that pulls and pushes ABAP packages as local files over ADT
  37. workskong/mcp-abap-adtLight MCP adapter for ABAP over ADT, documented in Korean
  38. KlystronMCP server in ABAP inside the application server, with agent skills
  39. pyrfc-mcpMCP server calling RFC-enabled function modules behind an allowlist
  40. ABAP-AI-CODE-TOOLSabapGit package adding create, modify and delete tools to ABAP AI Code
  41. ABAP AI CodeAgentic coding assistant in ABAP that runs as an SAP GUI report
  42. VERTEXADT extension for Eclipse and VS Code showing three SAP GUI tools

Details

Sources4
sap-ai-mcp-serversdiscovered herechecked
npm registry, mcp-abap-abap-adt-apiversion, releases, installschecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
latestv0.1.1
first release
releases and cadence1
discovered viasap-ai-mcp-servers
first seen in the atlas
ecosystem and domainabap, ai-and-agents
Contributors2

From the repository’s contributor list, .

History in the atlas2
  1. Triaged out of data/crawled/mcp-candidates.json, the sap-ai-mcp-servers sweep. Written from the repository's own README; the catalogue is credited as where it was found and its words are not reused.
  2. First seen.
For your agent
Ref
artifact:mario-andreschak-mcp-abap-adt-api
JSON
/artifacts/mario-andreschak-mcp-abap-adt-api.json
MCP
Connecting an agent