ABAP development from Claude and other MCP hosts: read and write source, transports, unit tests, ATC, dumps, debugger. Multi-system, with server-side guard rails.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
claude mcp add abap-adt-mcp -- npx -y ENOENT{
"mcpServers": {
"abap-adt-mcp": {
"command": "npx",
"args": ["-y", "ENOENT"]
}
}
}Resumen de MCP Servers
# abap-adt-mcp
**Let Claude read, write, test and check ABAP code on your SAP systems.**
[](https://www.npmjs.com/package/abap-adt-mcp)
[](https://github.com/williansaez/abap-adt-mcp/actions/workflows/ci.yml)
[](LICENSE)
[](https://nodejs.org)
[](https://registry.modelcontextprotocol.io/?search=abap-adt-mcp)
English · [Português (Brasil)](README.pt-BR.md) · [Deutsch](README.de.md)
abap-adt-mcp is a [Model Context Protocol](https://modelcontextprotocol.io) server. Run it next to Claude Desktop, Claude Code or any other MCP host, point it at one or more SAP systems, and the model gets the same ADT REST endpoints Eclipse uses: search objects, read and edit source, create transports, activate, run ABAP Unit and ATC, read short dumps, query tables. One server exposes **173 tools** over as many SAP systems as you configure, S/4HANA Cloud and on-prem alike.
> Use it deliberately, and prefer development systems. A destination without a `policy` block is fully writable within your SAP authorizations. Per-destination guard rails (read-only, allowed packages, denied tables) are enforced by the server itself, whatever the host approves, so a careless prompt cannot reach the wrong system.
## Table of contents
- [What is new in 2.0.0](#what-is-new-in-200)
- [Setup](#setup)
- [What to ask the model](#what-to-ask-the-model)
- [Workflows in detail](#workflows-in-detail)
- [Built-in prompts](#built-in-prompts)
- [Other ways to install](#other-ways-to-install)
- [Authentication](#authentication)
- [Keeping it safe](#keeping-it-safe)
- [Audit log](#audit-log)
- [S/4HANA Cloud versus on-prem](#s4hana-cloud-versus-on-prem)
- [Configuration reference](#configuration-reference)
- [HTTP transport (optional)](#http-transport-optional)
- [Tool catalog (all 173 tools, by toolset)](#tool-catalog-all-173-tools-by-toolset)
- [Compared with SAP's official ADT MCP Server](#compared-with-saps-official-adt-mcp-server)
- [Skills and plugin](#skills-and-plugin)
- [Troubleshooting](#troubleshooting)
- [Testing and contributing](#testing-and-contributing)
- [License](#license)
## What is new in 2.0.0
Released 2026-09-08. The full list is in [CHANGELOG.md](CHANGELOG.md#200---2026-09-08---node-22-floor-puppeteer-core-25-dependabot-cooldown-tls-by-name); what matters when you upgrade:
- **Node.js 22.12 or newer is required** (breaking). Node 18 and 20 are past end of life and receive no security fixes; a server holding SAP credentials should not run on them. On an older Node, `npm` prints `EBADENGINE` and the server is untested; install the current LTS and restart the host. The container image was already on `node:22-alpine`.
- **`tls.servername` on a destination.** For a system reached by IP address or short hostname whose certificate carries the fully qualified name: the name is verified and sent as SNI, verification stays on, and `insecureTls` is no longer the only way through that landscape. `listSystems` shows `servername NAME`.
- **Certificate errors teach the fix.** A failed handshake reaches the model as `kind: "tlsCertificate"` with a hint that names the destination: unknown issuer gives the `openssl s_client` line for that host and points at `tls.ca`, a name mismatch quotes the names Node reported and points at `tls.servername`, an expired certificate says that only renewal fixes it. `insecureTls` is mentioned last.
- **`insecureTls` stays**, per destination, off by default, announced at startup; [SECURITY.md](SECURITY.md#tls) records why.
- **Supply chain.** `puppeteer-core` 25 removes the last open Dependabot alert from the dependency tree (`npm audit` reports zero vulnerabilities); Dependabot now waits a cooldown before proposing updates and groups security updates into one pull request; `dotenv` is loaded quietly so stdout stays a clean JSON-RPC channel.
Upgrading from 1.x needs no configuration change: `systems.json`, the policies, the tool names and the environment variables are unchanged.
## Setup
Three things before you start:
- **Node.js 22.12 or newer** (22 or 24 LTS; 2.0.0 dropped Node 18 and 20). Download the LTS installer from [nodejs.org](https://nodejs.org); it bundles `npm` and `npx`, which is all the host needs. No terminal is required to check: if Node is missing, the host's log says `spawn npx ENOENT` when it tries to start the server (see [step 2](#2-register-the-server-in-your-host)).
- **Access to the SAP system.** On S/4HANA Cloud (public edition) there is nothing to configure on the SAP side for named users: your user needs the business role that allows Eclipse ADT on the tenant (`SAP_BR_DEVELOPER` in the standard delivery); if Eclipse ADT works for you, this server works too. On-prem, the `/sap/bc/adt` service must be active in transaction `SICF` (a Basis task) and your user needs the usual ADT development authorizations. Only unattended `oauth` clients need a Communication Arrangement, see [Authentication](#authentication).
- **A Chromium browser** (Chrome, Edge or Brave) on the machine when you use browser SSO.
### 1. Describe your SAP systems
Create a folder `.abap-adt-mcp` in your home directory and a file `systems.json` inside it, one entry per system (a "destination"). Without a terminal: on macOS open Finder, press Shift-Cmd-G, enter `~`, create the folder (Finder asks you to confirm a name starting with a dot; Shift-Cmd-. shows hidden folders), then save the file there from any text editor. On Windows the folder is `C:\Users\<you>\.abap-adt-mcp`, created in File Explorer like any other. One S/4HANA Cloud tenant with browser SSO needs exactly this:
```json
{
"DEV": {
"url": "https://myXXXXXX.s4hana.cloud.sap",
"client": "080",
"authType": "sso",
"default": true
}
}
```
`url` is mandatory; `client` is the client your SSO session lands on (on the tested tenants the development system logged on to `080` and the customizing and test systems to `100`; the About entry in the launchpad's user menu shows it); `authType` defaults to `sso` and `"default": true` lets you omit the destination name in every call. The key (`DEV`) is your choice and is the name you will use in chats. Several systems, with guard rails, look like this (or copy [systems.example.json](systems.example.json)):
```json
{
"DEV": {
"url": "https://myXXXXXX.s4hana.cloud.sap",
"client": "080",
"authType": "sso",
"default": true,
"policy": { "allowedPackages": ["Z*"] }
},
"PRD": {
"url": "https://myYYYYYY.s4hana.cloud.sap",
"client": "100",
"authType": "sso",
"policy": { "readOnly": true, "deniedTables": ["PA*", "HR*", "USR02"], "allowFreeSql": false }
},
"ONPREM": {
"url": "https://sap.example.com:44300",
"client": "100",
"authType": "basic",
"user": "DEVELOPER",
"password": "${env:ONPREM_PASSWORD}",
"policy": { "allowedPackages": ["Z*", "$*"] },
"tls": { "ca": "/etc/ssl/corp-ca.pem" }
}
}
```
The pattern for any productive or test system is the `PRD` entry: add `"policy": { "readOnly": true }` and the server refuses every write there, whatever the model is asked. `sso` opens a real browser once for S/4HANA Cloud named users; `basic` is for on-prem users and Communication Users; `oauth` is for unattended clients. `${env:VAR}` pulls a secret from the environment so it never sits in the file, `policy` is enforced by the server, and `tls.ca` adds a corporate CA with verification kept on (`tls.servername` names the certificate when the system is reached by IP address). `$*` (local packages) is listed only on the on-prem entry because the tested Public Cloud tenant refuses `$TMP`.
If you have a terminal, restrict the file to your user:
```bash
chmod 600 ~/.abap-adt-mcp/systems.json
```
You can skip this step when the file holds no inline passwords (an SSO-only file, or secrets referenced as `${env:VAR}`): the server then only prints a warning if the file is readable by others. It refuses to start only when a shared-readable file contains inline passwords, client secrets or git passwords. Windows has no file modes; the check is skipped there.
### 2. Register the server in your host
The package is on npm as [`abap-adt-mcp`](https://www.npmjs.com/package/abap-adt-mcp) (published through trusted publishing with provenance), so `npx` is all you need.
**Claude Code**, one line:
```bash
claude mcp add abap-adt-mcp -e SAP_SYSTEMS_FILE=$HOME/.abap-adt-mcp/systems.json -- npx -y abap-adt-mcp
```
**Claude Desktop** (Settings > Developer > Edit Config, then quit and reopen the app). Replace `me` with your own user name; on Windows write the path as `C:/Users/<you>/.abap-adt-mcp/systems.json`:
```json
{
"mcpServers": {
"abap-adt-mcp": {
"command": "npx",
"args": ["-y", "abap-adt-mcp"],
"env": { "SAP_SYSTEMS_FILE": "/Users/me/.abap-adt-mcp/systems.json", "MCP_TOOLSETS": "focused" }
}
}
}
```
`MCP_TOOLSETS=focused` publishes the 114 development tools instead of all 173, which keeps the tool schemas from eating the chat's context window; drop it when you need the debugger, traces, abapGit, RAP or refactoring toolsets. The same JSON works in Cursor, Cline and other hosts that read an `mcpServers` map; VS Code names the map `servers` instead, so rename the top-level key there ([docs/HOSTS.md](docs/HOSTS.md) has the per-host form). The key `abap-adt-mcp` is the name the host shows for the server and the prefix of every tool (`mcp__abap-adt-mcp__searchObject` in Claude Code); public ABAP skills written for this server look for that name, so a different key only stops those skills from recognising the server, nothing else breaks.
After the restart, ClaudeLo que la gente pregunta sobre abap-adt-mcp
¿Qué es williansaez/abap-adt-mcp?
+
williansaez/abap-adt-mcp es mcp servers para el ecosistema de Claude AI. ABAP development from Claude and other MCP hosts: read and write source, transports, unit tests, ATC, dumps, debugger. Multi-system, with server-side guard rails. Tiene 2 estrellas en GitHub y su última actualización registrada es del 2026-09-09.
¿Cómo se instala abap-adt-mcp?
+
Puedes instalar abap-adt-mcp clonando el repositorio (https://github.com/williansaez/abap-adt-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar williansaez/abap-adt-mcp?
+
Nuestro agente de seguridad ha analizado williansaez/abap-adt-mcp y le ha asignado un Trust Score de 90/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene williansaez/abap-adt-mcp?
+
williansaez/abap-adt-mcp es mantenido por williansaez. La última actividad registrada en GitHub es del 2026-09-09, con 5 issues abiertos.
¿Hay alternativas a abap-adt-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega abap-adt-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/williansaez-abap-adt-mcp)<a href="https://claudewave.com/repo/williansaez-abap-adt-mcp"><img src="https://claudewave.com/api/badge/williansaez-abap-adt-mcp" alt="Featured on ClaudeWave: williansaez/abap-adt-mcp" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!