abap-config-mcp
An MCP server that reaches an ABAP system over ADT for the development loop and drives customizing through ABAP it deploys into the system, so a config change runs the SM30/SM34 maintenance-view runtime.
A Node server that logs into the ABAP systems listed in its own connections.json, reaches the ADT resourcesADT resourcesThe HTTP endpoint an ABAP system exposes as the adt ICF service under /sap/bc/adt, so a client outside the system can reach development objects, delivered with the platform rather than installed.sap official, abap over HTTP through abap-adt-apiabap-adt-apiA JS/TS client for the ADT resources an ABAP system exposes, so a program outside the system can do against it what the maintainer calls a good share of what the Eclipse tools do.independent, abap, and serves 58 tools to any MCP client at an endpoint of its own: search, read, write, activate, ATC, ABAP Unit, transports, table queries, where-used, dumps and a debugger among them. The customizing half is what separates it: the server deploys two ABAP units into the box, ZCL_MCP_DIAG behind a SICF node for read-only probes and ZCL_MCP_CUST_ENGINE for writes, and a config change runs through SAP's VIEW_MAINTENANCE_SINGLE_ENTRY, so the foreign-key checks, change documents and transport recording of a manual SPRO change happen too. All 58 tools carry a risk tier and ABAP_MCP_MAX_TIER decides which are registered at all: 0 for read-only diagnostics, 1 to add governed customizing writes, 2 for the repository and debug surface, with an unclassified tool defaulting to 2. Beside the HTTP server, npm run package builds a Claude Code plugin marketplace, a .mcpb extension for Claude Desktop and a sap-abap skill archive, and in that form Claude starts the server itself over stdio with no port and no shared secret. The idea of driving ADT from outside the SAP GUI is credited to ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abap, whose code the maintainer states this server does not contain.
Facts
Where it sits
Who is behind it
In the atlas: maintains 1, contributes to 1@netweaver1970maintainer
Before choosing this
Conditions
PracticalFunctional boundary
The HTTP server is a plain HTTP service whose only gate is a shared secret: the README states that anyone who can reach its port and knows the secret can drive every tool, and an empty apiKey leaves it unauthenticated with a warning in the log. Past that the limit is whatever the one SAP user in the connection may do, so least privilege on that user and the ABAP_MCP_MAX_TIER ceiling are the whole boundary. It is intended for DEV and UAT systems; for production the maintainer intends read-only investigation under a read-only user, and a client closed for changes would refuse the write tools in any case.
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 →PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your systemsAn MCP server uses SAP APIs to supply tools, resources or data to 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.
MCP does not replace the API's documented-use boundary. Check that every endpoint is published for the intended use and whether the policy's AI-call or extraction provisions apply to the design.
SAP API Policy 4.2026a →What it declares
Every artifact
- Type
- MCP server
- Origin
- Independently maintained
- Runtime
- Node.js
As an MCP server
- Transport
- HTTPstdio
- Language
- TypeScript
For agent access to your code
- Read
- sourcesearchwhere-usedDDICCDStable data
- Change
- writecreateactivatetransportsgit
- Check
- syntaxATCABAP Unit
- Run
- run codedumps
- Objects it reads
- ProgramsClassesInterfacesFunction groups and modulesTables and structuresPackages
- Objects it writes
- ProgramsClassesInterfacesFunction groups and modulesTables and structuresData elementsDomainsPackages
Connections
Letting a coding agent read and act on your project or system
Giving an AI agent access to the systems you run over MCP
Moving a change from development through test to production
Seeing what running code did between input and result
HTTP endpoint under /sap/bc/adt exposing ABAP development objects
HTTP endpoint under /sap/bc/adt exposing ABAP development objects
Download
Architecture
Download
connections.json, logged in with that connection's user and client; the session is re-established after eight idle minutes and force_relogin resets a degraded one.Legend and provenance
README
quoted from netweaver1970/abap-config-mcp under MIT, readabap-config-mcp
A standalone Model Context Protocol (MCP) server for SAP ABAP development and customizing. Connects directly to your SAP system via the ADT REST API and exposes 58 tools to any MCP-compatible AI client — no VS Code, no Copilot subscription required.
It does two things that, together, let an AI assistant work in an SAP system the way a developer/consultant does:
- ABAP development — search, read, write, activate, transport, debug, run ATC & unit tests, browse packages, query and compare table data — a full ABAP development toolset exposed as standalone MCP tools.
- Customizing / IMG (the headline addition) — an in-system customizing engine the server deploys into your SAP box drives the standard SM30/SM34 maintenance-view runtime, so configuration changes get foreign-key checks, change documents and governed transport recording exactly as a manual SPRO change would. Search the IMG, read/diff/copy config, copy whole organizational units. See docs/customizing-engine.md.
Works with Claude Desktop, Claude Code (the terminal/prompt), Cursor, Windsurf, Microsoft 365 Copilot, IBM Bob, and any other MCP-compatible AI client.
Acknowledgements
The idea of driving SAP ADT from outside the SAP GUI was inspired by Marcello Urbani's excellent marcellourbani/vscode_abap_remote_fs — go give it a star. This project is an independent, from-scratch MCP server (its own development tools and its own in-system customizing engine); it does not contain that project's code. It does build on Marcello's separately published, MIT-licensed abap-adt-api library for the low-level ADT protocol calls. See NOTICE for full attribution.
⚠️ Before you connect this to anything, read Security & authorization. In short: protect the server with a strong shared secret, and remember the server can do nothing beyond the rights of the one SAP user it logs in as. It is built for DEV → UAT; on Production, only read-only investigation with a read-only user is intended.
What it enables
Ask your AI assistant things like:
"Find program ZCAR_MM_ORDERS and add a method to filter by plant, then activate it on transport CARX000123"
"Run ATC checks on class ZCL_INVOICE_PROCESSOR and fix any priority-1 findings"
"Show me all open transports across all developers in the system — who owns what and what objects are in each one?"
"Find tables related to article listing — we're on IS-Retail so I don't know the technical names"
"Debug the next execution of report ZCAR_BATCH_JOB — set a breakpoint on line 142 and inspect variable LT_ITEMS when it hits"
"Copy the POS profile customizing from profile 0001 to ZRET and record it on a Customizing transport the SM30-standard way"
The AI handles the full workflow autonomously: search → read → write → check quality → activate → test. For customizing/IMG it drives the in-system maintenance-view runtime (SM30/SM34) so FK checks, change documents and transport recording all happen exactly as a manual SPRO change would — see docs/customizing-engine.md.
Feature overview
| Category | Tools | What the AI can do |
|---|---|---|
| Discovery | 4 tools | Find objects by name/wildcard, inspect metadata, list systems, explore ADT services |
| Source reading | 4 tools | Read full source, grep within source, batch-read multiple objects, syntax-check without saving |
| Write | 5 tools | Lock objects, write source, unlock/discard, create new objects, delete objects |
| Activate | 2 tools | Activate single objects, batch-activate all inactive objects |
| Quality | 3 tools | ATC checks with findings and locations, unit test execution, create test includes |
| Transports | 3 tools | List transports across all users with their objects (read from E070/E071), create/release/delete/change owner, find which transport an object needs. Every write picks its transport by one rule — see Transport selection |
| Data | 4 tools | Search tables by description keyword, describe table structure, run SELECT queries, read table contents |
| Analysis | 4 tools | Where-used cross-reference, version history, runtime dumps (ST22), inactive objects list |
| Text elements | 2 tools | Read/write selection screen texts, text symbols, and list headings |
| Packages | 2 tools | Browse package contents grouped by type, create new packages |
| Debugging | 7 tools | Attach debugger, set/delete breakpoints, step through code, inspect/change variables, call stack |
| Customizing & IMG | 12 tools | Search IMG/SPRO, describe/read/diff/plan customizing, copy or delete config the SM30-standard way with governed transport recording, headless org-unit copy, bootstrap/cleanup the in-system engine — see docs/customizing-engine.md |
| Operations | 2 tools | Force re-login to heal a degraded ADT session, HANA memory report |
Quick start
1. Install
git clone https://github.com/netweaver1970/abap-config-mcp
cd abap-config-mcp
npm install
npm run build
2. Configure connections
There are two separate pieces of configuration — don't mix them up:
| What | Where | Who sets it |
|---|---|---|
| SAP systems the server may log into (host, user, password, client) — plus the server's port and shared secret | connections.json, here on the server side (this step) | Once, on the machine running the server |
| Registering this server with your AI client (the MCP endpoint URL + the shared secret) | Your AI client's config — a different file per client (Claude Desktop vs. Claude Code vs. Cursor…). See Connecting AI clients | Each user / each client |
This step is the first one. Create connections.json in the project directory:
{
"connections": [
{
"id": "DEV",
"url": "http://your-sap-host:8001",
"username": "DEVELOPER",
"password": "your-password",
"client": "100",
"language": "EN"
}
],
"server": {
"port": 4847,
"apiKey": "replace-with-a-random-secret"
}
}
A call that names no connectionId goes to the first connection listed. To pick another, add "defaultConnection": "<id>" at the top level (or set ABAP_MCP_DEFAULT_CONNECTION); connected_systems shows which one it is.
connections.jsonis gitignored and never committed — it holds SAP passwords and the shared secret. Seeconfig/connections.example.jsonfor reference.
The server.apiKey is the shared secret every AI client must present to use the server. Generate a strong one now and paste the same value into both this file and each client config later:
openssl rand -hex 32 # e.g. 9f2c… → put this in server.apiKey
Why it matters and what the SAP user can/can't do is covered in Security & authorization — please read it before connecting a client.
Connection options:
| Field | Required | Description |
|---|---|---|
id | yes | Unique name for this system (e.g. DEV, CAR) |
url | yes | SAP ICM base URL. System nr NN → HTTP :80NN (e.g. 8001), HTTPS :443NN (e.g. 44301) |
username / password | yes | SAP logon credentials |
client | no | Logon client (e.g. 100) |
language | no | Logon language (default EN) |
allowSelfSigned | no | Set true for HTTPS with self-signed certificates (common on dev systems) |
ca | no | PEM CA certificate string to trust |
timeout | no | HTTP request timeout in milliseconds |
3. Verify the connection
npm run test-connection # tests the first configured connection
npm run test-connection -- CAR # tests a specific connection by id
The test logs in, fetches the ADT discovery endpoint, and runs a sample object search. It prints specific troubleshooting hints (port, client, credentials, ICF node) if anything fails.
4. Start the server
npm start
You should see the startup banner (your version numbers may be newer):
╔══════════════════════════════════════════════════════════════════════╗
║ ABAP Config MCP Server v1.9.0 ║
╠══════════════════════════════════════════════════════════════════════╣
║ Server version : 1.9.0 ║
║ Cust. engine ver. : 0.9.17 (expected on SAP after deploy) ║
╠══════════════════════════════════════════════════════════════════════╣
║ MCP endpoint : http://localhost:4847/mcp ║
║ Health check : http://localhost:4847/health ║
╠══════════════════════════════════════════════════════════════════════╣
║ Debug mode : ABAP_MCP_DEBUG=1 npm start ║
║ Session idle : ABAP_SESSION_IDLE_MS=360000 npm start (default 8m)║
╚══════════════════════════════════════════════════════════════════════╝
Leave this terminal running. Check it any time with curl http://localhost:4847/health →
{"status":"ok",...}. To stop it, press Ctrl-C. (To run it permanently in the
background instead, see 4b below.)
4b. (Optional) Run it permanently in the background
npm start (step 4) is the manual way — it runs in the foreground and stops when
you close the terminal or log out. For day-to-day use you usually want the server to
start automatically at login and restart itself if it crashes. Pick your OS:
macOS — launchd (recommended)
Install the bundled LaunchAgent (deploy/com.abap-config-mcp.server.plist):
# 1. Check the node path in the plist (which node, e.g. /opt/homebrew/bin/node).
# The plist expects the repo at ~/github/abap-config-mcp; edit it if yours is elsewhere.
# 2. Install it with YOUR_USER replaced by your home folder (launchd does not expand ~),
# then start it:
sed "s|/Users/YOUR_USER|$HOME|g" deploy/com.abap-config-mcp.server.plist \
> ~/Library/LaunchAgents/com.abap-config-mcp.server.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.abap-config-mcp.server.plist
launchctl enable gui/$(id -u)/com.abap-config-mcp.server
RunAtLoad starts it at login; KeepAlive restarts it if it ever exits. Logs go to
~/Library/Logs/abap-config-mcp.log. The agent sets WorkingDirectory to the repo
root because connections.json and the engine ABAP (src/abap/*.abap) resolve
relative to the working directory.
launchctl print gui/$(id -u)/com.abap-config-mcp.server | grep -E 'state|pid' # status
launchctl kickstart -k gui/$(id -u)/com.abap-config-mcp.server # restart (after a rebuild)
launchctl bootout gui/$(id -u)/com.abap-config-mcp.server # stop & unload
Windows — Task Scheduler (simple) or NSSM (auto-restart)
Simple — Task Scheduler (auto-start at logon):
- Open Task Scheduler → Create Task…
- General: name
ABAP Config MCP Server; tick Run only when user is logged on. - Triggers → New: At log on.
- Actions → New:
- Program/script:
C:\Program Files\nodejs\node.exe(runwhere nodeto confirm) - Add arguments:
dist\index.js - Start in:
C:\path\to\abap-config-mcp← must be the repo root, soconnections.jsonandsrc\abapresolve.
- Program/script:
- Save. Right-click the task → Run to start it now.
Robust — install as a Windows Service with NSSM (auto-restarts on crash, runs without login):
nssm install ABAP-CONFIG-MCP "C:\Program Files\nodejs\node.exe" "dist\index.js"
nssm set ABAP-CONFIG-MCP AppDirectory "C:\path\to\abap-config-mcp"
nssm set ABAP-CONFIG-MCP AppStdout "C:\path\to\abap-config-mcp\logs\server.log"
nssm set ABAP-CONFIG-MCP AppStderr "C:\path\to\abap-config-mcp\logs\server.log"
nssm start ABAP-CONFIG-MCP
Either way, verify with curl http://localhost:4847/health.
Cross-platform — pm2
pm2 works the same on macOS, Windows and Linux:
npm install -g pm2
pm2 start dist/index.js --name abap-config-mcp --cwd /path/to/abap-config-mcp
pm2 save && pm2 startup # follow the printed command to enable boot-start
After a
npm run build, restart whichever service you use (launchctl kickstart -k …, Task Scheduler Run,nssm restart ABAP-CONFIG-MCP, orpm2 restart abap-mcp) so it serves the newdist/. ABAP-only edits tosrc/abap/*.abapneed no restart — the engine source is read from disk per call.
5. Connect your AI client
Pick the section below for your client. All clients use the same running server — you can connect multiple clients simultaneously.
Security & authorization
Please read this before exposing the server to any client. There are two independent layers of protection — the shared secret (who may talk to the server) and the SAP user's authorizations (what the server is allowed to do once it's in SAP).
1. The shared secret (server.apiKey)
The server is a plain HTTP service. Anyone who can reach its port and knows the secret can drive every tool. The secret is the only thing standing between the network and your SAP system, so treat it like a password.
- It lives in
connections.jsonunderserver.apiKey, and the exact same value must be set in every AI client config (asAuthorization: Bearer <secret>, orx-api-keyfor clients that use that header — see each client below). - Every request without a matching secret is rejected with HTTP 401. The
comparison is constant-time. If you leave
apiKeyempty the server runs unauthenticated and logs a warning — only ever acceptable onlocalhostfor a quick local test. - Use a long, random secret — not a dictionary word, not
changeme, not your username. Generate one withopenssl rand -hex 32(or[Convert]::ToBase64String((1..32|%{Get-Random -Max 256}))in PowerShell). Rotate it if it ever leaks; rotating means updating the server file and every client. - Bind to
localhost(the default) and reach it over your VPN, or put it behind a TLS-terminating reverse proxy / API gateway if a remote cloud client (e.g. M365 Copilot) must reach it. Never put a plain-HTTP server with a weak secret on a routable address.
2. The server can do nothing beyond the SAP user's rights
This is the most important guardrail. The server holds no special powers of its
own — every action runs through ADT / RFC as the SAP user in that connection's
username, inside that user's client. SAP's own authorization checks apply to
everything:
- writing/activating code needs
S_DEVELOP; table maintenance needsS_TABU_DIS(the customizing engine explicitly enforces it on the target table); transports needS_TRANSPRT; debugging needsS_DEVELOPdebug activities, and so on. - If the user lacks an authorization, the tool fails with SAP's authorization error — the server cannot escalate around it.
So scope the service user with least privilege for what you actually want to do, and rely on SAP roles — not the tool — as the real control. A read-only user makes the whole server effectively read-only no matter which tools a client calls.
3. Where it belongs in the landscape: DEV → UAT, read-only on Production
This tooling is intended for development and UAT systems, where writing code and customizing is the point. It is not meant to perform development or customizing on Production:
- A Production client is normally closed for changes anyway (SCC4 /
SE06system change option), so write/customizing tools would be refused by SAP regardless. - What is legitimate on Production — and needs no write access at all — is
read-only investigation: reading code,
where-used, dump analysis (ST22), and table-content comparisons between systems. Point a read-only, limited user at the Production connection for those use cases; the write tools simply won't have the rights to do anything, which is exactly what you want.
Rule of thumb: give the connection the least SAP authorization that still lets you do the job, and let SAP enforce it. On Production, that authorization is read-only.
4. Risk tiers — cap the tool surface with ABAP_MCP_MAX_TIER
SAP authorizations are the real control, but the server can also hide whole classes of tool so a deployment exposes only what corporate security accepts. All 58 tools are classified into three risk tiers (full registry: docs/TIERS.md):
| Tier | What it does | Examples |
|---|---|---|
| 0 | read-only / diagnostics | execute_data_query, customizing_read, hana_memory_report, abap_memory_report, where_used, analyze_dump |
| 1 | config / data writes (SM30 runtime, governed transports) | customizing_apply, customizing_create, org_copy, retail_listing |
| 2 | repository / code writes, execution, debug | write_abap_object_source, abap_activate, run_unit_tests, engine_deploy, abap_debug_* |
Set ABAP_MCP_MAX_TIER = 0 (read-only Production server), 1 (also allow
governed customizing), or 2/unset (full Dev surface). Tools above the ceiling are
not registered at all, and any unclassified tool defaults to Tier 2 — a new tool
is never silently exposed on a restricted server.
Transport selection
Every tool that records onto a transport — create_abap_object, write_abap_object_source,
delete_abap_object, set_text_elements, create_test_include, create_package,
customizing_create, customizing_apply — decides by the same rule, in this order:
- A transport you pass is checked (exists, still modifiable, right kind: Workbench for repository objects, Customizing for customizing) and used. It becomes the transport of that piece of work.
- An object SAP already has locked into a request records there — SAP allows nothing else.
createTransport: truecreates a new request. Nothing else ever creates one.- The transport this piece of work already uses, if still open, is used again, and the result
says so. Pass another
transportto change it. - Existing requests are preferred: exactly one open request of the right kind is used; with several, the tool lists them and asks which; with none, it asks, offering creation.
A piece of work is workItem (any short name — HPM, a ticket number). Without one it is the MCP
session, so two conversations never share a transport by accident. The choices are kept per SAP
connection in ~/.abap-mcp/transport-memory.json (override with ABAP_MCP_TRANSPORT_MEMORY), so
they survive server restarts; manage_transport_requests list shows which work item each request
belongs to. Local packages ($TMP), delivery class A tables and clients that do not record changes
need no transport.
5. In-system ABAP: transported, not pushed (engine_deploy)
The server installs a small amount of ABAP into the box (the customizing/diagnostic engine). For Production these objects should arrive via normal CTS transport, not the Tier-2 bootstrap push. They're split into two units so the low-risk part can ship and be approved on its own:
| Unit | In-system object | Tier | Prod path |
|---|---|---|---|
diag | ZCL_MCP_DIAG (+ SICF /sap/bc/zmcp_diag) — ping/env probe, HANA + ABAP memory, read-only | 0 | ✅ ship via CTS — standalone box-health value |
cust | ZCL_MCP_CUST_ENGINE + ZMCP_CUST_WRITE — customizing writes, org copy, listing | 1 | with scrutiny |
The engine_deploy tool makes transportability a per-connection choice: run it per
unit with transportable:true package:"ZMCP_DIAG" transport:"…" to create it in a
Workbench Z package on a transport (CTS to Prod), or transportable:false for $TMP
(Dev-only); re-run any time to flip a unit. The unit's SICF node is registered
automatically as part of the deploy. See docs/TIERS.md for the
full deployment + capability-awareness story.
Connecting AI clients
Reminder (from step 2): SAP systems are configured once in
connections.jsonon the server; what differs per client is where you paste the endpoint URL + shared secret. The Claude Code "prompt" (terminal) and the Claude Desktop app use different config files — pick your client below.
Claude Desktop
The desktop app (the Claude GUI). It speaks MCP over stdio, so it uses the
mcp-remote bridge to reach our HTTP server. Edit the Claude Desktop config file
(create it if it doesn't exist) — this is not the same file Claude Code uses:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json(Microsoft Store install:%LOCALAPPDATA%\Packages\Claude_…\LocalCache\Roaming\Claude\claude_desktop_config.json)
The easiest way to find the right file is Settings → Developer → Edit Config in the app. On Windows that opens File Explorer with the file selected — right-click it → Open with → Notepad.
macOS
{
"mcpServers": {
"abap": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://127.0.0.1:4847/mcp",
"--header",
"Authorization: Bearer replace-with-a-random-secret"
]
}
}
}
Windows
{
"mcpServers": {
"abap": {
"command": "cmd",
"args": [
"/c", "npx", "-y", "mcp-remote@latest",
"http://127.0.0.1:4847/mcp",
"--transport", "http-only",
"--header", "Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer replace-with-a-random-secret"
}
}
}
}
Why the Windows version differs:
cmd /c npx— Claude Desktop can't launchnpxdirectly on Windows (spawn npx ENOENT).- Token in
env, no space afterAuthorization:— Windows splits arguments that contain spaces, so"Authorization: Bearer …"arrives mangled and the server answers 401. 127.0.0.1, notlocalhost(both platforms) — the server listens on IPv4127.0.0.1only, and recent Node resolveslocalhostto IPv6::1first →ECONNREFUSED.
The secret must match the one the server was started with. Start the server before Claude Desktop, then fully quit Claude (tray / menu-bar icon → Quit — closing the window isn't enough) and reopen it. The ABAP tools will appear in the tools list.
Troubleshooting: test the bridge on its own from a terminal — if this lists the ABAP tools, the server and secret are fine and any remaining problem is in the Claude config:
npx -y -p mcp-remote@latest mcp-remote-client http://127.0.0.1:4847/mcp --header "Authorization:Bearer replace-with-a-random-secret"
Claude Desktop's own log is mcp-server-abap.log in %APPDATA%\Claude\logs\ (Windows)
or ~/Library/Logs/Claude/ (macOS).
Claude Code (the terminal / "prompt")
The command-line Claude. It connects to HTTP MCP servers directly (no bridge). The easiest way is the CLI — run this from any terminal:
claude mcp add --transport http abap http://localhost:4847/mcp \
--header "Authorization: Bearer replace-with-a-random-secret"
Or edit the config by hand — per-project .mcp.json (in the project root, shareable
with your team) or your user-level Claude Code config:
{
"mcpServers": {
"abap": {
"url": "http://localhost:4847/mcp",
"headers": {
"Authorization": "Bearer replace-with-a-random-secret"
}
}
}
}
Check it connected with claude mcp list (or /mcp inside a session).
Same server, different doorway: the desktop app and the terminal keep their MCP registration in separate files, but both point at the one running server and use the same shared secret.
Cursor / Windsurf
Both support MCP natively. Add to your MCP settings (Cursor: Settings → MCP, Windsurf: Settings → AI → MCP Servers):
{
"mcpServers": {
"abap": {
"url": "http://localhost:4847/mcp",
"headers": {
"Authorization": "Bearer replace-with-a-random-secret"
}
}
}
}
Microsoft 365 Copilot (via Copilot Studio)
M365 Copilot connects to MCP servers through Copilot Studio, which then surfaces the tools in Copilot Chat, Teams, Word, Excel, and other Microsoft 365 apps.
Network requirement: The MCP server must be reachable from Microsoft's cloud. For internal SAP systems, expose the server through your corporate API gateway (e.g. Azure API Management) or a reverse proxy in your DMZ. The server needs no code changes — just a reachable HTTPS URL.
Steps:
-
Start the ABAP Config MCP server and expose it at an HTTPS URL your organisation's cloud can reach, for example:
https://abap-mcp.yourcompany.com/mcp -
Go to Copilot Studio → open or create an agent
-
In the agent editor: Tools → Add Tool → New Tool → MCP
-
Fill in the connection details:
Field Value Name ABAP Config MCP ServerURL https://abap-mcp.yourcompany.com/mcpAuthentication API Key API Key your server.apiKeyvalue fromconnections.json -
Copilot Studio auto-discovers all 58 tools via the MCP handshake — no manual tool registration needed
-
Publish the agent and deploy it to Microsoft 365
Authentication options:
| Option | When to use |
|---|---|
| API Key | Simplest — good for internal/pilot use |
| OAuth 2.0 (DCR) | Production — use with Azure API Management in front of the server |
Once published, users can invoke ABAP tools from Copilot Chat in Teams or the Microsoft 365 web app using natural language exactly like any other Copilot client.
IBM Bob
IBM Bob is IBM's AI coding IDE (1.0 released March 2026). It has native MCP support using the same config format as Claude Code.
Per-project config — create .bob/mcp.json in your project root (commit this file to share the setup with your team):
{
"mcpServers": {
"abap": {
"url": "http://sapcar:4847/mcp",
"headers": {
"x-api-key": "replace-with-a-random-secret"
}
}
}
}
Global config (per developer, not checked in) — create ~/.bob/mcp.json with the same structure, or configure via Bob → Settings → MCP in the IDE.
If Bob and the SAP system are on the same network (e.g. both inside your corporate VPN), use the plain
http://URL directly — no need to expose the server externally.
Once configured, Bob's chat and agent modes can call all 58 tools directly: search objects, read/write source, manage transports, browse packages, query tables, and more.
Testing
The project has two independent test suites.
Unit tests — no SAP required
201 tests covering all 58 tools. Each handler is tested in isolation with a mocked ADTClient — no SAP system, no network, runs in under 3 seconds. This is the default npm test.
npm test # run once
npm run test:watch # watch mode during development
| Category | Tests | What is verified |
|---|---|---|
| Discovery | 14 | Search results, empty results, metadata fields, class includes, service list |
| Source | 11 | Source read, null source, grep matches/misses, batch errors, syntax errors |
| Write | 13 | Lock→write sequence, transport passthrough, rollback on failure, create/delete |
| Activate | 10 | Single activate, batch from inactive list, preaudit flag, failure formatting |
| Quality | 12 | ATC findings format, clean result, unit test pass/fail/alert details, test include lifecycle |
| Transports | 21 | List, details with objects, create, release success/failure, delete, change_owner, all-users scan, error tolerance |
| Data | 12 | DML blocking, SELECT validation, column formatting, row access, table name validation |
| Analysis | 9 | Where-used snippets, fallback to refs, version list, dump format, inactive list |
| Text elements | 15 | Read selections/symbols/headings, all-categories fetch, error tolerance, write with lock, transport, rollback |
| Packages | 11 | Browse contents grouped by type, empty package, sub-package expansion, tolerates failures, create with all options |
| Table discovery | 15 | Search TABL+VIEW types, result count, package shown, not-found, describe fields, key markers, invalid name |
| Debug | 19 | Session status/detach/listen/conflict, breakpoint URI format, step types, variable display |
| Session recovery | 10 | Auto-relogin retry on degraded session (HTTP 400/401/CSRF), force_relogin, no-retry on real errors |
| Total | 172 |
The customizing / IMG engine tools (
customizing_*,org_copy,img_search,hana_memory_report) are exercised by the integration suite (below), not the unit suite — they need a live SAP system with the engine deployed, so they can't run against a pure mock.
Integration tests — requires a live SAP connection
24 read-only tests that run against a real SAP system. They verify the full end-to-end path: login → ADT call → response parsing → formatted output. Nothing is written or activated — safe to run against any system including productive.
SAP_TEST_CONNECTION=CAR npm run test:integration
Replace CAR with the id of any connection in your connections.json.
| Category | Tests | What is verified |
|---|---|---|
| Discovery | 7 | Connected systems list, Z* search, type filter, impossible pattern, ADT services, object metadata |
| Source | 5 | Read real source, grep match/no-match, batch read, syntax check |
| Data | 6 | SELECT from TDEVC, DML rejection, maxRows limit, table read, WHERE clause, invalid table name |
| Analysis | 4 | Where-used references, version history, ST22 dump list, inactive objects |
| Transports | 3 | List open transports, list by username, transport info for object |
Design notes:
- Tests that depend on a Z* object existing log a skip message instead of failing if none are found — the suite works on a near-empty system.
- Tests run serially with a 30-second timeout each to avoid saturating the ADT session.
npm testnever runs integration tests — they are completely separate and only triggered bynpm run test:integration.
All 58 tools — detailed reference
Discovery
connected_systems
Lists all SAP systems configured in connections.json.
Useful as a first step to confirm which systems are available and what their IDs are.
→ Returns: id, url, client, language for each configured connection
search_abap_objects
Search for ABAP development objects by name or wildcard pattern, with optional type filtering.
Parameters:
query Pattern to search (wildcards * and + supported, e.g. "ZCAR_MM*")
connection System id (optional, uses first if omitted)
maxResults Max objects to return (default 100)
objectType Filter by type: "PROG", "CLAS", "FUGR", "TABL", "INTF", etc.
→ Returns: name, type, package, description for each match
get_abap_object_info
Get detailed metadata for a specific ABAP object: package, responsible developer, include structure, and the ADT URL needed for subsequent read/write operations.
Parameters:
objectName ABAP object name (e.g. "ZCL_MY_CLASS")
objectType Object type (e.g. "CLAS/OB")
connection System id
→ Returns: name, type, package, responsible, ADT URL, class includes (for classes)
adt_discovery
Discover which ADT services and features are available on the connected SAP system. Useful for checking compatibility before using advanced features.
→ Returns: list of service collections with their titles and endpoints
Source reading
get_abap_object_lines
Read the full source code of any ABAP object — programs, classes, function modules, includes, interfaces, etc.
Parameters:
objectUrl ADT URL of the object (from get_abap_object_info or search)
connection System id
→ Returns: full source as text with line numbers
search_abap_object_lines
Grep-style search within an object's source. Finds all lines matching a pattern, returned with their line numbers.
Parameters:
objectUrl ADT URL of the object
pattern Text or pattern to search for
connection System id
→ Returns: matching lines with line numbers
get_abap_batch_lines
Read source code of multiple ABAP objects in a single call — efficient when analysing several related programs or classes at once.
Parameters:
objects Array of { objectUrl, connection } entries
→ Returns: source for each object, keyed by URL
syntax_check
Check ABAP source code syntax against the server without saving or activating. Useful for validating a proposed change before writing it.
Parameters:
objectUrl ADT URL of the object
mainUrl URL of the main object (for includes)
source Source code to check
connection System id
→ Returns: list of syntax errors/warnings with line, offset, severity, and message
Write operations
write_abap_object_source
Write new source code to an ABAP object. Automatically locks the object before writing. The object remains locked after the write — call abap_activate to compile and unlock, or unlock_abap_object to discard.
Parameters:
objectUrl ADT URL of the object
source New source code (full replacement)
sourcePath Instead of source: absolute path of a local file under your home
directory (UTF-8, max 5 MB), sent as it is — for large sources that
should not pass through the conversation. Exactly one of the two.
transport Transport request number (required for transportable packages)
connection System id
→ Returns: confirmation; object stays locked awaiting activation
lock_abap_object
Explicitly lock an ABAP object for editing. Returns a lock handle required for write and activate operations. Use when you need the handle for a series of operations (e.g. creating a test include).
Parameters:
objectUrl ADT URL of the object
connection System id
→ Returns: lock handle (LOCK_HANDLE string)
unlock_abap_object
Unlock a locked object and discard any unsaved changes. Use this to roll back a write without activating.
Parameters:
objectUrl ADT URL of the object
lockHandle Lock handle from lock_abap_object
connection System id
create_abap_object
Create a new ABAP development object — program, class, interface, function group, table, data element, domain, and more.
Parameters:
objectType Type id (e.g. "PROG", "CLAS/OB", "FUGR", "TABL")
objectName Name for the new object
parentName Package name
description Short description
parentPath ADT path of the parent package
responsible Developer responsible (optional, defaults to current user)
transport Transport number (required for transportable packages)
connection System id
→ Returns: ADT URL of the newly created object
delete_abap_object
Delete an ABAP development object. The object is locked, then deleted. Requires a transport for transportable objects.
Parameters:
objectUrl ADT URL of the object
transport Transport number
connection System id
Activation
abap_activate
Activate a single ABAP object — compiles it and makes it executable. Equivalent to pressing F8/Activate in SE80. The server automatically resolves includes so you only need to name the top-level object.
Parameters:
objectName Name of the object (e.g. "ZCL_MY_CLASS")
objectUrl ADT URL of the object
preaudit Run pre-activation ATC checks before activating (default false)
connection System id
→ Returns: success flag, any activation messages with line references
abap_activate_multiple
Activate several ABAP objects in one batch. Automatically queries the system for all currently inactive objects and activates the ones you specify — or all of them if no list is given.
Parameters:
objectUrls Array of ADT URLs to activate (omit to activate all inactive objects)
preaudit Run pre-activation ATC checks (default false)
connection System id
→ Returns: success flag, messages per object, list of still-inactive objects
Quality
run_atc_analysis
Run ABAP Test Cockpit (ATC) checks on an object and return all findings with priority, check name, message text, and source location. Covers code style, performance, security, and correctness rules.
Parameters:
objectUrl ADT URL of the object
connection System id
variant ATC check variant (optional, uses system default)
maxResults Maximum number of findings (default 100)
→ Returns: findings sorted by priority, each with:
priority (1=error, 2=warning, 3=info), checkId, checkTitle,
messageTitle, source line number
run_unit_tests
Execute ABAP unit tests for an object and return full results: which tests passed, which failed, and the failure details with stack traces.
Parameters:
objectUrl ADT URL of the object
connection System id
→ Returns: per-class, per-method results with pass/fail, alert kind,
severity, title, and detail lines for failures
abap_run_class
Run a class that implements IF_OO_ADT_CLASSRUN (ADT's "Run as ABAP Application (Console)") and return what it wrote to out. Each run gets a stateless SAP session of its own, so it always runs the current active version. The conversation's stateful session, which keeps running a class pool it has already loaded, is not used, and a slow run cannot leave that session stale. A run still going after waitSeconds keeps running in SAP and the answer carries a runId; call again with that runId to wait for it and get the output (the server waits for SAP up to 30 min, ABAP_RUN_CLASS_TIMEOUT_MS).
Parameters:
className Class to run (starts a run)
runId Instead of className: collect a run that was still going
waitSeconds How long this call waits (default 25, max 40)
connectionId System id
→ Returns: the class's console output, or a runId while it is still running
create_test_include
Create a local test class include for an ABAP class (the CCAU include). The class must be locked before calling this. Returns the include URL for subsequent source writes.
Parameters:
classUrl ADT URL of the class
lockHandle Lock handle from lock_abap_object
transport Transport number
connection System id
→ Returns: ADT URL of the new test include
Transports
list_all_transports
List open (or all) transport requests across all users in the SAP system. Shows each transport's owner, description, status, and every object it contains. Ideal for a pre-upgrade audit of what is in flight.
Parameters:
status "modifiable" (default — open/unreleased) | "released" | "all"
connectionId System id
→ Returns: transports grouped by user, each showing:
transport number, status, description, owner,
and all contained objects (PGMID / type / name)
manage_transport_requests
Full lifecycle management for individual transport requests.
Parameters:
action "list" — open transports for one user
"details" — full readable view: tasks, objects, owner, status
"create" — new workbench transport
"release" — export transport to import queue
"delete" — permanently delete transport
"change_owner" — reassign transport to another user
transportNumber Transport number for details/release/delete/change_owner (e.g. DEVK123456)
username Username for list action (defaults to current user)
newOwner New owner username for change_owner action
objectUrl Object ADT URL (create action)
description Description for new transport (create action)
packageName Package name for new transport (create action)
connectionId System id
Actions in detail:
list → Open workbench transports for one user
details → Owner, status, description, total object count,
all direct objects + per-task objects
create → Creates transport, returns new transport number
release → Releases transport, returns per-check status and messages
delete → Permanently removes transport (cannot be undone)
change_owner → Reassigns ownership; confirms new owner in response
get_transport_for_object
Find out which transport request is needed to modify a specific ABAP object.
Parameters:
objectUrl ADT URL of the object
packageName Package name of the object (optional)
connectionId System id
→ Returns: PGMID, object type/name, dev class, operation type, transport text
Data
search_database_tables
Search for SAP database tables and views by description keyword — no need to know the technical name. Works for all installed tables: standard SAP, industry solutions (IS-Retail WLK*, IS-Automotive, IS-Mill, IS-Oil & Gas, etc.), and custom Z/Y tables. Searches the live system so it finds whatever is actually installed.
Parameters:
keyword Description to search for (e.g. "article listing", "vehicle order",
"warehouse transfer", "purchase order header")
maxResults Maximum results per object type (default 50)
connectionId System id
→ Returns: table/view name, type (TABLE or VIEW), package, description
with a hint to use describe_database_table and read_table_contents next
Example prompts:
- "Find tables related to article listing" → discovers
WLK1,WLK2,WLKA, etc. - "What tables store transport requests?" → discovers
E070,E071,E07T - "Show me warehouse transfer order tables" → discovers
LTAP,LTBK, etc.
describe_database_table
Show the complete field list for a SAP table or view: field name, type, length, description, and which fields form the key. Fetches metadata only (0 rows) so it's instant.
Parameters:
tableName Table or view name (e.g. MARA, WLK1, EKKO, Z_MY_TABLE)
connectionId System id
→ Returns: all fields with type, length, description
key fields marked with 🔑
total field count and key field count
example read_table_contents query at the bottom
execute_data_query
Run a SELECT SQL query against SAP ABAP dictionary tables or CDS views. Read-only — INSERT, UPDATE, DELETE, DROP, ALTER, and other DML/DDL statements are blocked.
Parameters:
sql SELECT statement (e.g. "SELECT * FROM MARA WHERE MATNR LIKE 'Z%'")
maxRows Row limit (default 100)
connectionId System id
→ Returns: column headers + rows as a formatted table
read_table_contents
Read the contents of an ABAP dictionary table or view by name, with an optional WHERE clause.
Parameters:
tableName Table or view name (e.g. "MARA", "EKKO", "WLK1")
maxRows Row limit (default 100)
whereClause Optional WHERE clause without the WHERE keyword (e.g. "MATNR LIKE 'Z%'")
connectionId System id
→ Returns: column headers + rows as a formatted table
Note — WHERE clause requires ADT Data Preview service
The
whereClauseparameter uses the/sap/bc/adt/datapreviewADT service (SAP_BASIS ≥ 7.40 SP08). If your system returns an error when using a WHERE clause, the service is either not installed or not active.To activate: transaction
SICF→ navigate todefault_host / sap / bc / adt / datapreview→ right-click → Activate Service.If the node does not exist (older SAP_BASIS), use
execute_data_querywith a full ABAP Open SQL statement instead:execute_data_query sql: "SELECT * FROM MARA WHERE MATNR LIKE 'Z%' UP TO 10 ROWS"
execute_data_queryuses a different ADT endpoint and works on all supported SAP versions.
Typical table query workflow:
1. search_database_tables — find the right table by description
2. describe_database_table — see field names, types, and key fields
3. read_table_contents — read rows (no filter needed for small tables)
— or —
execute_data_query — "SELECT * FROM <table> WHERE <condition> UP TO 10 ROWS"
use this when WHERE clause filtering is needed
Analysis
where_used
Find all places across the SAP system where an object or symbol is referenced — cross-reference analysis. Returns source locations with file, line number, and a code snippet.
Parameters:
objectUrl ADT URL of the object to look up
connection System id
→ Returns: list of usage locations, each with: object name, type, source URL,
line number, and surrounding code snippet
version_history
List all previous versions of an ABAP object with timestamps and the developer who made each change. Useful for auditing changes or understanding how a program evolved.
Parameters:
objectUrl ADT URL of the object
connection System id
→ Returns: list of versions with: version id, date/time, author, version title
analyze_dump
List ABAP runtime short dumps (ST22) from the SAP system. Shows recent errors with their type, program, and timestamp — useful for diagnosing production issues without opening the SAP GUI.
Parameters:
connection System id
maxResults Maximum number of dumps (optional)
→ Returns: dumps with: id, type, title, timestamp, author (if available)
check_inactive_objects
List all currently inactive (not yet activated) ABAP objects in the system. Useful before a batch activation to see exactly what is pending.
Parameters:
connection System id
→ Returns: list of inactive objects with: name, type, ADT URL, owner,
and whether they are pending deletion
Text elements
What are text elements? Every ABAP program has three pools of translatable texts stored separately from the source code: selection texts (labels shown next to
PARAMETERSandSELECT-OPTIONSon the selection screen), text symbols (referenced asTEXT-001etc. in source), and list headings (short/medium/long titles shown in report output). These must be maintained separately from the source and are often forgotten when creating new programs.
get_text_elements
Read text elements for any ABAP program, class, or function group. Retrieves all three categories at once if no category is specified.
Parameters:
objectType ADT object type: "PROG/P", "CLAS/OC", "FUGR/F"
objectName Object name (e.g. "ZCAR_MM_ORDERS")
category "selections" | "symbols" | "headings" (optional — omit for all three)
connectionId System id
→ Returns: for each element: id, label text, max length (if set), DDIC reference (if set)
Categories:
selections Labels for PARAMETERS and SELECT-OPTIONS on the selection screen
symbols Text symbols referenced in source as TEXT-001, TEXT-002, etc.
headings Report headings: S (short), M (medium), L (long), H (column header)
set_text_elements
Write text elements for an ABAP object. Locks the object automatically and leaves it locked — call abap_activate afterwards to activate and unlock. Only the elements listed are updated; existing elements not in the list are left untouched.
Parameters:
objectType ADT object type: "PROG/P", "CLAS/OC", "FUGR/F"
objectName Object name (e.g. "ZCAR_MM_ORDERS")
objectUrl ADT object URL — used for locking (from get_abap_object_info)
category "selections" | "symbols" | "headings"
elements Array of { id, text } pairs:
selections → id is the parameter name: "P_PLANT", "S_WERKS"
symbols → id is the 3-digit number: "001", "002"
headings → id is "S" (short), "M" (medium), "L" (long), "H" (header)
transport Transport number (required for transportable packages)
connectionId System id
→ Returns: confirmation with element list and lock handle; activate to finalise
Typical text element workflow:
1. get_abap_object_info — get the object URL
2. get_text_elements — read existing texts to see current ids and gaps
3. set_text_elements — write the new/updated texts (auto-locks)
4. abap_activate — activate and unlock
Packages
browse_package
List all development objects inside an ABAP package, grouped by object type. Sub-packages are marked with ▶ and can be expanded automatically.
Parameters:
packageName Package (development class) to browse, e.g. "ZCAR_MM" or "$TMP"
includeSubPackages Also fetch and display the contents of any sub-packages (default: false)
connectionId System id
→ Returns: objects grouped by type (PROG/P, CLAS/OC, FUGR/F, DEVC/K, etc.)
each with name, description, and ▶ marker if it contains children
create_package
Create a new ABAP development package (development class). Packages are the containers that group related objects and control transport behaviour.
Parameters:
name Package name (e.g. ZCAR_MM_REPORTS)
description Short description
parentPackage Parent package this lives under (e.g. ZCAR_MM)
packageType "development" (default — contains objects)
"structure" (grouping only, no objects directly)
"main" (top-level package)
swComponent Software component (e.g. HOME, LOCAL). Leave empty for local packages.
transportLayer Transport layer (e.g. Z, SAP) — controls the transport route
transport Transport number — required when the parent package is transportable
connectionId System id
→ Returns: confirmation with all settings; hints to use create_abap_object next
Debugging
How ABAP debugging works with AI: Set a breakpoint, then trigger execution in SAP (run the report, call the BAPI, send the HTTP request). The AI calls
abap_debug_sessionwith actionlisten, which waits for the breakpoint to be hit, then gives you full control for stepping and inspection — all from the chat window.
abap_debug_session
Attach to an ABAP debugging session and wait for a breakpoint to be hit, check session status, or detach.
Parameters:
action "listen" — block until a breakpoint is hit
"status" — check current debugger state
"detach" — end the debugging session
connection System id
terminalId Debug terminal id (generated if not provided)
ideId IDE session id (generated if not provided)
→ listen: returns call stack and variable snapshot when breakpoint is hit
→ status: returns current debugger state
abap_debug_set_breakpoint
Set a breakpoint at a specific line in an ABAP source file.
Parameters:
sourceUrl ADT URL of the source file
line Line number to break at
connection System id
terminalId Debug terminal id (must match the listen session)
ideId IDE session id
→ Returns: breakpoint id — store this to delete the breakpoint later
abap_debug_delete_breakpoint
Delete a breakpoint by its id (returned from abap_debug_set_breakpoint).
Parameters:
breakpointId Breakpoint id from abap_debug_set_breakpoint
connection System id
terminalId Debug terminal id
ideId IDE session id
abap_debug_step
Step through ABAP code in an active debug session.
Parameters:
stepType "stepInto" — step into the next called method/function
"stepOver" — execute current line, skip into calls
"stepReturn" — run until current method returns to caller
"stepContinue" — continue to next breakpoint
"terminateDebuggee" — stop the debugged program entirely
connection System id
terminalId Debug terminal id
ideId IDE session id
→ Returns: updated call stack and current source position after the step
abap_debug_variable
Inspect the current values of variables in an active debug session. Can drill into complex types (structures, internal tables, object instances).
Parameters:
parents Array of variable names or paths to inspect
connection System id
terminalId Debug terminal id
ideId IDE session id
→ Returns: for each variable: name, declared type, actual type, current value
abap_debug_stack
Get the current call stack in an active debug session — all active stack frames with program name, include, and line number.
Parameters:
connection System id
terminalId Debug terminal id
ideId IDE session id
→ Returns: ordered call stack frames with program, include, line, event type
abap_debug_set_variable
Change the value of a variable in an active debug session. Useful for injecting test values or bypassing a condition without modifying source.
Parameters:
variableName Name of the variable to change
value New value (as string)
connection System id
terminalId Debug terminal id
ideId IDE session id
Customizing & IMG (in-system engine)
These tools drive an in-system customizing engine (class
ZCL_MCP_CUST_ENGINEbehind a SICF node) so config changes run through the SM30/SM34 maintenance-view runtime — foreign-key checks, change documents and transport recording all happen exactly as a manual SPRO change would. Deploy/refresh it withcustomizing_engine_bootstrap. Full design, delivery-class rules and the governed-transport flow: docs/customizing-engine.md.Governed transport selection: a recorded write uses an explicit
transportas-is; with none given it returns an interactive prompt listing your open requests (passshowAllTransports: truefor everyone's) plus the create options, rather than silently minting one. A supplied request you have no task in gets a task created for you automatically.
img_search
Search the IMG / SPRO activity tree by keyword. Returns matching activities with their breadcrumb path and the customizing object/table behind each — the way in when you don't know the technical name.
Parameters:
keyword Keyword(s) to match in IMG activity titles
namespace / inScopeOnly / language / maxRows Optional scoping
connectionId System id
→ Returns: activities with breadcrumb path + linked customizing object/table
customizing_read
Read the rows of a customizing table/view for a given key (e.g. all config for POS profile 0001), resolving the maintenance view the standard way.
Parameters:
table, keyField, key Customizing object + key to read
connectionId System id
→ Returns: the matching customizing rows
customizing_describe
Describe a customizing object before changing it: its maintenance object, delivery class, key fields, text table and transport object — so you know how a change will be recorded.
Parameters:
table Customizing table/view name
connectionId System id
→ Returns: maintenance object, delivery class, keys, text table, transport object
customizing_diff
Compare the customizing rows for two keys and report what differs — the basis for a "copy the gaps" plan.
Parameters:
table, keyField, sourceKey, targetKey What to compare
connectionId System id
→ Returns: rows present in source but missing/different in target
customizing_plan_change
Dry-run a customizing copy/delete: returns the exact rows that would be written or removed, with nothing applied.
Parameters:
table, keyField, sourceKey, targetKey Planned change
connectionId System id
→ Returns: planned rows (no changes made)
customizing_apply
Copy or delete customizing rows through the SM30 maintenance-view runtime (VIEW_MAINTENANCE_SINGLE_ENTRY). Dry-run by default; commit: true writes. Class C/G/E config records onto a Customizing request (governed transport selection); class-A application tables write direct with no transport.
Parameters:
table, keyField, sourceKey, targetKey Rows to copy (or targetKey to delete)
action "copy" (default) | "delete"
values Per-row field overrides after the key swap
commit true to write (default false = dry run)
transport / createTransport / showAllTransports / recordTransport
connectionId System id
→ Returns: rows planned/written, the transport recorded onto, messages
org_copy
Headless copy of an organizational unit and its EC01-style dependent customizing (the "org units in the dark" copier) — e.g. clone a company code or sales org with its dependent tables, recorded on a transport. Runs the write in a background job.
Parameters:
orgType, sourceKey, targetKey Org unit to copy (e.g. BUKRS 2510 → Z100)
values Field overrides on the copied org unit
commit, transport, createTransport, showAllTransports
connectionId System id
→ Returns: dependent tables copied, transport, batch run id / result
customizing_status
Poll a background write job started by customizing_apply / org_copy and return its result (rows written, E071K entries, messages) when it finishes.
Parameters:
runId The run id returned by a pending write
connectionId System id
→ Returns: job status, rows written, transport entries, messages
customizing_selftest
Run the engine's built-in self-test (read / plan / transport-resolution paths) against the connected system without changing config.
Parameters:
connectionId System id
→ Returns: per-check pass/fail with details
customizing_engine_bootstrap
Deploy or update the in-system engine class + SICF node from the version-controlled ABAP source. Run after pulling a new engine version.
Parameters:
connectionId System id
→ Returns: actions taken (class created/updated, node registered), engine version
customizing_engine_cleanup
Remove the engine's in-system artifacts (class, SICF node) — the uninstall counterpart of bootstrap.
Parameters:
connectionId System id
→ Returns: artifacts removed
customizing_engine_ping
Health-check the deployed engine: returns its version and the connected client's customizing settings (SCC4 category, recording mode).
Parameters:
connectionId System id
→ Returns: engine version, client customizing category + recording status
Operations
force_relogin
Drop and re-establish the ADT session for a connection. Heals a degraded session (every ADT call returns HTTP 400/401/CSRF) without restarting the server. The old session's locks are unlocked and its SAP context is ended before the new login. Every other re-login (idle refresh, failed keep-alive) and a server shutdown do the same, so no lock is left behind in an orphaned context.
Parameters:
connectionId System id to re-login
→ Returns: confirmation the session was re-established
hana_memory_report
Report HANA memory usage (used / peak / allocation limit, top consumers) via the engine's ADBC access to the SYS.M_* views — a quick "is the box healthy" check.
Parameters:
connectionId System id
→ Returns: used/peak/limit GB and top memory consumers
Typical workflows
Write / activate
1. search_abap_objects — find the object by name or pattern
2. get_abap_object_info — confirm its structure, get the ADT URL
3. get_abap_object_lines — read the current source
4. get_transport_for_object — find or create the right transport
5. write_abap_object_source — write the new source (auto-locks the object)
6. run_atc_analysis — check for quality issues before activating
7. abap_activate — compile and activate
8. run_unit_tests — verify correctness
Query a table when you don't know the technical name
1. search_database_tables — find tables by description ("article listing",
"vehicle order", "warehouse stock", etc.)
Works for IS-Retail, IS-Automotive, custom Z/Y — anything installed
2. describe_database_table — see all fields, types, key fields for the found table
3. read_table_contents — read rows (good for small tables or full scans)
— or —
execute_data_query — "SELECT FIELD1, FIELD2 FROM <table>
WHERE <condition> UP TO 20 ROWS"
Use this when you need WHERE filtering and
/sap/bc/adt/datapreview is not active on your system
Pre-upgrade transport audit
1. list_all_transports — see every open transport across all developers,
with all contained objects
2. manage_transport_requests — action: details <number>
get full breakdown of tasks and objects for any transport
3. manage_transport_requests — action: change_owner (if reassignment needed)
4. manage_transport_requests — action: release (export transport before upgrade)
— or —
manage_transport_requests — action: delete (remove unwanted transports)
Debug a running program
1. search_abap_objects — find the program to debug
2. get_abap_object_lines — read source to identify the right line
3. abap_debug_set_breakpoint — set breakpoint at target line
4. abap_debug_session listen — wait for the breakpoint to be hit
(trigger execution in SAP: run the report, call the BAPI, etc.)
5. abap_debug_stack — see where you are in the call chain
6. abap_debug_variable — inspect variables of interest
7. abap_debug_step — step through the code as needed
8. abap_debug_delete_breakpoint — clean up when done
ATC quality pass
1. search_abap_objects — find the object or package
2. run_atc_analysis — get all findings with priority and location
3. get_abap_object_lines — read source for each finding
4. write_abap_object_source — fix the issues
5. abap_activate — activate the fixes
6. run_atc_analysis — confirm findings are resolved
Environment variables
| Variable | Description |
|---|---|
ABAP_MCP_CONFIG | Path to config JSON file (overrides default search paths) |
SAP system requirements
- SAP NetWeaver 7.40+ or SAP S/4HANA
- ADT (ABAP Development Tools) REST service enabled — activate in SICF:
/sap/bc/adt - User with development authorizations:
S_DEVELOP,S_TCODEforSE80 - For debugging:
S_ADMI_FCDwithPADMactivity or equivalent debug authorization
Troubleshooting
read_table_contents WHERE clause returns an error
The WHERE clause filter uses the ADT Data Preview service which is a separate SICF node from the core ADT service.
Symptom: read_table_contents with a whereClause returns HTTP 400 or
"No suitable resource found".
Fix — activate the service in SICF:
- Open transaction
SICF - Navigate to
default_host / sap / bc / adt / datapreview - Right-click → Activate Service
If the node does not exist: your SAP_BASIS release does not include the
Data Preview endpoint (requires ≥ 7.40 SP08). Use execute_data_query with
full ABAP Open SQL instead:
SELECT * FROM MARA WHERE MATNR LIKE 'Z%' UP TO 10 ROWS
execute_data_query uses the ADT SQL console endpoint which is available on
all supported SAP versions.
Server becomes unresponsive / SAP session times out
The server proactively re-establishes the SAP session after 8 minutes of
inactivity (before SAP ICM's default 10-minute timeout). If you see
authentication errors after a long pause, the session was not refreshed in
time. Set ABAP_SESSION_IDLE_MS to a lower value (e.g. 360000 for 6 min)
to refresh earlier.
"User is currently editing" on activate
This was a known bug — fixed in the current version. The lock acquired by
write_abap_object_source is now automatically released before activation.
Upgrade to the latest version and the conflict will no longer occur.
Lock handle errors after server restart
ADT lock handles are tied to the HTTP session. Restarting the MCP server
creates a new session, making all previously held handles invalid. Simply
call abap_activate or write_abap_object_source again — the server will
re-acquire a fresh lock automatically.
Extending the server — ADT locking rules (read before adding write tools)
When adding any new ADT write operation, the single most important rule is:
Lock the exact ADT resource you PUT/POST to — not its parent object.
ADT enqueues are per resource, and some objects expose sub-resources that
have their own enqueue, separate from the object's source lock. Locking the
parent object does not cover them. SAP then rejects the write with
Resource <X> is not locked even though you hold a valid handle — and a naive
"stale handle" retry that re-locks the parent will collide with your own
still-held lock and surface as User <U> is currently editing with an empty
SM12 (the conflict is self-inflicted, not a real orphan).
This bit us with text elements: the program source lives in REPS/TRDIR,
but text elements (selection texts, text symbols, headings) live in the REPT
text pool — a different enqueue. The fix was to lock the text-elements URL
(/sap/bc/adt/textelements/programs/<name>), the same resource
setTextElements writes to, rather than the program object URL.
Checklist for a new write tool:
- Identify the exact URL the write targets (
PUT/POSTpath). - Acquire the lock on that resource's lockable object, then thread the
real
LOCK_HANDLEfrom the LOCK response into the write — never reuse a constant or cached handle across objects/sessions. - Make the lock lifecycle self-contained: acquire → write → always release
on every exit path (success and error), in a
try/finally-style guard. For changes that go to the inactive buffer (source, text elements), you do not need to keep the lock held for activation. - On a genuine stale/invalid-handle error, unlock the old handle before re-acquiring — otherwise the re-lock conflicts with your own lock.
- Never deny a write from cached lock state. If unsure, attempt the real ADT LOCK and let SAP arbitrate.
- Pass
objectType + objectNameand derive resource URLs from them where the library expects a name (e.g.createTestIncludetakes a class name, not a URL — passing a URL gets it encoded into the path and 404s).
Known enqueue boundaries to watch for (each may need its own lock):
| Object source (parent) | Separate sub-resource / enqueue |
|---|---|
Program source (REPS/TRDIR) | Text elements / text pool (REPT) |
| Program source | Program documentation / long texts |
| DDIC object | Documentation, sub-components |
| Any object | GUI status/title pools, dynpros |
Source writes (/source/main) and class test includes share the parent
object's enqueue, so locking the object URL is correct for those.
License
MIT
Others providing
- @abap2ui5/mcp-server@abap2ui5/mcp-serverAn MCP server that puts the abap2UI5 development loop on the machine an agent runs on: check the view the ABAP builds, photograph it, deploy the class into a sandbox, boot the app headless and read the errors.community org, abapMCP server for the abap2UI5 check, deploy and run loopfrom ABAP
- arc-1-bopf-enharc-1-bopf-enhAn extension of four tools for arc-1, with an ABAP service behind it, that lets an agent read and maintain classic BOPF enhancements of SAP standard business objects.independent, abaparc-1 extension for reading and maintaining BOPF enhancementsfrom ABAP
- HammerHammerA native macOS code editor for ABAP and CDS, with an Object Navigator, Transport Organizer, Data Browser and Gateway Client in the same app as the editor.independent, abapNative macOS code editor for ABAP and CDSfrom ABAP
- arc-1-lsparc-1-lspAn edition of ARC-1 that hands every ADT interaction to SAP's own embedded adt-ls language server instead of a hand-rolled HTTP client.independent, abapEdition of ARC-1 that runs ADT calls through adt-lsfrom ABAP
- arc-1arc-1An MCP server in front of the ADT REST API that runs locally and on Cloud Foundry with twelve tools that read, search, write, activate, lint and transport ABAP objects.independent, abapMCP server over the ADT REST API for ABAP objectsfrom ABAP
- arc1-abap-bridgearc1-abap-bridgeA VS Code extension between arc-1 and ABAP Development Tools for VS Code, so GitHub Copilot can open an ABAP object by name, diff the inactive version and ask the system whether an edit would be accepted.independent, abapVS Code bridge between arc-1 and ADT for VS Codefrom ABAP
- arc1-adt-abap-mcp-extarc1-adt-abap-mcp-extOne JAR in Eclipse's dropins that turns on SAP's own ADT MCP server and adds read-only repository tools beside it — so an AI client reads your system without leaving Eclipse.independent, abapEclipse add-on enabling the ADT MCP server with read-only toolsfrom ABAP
- capforgecapforgeAn MCP server that scaffolds CAP and CDS for a coding agent and then holds it to cds compile — the agent does not stop until the generated code builds clean.independent, capMCP server scaffolding CAP and CDS checked by cds compilefrom CAP
- ABAP Accelerator MCP ServerABAP Accelerator MCP ServerAWS's ABAP MCP server for Amazon Q Developer and Kiro, deployable locally, in Docker or centrally on ECS Fargate with OAuth principal propagation; its repository is no longer maintained.partner, abapAWS's ABAP MCP server for Amazon Q Developer and Kirofrom ABAP
- Modernization Agents for SAP on AWSModernization Agents for SAP on AWSAWS's suite of agents for SAP modernisation work: custom ABAP converted for S/4HANA, PI/PO interfaces moved to Integration Suite, BW objects moved to SAP Datasphere, deployed into a customer's own AWS account and reached only after registration.partner, abapAWS agents for ABAP, PI/PO and BW modernisation workfrom ABAP
- @mcp-abap-adt/core@mcp-abap-adt/coreA descendant of the Andreschak and fr0ster servers rebuilt on its own architecture, published as an npm scope and a Claude Code plugin, with Korean and Japanese documentation beside the English.independent, abapABAP ADT MCP server published as an npm scope and pluginfrom ABAP
- @cap-js/mcp-server@cap-js/mcp-serverSAP's MCP server for CAP development, run as cds-mcp: search_model searches the project's compiled CDS model, search_docs searches the CAP documentation indexed as embeddings on the developer's own machine.sap official, capMCP server for CAP development: model and docs searchfrom CAP
- chandrashekhar-mahajan/abap-mcp-serverchandrashekhar-mahajan/abap-mcp-serverFifteen ADT tools behind five pluggable authentication strategies — Kerberos/SPNEGO, OAuth 2.0, X.509, browser SSO and basic — for systems where basic auth is not an option.independent, abapABAP MCP server with ADT tools and five authentication strategiesfrom ABAP
- ADAMADAMAn MCP server that debugs ABAP on a connected system over ADT, as one-shot captures or an interactive session, over stdio next to the assistant or as a shared server on SAP BTP Cloud Foundry.independent, abapMCP server driving SAP's ABAP debugger over ADT for an agentfrom ABAP
- dassian-adtdassian-adtA fork of mcp-abap-abap-adt-api hardened for use: 25 tools, input validation, error intelligence, MCP elicitation, session recovery and a test suite.independent, abapFork of mcp-abap-abap-adt-api with 25 tools and session recoveryfrom ABAP
- erpl-adterpl-adtOne C++ binary that speaks the ADT REST API as a CLI and as an MCP server — no Eclipse, no NetWeaver RFC SDK, no JVM — and reaches BW/4HANA modelling as well as ABAP.independent, abapC++ binary speaking the ADT REST API as a CLI and MCP serverfrom ABAP
- bw-modeling-mcpbw-modeling-mcpReads, creates and modifies BW/4HANA modelling objects through the same internal APIs Eclipse BWMT and the BW/4HANA Cockpit use — and can run centrally on BTP with each caller reaching BW as themselves.independent, btpMCP server for BW/4HANA modelling objectsfrom BTP/BAIP
- EPOD ADT MCP ServerEPOD ADT MCP ServerAn MCP server for ABAP that runs inside ABAP Development Tools for Eclipse on the ADT session of each connected project, with a standalone mode that runs with no IDE open.independent, abapMCP server for ABAP on the ADT session, in Eclipse or standalonefrom ABAP
- ZARC1_EXTENSION_FORMSZARC1_EXTENSION_FORMSAn extension of four tools for arc-1, with an ABAP backend behind it, that reaches the classic form objects ADT has no API for: SAPscript layout sets, Smart Styles and the TADIR record of a Smart Form.independent, abaparc-1 extension for SAPscript and Smart Forms objectsfrom ABAP
- fgalastri/MCP_ABAPfgalastri/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.independent, 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.from ABAP
- fr0ster/mcp-abap-adtfr0ster/mcp-abap-adtFull CRUD across on-premise and ABAP Cloud systems, with five authentication methods and three transports: a library under Apache-2.0 and a standalone server under AGPL-3.0-only.independent, abapABAP MCP server with full CRUD on on-premise and ABAP Cloudfrom ABAP
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
- sap-ai-dev-toolkitsap-ai-dev-toolkitAn MCP proxy that pins an agent's ABAP tools to one SAP system: setup reads the BAS destinations or the local SAP GUI landscape and writes one stdio server per system, leaving the credentials in the destination or in the editor's own login prompts.independent, abapMCP proxy pinning an agent's ABAP tools to one SAP systemfrom ABAP
- ABAP MCPABAP MCPA VS Code extension that deploys a bundled ABAP MCP server into each workspace folder on open: 25 ADT and OData tools and five spec-driven-development prompts over one SAP session.independent, abapVS Code extension deploying an MCP server with ADT and OData toolsfrom ABAP
- aibap.mcpaibap.mcpA Go server that closes the loop: after create, write and activate it can run the class it just wrote through ADT's classrun and hand the console output back.independent, abapGo MCP server that writes, activates and runs ABAP classes via ADTfrom ABAP
- BellaBellaAn Eclipse plugin that puts Claude into ABAP Development Tools: explain, generate, rework and implement from the editor's context menu, completion as ghost text, and a chat whose tools reach the system through the developer's existing ADT logon.independent, abapEclipse plugin bringing Claude into ABAP Development Toolsfrom ABAP
- Maherd18/sap-mcp-serverMaherd18/sap-mcp-serverAn MCP server for ABAP development over the ADT resources: eight tools, each checked against a JSON policy file before the call reaches the system, with activation and transport release held for a person to approve.independent, abapPolicy-checked MCP server for ABAP development over ADTfrom ABAP
- sapdumpmcpsapdumpmcpAn MCP server for SAP dumps: it connects to an ABAP system over the ADT resources and lets an MCP client ask a dump for its description and call stack.independent, abapMCP server reading ABAP short dumps over ADTfrom ABAP
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
- mcp-abap-abap-adt-apimcp-abap-abap-adt-apiThe 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.independent, abapWrite-oriented MCP server over abap-adt-apifrom ABAP
- mcp-abap-adtmcp-abap-adtThe read-oriented half of a pair of ABAP MCP servers: high-level tools such as GetProgram, GetClass and GetTable that fetch from a system, aimed at understanding it rather than changing it.independent, abapRead-oriented MCP server fetching ABAP programs, classes, tablesfrom ABAP
- SAP MCP Connection ManagerSAP MCP Connection ManagerA Windows desktop manager that holds SAP connections and hands them to Claude Desktop or Codex through a local MCP server, each connection carrying a policy that decides what the assistant may change and what data it may read.independent, abapWindows desktop manager handing SAP connections to assistants over MCPfrom ABAP
- RAP StudioRAP StudioA local ABAP runtime with a browser workbench: RAP sources in abapGit layout are activated on Node.js, kept in SQLite or PostgreSQL and served as OData V4 and V2 to SAP Fiori elements and SAPUI5 apps, with no SAP server attached.independent, abapLocal RAP and classic ABAP runtime with a browser workbenchfrom ABAP
- ABAPilotABAPilotAn MIT-licensed MCP connector for ECC and on-premise S/4HANA that reads ABAP source and dictionary context, whose SAP-side half is a licensed product you install in the system.independent, abapMCP connector for ECC and on-premise S/4HANA with a licensed SAP sidefrom ABAP
- vibing-steampunkvibing-steampunkAn ADT-to-MCP bridge in Go that reaches past what ADT exposes — cluster tables decoded, spool and job logs read as tables, the IMG searched, selection texts written back.independent, abapADT-to-MCP bridge in Go reaching past what ADT exposesfrom ABAP
- ADT MCP ServerADT MCP ServerSAP's own MCP server for ABAP development, shipped in ABAP Development Tools for Eclipse and ABAP Development Tools for VS Code; in VS Code a preference starts it as a local HTTP server on a port you choose.sap official, abapMCP server shipped in ABAP Development Tools for Eclipse and VS Codefrom ABAP
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
- SAP Joule for Developers, ABAP AI capabilitiesSAP Joule for Developers, ABAP AI capabilitiesSAP's AI for ABAP development in ADT for Eclipse and VS Code: chat, code completion, explain, test and CDS generation, RAP logic prediction, and since June 2026 an agentic mode over the ADT MCP Server, metered in AI units through the ABAP AI Hub Service on BTP.sap official, abapSAP's AI for ABAP development in ADT for Eclipse and VS Codefrom ABAP
- @sap/mdk-mcp-server@sap/mdk-mcp-serverFive tools for Mobile Development Kit work: create a project, generate pages and rules into it, drive the build and deploy, read the documentation, and pull OData metadata from Mobile Services.sap official, btpMCP server with five tools for Mobile Development Kit workfrom BTP/BAIP
- @sap-ux/fiori-mcp-server@sap-ux/fiori-mcp-serverSAP's Fiori MCP server, run as fiori-mcp, letting a coding assistant create and edit Fiori applications directly rather than describing the steps.sap official, ui5MCP server for creating and editing Fiori applicationsfrom UI5
- ABAPDocMCPABAPDocMCPTurns a transport request into a WRICEF technical specification: reads the transport's objects and source over ADT and writes a structured Markdown document with an object-relationship diagram.independent, abapMCP server turning a transport request into a WRICEF specificationfrom ABAP
- claude-sap-kitclaude-sap-kitA Claude Code plugin of three skills that extends arc-1 with five Custom_* tools for an on-premise ABAP system: running a report and reading its ALV as JSON, previewing a NAST message as PDF, and reading, writing and replacing SmartForms as XML.independent, abapClaude Code plugin adding Custom_* tools to arc-1from ABAP
- Skybuffer AI MCP serverSkybuffer AI MCP serverAn ABAP add-on that serves SAP business data, transactions and development context as MCP tools from an ICF node inside SAP ECC and S/4HANA, each call running as the signed-in user under PFCG authorization checks.independent, abapABAP add-on serving business data and transactions as MCP toolsfrom ABAP
- iGlowiGlowA Chrome and Edge extension that opens a side panel next to an SAP Integration Suite tenant, where chat creates and changes iFlows, tests them with SAP's simulation, traces messages and fixes failed ones.independent, btpBrowser side panel that builds and fixes CPI iFlows from chatfrom BTP/BAIP
- @ui5/mcp-server@ui5/mcp-serverSAP's MCP server for UI5 development: ten tools that scaffold an app or a card, read the project in front of the agent, and run the linter and the manifest validator against it.sap official, ui5MCP server for UI5 development with ten toolsfrom UI5
- abap-adt-cliabap-adt-cliPulls an ABAP package to local files over the ADT REST API in parallel, and pushes edited objects back under a transport — bulk sync rather than one object at a time in SE80 or Eclipse.independent, abapCLI that pulls and pushes ABAP packages as local files over ADTfrom ABAP
- workskong/mcp-abap-adtworkskong/mcp-abap-adtA deliberately light MCP adapter over ABAP ADT for object search, source, DDIC metadata, a data preview and runtime diagnostics, read-only in practice and documented in Korean.independent, abapLight MCP adapter for ABAP over ADT, documented in Koreanfrom ABAP
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skillsfrom ABAP
- pyrfc-mcppyrfc-mcpAn MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.independent, abapMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP
- ABAP-AI-CODE-TOOLSABAP-AI-CODE-TOOLSAn optional abapGit package that adds create, modify and delete tools to ABAP AI Code, for ABAP programs and classes, with each diff block approved before it is saved.independent, abapabapGit package adding create, modify and delete tools to ABAP AI Codefrom ABAP
- ABAP AI CodeABAP AI CodeAn agentic coding assistant written in ABAP that runs as a SAP GUI report and reads, explains and reviews repository objects inside the system, running an LLM's tool calls as ABAP.independent, abapAgentic coding assistant in ABAP that runs as an SAP GUI reportfrom ABAP
- VERTEXVERTEXAn extension for ABAP Development Tools for Eclipse and VS Code that shows Simple Data Explorer, AVE and ACE in the editor over the developer's ADT connection.independent, abapADT extension for Eclipse and VS Code showing three SAP GUI toolsfrom ABAP
- mcp-integration-suitemcp-integration-suiteAn experimental Node MCP server covering the general CPI functions of the Integration Suite, which its author recommends running alongside the TPM server for Trading Partner Management.independent, btpMCP server for the general Integration Suite functionsfrom BTP/BAIP
- mcp-is-tpmmcp-is-tpmA Java MCP server for Trading Partner Management in the Integration Suite, where trading partners, their agreements and their B2B configuration live, paired by its author with the general server.independent, btpJava MCP server for Integration Suite Trading Partner Managementfrom BTP/BAIP
- @abap2ui5/mcp-server@abap2ui5/mcp-serverAn MCP server that puts the abap2UI5 development loop on the machine an agent runs on: check the view the ABAP builds, photograph it, deploy the class into a sandbox, boot the app headless and read the errors.community org, abapMCP server for the abap2UI5 check, deploy and run loopfrom ABAP
- abap2UI5 for VS Codeabap2UI5 for VS CodeA VS Code extension for abap2UI5 apps: F9 starts the app class in a preview beside the source, Ctrl+F3 activates the class and reloads it, and the abap2UI5 linter runs in the editor while you type.community org, abapVS Code extension to preview, activate and lint abap2UI5 appsfrom ABAP
- SF-MCPSF-MCPSixty-two purpose-built tools over SAP SuccessFactors' OData APIs — employee data, permissions, compliance reports and HR administration, asked for in plain language.independent, successfactorsMCP server with 62 tools over SAP SuccessFactors OData APIsfrom SAP SuccessFactors
- hybris-mcp-litehybris-mcp-liteA read-only MCP server that answers questions about a local SAP Commerce Cloud instance by calling HAC, so types, beans, configuration, cronjobs, logs and FlexibleSearch come back in the editor.independent, commerceRead-only MCP server over a local SAP Commerce Cloud's HACfrom SAP Commerce
- calmcpcalmcpAn MCP server in front of the SAP Cloud ALM APIs: four read tools over tasks, projects, features, documents, tests and analytics, run over stdio locally or Streamable HTTP on Cloud Foundry.independent, btpMCP server with read tools over the SAP Cloud ALM APIsfrom BTP/BAIP
- CostingGeek/sap-mcpCostingGeek/sap-mcpA Python server that fetches sales orders from SAP's business data graph and hands them to Claude Desktop — the only entry here pointed at that API rather than at one system's own services.independent, btpPython MCP server fetching sales orders from SAP's business data graphfrom BTP/BAIP
- mcp-sap-focusedrunmcp-sap-focusedrunSAP Focused Run's Landscape Management Database as MCP tools — hosts, systems, databases, cloud tenants, technical instances, ABAP clients, software components and product versions.independent, btpMCP tools over SAP Focused Run's Landscape Management Databasefrom BTP/BAIP
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
- cloud-alm-itsm-mcpcloud-alm-itsm-mcpQueries installations through SAP Cloud ALM's ITSM API — filtered by system type or customer number, with OAuth token handling and caching done for you.independent, btpMCP server querying installations via the SAP Cloud ALM ITSM APIfrom BTP/BAIP
- ABAP MCPABAP MCPA VS Code extension that deploys a bundled ABAP MCP server into each workspace folder on open: 25 ADT and OData tools and five spec-driven-development prompts over one SAP session.independent, abapVS Code extension deploying an MCP server with ADT and OData toolsfrom ABAP
- hana-mcp-serverhana-mcp-serverSchema discovery and guard-railed SQL against SAP HANA and HANA Cloud, with an optional layer of business metadata so an agent reads a coded column the way the business does.independent, btpMCP server for schema discovery and guarded SQL on SAP HANAfrom BTP/BAIP
- sap_analytics_cloud_mcpsap_analytics_cloud_mcpThe SAP Analytics Cloud REST API as ninety tools across eleven service areas — content, data import and export, user management, transport, scheduling and translation.independent, btpMCP server for the SAP Analytics Cloud REST APIfrom BTP/BAIP
- mcp-sap-cpimcp-sap-cpiThe runtime half of Cloud Integration: failed messages with their full processing logs and traces, artifact deployment, security material, and a health summary.independent, btpMCP server for Cloud Integration runtime: messages, logs, deploymentfrom BTP/BAIP
- AI Core MCP ServerAI Core MCP ServerAn MCP server that exposes SAP AI Core's APIs as tools, defined entirely in one JSON config file for a proxy, so deployments, configurations and scenarios are managed through an assistant.independent, btpSAP AI Core APIs as MCP tools from one JSON config filefrom BTP/BAIP
- BTP CF MCP ServerBTP CF MCP ServerThe Cloud Foundry V3 API on SAP BTP as MCP tools — apps, orgs, spaces, services, routes and quotas — declared in one JSON config file and run by odata-mcp-proxy.independent, btpCloud Foundry V3 API on SAP BTP as MCP toolsfrom BTP/BAIP
- BTP MCP ServerBTP MCP ServerBTP Core Services as MCP tools, and the only server in this corner that renders dashboards inside the chat — a subaccount overview with drill-down, a geomap of data-centre locations, consumption and users.independent, btpBTP Core Services as MCP tools with in-chat dashboardsfrom BTP/BAIP
- btp-sap-odata-to-mcp-serverbtp-sap-odata-to-mcp-serverExposes every OData service on an S/4HANA or ECC system as MCP tools, in three discovery levels so a large catalogue does not have to be loaded at once.independent, btpExposes S/4HANA or ECC OData services as MCP toolsfrom BTP/BAIP
- CI MCP ServerCI MCP ServerAn MCP server that exposes SAP Cloud Integration's OData APIs as tools, defined entirely in one JSON config file, so an assistant works integration content, logs and configurations in natural language.independent, btpSAP Cloud Integration OData APIs as MCP toolsfrom BTP/BAIP
- odata-mcp-proxyodata-mcp-proxyA config-driven proxy that turns OData and REST endpoints into MCP tools from a JSON file — no code — and runs on BTP Cloud Foundry against BTP Destinations.independent, btpConfig-driven proxy turning OData and REST endpoints into MCP toolsfrom BTP/BAIP
- sap-pi-mcp-serversap-pi-mcp-serverThe only entry pointed at SAP PI and PO rather than at Cloud Integration — monitoring and Integration Directory metadata from the middleware that came before.independent, btpMCP server for SAP PI and PO monitoring and directory metadatafrom BTP/BAIP
- sap-bdc-mcp-serversap-bdc-mcp-serverAn MCP server over SAP's BDC Connect SDK that creates, validates, publishes and deletes Databricks Delta shares as data products in SAP Business Data Cloud.independent, btpMCP server managing Delta shares in SAP Business Data Cloudfrom BTP/BAIP
- @mariodefe/sap-datasphere-mcp@mariodefe/sap-datasphere-mcpForty-five tools across a Datasphere tenant — discovery, metadata, analytics, ETL extraction, database users, lineage and column profiling — with config-driven PII masking applied before anything reaches the model.independent, btpMCP server with forty-five tools across a Datasphere tenantfrom BTP/BAIP
- midasol/sap-mcp-servermidasol/sap-mcp-serverA Python MCP server for SAP Gateway with four read-only tools that authenticate, query, fetch one entity and list services, and one of the few here that publishes its test results.independent, btpPython MCP server for SAP Gateway OData operationsfrom BTP/BAIP
- odata_mcp_goodata_mcp_goA Go binary that bridges any OData v2 or v4 service to MCP — and can collapse the whole service into one tool when the generated tool list is too large to be usable.independent, btpGo binary bridging any OData v2 or v4 service to MCPfrom BTP/BAIP
- odata_mcpodata_mcpThe Python original: reads an OData v2 service's metadata and generates MCP tools from it, with the SAP-specific conversions the raw protocol leaves to you.independent, btpPython bridge generating MCP tools from OData v2 metadatafrom BTP/BAIP
- sap-bdc-mcpsap-bdc-mcpDiscovery and contract tooling for SAP Business Data Cloud — ORD discovery, CSN contract checks and non-executing share planning — behind redaction, policy gates and bounded output.independent, btpMCP tooling for SAP Business Data Cloud discovery and contractsfrom BTP/BAIP
- mcp-sap-datasphere-servermcp-sap-datasphere-serverThe read-only Datasphere server: explore spaces, list assets, preview rows, profile columns and summarise analytical models — and nothing that changes anything, by design.independent, btpRead-only MCP server for exploring SAP Dataspherefrom BTP/BAIP
- sap-mcp-serversap-mcp-serverReads SAP ECC and S/4HANA for an agent over Gateway OData and RFC, with a Node bridge that speaks the RFC protocol without the proprietary SAP NetWeaver RFC SDK.independent, abapReads SAP ECC and S/4HANA for an agent over Gateway OData and RFC, with a Node bridge that speaks the RFC protocol without the proprietary SAP NetWeaver RFC SDK.from ABAP
- sac-workbench-mcpsac-workbench-mcpAn unofficial MCP server that lets an assistant author in SAP Analytics Cloud: 178 tools sent as the requests the SAC web UI itself sends, from a Chrome session the server signs in once.independent, btpMCP server for authoring in SAP Analytics Cloud from an assistantfrom BTP/BAIP
- cap-mcp-bridgecap-mcp-bridgePoints at a running CAP or OData V4 service, reads its $metadata, and turns what it finds into MCP tools — list, describe, query with validated filters, expand, and invoke functions and actions.independent, capMCP server generating tools from a CAP or OData V4 service's metadatafrom CAP
- MCP Server for SAP BTP AdministrationMCP Server for SAP BTP AdministrationSAP-hosted MCP endpoint that exposes BTP account administration — accounts, security, services and connectivity — as tools an AI client discovers and calls on your behalf.sap official, btpSAP-hosted MCP endpoint for BTP account administrationfrom BTP/BAIP
- SAP LeanIX MCP ServerSAP LeanIX MCP ServerHosted MCP endpoint onto an SAP LeanIX instance, exposing selected enterprise-architecture APIs as tools — fact sheets, applications, completeness and custom reports.sap official, btpHosted MCP endpoint onto an SAP LeanIX instancefrom BTP/BAIP
- SAP-samples/hana-cli-claude-pluginSAP-samples/hana-cli-claude-pluginA Claude Code plugin that registers the MCP server of hana-cli, so Claude Code can work on SAP HANA Cloud and on-premise SAP HANA databases.sap official, btpClaude Code plugin registering hana-cli's MCP serverfrom BTP/BAIP
- SAP-samples/hana-developer-cli-tool-exampleSAP-samples/hana-developer-cli-tool-exampleA developer-centric command line for SAP HANA, built for local development outside SAP tooling and connecting to a local, cloud or remote HANA instance the same way.sap official, btpDeveloper-centric command line for SAP HANAfrom BTP/BAIP
- Skybuffer AI MCP serverSkybuffer AI MCP serverAn ABAP add-on that serves SAP business data, transactions and development context as MCP tools from an ICF node inside SAP ECC and S/4HANA, each call running as the signed-in user under PFCG authorization checks.independent, abapABAP add-on serving business data and transactions as MCP toolsfrom ABAP
- sap-security-mcpsap-security-mcpAn entirely read-only security analysis surface: nineteen tools, five resources and eight prompts for audits, SOX and segregation-of-duties review, behind OAuth 2.0 with PKCE. The vendor hosts an endpoint, and the README documents running it yourself.independent, abapRead-only security analysis MCP server for SAP audits and SoD reviewfrom ABAP
- cpi-mcp-servercpi-mcp-serverA Go server over Cloud Integration's design-time content — integration packages and integration flows, listed and searched by id, version, name, vendor or mode.independent, btpGo MCP server over Cloud Integration packages and integration flowsfrom BTP/BAIP
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skillsfrom ABAP
- pyrfc-mcppyrfc-mcpAn MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.independent, abapMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP
- HammerHammerA native macOS code editor for ABAP and CDS, with an Object Navigator, Transport Organizer, Data Browser and Gateway Client in the same app as the editor.independent, abapNative macOS code editor for ABAP and CDSfrom ABAP
- CPIOpsCPIOpsA web app deployed into your own BTP subaccount that commits a Cloud Integration tenant's artifacts to GitHub or GitLab as extracted source files, each commit tagged with the artifact's CPI version.independent, btpCPI artifacts committed to Git as source files, with a quality checkfrom BTP/BAIP
- SAP Cloud Transport ManagementSAP Cloud Transport ManagementMoves software deliverables between SAP BTP accounts along a modelled landscape of transport nodes and routes: Multitarget Application archives, and application-specific content such as SAP Cloud Integration iFlows.sap official, btpMoves MTA archives and content between SAP BTP accountsfrom BTP/BAIP
- Cloud ALM Link for ADTCloud ALM Link for ADTAn Eclipse plugin that shows the transports and SAP Cloud ALM features behind an ABAP object, and turns Cloud ALM IDs in source comments into links.independent, abapEclipse plugin linking ABAP transports to SAP Cloud ALM featuresfrom ABAP
- EPOD ADT MCP ServerEPOD ADT MCP ServerAn MCP server for ABAP that runs inside ABAP Development Tools for Eclipse on the ADT session of each connected project, with a standalone mode that runs with no IDE open.independent, abapMCP server for ABAP on the ADT session, in Eclipse or standalonefrom ABAP
- abapGit Transport GeneratorabapGit Transport GeneratorWrites the two files an SAP transport consists of, the cofile and the data file, from an abapGit repository, so a pipeline can deliver ABAP code through STMS without exporting a request from a development system.independent, abapCofile and data file generated from an abapGit repositoryfrom ABAP
- furkancosgun/Transport-Management-Toolfurkancosgun/Transport-Management-ToolAn ABAP tool that uploads and downloads transport requests as files from a selection screen, and can import an uploaded transport into the system directly rather than as a separate step.independent, abapUploads, downloads and imports ABAP transport requests as filesfrom ABAP
- furkancosgun/ZWARPfurkancosgun/ZWARPAn ABAP utility that finds the custom development objects a program or function module depends on, across nineteen object types, and adds the ones selected to a transport request.independent, abapAdds a program's dependent objects to a transport requestfrom ABAP
- abapToCabapToCAn SAP GUI transaction, ZTOC, that creates, releases and imports a transport of copies from one screen, retrying the import until the copy is visible on the target system.independent, abapSAP GUI transaction for one-click transports of copiesfrom ABAP
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
- ActiveControl Transport form creatorActiveControl Transport form creatorA Visual Studio Code extension that automates ActiveControl transport form creation: a creation window pops up when a transport without a form is used, and a command creates one manually.independent, abapVS Code extension automating ActiveControl transport formsfrom ABAP
- ZCTS_BROWSERZCTS_BROWSERAn ABAP report, ZREP_CTS002_TRANSCOPY, that creates a transport of copies for a request without generating a new version first, and can transport it to a target system over RFC.independent, abapReport creating transports of copies without a new versionfrom ABAP
- git-env-branchesgit-env-branchesA command line that shows, for a list of feature branches, which environment branches such as DEV, ACC and master each one has been merged into.independent, generalShows which feature branches reached which environment branchfrom General
- qttqttA tool that finds which BEx queries sit on a transport request, which transports carry a given query, and which query a given element belongs to, showing the result in an ALV Grid.independent, abapTool mapping BEx queries to the transport requests carrying themfrom ABAP
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
- abap-adt-cliabap-adt-cliPulls an ABAP package to local files over the ADT REST API in parallel, and pushes edited objects back under a transport — bulk sync rather than one object at a time in SE80 or Eclipse.independent, abapCLI that pulls and pushes ABAP packages as local files over ADTfrom ABAP
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skillsfrom ABAP
- ZTCTZTCTA transport checking tool that analyses ABAP transports at object level before they move to production, determining a safe order and flagging risks.independent, abapA transport checking tool that analyses ABAP transports at object level before they move to production, determining a safe order and flagging risks.from ABAP
- dbg_value_statementdbg_value_statementAn ABAP Debugger script that turns a variable's structure or table into the VALUE statement that recreates it, with a tree explorer, also callable as a function module from a report.independent, abapDebugger script generating a VALUE statement for a variablefrom ABAP
- dump_infodump_infoDisplays the variables an ABAP short dump captured, for dumps selected on a selection screen; its documentation does not state which dumps it reads, which releases it runs on or how it installs.independent, abapDisplays the variables of ABAP short dumpsfrom ABAP
- CF Space SwitcherCF Space SwitcherA VS Code extension that logs in to a saved Cloud Foundry API endpoint, org and space and switches between them from a view in the editor, with the targeted space's apps and service instances beside it.independent, btpSwitches Cloud Foundry API, org and space from a view in VS Codefrom BTP/BAIP
- com.sap.cds:cds-feature-consolecom.sap.cds:cds-feature-consoleA CAP Java plugin that connects a running application to CAP console, which consumes its remote monitoring data; CAP console itself is installed separately and still being developed.sap official, capConnects a running CAP Java app to CAP console for monitoringfrom CAP
- com.sap.cds:cds-feature-dev-dashboardcom.sap.cds:cds-feature-dev-dashboardA browser dashboard for a running CAP Java service that shows and manages its messaging, resilience and multitenancy state while developing, open to users with the cds.Developer role.sap official, capBrowser dashboard for a running CAP Java service during developmentfrom CAP
- @cap-js/console@cap-js/consoleConnects a running CAP application to the CAP console.sap official, capConnects a running CAP application to the CAP consolefrom CAP
- @cap-js/data-inspector@cap-js/data-inspectorInspects database entities and their contents at the CAP service level.sap official, capInspects database entities and contents at CAP service levelfrom CAP
- ADAMADAMAn MCP server that debugs ABAP on a connected system over ADT, as one-shot captures or an interactive session, over stdio next to the assistant or as a shared server on SAP BTP Cloud Foundry.independent, abapMCP server driving SAP's ABAP debugger over ADT for an agentfrom ABAP
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
- ABAP Debugger Data View ExtensionABAP Debugger Data View ExtensionAn extension of the ABAP New Debugger that renders the internal table or structure on screen as a typed VALUE statement, ready to paste into an ABAP Unit test.independent, abapDebugger menu entry rendering a table or structure as VALUE codefrom ABAP
- sap-cap-debuggersap-cap-debuggerAttaches a debugger to a CAP application already running on Cloud Foundry — enables the Node inspector inside the container, assigns a port and hands you a Chrome DevTools or VS Code attach.independent, capAttaches a debugger to a CAP app running on Cloud Foundryfrom CAP
- ABAP-Object-VisualizerABAP-Object-VisualizerA debugger script that writes an object hierarchy to the clipboard at a breakpoint as a Graphviz description, for pasting into a renderer such as webgraphviz.com.independent, abapDebugger script exporting an object hierarchy as Graphvizfrom ABAP
- abap_debugger_object_graph_extensionabap_debugger_object_graph_extensionAn ABAP debugger extension that shows the object on the debugger's Objects tab as a Graphviz graph in a browser window, built on ABAP Graph and Graphviz-browser and tested on NetWeaver 7.5.independent, abapABAP debugger extension drawing objects as a Graphviz graphfrom ABAP
- Graphviz-browserGraphviz-browserA static page that draws a Graphviz graph in a browser, written for the ABAP debugger object graph extension and deployable as BSP pages in the system the debugger runs in.independent, abapStatic page drawing Graphviz graphs for the ABAP debugger extensionfrom ABAP
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
- RAP StudioRAP StudioA local ABAP runtime with a browser workbench: RAP sources in abapGit layout are activated on Node.js, kept in SQLite or PostgreSQL and served as OData V4 and V2 to SAP Fiori elements and SAPUI5 apps, with no SAP server attached.independent, abapLocal RAP and classic ABAP runtime with a browser workbenchfrom ABAP
- ABAP Development Tools for EclipseABAP Development Tools for EclipseSAP's Eclipse plugins for ABAP: source, dictionary and CDS editors, Project Explorer, Outline and ABAP Unit, calling ADT resources on the connected system.sap official, abapSAP's Eclipse plugins for ABAP development over ADTfrom ABAP
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing and debugging against a connected system, ABAP Unit and ATC runs, transport management in the Transport Organizer, over RFC to an on-premise system or HTTP to a cloud one, with the ADT MCP Server behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
- @sap/cds-dk@sap/cds-dkThe command line client and development toolkit for CAP projects, with the commands cds build, cds deploy, cds watch and cds add among them.sap official, capCommand line client and development toolkit for CAPfrom CAP
- @saptools/cf-debugger@saptools/cf-debuggerOpens a verified Node.js inspector tunnel over cf ssh to an app on SAP BTP Cloud Foundry from one command, with its own local port for each concurrent session.independent, btpNode.js inspector tunnel over cf ssh to Cloud Foundry appsfrom BTP/BAIP
- @saptools/cf-explorer@saptools/cf-explorerSearches the files of an app deployed to SAP BTP Cloud Foundry over cf ssh, finding the app root, grepping the deployed code and turning matches into file and line candidates.independent, btpFile search in apps deployed to SAP BTP Cloud Foundry over cf sshfrom BTP/BAIP
- @saptools/cf-function-trace@saptools/cf-function-traceRecords how one JavaScript function's state changes, step by step, in a Node.js process running locally or on SAP BTP Cloud Foundry, and stores the run as a redacted timeline that can be queried later.independent, btpStep-by-step state recorder for one JavaScript function in Node.jsfrom BTP/BAIP
- @saptools/cf-hana@saptools/cf-hanaA command line and TypeScript API that runs SQL against the SAP HANA Cloud database bound to a Cloud Foundry app, addressed by a region/org/space/app selector.independent, btpSQL runner against the SAP HANA Cloud database bound to a CF appfrom BTP/BAIP
- @saptools/cf-inspector@saptools/cf-inspectorSets breakpoints, captures variable snapshots and evaluates expressions on a remote Node.js process over the Chrome DevTools Protocol from the shell, with no IDE attached.independent, btpShell debugger for remote Node.js over the Chrome DevTools Protocolfrom BTP/BAIP
- @saptools/cf-live-trace@saptools/cf-live-traceInjects a bounded HTTP trace hook into a running Node.js app on SAP BTP Cloud Foundry and streams each request and response to the terminal as JSON.independent, btpHTTP trace hook streaming a running CF Node.js app's trafficfrom BTP/BAIP
- @saptools/cf-request-runner@saptools/cf-request-runnerDiscovers every API endpoint of a CAP service already deployed to Cloud Foundry by walking its service documents, $metadata and endpoints catalog — falling back to container SSH to parse .cds files.independent, capEndpoint discovery for CAP services deployed to Cloud Foundryfrom CAP
- @saptools/service-flow@saptools/service-flowTraces one CAP operation end to end across several repositories without running anything — handlers, helper packages, local database access, remote OData calls, external HTTP and async channels.independent, capStatic end-to-end tracer of one CAP operation across repositoriesfrom CAP
- Smart DebuggerSmart DebuggerA debugger script for the SAP GUI New Debugger that records every step and variable change of an ABAP program, so execution can be stepped backwards with F5 and F8.independent, abapSAP GUI debugger script recording steps so execution can run backwardsfrom ABAP
Details
Sources
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
History in the atlas
- First seen.
For your agent
- Ref
artifact:netweaver1970-abap-config-mcp- JSON
- /artifacts/netweaver1970-abap-config-mcp.json
- MCP
- Connecting an agent