@mcp-abap-adt/core
A 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.
The README credits both projects it started from and says plainly that it went its own way afterwards. What it offers is the familiar surface — read, create, update and delete ABAP objects from Claude Code, Cline, Cursor, Windsurf or any MCP client, across ABAP Cloud, on-premise and legacy systems — packaged as @mcp-abap-adt/core with a Claude Code plugin, and documented in three languages, which is not true of anything else in this group.
Facts
Where it sits
Who is behind it
In the atlas: maintains 2, contributes to 2@babamba2Oleksii KyslytsiaOleksii KyslytsiaMaintains this
In the atlas: maintains 2, contributes to 2@fr0stermaintainersHenry MaoContributes to this
In the atlas: contributes to 4@calclaviamario-andreschakContributes to this
In the atlas: maintains 3, contributes to 5@mario-andreschakFrank FiegelContributes to this
In the atlas: contributes to 3@punkpeyeraaleksandr-epamContributes to this
In the atlas: contributes to 2@raaleksandr-epam4 contributors
Before choosing this
Conditions
PracticalFunctional boundary
A descendant rather than a distinct idea: if what you need is the ADT surface itself, its ancestors are entered here too and one of them may already be in your stack.
PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your codeAn MCP server calls ADT or another SAP API of a running system for an agent.
- § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
- § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
- § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.
An agent that plans and executes ADT calls is the case section 2.2.2 names. Check that the endpoints are published for the intended use, and that the design runs within a pathway SAP identifies for it.
SAP API Policy 4.2026a →What it declares
Every artifact
- Type
- MCP server
- Origin
- Independently maintained
- Runtime
- Node.js
As an MCP server
- Runs as
- central serverlocal process
- Transport
- stdioHTTPSSE
- Authentication
- user and passwordOAuth / OIDCservice key
- Tools
- 287
- Read-only
- nostates it is not
- Guardrails
4 quoted from README show all
opt-in server-side blocklist (
SC4SAP_POLICY=on) that blocks row extraction from sensitive tablesUse the
HandlerExporterto select handler groups when embedding, or set environment flags to disable groups.The server respects SAP authorization — whatever your user cannot do in SE80/ADT, it cannot do here either.
we recommend a dedicated development user and running against non-prod first.
For agent access to ABAP code
- Read
- sourcesearchwhere-usedDDICCDStable data
- Change
- writecreateactivatetransportsgit
- Check
- syntaxATCABAP Unit
- Run
- run codedumps
Connections
Letting a coding agent read and act on your project or system
Claude Code plugin with an ABAP MCP server and write guards
ABAP MCP server with full CRUD on on-premise and ABAP Cloud
Read-oriented MCP server fetching ABAP programs, classes, tables
Download
Install
npm add @mcp-abap-adt/coreDerived from the package name. No recipe recorded; the README has the configuration.
Architecture
Download
README
quoted from babamba2/abap-mcp-adt-powerup under MIT, readMCP ABAP ADT ( For sc4sap application )
🌐 Language / 언어 / 言語: English · 한국어 · 日本語
Acknowledgments
This project was originally inspired by mario-andreschak/mcp-abap-adt and fr0ster/mcp-abap-adt. We started with the core concept and evolved it into an independent project with our own architecture and features. Huge thanks to the original authors and all contributors whose work made this possible.
Model Context Protocol (MCP) server for SAP ABAP development — enables AI assistants and code editors to interact with SAP systems via ABAP Developer Toolkit (ADT) APIs.
Read, create, update, and delete ABAP objects directly from Claude Code, Cline, Cursor, Windsurf, or any MCP-compatible client. Supports ABAP Cloud (BTP), On-Premise, and Legacy SAP systems.
Table of Contents
- Features
- Supported SAP Environments
- Quick Start
- Installation
- Claude Code Plugin
- Configuration
- Authentication
- Available Tools
- Transport Protocols
- Client Configuration
- Handler Architecture
- Docker Deployment
- Development
- Testing
- Troubleshooting
- FAQ
- Documentation
- Optional: Data Fetch Prevention
- Contributing
- License
Features
- 288 MCP Tools for comprehensive SAP ABAP development
- 30+ ABAP object types supported (Classes, Interfaces, CDS Views, Tables, RAP, and more)
- Multiple transport protocols: stdio, HTTP (StreamableHTTP), SSE
- Flexible authentication: JWT/XSUAA (OAuth2), Basic Auth, Service Key
- Multi-environment: ABAP Cloud (BTP), On-Premise, Legacy (BASIS < 7.50)
- Runtime diagnostics: Profiling, dump analysis, SQL queries
- Handler groups: Read-Only, High-Level, Low-Level, Compact, System, Search
- Embeddable: Use as a standalone server or embed handlers into existing MCP servers
- Auto-configurator:
@mcp-abap-adt/configuratorfor automated client setup - Health endpoint:
GET /mcp/healthfor HTTP/SSE transports - Optional data-fetch prevention: opt-in server-side blocklist (
SC4SAP_POLICY=on) that blocks row extraction from sensitive tables (PII, credentials, payroll, banking) regardless of caller — see Optional: Data Fetch Prevention
Supported SAP Environments
| Environment | Auth Methods | Notes |
|---|---|---|
| ABAP Cloud (BTP) | JWT/XSUAA, Service Key | Full RAP/CDS support |
| On-Premise (S/4HANA) | Basic Auth, JWT | Full feature surface — Programs, Classes, CDS, Screens, GUI Statuses |
| Legacy (ECC / BASIS < 7.50) | Basic Auth | Classic ABAP only — see matrix below |
Legacy detection (BASIS < 7.50 / pre-S/4HANA) applies when any of:
SAP_SYSTEM_TYPE=legacy(explicit opt-in, back-compat)SAP_VERSION=ECCABAP_RELEASEnumeric < 750 (e.g.,740,731)
Under legacy mode the client routes through AdtClientLegacy, which restricts endpoint probes to those actually present on BASIS 7.4x. Modern DDIC CRUD and RAP/Service endpoints deliberately refuse with a clear "not supported on this SAP system" message instead of a cryptic 404.
Legacy (ECC / BASIS < 7.50) Compatibility Matrix
Verified on ECC 7.40 (SAP_VERSION=ECC, ABAP_RELEASE=740, SAP_SYSTEM_TYPE=onprem).
| Category | Tool | ECC 7.40 | Reason |
|---|---|---|---|
| Session / Discovery | GetSession, SearchObject, GetObjectInfo, GetObjectStructure | ✅ | Basic ADT present on all releases |
| Inactive objects | GetInactiveObjects | ✅ | — |
| Package read | GetPackageContents, GetPackageTree | ✅ | ADT repository informationsystem |
| Package metadata | GetPackage | ⚠️ | Needs client library 3.15.0+. Resolved through the informationsystem search: name / type / description only (legacy_limited: true); super-package, components and transport layer are not returned. A missing package gives "not found". Package create/update/delete stay SE80/SE21 |
| DDIC read | GetTable, GetStructure, GetDataElement, GetDomain | ❌ | /sap/bc/adt/ddic/{tables,structures,dataelements,domains} added in BASIS 7.50 |
| DDIC write | CreateTable, CreateStructure, CreateDataElement, CreateDomain (+ Update/Delete) | ❌ | Same endpoint gap — create from SAP GUI (SE11) instead |
| CDS view (DDLS) | GetView, CreateView, UpdateView | ✅ | DDL endpoint (/sap/bc/adt/ddic/ddl/sources/) present and activates cleanly from BASIS 7.40 SP05+ |
| Classic view (VIEW/DV) | GetView for classic DDIC views | ❌ | Classic view endpoint falls in the same DDIC gap as Tables/Structures — use SE11 in SAP GUI |
| ABAP source read | GetProgram, GetClass, GetInterface, GetInclude, GetFunctionGroup, GetFunctionModule | ✅ | /sap/bc/adt/{programs,oo/classes,oo/interfaces,programs/includes,functions/groups} all present |
| ABAP source write | Create* / Update* for Program, Class, Interface, Include, FunctionGroup, FunctionModule | ✅ | UpdateFunctionModule defaults transport_request to "local" when omitted (consistent with FunctionGroup/Class) |
| AST / Semantic analysis | GetAbapSemanticAnalysis, GetAbapAST | ✅ | Client-side parse, no SAP call |
| WhereUsed | GetWhereUsed, GetUsageSnippets | ✅ | Needs client library 3.15.0+. No scope step on 7.40 (server default scope; enable_all_types ignored); tables / structures / data elements / domains / DDIC views / table types / transactions / function modules go through workbench VIT URIs; function module by plain name; SAP_TIMEOUT_LONG (120 s) because VBAK-sized searches take ~60 s |
| Enhancements | GetEnhancements, GetEnhancementSpot, GetEnhancementImpl | ❌ | /sap/bc/adt/enhancements discovery endpoints return 404 on BASIS < 7.50 — use SE18/SE19 or CMOD/SMOD in SAP GUI |
| Transport | ListTransports, GetTransport, CreateTransport | ✅ | CTS endpoints present |
| Runtime | RuntimeListDumps, RuntimeAnalyzeDump, RuntimeGetDumpById | ✅ | /sap/bc/adt/runtime/dumps present |
| Screen / GUI Status | GetScreen, GetGuiStatus, GetTextElement (+ Create/Update) | ℹ️ | RFC-dispatched via SAP_RFC_BACKEND (odata default / soap / native / gateway / zrfc); the chosen backend's prerequisites (backend classes, SICF node, SDK) must be in place |
| RAP / Behavior | *BehaviorDefinition, *BehaviorImplementation | ❌ | S/4HANA only — RAP does not exist on ECC |
| Service binding | *ServiceDefinition, *ServiceBinding | ❌ | S/4HANA / ABAP Cloud only |
| Metadata extensions | *MetadataExtension | ❌ | S/4HANA / ABAP Cloud only |
| Table contents | GetTableContents, GetSqlQuery | ℹ️ | Works server-side but gated by the per-profile data-extraction policy — see Optional: Data Fetch Prevention |
Legend: ✅ works fully · ⚠️ works with caveats · ❌ refuses with a clear "not supported on this SAP system" error (not a bug — SAP platform limit) · ℹ️ works, but depends on prior setup / policy.
Quick Start
1. Install
npm install -g @mcp-abap-adt/core
2. Configure environment
# Create .env file in your working directory
cat > .env << 'EOF'
SAP_URL=https://your-sap-system.com
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your_username
SAP_PASSWORD=your_password
EOF
3. Run
# stdio (for MCP clients like Claude Code, Cline, Cursor)
mcp-abap-adt
# HTTP server
mcp-abap-adt --transport=http --port 3000
# SSE server
mcp-abap-adt --transport=sse --port 3000
Installation
From npm (Recommended)
npm install -g @mcp-abap-adt/core
From source
git clone --recurse-submodules https://github.com/babamba2/abap-mcp-adt-powerup.git
cd abap-mcp-adt-powerup
npm install
npm run build
npm start
Platform-specific guides
Claude Code Plugin
This repository is also distributed as a Claude Code plugin via the marketplace.
Install via marketplace
# Add this marketplace (once)
/plugin marketplace add babamba2/abap-mcp-adt-powerup
# Install the plugin
/plugin install abap-mcp-adt-powerup
After install, configure the SAP connection through environment variables (see Configuration) or use the auto-configurator:
npx @mcp-abap-adt/configurator
Manual plugin directory
If you're editing this repo locally, it already resolves as a plugin from:
~/.claude/plugins/marketplaces/abap-mcp-adt-powerup
Reload Claude Code (/plugin → Reload) to pick up changes.
Configuration
Environment Variables (.env)
# SAP connection
SAP_URL=https://your-abap-system.com
SAP_CLIENT=100
SAP_LANGUAGE=en
# System type: cloud (default), onprem, or legacy
SAP_SYSTEM_TYPE=cloud
# TLS: set to 0 for self-signed certificates (dev only)
TLS_REJECT_UNAUTHORIZED=0
# Authentication
SAP_AUTH_TYPE=xsuaa # 'xsuaa' for JWT, 'basic' for username/password
SAP_JWT_TOKEN=your_jwt_token # For JWT auth
# SAP_USERNAME=your_username # For basic auth
# SAP_PASSWORD=your_password # For basic auth
# On-premise context (required for create/update on on-prem)
# SAP_MASTER_SYSTEM=DEV
# SAP_RESPONSIBLE=your_username
# Timeouts (milliseconds)
SAP_TIMEOUT_DEFAULT=45000 # General operations (default: 45s)
SAP_TIMEOUT_CSRF=15000 # CSRF token requests (default: 15s)
SAP_TIMEOUT_LONG=60000 # Long-running operations (default: 60s)
CLI Options
mcp-abap-adt [options]
Options:
--transport=<type> Transport protocol: stdio (default), http, sse
--port <number> Server port for http/sse (default: 3000)
--host <address> Bind address for http/sse (default: localhost)
--env <destination> Destination name for multi-system setups
--env-path <path> Path to .env file
YAML Configuration
Alternative to CLI arguments. See YAML Config Guide.
Authentication
Basic Auth (On-Premise)
SAP_AUTH_TYPE=basic
SAP_USERNAME=developer
SAP_PASSWORD=secret123
JWT / XSUAA (Cloud / On-Premise)
SAP_AUTH_TYPE=xsuaa
SAP_JWT_TOKEN=eyJhbGciOiJSUzI1NiIs...
Service Key (BTP)
Place your service key JSON file and configure via the configurator (@mcp-abap-adt/configurator).
Header-based Auth (HTTP/SSE transports)
For multi-tenant or proxy setups, pass SAP connection details via HTTP headers (x-sap-*). See Authentication Guide.
Available Tools
The server provides 288 tools organized into handler groups:
Tool Categories
| Category | Count | Description |
|---|---|---|
| Read-Only | 52 | Query and retrieve objects without modification |
| High-Level | 113 | User-friendly CRUD operations |
| Low-Level | 122 | Direct ADT API operations with granular control |
| Compact | 22 | Streamlined access to common operations |
| System | - | Runtime analysis, profiling, dumps, SQL queries |
| Search | - | Object discovery, where-used analysis |
Supported ABAP Object Types
| Object Type | Read | Create | Update | Delete |
|---|---|---|---|---|
| Classes (CLAS) | O | O | O | O |
| Interfaces (INTF) | O | O | O | O |
| Programs (PROG) | O | O | O | O |
| Includes | O | O | O | O |
| Tables (TABL) | O | O | O | O |
| Structures | O | O | O | O |
| CDS Views (DDLS) | O | O | O | O |
| Domains | O | O | O | O |
| Data Elements (DTEL) | O | O | O | O |
| Function Groups (FUGR) | O | O | O | O |
| Function Modules (FUNC) | O | O | O | O |
| Packages (DEVC) | O | O | O | O |
| Transports | O | O | - | - |
| Service Definitions (SRVD) | O | O | O | O |
| Service Bindings (SRVB) | O | O | O | O |
| Behavior Definitions (BDEF) | O | O | O | O |
| Behavior Implementations (BIMP) | O | O | O | O |
| Metadata Extensions (DDLX) | O | O | O | O |
| Screens (DYNP) | O | O | O | O |
| GUI Statuses | O | O | O | O |
| Text Elements | O | O | O | O |
| Unit Tests | O | O | O | O |
| CDS Unit Tests | O | O | O | O |
| Enhancements | O | - | - | - |
Runtime & System Tools
- Runtime Profiling - Profile class and program execution with trace analysis
- Dump Analysis - List and analyze ABAP runtime dumps
- SQL Queries - Execute SQL queries via ADT (
GetSqlQuery) - Table Contents - Read table data (
GetTableContents) - Object Search - Find objects by name, type, package (
SearchObject) - Where-Used - Cross-reference analysis (
GetWhereUsed) - Type Info - Retrieve type information (
GetTypeInfo) - Inactive Objects - List objects pending activation (
GetInactiveObjects) - AST / Semantic Analysis - Parse ABAP syntax tree and semantic info
For the complete tool reference, see AVAILABLE_TOOLS.md.
Transport Protocols
stdio (Default)
Standard input/output transport for MCP clients. Used by Claude Code, Cline, Cursor, and other MCP-compatible tools.
mcp-abap-adt
# or explicitly:
mcp-abap-adt --transport=stdio
HTTP (StreamableHTTP)
REST API with JSON streaming responses. Ideal for web clients and multi-user deployments.
mcp-abap-adt --transport=http --port 3000 --host 0.0.0.0
Health check: GET /mcp/health
SSE (Server-Sent Events)
Long-polling transport with session management.
mcp-abap-adt --transport=sse --port 3000
Client Configuration
Claude Code
{
"mcpServers": {
"mcp-abap-adt": {
"command": "npx",
"args": ["-y", "@mcp-abap-adt/core"],
"env": {
"SAP_URL": "https://your-sap-system.com",
"SAP_CLIENT": "100",
"SAP_AUTH_TYPE": "basic",
"SAP_USERNAME": "developer",
"SAP_PASSWORD": "secret"
}
}
}
}
Cline / Cursor / VS Code
{
"mcpServers": {
"mcp-abap-adt": {
"command": "npx",
"args": ["-y", "@mcp-abap-adt/core"],
"env": {
"SAP_URL": "https://your-sap-system.com",
"SAP_CLIENT": "100",
"SAP_AUTH_TYPE": "xsuaa",
"SAP_JWT_TOKEN": "eyJhbGciOiJSUzI1NiIs..."
}
}
}
}
Auto-Configuration
Use the configurator for automated setup:
npx @mcp-abap-adt/configurator
See Client Configuration Guide for more examples.
Handler Architecture
The server organizes tools into composable handler groups:
handlers/
├── behavior_definition/ # BDEF CRUD
├── behavior_implementation/# BIMP CRUD
├── class/ # CLAS CRUD
├── compact/ # Shorthand tools
├── common/ # Shared handlers
├── data_element/ # DTEL CRUD
├── ddlx/ # Metadata Extension CRUD
├── domain/ # Domain CRUD
├── enhancement/ # Enhancement read-only
├── function/ # Function-related
├── function_group/ # FUGR CRUD
├── function_module/ # FUNC CRUD
├── gui_status/ # GUI Status CRUD
├── include/ # Include CRUD
├── interface/ # INTF CRUD
├── metadata_extension/ # DDLX CRUD
├── package/ # DEVC CRUD
├── program/ # PROG CRUD
├── screen/ # Screen/Dynpro CRUD
├── search/ # Object search & where-used
├── service_binding/ # SRVB CRUD
├── service_definition/ # SRVD CRUD
├── structure/ # Structure CRUD
├── system/ # Runtime diagnostics
├── table/ # TABL CRUD
├── text_element/ # Text Element CRUD
├── transport/ # Transport management
├── unit_test/ # Unit test CRUD & run
└── view/ # CDS View CRUD
Each handler category contains subdirectories:
high/- High-level, user-friendly operationslow/- Low-level, direct ADT API operationsreadonly/- Safe read-only queries
Embedding Handlers
For integrating into existing MCP servers (e.g., CAP/CDS applications):
import { HandlerExporter } from '@mcp-abap-adt/core/handlers';
const exporter = new HandlerExporter({
includeReadOnly: true,
includeHighLevel: true,
includeLowLevel: false,
includeSystem: true,
includeSearch: true,
});
exporter.registerOnServer(mcpServer, () => connection);
Docker Deployment
Using Docker Compose
# Build and run
npm run docker:build
npm run docker:up
# Or with pre-built package
npm run docker:build:package
npm run docker:up:package
Manual Docker Build
cd docker
docker-compose build
docker-compose up -d
See Docker Deployment Guide for full details.
Development
Prerequisites
- Node.js >= 20.0.0
- npm >= 9.0.0
- TypeScript 5.9+
Setup
git clone --recurse-submodules https://github.com/babamba2/abap-mcp-adt-powerup.git
cd abap-mcp-adt-powerup
npm install
npm run build
Scripts
| Command | Description |
|---|---|
npm run build | Lint + compile TypeScript |
npm run build:fast | Compile only (skip lint) |
npm run dev | Build + launch MCP Inspector (stdio) |
npm run dev:http | Build + launch HTTP dev server |
npm run dev:sse | Build + launch SSE dev server |
npm run lint | Run Biome linter with auto-fix |
npm run format | Format code with Biome |
npm start | Run MCP server (stdio) |
npm run start:http | Run MCP server (HTTP) |
npm run start:sse | Run MCP server (SSE) |
npm run docs:tools | Regenerate tool documentation |
Project Structure
mcp-abap-adt/
├── bin/ # CLI entry points
│ ├── mcp-abap-adt.js # Main CLI
│ └── mcp-abap-adt-v2.js # V2 server variant
├── src/
│ ├── handlers/ # 30 handler categories (288 tools)
│ ├── lib/
│ │ ├── auth/ # Auth broker, JWT/XSUAA
│ │ ├── config/ # Configuration management
│ │ ├── handlers/ # Handler registry & utilities
│ │ ├── stores/ # Session/token storage
│ │ ├── types/ # TypeScript interfaces
│ │ └── utils.ts # Core utilities
│ ├── server/
│ │ ├── BaseMcpServer.ts # MCP server extension
│ │ ├── StdioServer.ts # stdio transport
│ │ ├── SseServer.ts # SSE transport
│ │ ├── StreamableHttpServer.ts # HTTP transport
│ │ └── launcher.ts # Server startup
│ └── utils/ # Utility modules
├── docker/ # Docker deployment
├── docs/ # Documentation
├── tests/ # Test configuration
├── tools/ # Dev tools & scripts
└── package.json
Key Dependencies
| Package | Purpose |
|---|---|
@mcp-abap-adt/adt-clients | ADT REST API clients |
@mcp-abap-adt/connection | SAP connection management |
@mcp-abap-adt/auth-broker | Authentication token management |
@mcp-abap-adt/auth-providers | Auth strategy implementations |
@modelcontextprotocol/sdk | MCP protocol SDK |
fast-xml-parser | XML parsing for ADT responses |
Testing
Integration Tests
Integration tests run against a real SAP system in two modes:
- Soft mode (default): Calls handlers directly, no MCP subprocess
- Hard mode: Spawns full MCP server via stdio, calls tools through MCP protocol
Setup
# Create test config from template
npm run test:init
# Edit only the lines marked "# <- CHANGE"
# - environment.env (session .env file)
# - environment.system_type (onprem/cloud/legacy)
# - environment.default_package
# - environment.default_transport
Running Tests
# Unit tests
npm test
# All integration tests (soft mode)
npm run test:integration
# High-level handler tests only
npm run test:high
# Low-level handler tests only
npm run test:low
# Type check test files
npm run test:check
See Testing Guide for full details.
Troubleshooting
self-signed certificate in certificate chain
Your SAP system uses a self-signed TLS certificate. For development only:
TLS_REJECT_UNAUTHORIZED=0
For production, install the SAP CA certificate into the Node.js trust store.
401 Unauthorized / 403 Forbidden
- Basic Auth: confirm
SAP_USERNAME/SAP_PASSWORDand that the user has ADT authorization (S_DEVELOP,S_RFC,S_TCODE). - JWT/XSUAA: the token may be expired — refresh via the configurator or service key.
- Client mismatch: verify
SAP_CLIENTmatches the logon client.
CSRF token validation failed on Update/Create
The session lost its CSRF token. Most handlers refresh automatically; if it persists:
- Increase
SAP_TIMEOUT_CSRF(default 15s). - Confirm cookies are not being stripped by a proxy.
transport required on On-Premise
Create or update on on-prem systems requires a transport request. Set:
SAP_MASTER_SYSTEM=DEV
SAP_RESPONSIBLE=your_username
…and pass transport=<TRKORR> to the handler, or use a local package ($TMP).
Claude Code doesn't see the MCP server
- Restart Claude Code after editing config.
- Check logs:
~/.claude/logs/(stderr from the MCP process). - Run
mcp-abap-adtdirectly in a shell — it must start without errors before Claude can connect.
Programs not available on Cloud
Programs (PROG) are on-premise / legacy only. Use Classes or CDS on ABAP Cloud.
FAQ
Q. Does this work with S/4HANA Cloud, public edition? Yes — via ABAP Cloud (BTP) with JWT/XSUAA or a service key. RAP/CDS objects are fully supported; classic objects (Programs, Screens, GUI Statuses) are not available on cloud.
Q. Can I use this without Claude Code?
Yes. Any MCP-compatible client works: Cline, Cursor, Windsurf, VS Code MCP extension, or a custom client built with @modelcontextprotocol/sdk.
Q. How do I limit which tools are exposed?
Use the HandlerExporter to select handler groups when embedding, or set environment flags to disable groups. See Handler Management.
Q. Is it safe to use against a productive SAP system? The server respects SAP authorization — whatever your user cannot do in SE80/ADT, it cannot do here either. Still, we recommend a dedicated development user and running against non-prod first.
Q. How do I run against multiple SAP systems?
Use --env <destination> with per-destination .env files, or the YAML config. For HTTP/SSE deployments, pass x-sap-* headers per request.
Q. Does it support RFC?
Yes, for legacy systems where ADT HTTP APIs are unavailable. Set connection_type: rfc in the test config (or equivalent env) — requires the SAP NW RFC SDK installed locally.
Documentation
| Guide | Description |
|---|---|
| Installation | Platform-specific installation |
| Client Configuration | MCP client setup |
| Authentication | Auth methods & destinations |
| Available Tools | Complete tool reference (288 tools) |
| CLI Options | Command-line reference |
| YAML Config | YAML configuration guide |
| Architecture | System architecture overview |
| Stateful Sessions | Lock/update/unlock flow |
| Handler Architecture | Tool & handler structure |
| Docker Deployment | Container deployment |
| Testing Guide | Test setup & execution |
| Handler Management | Enable/disable handler groups |
Optional: Data Fetch Prevention
Row-returning tools (GetTableContents, GetSqlQuery) can expose sensitive business data — PII, credentials, payroll, banking, transactional finance. This server ships with an opt-in server-side blocklist that stops such calls before they ever reach SAP, regardless of the caller (Claude, other LLMs, direct JSON-RPC, external scripts).
The feature is disabled by default — nothing is blocked unless you explicitly turn it on.
Enable
export SC4SAP_POLICY=on # or: strict | standard | minimal | custom
export SC4SAP_POLICY_PROFILE=strict # optional, default when SC4SAP_POLICY=on
export SC4SAP_BLOCKLIST_PATH=/path/to/table_exception.md # optional extra list
export SC4SAP_ALLOW_TABLE=TAB1,TAB2 # session-scoped emergency exemption (logged)
Profiles
| Profile | Blocks |
|---|---|
strict (default when SC4SAP_POLICY=on) | PII + credentials + HR + transactional finance + audit logs + workflow |
standard | PII + credentials + HR + transactional finance |
minimal | PII + credentials + HR + Tax (business tables allowed) |
custom | User-supplied list only (blocklist-custom.txt) |
Behavior
When a blocked table is accessed, the server responds with isError: true and a categorized reason — no SAP round-trip occurs. Schema/DDIC metadata calls (GetTable, GetStructure, GetView, GetDataElement, GetDomain), existence checks (SearchObject), and aggregate-only GetSqlQuery remain allowed.
Built-in blocklist covers 100+ tables / patterns across Banking (BNKA, KNBK, LFBK, REGUH), Customer/Vendor PII (KNA1, LFA1, BUT000, BUT0ID), Addresses (ADRC, ADR6, ADRP), Authentication (USR02, RFCDES, AGR_1251), HR/Payroll (PA* / HRP* / PCL*), Tax IDs, Protected Business Data (VBAK/BKPF/ACDOCA), Audit logs, and customer Z* PII patterns.
This feature is designed for but not coupled to the sc4sap plugin — any MCP client can benefit from it.
Contributing
We welcome contributions! Please see the development documentation for setup instructions.
Contributors
- Paek Seunghyun (@babamba2) - Enhanced features addition
- Oleksii Kyslytsia (@fr0ster) - Main maintainer (539+ commits)
- mario-andreschak (@mario-andreschak) - Original project maintainer
- Henry Mao (@calclavia) - Contributor
- Aleksandr Razinkin (@raaleksandr-epam) - Contributor
- Frank Fiegel (@punkpeye) - Contributor
License
MIT — Copyright (c) 2026 백승현 (Paek Seunghyun) & Oleksii Kyslytsia
History
Features 6, Changed 1, Fixes 1
Notes
Added
GetSmartFormLayout(read-only, on-premise and legacy systems): page and window layout of a SmartForm. Per page the format, orientation, next page, CPI / LPI and style; per window its type (MAIN, SECONDARY, ...), position and size as stored (value + unit) and converted to millimetres (CM, MM, IN, PT, TW, and LN / CH through the page LPI / CPI). Reads the active version (a form that was never activated is read from its saved version andactiveis false).languagetakes a 1-character SAP key or a 2-letter ISO code. Layout only: no texts, code or form interface. Runs throughZMCP_ADT_DISPATCHactionSSF_LAYOUT, so it works on the OData backend (BASIS 7.40) and over SOAP RFC (BASIS 7.31). Needs the newZMCP_SSF_LAYOUTFM and theSSF_LAYOUTdispatcher branch; without them the tool answers with an install hint.GetSmartFormContent(read-only, on-premise and legacy systems): what a SmartForm prints, for preview rendering. Per page and window (position in mm) the content tree: text nodes with their lines (paragraph format, inline character formats,&symbols&), include texts, templates with line heights and cells (width, border widths, shading colour), loops and tables with header / footer events, graphics, addresses, print conditions; code nodes only as markers, never program lines. Also the form interface and global data with their types (data), the SmartStyles as CSS, SE78 graphics with a fixed key as BMP with their printed size, and include texts with a fixed key. Everything is written under the MCP output directory (smartforms/<form>/, full result in<form>.content.json);summary: trueanswers with an overview (windows, data declarations,&symbols&, graphics, files) because the full tree easily exceeds a tool answer. Runs throughZMCP_ADT_DISPATCHactionSSF_CONTENT(FMZMCP_SSF_CONTENT).RenderSmartForm(on-premise and legacy systems): the output of a SmartForm exactly as SAP prints it, for given interface values. Calls the form's generated function module with GETOTF (no dialog, no print, no spool) and writes the OTF and the PDF under the MCP output directory (smartforms/<form>/<form>.sap.otf.txt/.sap.pdf).values/values_filetake the interface in internal format;deviceorfamilieschoose the device type, so the output has the printer fonts the form was made for. The form's own program lines run as in a real print and may read the database — pass invented sample values only. Runs throughZMCP_ADT_DISPATCHactionSSF_RENDER(FMZMCP_SSF_RENDER); without them the tool answers with an install hint.CreateSmartForm(writes, on-premise and legacy systems, DEV profiles only): creates — or withoverwritereplaces — a Z/Y SmartForm from Form Builder XML (the format of SMARTFORMS > Utilities > Download and ofGetSmartFormContent's form XML). The form is checked and stored active, its function module generated (also for a replaced form); when the check finds errors it is stored inactive and the errors come back.package_namedefaults to$TMP; another package needstransport_request. The XML travels raw-deflate compressed in parts of 5000 base64 characters, because the ODataDispatchfunction import carries its parameters in the URL. Runs throughZMCP_ADT_DISPATCHactionSSF_UPLOAD_XML(FMZMCP_SSF_UPLOAD); without them the tool answers with an install hint.DeleteSmartForm(writes, destructive, DEV profiles only): deletes a Z/Y SmartForm of a local package ($TMP,$…) with its generated function module — a dry run unlessconfirm: true; transportable forms are refused. Runs through actionSSF_DELETE_FORM(FMZMCP_SSF_DELETE).GetSmartFormContentreads more of what decides the print:- SmartStyle paragraphs and character formats as stored (value + unit, family, size, tabs), with the SE73 bar-code definition (
barcodeDef: symbology, module, height) of bar-code formats. - Table / template patterns with their outer frame flag (
frame.border), box sides switched on with thickness 0 (on), and thereferenceof a template line type that takes another line's height. - Styles named only in output options (template / window STDSTYLE) are read too.
- The device type and its printer fonts for the form's families (
printer). - Texts with no translation in the logon language are taken from the form's master language, as SAP prints them. This needs
ZMCP_SSF_CONTENTwithIV_LANGUAGEfor theFORMpart; an older FM keeps the logon-language texts.
- SmartStyle paragraphs and character formats as stored (value + unit, family, size, tabs), with the SE73 bar-code definition (
Fixed
npm run docs:toolscut a description at the first quote of the other kind ('… (e.g. "ZMY_FORM")',"… dump's …"): string values now end at the quote they opened with, escapes are resolved. The user-guide tool lists are regenerated with the full texts.
Changed
- Dependencies updated within their major versions:
@modelcontextprotocol/sdk1.32.1,axios1.20,fast-xml-parser5.11,zod4.6,js-yaml4.3,pino10.4,pino-pretty13.2, and the dev tooling (Biome 2.5, ts-jest, tsx, express, yaml).jeststays on 30.2: 30.5 pulls in@parcel/watcher, whose install script fails under the nestedjesttree on Windows (path over 260 characters).
Features 4, Changed 1, Fixes 4
Notes
Changed
- ADT source writes on BASIS < 7.40 now explain the invalid-lock-handle failure. Some 7.31 systems never send a
sap-contextidcookie, so no stateful ADT session exists and the lock is gone before the write: the PUT fails with HTTP 423ExceptionResourceInvalidLockHandlein every session mode. No client-side setting fixes it. The error now carries a hint that ADT source writes cannot work on that system and that the source has to be edited in SE38 / SE24 / SE37. Applies to every tool error that mentions an invalid lock handle whenABAP_RELEASE< 740.
Fixed
ReloadProfileswitched the profile but not the connection. The stdio server kept the connection context it built at boot, so after a switch every tool still talked to the previous system until Claude Code was restarted. A profile switch now rebinds the stdio connection context and drops the RFC sessions of the previous system (SOAP / OData CSRF session, native RFC pool, ZRFC proxy session). EverySAP_RFC_*key of the previous profile is cleared, so a profile that does not set one no longer inherits it. The defaultMCP_OUTPUT_DIR(.sc4sap/work/<alias>/mcp-output) follows the new alias; a user-chosen directory is left alone. When part of the switch fails, the result isok: falsewithrestartRequired: trueanderrors.ListTransports/GetTransportreturned nothing on BASIS < 7.40. The ADT transport organizer does not exist there: the list URL answers an empty body, which parsed to 0 transports. On these releases the request header, tasks and objects are read from E070 / E07T / E071 with the standardRFC_READ_TABLEover SOAP RFC. No custom ABAP is needed.GetWhereUsedfailed on BASIS < 7.40. There is no repository information system resource. The search now runs in SAP throughZMCP_ADT_DISPATCHactionWHERE_USED(cross-reference tables, DDIC usage) and returns the same shape, with a note that says so.- Read-only DDIC helpers on BASIS 7.31. There is no SAP Gateway there, so the OData service cannot exist. The table / data element / domain read helpers now also run over SOAP RFC.
Added
GetTcodeUsage(read-only, ECC): was each transaction used in the last N months, from the ST03N workload monthly aggregates. One boolean per transaction pluscoverage(months that actually hold data). No user names leave SAP.destination(orSAP_USAGE_RFCDESTin the profile) reads another system's aggregates over an SM59 destination. Needs theZMCP_WL_TCODE_USAGEFM and theWlTcodeUsagefunction import.GetJobUsage(read-only, ECC): is each program a step of a background job that is scheduled now or ran inside the window (TBTCO / TBTCP). One boolean per program. Needs theZMCP_WL_JOB_USAGEFM and theWlJobUsagefunction import.GetTransactiontransaction_names: several transactions in one call. The result also shows the kind of transaction (program, parameter transaction with its target t-code and parameters, variant transaction).- Legacy table reads (
ZMCP_ADT_DISPATCH TABLE_READ) also allow TSTC, TSTCP, DD03L and DD04L.
- ADT source writes on BASIS < 7.40 now explain the invalid-lock-handle failure. Some 7.31 systems never send a
Features 4, Fixes 6
Notes
Fixed
GetWhereUsedon ECC (BASIS < 7.50) returned nothing or failed. Every call failed with 404 because the scope step does not exist on 7.40. DDIC objects returned 500. A successful answer was parsed as 0 references. The client library 3.15.0 fixes all three. It searches without a scope, addresses tables, structures, data elements, domains, DDIC views, table types, transactions and function modules through workbench VIT URIs, and parses both namespace prefixes. Needs@babamba2/mcp-abap-adt-clients3.15.0.- On ECC a function module may be given by plain name (
GROUP|FMstill works). The ECC search usesSAP_TIMEOUT_LONG(default 120 s), because a widely used standard table such as VBAK takes about 60 s.
- On ECC a function module may be given by plain name (
ActivateObjects/ActivateObjectreportedsuccess:falseon ECC after a successful activation. On BASIS 7.40/sap/bc/adt/activation/runsreturns 404 and the syncPOST /sap/bc/adt/activationanswers a clean activation with HTTP 200 and an empty body (no<chkl:messages>), which was read as "not activated". An empty body now counts as activated without messages. The result is then checked againstGET /sap/bc/adt/activation/inactiveobjects: an object still listed there is markedfailedwith an error that says so. The response carriesnoteswhen the result was inferred this way. The per-type activation tools (ActivateProgram,ActivateClass, ...) also treat an empty body as success.GetInactiveObjectsreturned 0 objects on ECC. BASIS 7.40 sends a plain<adtcore:objectReferences>list, which the parser did not know. Needs client library 3.15.0. Each object now also carriesuri.available_innow includeslegacy.GetPackagefailed on ECC (BASIS < 7.50). The client library threw for every package read. With client library 3.15.0 the package is resolved through the Information System search and the tool returns name, type and description withlegacy_limited: true; a missing package returns "Package not found.". Needs@babamba2/mcp-abap-adt-clients3.15.0.CreateGuiStatuswroteMODAL = 'N', which is not a status type.RSMPE_STAT-MODALstoresD(normal screen or list status),P(dialog box) andC(context menu).status_typeN/P/Cnow maps toD/P/C(high and low tool). The description now goes toSTA.INT_NOTE, the status short text shown in SE41. The TIT row is still written.UpdateGuiStatus/PatchGuiStatusrewrite an incoming or existingMODAL = 'N'toDand log a warning for any other unknown code.GetGuiStatusListreturned 0 statuses for a GUI status written by the dispatcher. ADT's object structure lists only the statuses known to the workbench navigation index, and a CUA written throughCUA_WRITEis not in it. When ADT lists no status, the list now comes from theCUA_FETCHSTA rows (source: "cua_fetch", each entry withdescriptionandstatus_type). Without the dispatcher the result stays empty andnotessays why.
Added
GetWhereUsedoptions (all optional, default off):max_results(cap),customer_only(Z / Y name, or package Z* / Y* / $*; /namespace/ objects such as SAP industry solutions or generated /1BCDWB/ modules are dropped, usepackage: "/ACME/*"for a customer namespace),package(exact or prefix*),timeout_ms. The filters run after the SAP search, so they shrink the answer but not the search time.GetWhereUsedresponse fields (additive):returned_references,truncated,filtered_out,notes, andobject_identifierper reference. Calls without the new options return the same references as before.GetWhereUsederror hints for unresolvable object types, timeouts and unsupported types.available_innow includeslegacy.GetUsageSnippets(read-only, new tool): line-level where-used hits. For each referencing object it returns the source lines withuri(…/source/main#start=<line>,<col>),line,columnand the source line. Input is eitherobject_identifiersfromGetWhereUsed, orobject_name+object_type(runs the where-used search first, withcustomer_only/package/max_objects). Works on ECC 7.40 and S/4HANA. Needs client library 3.15.0. With an older library the tool reports this.
Features 1, Fixes 1
Notes
Added
RunUnitTestcontainer_type(CLAS|PROG|FUGR, defaultCLAS). On BASIS < 7.50 (ECC),PROG/FUGRrun the local test classes of a report or function group. Every test class of the container runs;test_classis not a filter there. On S/4HANA onlyCLASis supported, andPROG/FUGRreturn a clear error instead of running the wrong object.PROG/FUGRneed@babamba2/mcp-abap-adt-clients3.14.0. An older library ignorescontainer_typeand runs the name as a class.
Fixed
RunUnitTeston ECC returned no result. The legacy run is synchronous and its result was lost between handlers, soGetUnitTestResultcame back empty.RunUnitTestnow returns the result inline asrun_result(run_id: "legacy-sync").GetUnitTestResult/GetUnitTestStatuscalled withlegacy-syncreturn an error that points torun_resultinstead of an empty success.
Features 1
Notes
Added
GetSqlQuery/GetTableContentson BASIS < 7.50 (ECC). The ADT data preview does not exist there, so the client library refused both. They now fall back to theZMCP_ADT_DISPATCHactionTABLE_READ(abap/zmcp_adt_dispatch_ecc.abap, FORMtable_read) and answer withpath: "ecc-dispatch-table-read".- Only a single-table
SELECT f1, f2 | * FROM tab [WHERE …] [ORDER BY …]is translated; JOIN, UNION, GROUP BY and aggregates are refused with a clear message. The ABAP side rejects sub-queries in the condition. - Read-only and allow-listed to customizing / repository tables:
MODACT,MODATTR,MODSAP(CMOD),GB31,GB92,GB93,T001D,T001Q(GGB validations / substitutions),TBE24,TBE34,TPS34(BTE),TFRM,TFRMT(VOFM routines),T100(messages). Any other table gets an error naming the list. The protected-table checks run first, as before. - Rows are capped at 5000 (the ABAP limit).
truncatedis true only when more rows exist: one extra row is read to tell. - Systems without the
TABLE_READaction keep the original "not supported on this SAP system" error.
- Only a single-table
Changed 1
Notes
Changed
- Shorter tool parameter descriptions, same meaning: the repeated version / transport sentences (88 places) and the
[read-only]tag on parameter descriptions (26 places; tool-level descriptions keep it) are trimmed, and theoutputparameter text is shorter. The 171 high-level tool definitions went from 117,837 to 114,819 characters. No behaviour change.
- Shorter tool parameter descriptions, same meaning: the repeated version / transport sentences (88 places) and the
Features 2, Changed 2, Fixes 5
Notes
Fixed
GetTableContents/GetSqlQueryreturned values in the wrong rows. ADT sends an empty cell as a self-closing<dataPreview:data/>; the parser merged it with the next cell, so every later value in that column moved up one row and the last rows came back empty. OnT000, client 100 showed another client's logical system. Empty cells now stay in place. Anything extracted with these tools from tables with empty cells (customizing / SPRO extraction included) is worth re-extracting.- The data preview returned one row more than
max_rows/row_number; rows are now cut to the limit and the response saystruncated: true. XML entities (&…) in values and descriptions are decoded. GetProgFullCodecould not read function groups — it returned the group's metadata XML instead of source. The main program now comes fromsource/main; nested includes are resolved (they never were),INCLUDE x. " commentlines are recognised, and each include is fetched once.GetObjectInfoenrichment never worked: it calledSearchObjectwith a parameter the handler does not read and parsed its JSON answer as XML. It now reads the JSON results.- Hidden
filePathwrites were not confined.writeResultToFilepromised "inside ./output" but wrote anywhere; every write now has to stay insideMCP_OUTPUT_DIR(default./output).
Added
output: "file"onGetProgram,GetClass,GetInterface,GetFunctionModule,GetIncludeandGetProgFullCode: the source is written unchanged underMCP_OUTPUT_DIR/src/and the response carries the path, line count and an outline of METHOD / FORM / MODULE / FUNCTION / event blocks with line ranges. A 66 KB class came back as ~3 KB. Default staysinline.GetTableContents:fields(keep only some columns) andinclude_metadata(column type, length, description).
Changed
GetTableContentsis compact by default: column names only, empty cells left out of each row (the response says so), no JSON indentation, 20 rows instead of 100.GetSqlQuerykeeps its response shape (scripts readcolumns) but drops the indentation.SearchObjectno longer returnsrawXMLunlessinclude_raw_xml: true(it repeated every parsed field and was over half the response), omits empty description / package, decodes entities, defaults to 50 results instead of 100 and flagstruncated: truewhen the limit is hit.
Features 2, Fixes 4, Other 1
Notes
Added
chaptersparameter onRuntimeGetDumpByIdandRuntimeAnalyzeDump(impliesview="formatted"): keeps the ST22 header plus the requested chapters without box borders or padding."developer"= Short Text, What happened?, Error analysis, Chain of Exception Objects, Information on where terminated, Source Code Extract, Active Calls/Events, User and Transaction. A real S/4HANA dump went from 51.5 KB to 3.4 KB.RuntimeListDumpsdrops each entry’s HTML summary unlessinclude_summary=true(also on the compact DumpList handler). A 20-entry list went from ~250 KB to ~30 KB.
Fixed
- Dump key facts pointed at the wrong chapter.
RuntimeGetDumpById(response_modesummary/both) andRuntimeAnalyzeDumpreturned the firsttitle/linein the payload — the chapter-index entry "System environment", line 81. They now read the dump root (runtime error, exception, terminated program, user, date, host), the termination link (object + line) and the chapter index; the formatted view falls back to its header block. SAP_RFC_BACKENDwas frozen before the profile loaded. The RFC backend is resolved on every call, so the sc4sap profile value andReloadProfiletake effect.SAP_RFC_BACKEND=zrfcwas rejected althoughzrfcProxy.tsimplements it; the selector now routes it.pino/pino-prettyskipped bynpm install --omit=dev. They were listed in bothdependenciesanddevDependencies, so the lockfile marked them dev-only and fresh installs failed at MCP start. The devDependency entries are gone.
Note
RuntimeListDumpscan return an empty list on some S/4HANA systems while ST22 shows dumps;RuntimeListFeedswithfeed_type: "dumps"and a time window returns them.
Fixes 3, Other 2
Notes
Fixed
- Tier readonly guard let four mutating tools through on QA and PRD.
readonlyGuard.tsmatched mutations by the prefixesCreate/Update/Deleteand held a three-entry runtime-execution set.ActivateObjects,PatchGuiStatus,WriteTextElementsBulkandRuntimeCreateProfilerTraceParametersmatched neither and were callable against QA and PRD profiles.Patch,WriteandActivateare now mutation prefixes (each matches exactly one registered tool today, so a future sibling is covered when it ships), and the profiler-trace setup call joins the runtime set alongside theRuntimeRun*executions it configures.Createstill matches bystartsWith, soRuntimeCreate*is not swept in by accident. - This is the server-side half of a two-layer defence and the client-side sc4sap
PreToolUsehook carried the same two lists verbatim, so for these four tools neither layer blocked — while the hook still told the user the server guard was backing it up. Both halves were fixed together; the sc4sap side ships in its own release. - No behaviour change on DEV:
checkToolAllowedreturnsnullon its first line for that tier. On QA/PRD no usable capability is lost — activation and text-pool writes are already unreachable onceCreate*/Update*are denied, and profiler-trace setup pairs with runs that were blocked already.
Tests
readonlyGuard.test.tsgrows the mutation and runtime lists, and pins five near-miss reads (RuntimeAnalyzeProfilerTrace,RuntimeGetProfilerTraceData,RuntimeListProfilerTraceFiles,RuntimeGetGatewayErrorLog,RuntimeListSystemMessages) as explicitly allowed, so collapsing the runtime set into a bareRuntimeprefix fails loudly instead of silently killing reads on QA and PRD.
Known gap
RuntimeCallDispatchremains unblocked on every tier, with a test asserting so. It invokes an arbitraryZMCP_ADT_DISPATCHaction and the action name is a runtime argument, so this layer — which sees only the tool name — cannot separate a write action from a read one. Tracked separately; when it is addressed that test should flip rather than quietly disappear.
- Tier readonly guard let four mutating tools through on QA and PRD.
Features 4
Notes
Added
- ECC 7.40 DDIC read fallback via OData RFC. 4 handlers (
GetTable / GetStructure / GetDataElement / GetDomain) activate onSAP_VERSION=ECC, routing DDIC reads through server-side FMs (ZMCP_ADT_DDIC_TABL_READ / _DTEL_READ / _DOMA_READ) invoked via OData FunctionImports onZMCP_ADT_SRV.TABL_READcovers both Table and Structure (TABL/STRU share TABL DDIC category). Validated 2026-04-29 on HKT-DEV (path=ecc-odata-rfc). GetBadiImplementations— new read-only handler to find Z/Y implementations of classic BAdI definitions. ECC-only: routes throughZMCP_ADT_DDIC_BADIbridge FM (SXS_ATTR-based lookup). Returnskind=classicwith implementation list (impl_name,impl_class,package,methods_redefined) orkind=unknownfor kernel BAdIs / non-existent definitions. Use during symptom analysis when a standard BAdI is implicated.lib/odataRfc.ts: 4 new adapters (callDdicTablRead / DdicDtelRead / DdicDomaRead / DdicBadi) +DdicReadResult/DdicBadiResulttypes.lib/rfcBackend.ts: 4 new wrappers + informative error for non-odata backends.
- ECC 7.40 DDIC read fallback via OData RFC. 4 handlers (
Fixes 1
Notes
Fixed
- Keychain password resolution in broker-based auth path.
EnvFileSessionStore(from@babamba2/mcp-abap-adt-auth-stores) readsSAP_PASSWORDraw from the .env file and does not know aboutkeychain:<service>/<account>references, soauthBroker.getConnectionConfig()returned the literal reference string as the Basic Auth password → 401 → account lockout after 3 tries.profile.ts activateProfile()only fixedprocess.env.SAP_PASSWORD, which the v2 broker architecture (lib/utils.ts:515"No fallback to getConfig()") does not read.brokerFactory.tsnow callsresolveSecret()on bothcreateBrokerWithEnvFileStore(Variant 2, --env=path) andloadEnvFileIntoSessionStore(Variant 3, cwd .env) and seeds the session store'sinMemoryUpdatesso downstream reads return plaintext.
- Keychain password resolution in broker-based auth path.
Features 3
Notes
Added
- ECC 7.40 DDIC write fallback via OData RFC. 9 handlers (Domain/DataElement/Table × CRUD) activate on
SAP_VERSION=ECC, routing DDIC writes through server-side FMs (ZMCP_ADT_DDIC_{TABL,DTEL,DOMA,ACTIVATE}) invoked via OData FunctionImports onZMCP_ADT_SRV. Full implementations: Domain C/U/D + DataElement C/U/D (type_kind=domain only) + Table Delete. Inform-only: Table Create/Update (CDS-DDL translator deferred). lib/odataRfc.ts:callDdicTabl / DdicDtel / DdicDoma / DdicActivate+DdicResulttype.lib/rfcBackend.ts: 4 new wrappers + informative error for non-odata backends.
- ECC 7.40 DDIC write fallback via OData RFC. 9 handlers (Domain/DataElement/Table × CRUD) activate on
Features 1
Notes
Added
- Pre-commit hook via husky + lint-staged — auto-fixes formatting and lint issues before commit so CI stays green.
Changed 2
Notes
Changed
- Rewrite
ListTransportshandler to useAdtClient.getRequest().list()with proper Accept negotiation instead of directconnection.makeAdtRequest(). Update@mcp-abap-adt/adt-clientsto 3.13.0. - Add integration tests for
ListTransportshandler.
- Rewrite
Changed 1, Fixes 1
Notes
Fixed
- Give
SAP_AUTH_TYPEpriority overSAP_JWT_TOKENin test helpers — fixes onprem basic-auth tests failing when OS has stale BTP JWT token (#24).
Changed
- Update
@mcp-abap-adt/adt-clientsto 3.12.0 — adds 415 Content-Type negotiation with auto-retry and caching. Accept correction enabled by default (#22, #23).
- Give
Fixes 1
Notes
Fixed
- Guarantee unlock via
try-finallyin all update handlers — prevents locked objects when errors occur between lock and unlock (#22). Affected: UpdateProgram, UpdateClass, UpdateInterface, UpdateView, UpdateTable, UpdateStructure, UpdateDomain, UpdateServiceDefinition, UpdateDataElement.
- Guarantee unlock via
Features 1
Notes
Improved
- Rewrite
SearchObjecttool description with operation-first approach for better RAG discoverability (#21). Description now leads with action verbs (find, search, locate, check exists) instead of object type lists, so embedding vectors match user intent queries like "is there a program named X?".
- Rewrite
Features 1
Notes
Improved
- Enrich 15 tool descriptions with domain-specific keywords for better vector RAG discoverability (#20). Tools like
SearchObject,GetTypeInfo,GetTransaction,GetTableContents, and others now include ABAP object type names (DEVC, CLAS, TABL, DDLS, BDEF, DDLX, etc.) so embedding-based tool discovery returns correct results.
- Enrich 15 tool descriptions with domain-specific keywords for better vector RAG discoverability (#20). Tools like
Features 1
Notes
Improved
- Suppress
pingrequest logging in StreamableHttpServer and SseServer — ping is now silent unless debug logging is enabled, reducing log noise.
- Suppress
Features 1
Notes
Improved
- StreamableHttpServer request logging now includes MCP method, tool name, destination, and completion status. Helps diagnose issues like #19 where health polls generate excessive
tools/listnoise.
- StreamableHttpServer request logging now includes MCP method, tool name, destination, and completion status. Helps diagnose issues like #19 where health polls generate excessive
Features 2
Notes
Added
GET /mcp/healthendpoint for HTTP and SSE transports — lightweight health check without MCP protocol overhead. Returnsstatus,uptime,version,transport, andactiveSessions(SSE only). Resolves #18.- Unit tests for health endpoint (both transports).
Features 4, Fixes 6
Notes
Added
- 16 new Read* tools — read source code and metadata for all object types with CRUD handlers: ReadClass, ReadInterface, ReadProgram, ReadTable, ReadStructure, ReadView, ReadDomain, ReadDataElement, ReadFunctionModule, ReadFunctionGroup, ReadPackage, ReadServiceDefinition, ReadServiceBinding, ReadMetadataExtension, ReadBehaviorDefinition, ReadBehaviorImplementation.
transport_requestparameter for UpdateBehaviorDefinition (low), UpdateMetadataExtension (high).record_changesparameter for CreatePackage (high + low).- Transported Object CRUD integration test reproducing GitHub #11 (transport lock issue on legacy systems).
Fixed
SAP_SYSTEM_TYPEnow propagated from test config toprocess.env, socreateAdtClientcorrectly selectsAdtClientLegacyon legacy systems.transport_requestpassed in class update tests for transportable packages.- UpdateDataElement now passes
transportRequestto adt-clients. - BDEF low test resilience: guaranteed BIMPL unlock via try/finally, delay after delete in cleanup, skip create if BDEF already exists (transport re-create limitation).
- Removed duplicate GetFunction handler (delegates to GetFunctionModule).
- Auto-detect JWT auth for
--env-path, SAP_CLIENT auto-resolve.
Fixes 1
Notes
Fixed
- Unit test
systemContext.test.tsupdated to matchSAP_SYSTEM_TYPEenv var approach (removed obsoleteisModernAdtSystemmock).
- Unit test
Features 3, Changed 2, Fixes 2
Notes
Added
SAP_SYSTEM_TYPEenvironment variable (cloud|onprem|legacy) to explicitly control SAP system type. Default:cloud.--system-typeCLI argument as alternative to the env var.- Eager HTTP session initialization —
connect()is now called for all connection types (not just RFC), establishing CSRF token and cookies before the first request.
Changed
- Removed unreliable auto-detection via
/sap/bc/adt/core/discovery. System type is now determined solely bySAP_SYSTEM_TYPE. - Migration note: on-premise users must set
SAP_SYSTEM_TYPE=onpremin.envto access on-premise-only tools (e.g., Programs).
Fixed
- 403 errors on first request to SAP systems (e.g., E96) that require pre-established session cookies.
- Inconsistent legacy detection across different shell environments, proxy configs, and ICM sessions.
Breaking 3, Features 9, Changed 6, Fixes 7
Notes
Added
- Legacy system support (BASIS < 7.50): automatic detection of legacy systems,
AdtClientLegacyfactory, RFC connection transport viaSADT_REST_RFC_ENDPOINT. - RFC connection type:
--connection-type=rfcCLI flag andSAP_CONNECTION_TYPE=rfcenv var for legacy systems requiring SAP NW RFC SDK. available_inmechanism: each handler'sTOOL_DEFINITIONdeclares supported environments (onprem,cloud,legacy). Unsupported tools are hidden from clients at registration time.- Legacy
available_inon 102 handlers: Class, Interface, View, Program, Function Group/Module, Package (read/update/delete), Include, Unit Test, and common utilities. - FunctionGroup/FunctionModule on cloud: previously restricted to on-premise only.
- Runtime profiling and dumps on cloud: class-based profiling now works on ABAP Cloud.
- Shared dependencies management:
npm run shared:setup/shared:teardown/shared:checkfor test objects. - Test infrastructure:
test:init/test:reinitscripts, explicit connection config (env,system_type,connection_type) intest-config.yaml,available_insupport in test cases for system-aware skipping. - AVAILABLE_TOOLS_LEGACY.md: generated documentation listing 115 legacy-compatible tools.
Changed
- BREAKING: Node 18 dropped — minimum Node.js version is now 20.0.0.
- BREAKING:
@mcp-abap-adt/adt-clientsupgraded from 2.x to 3.11.2 (major API changes). - BREAKING:
@mcp-abap-adt/connectionupgraded to 1.5.3. - CI matrix: Node 20 + 25 on 3 OS for push/PR; Node 20/22/24/25 for release.
- Guaranteed unlock: force-release DDIC locks, unlock-on-error in CreateDataElement/CreateDomain.
- TADIR conflict retry: automatic retry on 409 TADIR conflict during create operations.
Fixed
- Circular reference in CDS unit test handlers.
- i18n check handling (adt-clients 3.8.7).
- MetadataExtension high/low test object conflicts (separate config keys).
- Function test lock conflicts (separate high/low test objects).
- Package tests use
update()for lock/unlock. - Jest 30 deprecated
--testPathPatternmigrated to--testPathPatterns. SAP_USER→SAP_USERNAMEin configuration examples.
- Legacy system support (BASIS < 7.50): automatic detection of legacy systems,
Fixes 1
Notes
Fixed
- Integration test cleanup: close MCP connections, reuse auth session, random ports.
Features 1, Changed 1
Notes
Added
- GetTableContents handler: fully implemented — was a stub returning "temporarily unavailable", now reads table data via ADT Data Preview API with field extraction and SQL query generation.
Changed
- parseSqlQueryXml: exported from
handleGetSqlQueryfor reuse inGetTableContents.
Features 1, Fixes 3
Notes
Added
- BehaviorImplementation low-level MCP tools: registered
ValidateBehaviorImplementationLow,CreateBehaviorImplementationLow,LockBehaviorImplementationLowin LowLevelHandlersGroup.
Fixed
- System context not passed to AdtClient:
createAdtClient()now forwardsresponsibleandmasterSystemfrom resolved system context toAdtClientoptions. Fixes package creation on BTP Cloud failing with "Enter a valid user, not , as the person responsible". - ValidatePackageLow schema: added missing
super_packageproperty toinputSchema.properties(was inrequiredbut not declared — MCP SDK rejected the parameter in hard mode). - CreatePackageLow handler: removed incorrect
createResultcheck —AdtPackage.create()returns{ errors: [] }withoutcreateResult(packages are containers with no response body).
- BehaviorImplementation low-level MCP tools: registered
Breaking 1, Changed 1
Notes
Changed
- BREAKING: Separate Create and Update — Create handlers no longer accept source code. Use Update after Create to set source code.
Fixes 1
Notes
Fixed
- MCP Registry publish: sync
server.jsonversion with npm package version (2.5.2→2.7.5).
- MCP Registry publish: sync
Features 2
Notes
Added
- System context HTTP headers for HTTP/SSE transport:
x-sap-master-systemandx-sap-responsibleheaders allow per-request system context override.- Priority: HTTP headers →
process.env→ cloudgetSystemInformation()API. - Enables on-prem transport request binding for HTTP/SSE connections without
.envfile.
- System context cache isolation: cache is reset before each non-stdio request to prevent stale values leaking between requests targeting different SAP systems.
- System context HTTP headers for HTTP/SSE transport:
Fixes 1
Notes
Fixed
- Release workflow lint gate for
v2.7.2:- Applied Biome formatting/import ordering fixes in updated hard-mode test infrastructure and integration suites.
- Kept hard-mode behavior unchanged; this patch is focused on CI/release pipeline stability.
- Release workflow lint gate for
Features 1, Fixes 2
Notes
Added
- YAML-driven MCP hard mode test infrastructure:
- Added
environment.integration_hard_modesupport for integration tests. - Added real MCP client execution path for
stdio,sse, andhttptransports. - Added MCP CRUD smoke/matrix scripts in
tools/.
- Added
Fixed
- Real MCP integration gaps in tests:
- Lambda-based integration suites now support hard mode via real MCP tool calls.
LowTesterhard mode now bootstraps MCP session (GetSession) so low-level lock/unlock flows receive requiredsession_id.- Hard mode test object names now include per-run suffix to prevent object name collisions between runs.
- System context bootstrap on server startup:
- Launcher now hydrates on-prem system context env values earlier so real MCP runs consistently resolve context.
- YAML-driven MCP hard mode test infrastructure:
Features 1
Notes
Added
SAP_MASTER_SYSTEMandSAP_RESPONSIBLEdocumented in CLI help (--help) and.env.example.
Features 3, Changed 2
Notes
Added
- System context support for on-premise systems (issue #11):
masterSystemandresponsibleare now passed to all ADT create/update XML requests viaIAdtSystemContext.- On-prem resolution:
SAP_MASTER_SYSTEMenv var →getSystemInformation()API fallback (cloud). - Responsible resolution:
SAP_RESPONSIBLEenv var →SAP_USERNAMEfallback → API. - Ensures correct transport request binding on on-premise systems.
- New
.envvariables for on-premise configuration:SAP_MASTER_SYSTEM— SAP system ID (e.g.,E19,DEV). Required for on-prem create/update operations.SAP_RESPONSIBLE— Responsible user (optional, falls back toSAP_USERNAME).
- Test infrastructure:
resolveTestSystemContext()resolves system context from YAML config for integration tests.
Changed
- Upgraded
@mcp-abap-adt/adt-clientsfrom^2.0.0to^2.2.0. - Renamed
default_system→default_master_systemin test config template.
- System context support for on-premise systems (issue #11):
Changed 1, Fixes 1
Notes
Fixed
UpdateProgrammissingtransport_request: Addedtransport_requestto schema, interface, and.update()call — same fix as other handlers in 2.6.0.
Changed
- Upgraded
@mcp-abap-adt/adt-clientsto1.2.2.
Features 1, Changed 1, Fixes 1, Docs 1
Notes
Added
ListTransportstool (read-only):- Lists transport requests for the current or specified user.
- Filters by modifiable status (default: modifiable only).
- Use before create/update to find the correct transport request.
Fixed
transportRequestforwarding in all high-level handlers (issue #11):- Create handlers now forward
transportRequestto the internal update (PUT) step:CreateFunctionModule,CreateTable,CreateInterface,CreateView,CreateProgram,CreateDomain,CreateDataElement. - Standalone update handlers now forward
transportRequest:UpdateStructure,UpdateDomain,UpdateServiceDefinition. - Added
transport_requestto tool schemas where it was missing:UpdateClass,UpdateView,UpdateBehaviorDefinition.
- Create handlers now forward
Changed
- Upgraded
@mcp-abap-adt/adt-clientsfrom0.3.22to1.2.1.
Documentation
- Regenerated tools documentation:
docs/user-guide/AVAILABLE_TOOLS.mddocs/user-guide/AVAILABLE_TOOLS_HIGH.mddocs/user-guide/AVAILABLE_TOOLS_LOW.mddocs/user-guide/AVAILABLE_TOOLS_COMPACT.mddocs/user-guide/AVAILABLE_TOOLS_READONLY.md
Features 2, Fixes 3, Docs 1
Notes
Fixed
--mcpprecedence over local.env:- Fixed CLI fallback logic so
.envfrom current working directory is no longer auto-loaded when--mcp=<destination>is provided. - Startup auth source display now correctly prioritizes
service-key: <destination>over.env.
- Fixed CLI fallback logic so
- JWT auth error diagnostics:
- Improved HTTP/SSE request-time error reporting for missing JWT tokens by surfacing token provider failure reason in
BaseMcpServer.
- Improved HTTP/SSE request-time error reporting for missing JWT tokens by surfacing token provider failure reason in
- Auth broker runtime behavior:
- Fixed v2 auth-broker config to respect
--unsafeinstead of always forcing safe in-memory stores.
- Fixed v2 auth-broker config to respect
Added
- Browser OAuth callback port override:
- Added
--browser-auth-port=<port>andMCP_BROWSER_AUTH_PORTto override auth callback server port (useful when default ports are occupied).
- Added
- Inspector runtime dependency safety:
- Added explicit
express-rate-limitdev dependency to avoid missing transitive package issues duringdev:httpinspector startup.
- Added explicit
Documentation
- Updated auth and CLI docs for
--mcpbehavior and browser auth callback port override:README.mddocs/user-guide/AUTHENTICATION.md- CLI help text via
ServerConfigManager.
Changed 2, Docs 1
Notes
Changed
- Compact handler descriptions:
- Reworked compact handler descriptions to be explicit and deterministic for tool routing.
- Added per-
object_typerequired parameter mapping directly in handler descriptions (TYPE(param*)format). - Clarified read vs validate intent to avoid
HandlerGet/HandlerValidateconfusion.
- Compact schemas metadata:
- Added missing parameter descriptions in compact schemas to remove
No descriptionin generated tool docs.
- Added missing parameter descriptions in compact schemas to remove
Documentation
- Regenerated tools documentation:
docs/user-guide/AVAILABLE_TOOLS.mddocs/user-guide/AVAILABLE_TOOLS_HIGH.mddocs/user-guide/AVAILABLE_TOOLS_COMPACT.md
- Compact handler descriptions:
Features 2, Changed 1
Notes
Added
- Compact facade CRUD routing:
- Added compact facade CRUD operations routed by
object_type. - Added compact router/matrix coverage for supported object/action combinations.
- Added compact facade CRUD operations routed by
- Compact lifecycle and test handlers:
- Added compact handlers for validation, unlock, and unit test workflows.
Changed
- Compact routing architecture:
- Removed legacy
HandlerActionpath and standardized on dedicated compact handlers.
- Removed legacy
- Compact facade CRUD routing:
Features 2, Changed 2
Notes
Added
- Service Binding high-level tools:
- Added
CreateServiceBinding,GetServiceBinding,UpdateServiceBinding,DeleteServiceBinding,ListServiceBindingTypes,ValidateServiceBinding. - Added
serviceBindingPayloadUtilsfor response parsing/format normalization.
- Added
- Runtime profiling tools:
- Added
RuntimeAnalyzeProfilerTrace,RuntimeRunClassWithProfiling,RuntimeRunProgramWithProfiling.
- Added
Changed
- System read-only handlers:
- Migrated
GetAllTypes,GetObjectStructure, andGetSqlQuerytoAdtClientflow.
- Migrated
- Lint/type hygiene:
- Removed explicit
anyusage in new service binding/runtime handlers and high-level handler registrations.
- Removed explicit
- Service Binding high-level tools:
Changed 2, Fixes 2
Notes
Fixed
- Dev HTTP/SSE launch scripts:
- Fixed dist entry path to
dist/server/launcher.jsintools/dev-http-v2.jsandtools/dev-sse-v2.js. - Fixed
dev:httptransport argument to--transport=http.
- Fixed dist entry path to
- HTTP/SSE server startup reliability:
- Updated standalone server startup flow to listen on
listening/errorevents, preventing false "started" logs followed by silent exits. - Kept strong server references in launcher to avoid premature process shutdown.
- Updated standalone server startup flow to listen on
Changed
- Runtime profiling + dumps explorer:
- Refocused tool workflow to class-based profiling run flow.
- Improved ABAP user resolution/validation and diagnostics for dumps/traces filtering.
- Improved object validation/update flow and trace feed handling in interactive tool.
- Tools documentation:
- Updated
tools/README.mdto reflect class-focused profiling flow and ABAP user resolution behavior.
- Updated
- Dev HTTP/SSE launch scripts:
Features 2, Changed 2, Docs 2
Notes
Added
- Runtime diagnostics tools:
- Added runtime profiling tools:
RuntimeCreateProfilerTraceParameters,RuntimeListProfilerTraceFiles,RuntimeGetProfilerTraceData. - Added runtime dump tools:
RuntimeListDumps,RuntimeGetDumpById.
- Added runtime profiling tools:
- Architecture documentation:
- Added comprehensive architecture document:
docs/architecture/ARCHITECTURE.md.
- Added comprehensive architecture document:
Changed
- Runtime payload format:
- Runtime profiling and dump handlers now return parsed JSON payloads (instead of raw XML strings in
payload). - Runtime dump read uses
dump_idinput (RuntimeGetDumpById) instead of URI-based input.
- Runtime profiling and dump handlers now return parsed JSON payloads (instead of raw XML strings in
- Dependencies:
- Updated
@mcp-abap-adt/adt-clientsto^0.3.16.
- Updated
Documentation
- Regenerated tools docs (
docs/user-guide/AVAILABLE_TOOLS*.md) with runtime diagnostics tools. - Updated
README.mdfeature list with runtime diagnostics capabilities.
- Runtime diagnostics tools:
Fixes 3
Notes
Fixed
- YAML config flag compatibility:
- Added
--confsupport as an alias for--configin argument parsing. - Fixed YAML template flow: when config file is missing, template generation now exits cleanly instead of continuing into inspection-only mode.
- Added
- YAML env config clarity:
- Added
env-pathYAML option to map directly to--env-path. - Clarified
envas destination name and removed duplicateallowed-originsentry in template.
- Added
- HTTP/SSE connection context resolution:
- Enforced priority:
x-mcp-destinationheader -> server default destination (--mcp/--env-path) ->400error. - HTTP default-destination broker initialization now uses the resolved destination key.
- Enforced priority:
- YAML config flag compatibility:
Changed 3, Docs 1
Notes
Changed
- .env parsing policy:
- Inline comments are no longer parsed from values.
#is treated as a comment only when it starts the line.- This avoids accidental truncation of secrets containing
#(for example passwords/tokens).
- Update tool error handling:
- Added unified ADT/SAP error extraction for update handlers to improve
409conflict diagnostics. - XML exception payloads (
exc:exception) are now surfaced as detailed user-facing errors in previously generic update flows.
- Added unified ADT/SAP error extraction for update handlers to improve
- GetTypeInfo structure fallback:
- Added optional structure lookup fallback (
include_structure_fallback, default:true). - Fallback is executed only when type lookups return
404or empty result. - Non-
404errors no longer silently fall through to unrelated lookups.
- Added optional structure lookup fallback (
Documentation
- Updated
.envcomments guidance in:README.mddocs/user-guide/AUTHENTICATION.md
- .env parsing policy:
Fixes 1
Notes
Fixed
- CI (Biome): Applied formatting fixes required by
npx biome check src --diagnostic-level=error.src/handlers/function_module/high/handleGetFunctionModule.tssrc/lib/config/envResolver.ts
- CI (Biome): Applied formatting fixes required by
Changed 3
Notes
Changed
- Function Module handlers: Fixed parameter propagation for function module operations:
GetFunctionModuleandDeleteFunctionModulenow require and passfunction_group_name.GetFunction(read-only) now requires and passesfunction_group.UpdateFunctionModule(high/low) now forwardstransport_requestto ADT update calls.
- CLI env resolution: Updated env argument behavior:
--env=<name>now resolves to platform sessions path:{sessions}/<name>.env.- Added
--env-path=<path|file>for explicit.envfile usage. MCP_ENV_PATHnow maps to explicit env file path behavior (same as--env-path).
- Errors: Improved function module update error messages for transport-related
400responses and XML SAP errors.
- Function Module handlers: Fixed parameter propagation for function module operations:
Changed 3
Notes
Changed
- Tools docs generator: Reworked
tools/generate-tools-docs.jsto scan only handler code insrc/handlers/**. - Tools docs structure: Updated
docs/user-guide/AVAILABLE_TOOLS.mdhierarchy toGroup (level) → Object (folder) → Tools. - Coverage fix: Ensured BDEF and other handler folders are included consistently in generated tools documentation.
- Tools docs generator: Reworked
Changed 3
Notes
Changed
- Discoverability metadata: Updated npm keywords and package metadata to improve MCP search relevance for ABAP, ABAP Cloud, JWT/XSUAA, and service-key flows.
- Registry description: Shortened
server.jsondescription to meet the MCP publisher 100-character constraint. - README positioning: Clarified first-screen value proposition around full CRUD, On-Premise + ABAP Cloud support, and auth options.
Features 1, Changed 3
Notes
Added
- Docs: Added dedicated Terminology and Authentication guides, with links from README.
Changed
- README: Reworked first-screen content and links to emphasize configurator usage and destinations.
- Docs structure: Moved GitHub configuration README into deployment docs and fixed internal links.
- Client configuration docs: Linked to the configurator repo and usage guide.
Features 3, Changed 4, Fixes 1
Notes
Added
- Client support: Added OpenCode and Copilot configuration support.
- Claude config: Added
.mcp.jsonproject configuration and docs. - Configurator options: Added URL, headers, and timeout options in
mcp-abap-adt-configure.
Changed
- Configurator split: Removed
mcp-abap-adt-configurefrom core. Use@mcp-abap-adt/configurator(repo:mcp-abap-adt-conf) withmcp-confinstead. - Codex/Goose handling: Improved transport handling and timeout defaults for non-stdio transports.
- Default-disabled entries: Updated JSON config handling and docs to keep new entries disabled by default.
- Streamable HTTP: Refactored server handling for per-request connections.
Fixed
- Goose config: Corrected enabled state handling in
writeGooseConfig.
Features 3, Changed 3
Notes
Added
- MCP Registry metadata: Added
server.jsonandmcpNamefor registry publishing. - Client configurator: Added
mcp-abap-adt-configureto add/enable/disable/remove MCP entries across clients. - Auto-config docs: Added
docs/installation/CLIENT_INSTALLERS.mdwith usage and common tasks.
Changed
- Default logger loading: Lazy-load logger to avoid bundler issues with optional transports.
- Claude config: Write MCP settings under
projects.<full_path>.mcpServersfor Claude CLI on Linux. - Config defaults: New entries for Cline/Codex/Windsurf/Goose are disabled by default; enable explicitly.
- MCP Registry metadata: Added
Fixes 1
Notes
Fixed
- UpdateLocalTestClass: Added detailed SAP error information for 409 conflict errors to improve troubleshooting (#6)
Changed 1, Fixes 1
Notes
Fixed
- GetIncludesList, GetObjectsList, GetObjectsByType, GetEnhancements, GetObjectInfo: Migrate from deprecated
fetchNodeStructurestub toAdtClient.getUtils().fetchNodeStructure()- fixes "not implemented" errors
Changed
- LowTester logging: Unified to compact format with emojis, matching LambdaTester output style
- GetIncludesList, GetObjectsList, GetObjectsByType, GetEnhancements, GetObjectInfo: Migrate from deprecated
Features 1
Notes
Added
- Startup diagnostics: Display SAP connection configuration at server startup when using
--envparameter- Shows source file, SAP URL, client, auth type, and UAA URL
- Tokens and secrets are safely masked (first/last 4 chars for long values, full mask for short)
- Helps diagnose auth issues by showing which config is actually used
- Startup diagnostics: Display SAP connection configuration at server startup when using
Fixes 1
Notes
Fixed
- CreateLocalTestClass: Return full SAP error details on failure (including the original response payload).
Removed 3, Changed 2
Notes
Changed
- Documentation: Restored the stateful ADT flow guide without file-based session persistence references.
- Available tools: Regenerated
docs/user-guide/AVAILABLE_TOOLS.mdand restored links across docs.
Removed
- Lock/session persistence: Removed filesystem lock registry and session persistence helpers/config from core and tests.
- CLI commands:
adt-lock-object,adt-unlock-object,adt-manage-locks,adt-manage-sessions, andadt-unlock-objectsremoved from package bins. - User guides: Removed usage/scenario docs tied to legacy session flows.
Removed 1, Changed 2
Notes
Changed
- Lock registry types:
LockState.objectTypenow usesAdtObjectTypewith normalization for legacy entries. - adt-lock-object: No longer registers lock handles in
.locks/active-locks.json; session save only.
Removed
- CLI commands:
adt-unlock-object,adt-manage-locks,adt-manage-sessions, andadt-unlock-objectsremoved from package bins.
- Lock registry types:
Changed 2
Notes
Changed
- @mcp-abap-adt/auth-broker: bumped to
^0.3.0- auto-detect service key format, credentials wrapper support, debug logging - @mcp-abap-adt/auth-stores: bumped to
^0.3.0
- @mcp-abap-adt/auth-broker: bumped to
Fixes 2
Notes
Fixed
- Updated
@mcp-abap-adt/auth-brokerso installs now pull0.2.17instead of the stale0.2.14release that was hiding upstream fixes. - Removed the accidental
@mcp-abap-adt/coredependency that caused consumers to download the old1.4.1tarball.
- Updated
Changed 1, Fixes 1
Notes
Changed
- @mcp-abap-adt/auth-broker: bumped to
0.2.15so the locked dependency pulls in the latest fixes referenced by the release.
Fixed
- CI workflow package install:
.github/workflows/ci.ymlnow looks formcp-abap-adt-core-*.tgz, matching the actual npm pack output before testing global install.
- @mcp-abap-adt/auth-broker: bumped to
Changed 1, Fixes 1
Notes
Changed
- GetWhereUsed handler: Now uses
getWhereUsedList()from adt-clients and returns parsed JSON with structured references instead of raw XML
Fixed
- Release workflow: Simplified to use npm registry instead of uploading tgz artifacts
- GetWhereUsed handler: Now uses
Docs 2
Notes
Documentation
- Added glama.ai badge with security/license/quality grades
- Updated README example to use
EmbeddableMcpServerinstead of deprecatedHandlerExporter.registerOnServer()
Breaking 1, Removed 1, Features 1, Changed 1, Other
Notes
Added
- EmbeddableMcpServer: New server class for external integration (e.g., cloud-llm-hub)
- Accepts injected
AbapConnectionfrom consumer - Extends
BaseMcpServerwith proper handler registration - Configurable exposition levels:
readonly,high,low,system,search - Export via
@mcp-abap-adt/core/server
- Accepts injected
Changed
- HandlerExporter: Now serves only as registry factory
- Use
createRegistry()to getIHandlersRegistryfor custom scenarios getHandlerEntries()andgetToolNames()still available for inspection
- Use
Removed
- BREAKING:
HandlerExporter.registerOnServer()method removed- Had bug with handler signature (passed context twice)
- Replace with
EmbeddableMcpServerfor cleaner architecture
Migration Guide
// Before (v1.x - broken) import { HandlerExporter } from '@mcp-abap-adt/core/handlers'; const exporter = new HandlerExporter({ includeReadOnly: true, includeHighLevel: true }); const mcpServer = new McpServer({ name: 'mcp-abap-adt', version: '1.0.0' }); exporter.registerOnServer(mcpServer, () => connection, logger); // After (v2.x) import { EmbeddableMcpServer } from '@mcp-abap-adt/core/server'; const server = new EmbeddableMcpServer({ connection, logger, exposition: ['readonly', 'high'], }); await server.connect(transport);- EmbeddableMcpServer: New server class for external integration (e.g., cloud-llm-hub)
Docs 3
Notes
Documentation
- CLI Help: Extended
--helpoutput with comprehensive environment variables documentation- Added MCP Server Configuration section (
MCP_TRANSPORT,MCP_HTTP_HOST,MCP_HTTP_PORT,MCP_SSE_HOST,MCP_SSE_PORT,MCP_ENV_PATH,MCP_UNSAFE,MCP_USE_AUTH_BROKER,MCP_BROWSER) - Added Debug Options section (
DEBUG_HANDLERS,DEBUG_CONNECTORS,DEBUG_CONNECTION_MANAGER,HANDLER_LOG_SILENT) - Extended SAP Connection section with JWT/OAuth2 variables (
SAP_REFRESH_TOKEN,SAP_UAA_URL,SAP_UAA_CLIENT_ID,SAP_UAA_CLIENT_SECRET,SAP_LANGUAGE)
- Added MCP Server Configuration section (
- CLI_OPTIONS.md: Added missing environment variables documentation
- Added
MCP_UNSAFE,MCP_USE_AUTH_BROKER,MCP_BROWSERto General section - Added JWT/OAuth2 authentication variables to SAP Connection section
- New Auth-Broker section with
AUTH_BROKER_PATHand debug variables - New Debug section with handler and connector logging options
- Added
- INSTALLATION.md: Expanded Environment Variables section with full reference and link to CLI_OPTIONS.md
- CLI Help: Extended
Features 4, Changed 2
Notes
Changed
- Package renamed: Changed from
@fr0ster/mcp-abap-adtto@mcp-abap-adt/corefor npm publishing - Package now public: Removed
private: trueflag to allow npm publishing
Added
- Inspection-only mode: Server can now start in stdio mode without connection parameters for tool inspection (used by glama.ai)
- MockAbapConnection: Added mock connection class for inspection-only mode that returns descriptive error when tools are executed
- Docker inspection support: Added
Dockerfile.inspectanddocker-compose.inspect.ymlfor local testing of inspection mode - CLAUDE.md: Added project documentation for Claude Code assistance
- Package renamed: Changed from
Features 3, Changed 4
Notes
Added
- Added integration test
tests/integration/handleGetFunction.int.test.jsfor handleGetFunction. - Significantly expanded integration test coverage in
src/index.test.tsfor all main tools (GetProgram, GetClass, GetFunctionGroup, GetFunction, GetTable, GetStructure, GetTableContents, GetPackage, GetInclude, GetTypeInfo, GetInterface, GetTransaction, GetEnhancements, GetSqlQuery, SearchObject). - Added new checks for advanced scenarios (e.g., SQL generation, error handling, enhancement XML parsing).
Changed
- Updated documentation regarding testing and integration scenarios.
- Added integration test
Removed 1, Features 1, Changed 3
Notes
Changed
- v1 McpHandlers Refactoring: Rewrote
McpHandlersto useHandlerExporterinternally. This ensures the legacy embeddable server (v1) stays in sync with all tools available in v2 while reducing code duplication. - Shared Schema Utilities: Replaced duplicated
jsonSchemaToZodlogic inv1with a central implementation fromsrc/lib/handlers/utils/schemaUtils.ts. - Documentation Generator: Updated
tools/generate-tools-docs.jscategory mapping to support the standardizedGetBehaviorDefinitionnaming.
Removed
- GetBdef compatibility adapter: Removed the manual adapter for
GetBdefin v1 server. All tools now use standard names (e.g.,GetBehaviorDefinition).
Added
- tsx added to
devDependenciesfor improved TypeScript execution and testing.
- v1 McpHandlers Refactoring: Rewrote
Features 1, Changed 6, Fixes 4
Notes
Added
- GetPackageContents tool: New read-only tool to retrieve objects inside an ABAP package (moved from legacy
GetPackage).
Changed
- GetPackage tool: Migrated to high-level API (
AdtClient.getPackage().read()). Now returns package metadata and supportsversionparameter (active/inactive). - GetFunction tool: Updated to support
versionparameter and migrated to newadt-clientssignature. - High-level handlers: Improved parameter handling and consistency with new
adt-clientsversioning requirements. - Test cleanup documentation updated to clarify
afterEachbehavior and multi-object cleanup requirements. - Test runners (
LowTester/HighTester) now emit step-level flow logs for validate/create/lock/update/unlock/activate. - Package cleanup can use a fresh connection with optional
connection_configfor locked session cases.
Fixed
- Package create now treats ADT "import" 404 as success when the package is readable.
- Function group/module low-level create handles transient 400/empty responses with read verification.
- Table create now validates and creates with explicit descriptions to satisfy ADT requirements.
- Package low-level tests avoid double-unlock during cleanup.
- GetPackageContents tool: New read-only tool to retrieve objects inside an ABAP package (moved from legacy
Changed 3, Fixes 3
Notes
Changed
- GetPackageTree now builds the tree from node-structure traversal to preserve package/subpackage hierarchy and ordering.
- Package tree nodes now include
adtType, normalizedtype,codeFormat, andrestoreStatusfor parity with backup tooling. - Migrated handler usage to
AdtClientnow thatCrudClient/ReadOnlyClientare removed in@mcp-abap-adt/adt-clients.
Fixed
- Updated handler typings to match
@mcp-abap-adt/adt-clients@0.3.2(I* config/state interfaces). - SearchObject now uses
AdtUtils.searchObjectsinstead of the removedSharedBuilderexport. - Restored
encodeSapObjectNamehelper inutilsto avoid relying on unstable client exports.
Fixes 2
Notes
Fixed
- Fixed LICENSE file - corrected copyright attribution (removed incorrect fork author)
- Fixed TypeScript compilation errors in test files:
- Updated
handlers.test.tsto use high-level handlers instead of removed readonly handlers - Removed non-existent
getAuthHeadersimport fromutils.test.ts - Fixed
sessionHelpers.ts- added type assertions for connection methods not inIAbapConnectioninterface (getConfig,connect) - Fixed
ClassCrudClientDirect.test.ts- added type assertions forconnect()andreset()methods - Fixed
BehaviorImplementationLowHandlers.test.ts- removed invalidsession_idandsession_stateparameters fromUnlockClassArgs
- Updated
Removed 1, Changed 1, Fixes 3
Notes
Removed
- Removed duplicate readonly handlers that duplicate high-level CRUD operations
- Deleted
handleGetClass.ts(replaced by high-levelGetClass) - Deleted
handleGetDomain.ts(replaced by high-levelGetDomain) - Deleted
handleGetDataElement.ts(replaced by high-levelGetDataElement) - Deleted
handleGetTable.ts(replaced by high-levelGetTable) - Deleted
handleGetStructure.ts(replaced by high-levelGetStructure) - Deleted
handleGetView.ts(replaced by high-levelGetView) - Deleted
handleGetServiceDefinition.ts(replaced by high-levelGetServiceDefinition) - Deleted
handleGetProgram.ts(replaced by high-levelGetProgram) - Deleted
handleGetInterface.ts(replaced by high-levelGetInterface) - Deleted
handleGetFunctionGroup.ts(replaced by high-levelGetFunctionGroup) - Deleted
handleGetBdef.ts(replaced by high-levelGetBehaviorDefinition)
- Deleted
Changed
- v1 server now uses high-level handlers instead of readonly duplicates
GetClass,GetDomain,GetDataElement,GetTable,GetStructure,GetView,GetServiceDefinition,GetProgram,GetInterface,GetFunctionGroupnow use high-level handlers internallyGetBdefnow usesGetBehaviorDefinitionhigh-level handler with parameter adapter for backward compatibility- All high-level handlers support
versionparameter (active/inactive) for better flexibility
Fixed
- Fixed TypeScript type errors in
handleGetAbapSystemSymbols.ts- Added proper JSON parsing for
GetClassandGetInterfaceresponses - Fixed type assertions for class and interface data
- Added proper JSON parsing for
- Fixed TypeScript type error in
utils.ts- Added type assertion for
makeAdtRequestreturn type
- Added type assertion for
- Fixed documentation generator (
tools/generate-tools-docs.js)- Updated regex pattern to support multi-line imports in handler groups
- Now correctly detects all handlers including system and search handlers
- Documentation now includes all 219 tools (76 high-level, 116 low-level, 27 read-only)
- Removed duplicate readonly handlers that duplicate high-level CRUD operations
Features 2, Changed 1, Fixes 2, Dependencies 4
Notes
Changed
- Migrated from ESLint+Prettier to Biome
- Removed ESLint and Prettier dependencies
- Added @biomejs/biome for faster linting and formatting
- Configured Biome with strict rules for production code
- Relaxed rules for test files (noImplicitAnyLet, noExplicitAny)
- Updated package.json scripts:
lint,lint:check,format - Updated
npm run buildto include Biome check before TypeScript compilation
Fixed
- Fixed TypeScript errors in production code:
handleGetAbapAST.ts- Fixed regex match types and while loop patterns in 4 methodshandleGetObjectInfo.ts- Added type annotation forpackageNamehandleDescribeByList.ts- Added type annotation forparsedhandleValidateDataElement.ts- Added type assertion forAxiosResponsehandleCreateClass.ts- AddedClassBuilderStatetype importhandleDeleteObject.ts- Changedanytounknownfor responsehandleGetEnhancementSpot.ts- Fixed array types and while loopshandleGetProgFullCode.ts- Fixed 3 while loops with regex.exec() pattern
- All production code now passes strict Biome rules (no implicit any, no assignments in expressions)
Added
- Added Biome check to CI workflow (
.github/workflows/ci.yml) - Added Biome check to Release workflow (
.github/workflows/release.yml)
Dependencies
- Updated
@mcp-abap-adt/adt-clientsto ^0.2.6 - Updated
@mcp-abap-adt/adt-interfacesto ^0.2.6 - Added
@biomejs/biome^2.3.10 as devDependency - Removed
eslintandprettierdependencies
- Migrated from ESLint+Prettier to Biome
Fixes 1
Notes
Fixed
- Removed unused import of
IAbapConnectionExtendedfrom@mcp-abap-adt/interfaces- Interface was removed in interfaces package v1.1.0
- Removed unused import of
Breaking 1, Removed 7, Features 1, Changed 1, Other
Notes
Changed
- BREAKING: Removed legacy-server.ts
- Full removal of 3000+ line legacy server with CLI, AuthBroker, .env parsing, etc.
- v1 module now exports only lightweight
EmbeddableMcpServerclass
Added
- EmbeddableMcpServer - lightweight MCP server for embedding
- Minimal class (~100 lines) for external HTTP server integration
- Constructor takes
context: HandlerContextwith connection and logger - Handlers registered immediately in constructor - no
run()method needed - Access underlying
McpServervia.mcpServergetter - Configurable
expositionlevels:readonly,high,low,system
Removed
mcp_abap_adt_serverclass (was 3000+ lines with CLI, transports, AuthBroker)setAbapConnectionOverride()functionServerOptionsinterface- All CLI argument parsing
- All transport management (stdio, SSE, streamable-http)
- AuthBroker integration
- .env file loading logic
Migration Guide
For embedding in external servers (cloud-llm-hub, etc.):
// Before (1.2.x) import { mcp_abap_adt_server } from '@fr0ster/mcp-abap-adt/server/v1'; const server = new mcp_abap_adt_server({ connection, allowProcessExit: false }); server.registerHandlers({ connection, logger }); // After (1.2.2) import { EmbeddableMcpServer } from '@fr0ster/mcp-abap-adt/server/v1'; const server = new EmbeddableMcpServer({ context: { connection, logger }, exposition: ['readonly', 'high'] }); const mcpServer = server.mcpServer; // Use with transport- BREAKING: Removed legacy-server.ts
Features 1
Notes
Added
- Subpath export
./utilsfor internal utilities access@fr0ster/mcp-abap-adt/utils- exportssessionContext,getManagedConnection, and other utilities- Required for cloud-llm-hub integration to access session context
- Subpath export
Breaking 1, Features 3, Changed 2, Other 2
Notes
Changed
GetWhereUsednow supports any ADT object type (e.g. table/TABL, bdef/BDEF, etc.), not just class, program, include, function, interface, package.- Updated documentation in README.md and jsdoc for supported object types and usage examples.
Features 1
Notes
Added
- v2 HTTP Server Injection: Added support for external HTTP application injection in v2 servers
- New
IHttpApplicationinterface for Express-like HTTP applications StreamableHttpServerandSseServernow supportappoption in constructor- New
registerRoutes(app, options?)method for embedding into existing Express/CDS/CAP servers - Enables integration with cloud-llm-hub and other CAP-based applications
- Helper methods:
getPath(),getSsePath(),getPostPath()
- New
- v2 HTTP Server Injection: Added support for external HTTP application injection in v2 servers
Fixes 1
Notes
Fixed
- CLI
--versionflag: Fixed package.json path resolution for both v1 and v2 servers- Path now correctly resolves from
dist/server/v1/anddist/server/v2/to rootpackage.json
- Path now correctly resolves from
- CLI
Removed 3, Features 6, Changed 3, Fixes 3, Dependencies 6, Docs 6
Notes
Added
-
MCP Server v2 Architecture:
- New modular server architecture with
BaseMcpServer,StdioServer,StreamableHttpServer - Handler registration system with Dependency Injection pattern
HandlerContextfor unified connection and logging access in handlersServerConfigManagerfor centralized configuration managementAuthBrokerConfigfor V2 server configurationStdioLoggerfor minimal logging in stdio transport- Transport-specific server implementations (stdio, SSE, HTTP)
- New modular server architecture with
-
Headless Browser Mode: Added
--browserCLI parameter for SSH and remote sessions--browser=headless: Logs authentication URL and waits for manual callback--browser=none: Logs URL and rejects immediately (for automated tests)--browser=system: Opens system default browser (default)--browser=chrome|edge|firefox: Opens specific browser- Environment variable:
MCP_BROWSER - Ideal for SSH sessions, Docker containers, and CI/CD environments
-
YAML Configuration Support:
- Load server configuration from YAML files
- Enhanced command-line transport handling
- Improved configuration validation
-
Structured Logging:
- Handler logging with configurable options and integration
- Structured logging for handler functions
- Logger cleanup and enhanced handler implementations
-
Testing Improvements:
- Jest configuration and enhanced testing framework
- Unified test refactoring roadmap with base tester classes
- Integration tests for low-level view handlers
- Read-only handler tests for WhereUsed analysis
AuthBrokerFactoryfor test configuration
-
Infrastructure & Handlers:
- Added
tabletypesto integrated terminal profiles - Handler migration to infrastructure module
- Basic auth support in MCP destination handling
- Added
Changed
-
Token Refresh Architecture (Breaking):
- Removed legacy
createDestinationAwareConnection()wrapper (~150 lines) - Token refresh now handled internally by
JwtAbapConnectionvia DIITokenRefresher getConnectionForSession()createstokenRefresherfromAuthBrokerand passes tocreateAbapConnection()- Removed all
reset()calls from 23+ handler files (no longer needed) - Removed unused
disposeConnection()andgetAuthHeaders()functions - Simplified
HandlerContextto useIAbapConnectioninstead of deprecatedIAbapConnectionExtended
- Removed legacy
-
Handler Refactoring:
- All handlers updated to utilize
HandlerContextfor connection and logging - Standardized import statements across handlers
- Enhanced error handling and logging across all handlers
- Replaced direct connection creation with managed connection
- All handlers updated to utilize
-
Configuration Module:
- Extracted configuration logic into dedicated module
- Improved YAML configuration loading and command line parsing
- Enhanced connection handling and configuration validation
Fixed
- Network error handling in
createDestinationAwareConnection - Handler results properly awaited and errors handled in
BaseMcpServer - Basic auth support in MCP destination handling
Removed
- Legacy test files and deprecated test scripts (85 files)
- Obsolete v2 components from earlier iterations
- Deprecated tools:
update-crudclient-api.js,update-handlers-with-tool-definitions.js, etc.
Documentation
- Comprehensive documentation for various components and usage scenarios
- MCP Server architecture and implementation roadmap
- Handler refactoring roadmap
- YAML configuration support documentation
- Issue roadmap system for structured issue tracking
- Updated development guidelines
Dependencies
@mcp-abap-adt/interfaces:^0.2.3→^0.2.6- Removed deprecated
IAbapConnectionExtendedinterface - Added
ITokenRefresherinterface for DI
- Removed deprecated
@mcp-abap-adt/connection:^0.2.3→^0.2.5createAbapConnection()now accepts 4th parametertokenRefresherJwtAbapConnectionhandles token refresh internally
@mcp-abap-adt/auth-providers:^0.2.1→^0.2.3(headless mode, cross-platform fixes)@mcp-abap-adt/auth-broker:^0.2.4→^0.2.9- Added
createTokenRefresher()factory method - Headless mode passthrough
- Added
@mcp-abap-adt/auth-stores:^0.2.5→^0.2.8(EnvFileSessionStore with JWT persistence)@mcp-abap-adt/clients:^0.2.4→^0.2.5
-
Features 1, Docs 1
Notes
Added
- Parameter Passing Unit Tests Roadmap: Added comprehensive roadmap for unit tests to verify parameter passing
- Created
doc/roadmaps/parameter_passing_unit_tests_roadmap.md - Detailed test strategy for verifying all parameters pass correctly from MCP handlers through CrudClient to Builder classes and finally to low-level functions
- Test implementation plan with 4 phases covering infrastructure, individual object types, and integration tests
- Test examples for ViewBuilder, CrudClient, and low-level functions
- Coverage goals (100% for parameter passing) and success criteria
- Addresses issue where parameters like
transportRequestcan be lost during the call chain
- Created
Documentation
- Roadmap Documentation: Added roadmap for future unit test development
- Comprehensive plan for preventing parameter loss regression
- Test file structure and organization guidelines
- Maintenance and CI/CD integration recommendations
- Parameter Passing Unit Tests Roadmap: Added comprehensive roadmap for unit tests to verify parameter passing
Changed 2, Other 2
Notes
Changed
- Header Constants Migration: Replaced all hardcoded header strings with constants from
@mcp-abap-adt/interfaces- All header references now use constants (e.g.,
HEADER_SAP_URL,HEADER_SAP_AUTH_TYPE,HEADER_MCP_DESTINATION, etc.) - Improved type safety and consistency across packages
- Updated error messages and hints to use header constants
- All header references now use constants (e.g.,
- Updated dependencies:
@mcp-abap-adt/header-validator:^0.1.6→^0.1.7- Added comprehensive header sets documentation
- Enhanced validation for Basic Auth and UAA refresh token sets
- All header references migrated to constants from
@mcp-abap-adt/interfaces
@mcp-abap-adt/interfaces:^0.1.1→^0.1.2- Added HTTP header constants for all headers used across packages
- Added header groups and authentication type constants
Technical
- Code Quality: Improved maintainability by centralizing header name definitions
- Type Safety: Better compile-time checking for header names
- Header Constants Migration: Replaced all hardcoded header strings with constants from
Changed 1
Notes
Changed
- Updated dependencies:
@mcp-abap-adt/auth-broker:^0.1.9→^0.1.10- Added constructor validation for stores and tokenProvider parameters
- Ensures required dependencies are present upon AuthBroker instantiation
- Updated dependencies:
Features 2, Changed 1, Fixes 1
Notes
Added
- Comprehensive usage documentation – Added complete MCP function call documentation:
- Created
doc/user-guide/usage/directory with structured documentation - Simple Objects (22 files): High-level and low-level handlers for 11 object types:
- Classes, Interfaces, Programs, Function Groups, Function Modules
- Tables, Structures, CDS Views, Domains, Data Elements, Service Definitions
- Each object has separate
-high.mdand-low.mdfiles with exact MCP call examples
- RAP Business Objects documentation:
- Complete workflow for creating RAP BO with all components
- Deferred group activation guide
- Step-by-step examples with exact MCP function calls
- All documentation uses compact, laconic format with only exact MCP calls and parameters
- No unnecessary descriptions, maximum clarity
- Created
- Test syntax checking – Added
npm run test:checkcommand:- Performs TypeScript syntax check on test files without running tests
- Uses
tsc --noEmit -p tsconfig.test.json - Helps catch type errors before running tests
Changed
- Updated dependencies to latest versions:
@mcp-abap-adt/adt-clients:^0.1.35→^0.1.36@mcp-abap-adt/auth-broker:^0.1.8→^0.1.9@mcp-abap-adt/auth-providers:^0.1.1→^0.1.2@mcp-abap-adt/auth-stores:^0.1.3→^0.1.4@mcp-abap-adt/connection:^0.1.14→^0.1.15@mcp-abap-adt/header-validator:^0.1.4→^0.1.6@mcp-abap-adt/interfaces:^0.1.1(unchanged)@mcp-abap-adt/logger:^0.1.0→^0.1.1
Fixed
- TypeScript type errors in TableLowHandlers.test.ts – Fixed type inference issues:
- Corrected
lockSessionForCleanupvariable declaration and usage - Fixed type narrowing in catch and finally blocks
- Corrected
- Comprehensive usage documentation – Added complete MCP function call documentation:
Features 1, Changed 1, Fixes 2, Docs 4
Notes
Added
--mcp=<destination>parameter – Default MCP destination name for auth-broker:- Allows using auth-broker (service keys) with stdio and SSE transports
- When specified, this destination is used when
x-mcp-destinationheader is not provided in requests - For stdio transport: Server initializes auth-broker with the specified destination at startup
- For SSE transport: Server uses the specified destination as fallback when header is missing
- For HTTP transport: Server uses the specified destination as fallback when header is missing
- Example:
mcp-abap-adt --transport=stdio --mcp=TRIAL - This enables auth-broker usage with stdio and SSE transports, which previously required
.envfile configuration
Changed
- Auth-broker support for stdio and SSE transports – Extended
getOrCreateAuthBroker()to support stdio and SSE transports:- Previously, auth-broker was only available for HTTP/streamable-http transport
- Now works with all transport types when
--mcpparameter is specified - For stdio: Auth-broker is initialized at server startup with the destination from
--mcpparameter - For SSE: Auth-broker works the same way as HTTP transport (via headers or
--mcpfallback)
Fixed
--mcpparameter now skips.envfile loading – When--mcpis specified:.envfile is not automatically loaded (even if it exists in current directory).envfile is not considered mandatory for stdio and SSE transports- Auth-broker configuration takes precedence over
.envfile - This ensures that
--mcpparameter works correctly without conflicts from.envfile settings
- SSE transport with
--mcpparameter – Fixed issue where SSE transport was using.envconfiguration instead of auth-broker when--mcpwas specified:- Server now initializes auth-broker at startup for SSE transport when
--mcpis provided applyAuthHeaders()now handles empty headers correctly whendefaultMcpDestinationis set- Configuration from auth-broker takes precedence over
.envfile
- Server now initializes auth-broker at startup for SSE transport when
Documentation
- Updated
CLI_OPTIONS.mdwith--mcpparameter documentation and examples - Updated
CLIENT_CONFIGURATION.mdwith information about using--mcpparameter for stdio and SSE transports - Added examples for Cline configuration with stdio transport and
--mcpparameter - Updated help text in both
src/index.tsandbin/mcp-abap-adt.jswith--mcpparameter information
Features 1, Changed 1, Dependencies 1
Notes
Changed
- Safe session storage by default – Session data is now stored in-memory using
SafeSessionStoreby default:- Session tokens are no longer persisted to disk by default (secure by default)
- Session data is lost after server restart (requires re-authentication)
- Use
--unsafeflag to enable file-based session storage (legacy behavior) - File-based storage (
UnixFileSessionStore/WindowsFileSessionStore) is only used when--unsafeis specified
Added
--unsafeflag – Enables file-based session storage (persists tokens to disk):- When specified, session data is saved to platform-specific locations:
- Unix:
~/.config/mcp-abap-adt/sessions/{destination}.env - Windows:
%USERPROFILE%\Documents\mcp-abap-adt\sessions\{destination}.env
- Unix:
- Can be set via environment variable:
MCP_UNSAFE=true - Use this flag if you need session persistence across server restarts
- When specified, session data is saved to platform-specific locations:
Dependencies
- Updated
@mcp-abap-adt/auth-brokerto^0.1.5:- Benefits from new
SafeSessionStoreimplementation (in-memory, secure) - Updated to use new
ISessionStoreinterface (replacesSessionStore)
- Benefits from new
- Safe session storage by default – Session data is now stored in-memory using
Fixes 1
Notes
Fixed
- Help text correction – fixed incorrect help message for
x-mcp-destinationheader:- Removed incorrect statement that
x-mcp-destinationrequiresx-sap-urlheader - Updated help text to correctly state that URL is automatically derived from service key (same as
x-sap-destination) - Help text now accurately reflects that
x-sap-urlis not required and will be ignored if provided
- Removed incorrect statement that
- Help text correction – fixed incorrect help message for
Features 2, Dependencies 2
Notes
Dependencies
- Updated
@mcp-abap-adt/adt-clientsto^0.1.33:- Benefits from optimized CSRF token endpoint (
/sap/bc/adt/core/discovery) - Faster connection initialization for all CRUD operations
- Benefits from optimized CSRF token endpoint (
- Updated
@mcp-abap-adt/auth-brokerto^0.1.4:- Benefits from optimized CSRF token endpoint in connection layer
- Faster authentication flows when managing JWT tokens
Added
- ABAP Unit class test tools: Added
[low-level]handlers to cover the new CrudClient APIs for class test includes and ABAP Unit orchestration:LockClassTestClassesLow,UpdateClassTestClassesLow,UnlockClassTestClassesLow,ActivateClassTestClassesLowRunClassUnitTestsLow,GetClassUnitTestStatusLow,GetClassUnitTestResultLow- All new tools live in
class/low/and are registered with the server and documentation generator.
- Package creation options:
CreatePackage(high- and low-level) now accepts optionalpackage_type,software_component,transport_layer,application_component, andresponsibleparameters and forwards them directly toCrudClient, enabling Cloud systems to pass values such asZLOCALwhile keeping the transport layer empty.
- Updated
Features 4, Changed 2, Fixes 1, Dependencies 2
Notes
Fixed
- x-mcp-destination validation – fixed issue where
x-mcp-destinationheader was incorrectly requiringx-sap-url:x-mcp-destinationnow works identically tox-sap-destination- URL is automatically derived from service keyx-sap-urlis now optional forx-mcp-destination(and will be ignored with a warning if provided)- Fixed issue on Windows where
x-mcp-destinationwas being ignored - Updated header validator to check headers in both lowercase and original case for better compatibility
Added
-
Custom auth-broker path – added
--auth-broker-pathcommand-line option:- Allows specifying custom base path for service keys and sessions
- Automatically creates
service-keysandsessionssubdirectories in the specified path - Example:
--auth-broker-path=~/prj/tmp/uses~/prj/tmp/service-keys/and~/prj/tmp/sessions/ - Directories are created automatically if they don't exist
- Can be used together with
--auth-brokerflag
-
Automatic directory creation – service keys and sessions directories are now created automatically:
- Directories are created at server startup if they don't exist
- Prevents errors when saving sessions for the first time
- Works for both default platform paths and custom
--auth-broker-path
-
Enhanced startup information – improved auth-broker path display at server startup:
- Shows all search paths for service keys (in order of priority)
- Shows all save paths for sessions
- Formatted with clear visual separators for better readability
- Only displayed when
--auth-brokerflag is used
-
Diagnostic logging – added platform-aware logging for better debugging:
- Logs platform information when processing authentication headers
- Logs all header keys that start with
x-saporx-mcp - Logs search paths when creating AuthBroker instances
- Helps diagnose issues on different platforms (especially Windows)
Changed
-
Header validation logic – improved validation order and case handling:
x-mcp-destinationis now checked immediately afterx-sap-destination, regardless ofx-sap-urlpresence- Added case-insensitive header checking for better compatibility
- Both
x-sap-destinationandx-mcp-destinationnow check headers in both lowercase and original case
-
Documentation updates – comprehensive documentation improvements:
- Added
--auth-broker-pathparameter documentation in help text - Updated
CLIENT_CONFIGURATION.mdwith custom path examples - Updated
INSTALLATION.mdwith new command-line option - Updated
SERVICE_KEY_SETUP.mdwith custom path usage examples - Added Cline configuration example in help text
- Added
Dependencies
- Updated
@mcp-abap-adt/auth-brokerto^0.1.3– upgraded to latest version - Updated
@mcp-abap-adt/header-validatorto^0.1.3– upgraded to latest version
- x-mcp-destination validation – fixed issue where
Changed 1
Notes
Changed
- Help documentation improvements – updated help messages with detailed instructions for saving service keys:
- Added platform-specific instructions for Linux, macOS, and Windows
- Replaced example JSON structure with instructions to copy service key from SAP BTP
- Fixed backslash escaping in Windows PowerShell commands
- Updated both launcher help (
bin/mcp-abap-adt.js) and server help (src/index.ts) - Updated documentation files:
SERVICE_KEY_SETUP.mdandCLIENT_CONFIGURATION.md
- Help documentation improvements – updated help messages with detailed instructions for saving service keys:
Features 2, Changed 5, Fixes 3
Notes
Changed
-
Handler refactoring – migrated handlers to use
CrudClientandSharedBuilderfrom@mcp-abap-adt/adt-clients:handleSearchObjectnow usesSharedBuilder.search()instead of manual URL construction- Eliminates redundant URL concatenation and potential duplication errors
- Better code reuse and consistency across handlers
-
URL handling simplification – removed unnecessary URL cleaning logic:
- URLs from
.envfiles and service keys are expected to be clean - Removed aggressive URL cleaning that was causing issues
- Only basic trimming is performed where needed
- URLs from
-
Transport-specific auth-broker handling –
auth-brokeris now ignored forstdioandssetransports:- AuthBroker initialization is skipped for non-HTTP transports
- Prevents unnecessary errors and resource usage
.envfile is used directly forstdioandssetransports
Fixed
- URL duplication in stdio transport – fixed incorrect URL formation when using
stdiotransport:- Resolved
getaddrinfo ENOTFOUND ...comhttpserrors - Proper URL handling in connection initialization
- Correct
.envfile parsing forstdiomode
- Resolved
Added
-
Lazy AuthBroker initialization – AuthBroker instances are now created on-demand per destination:
- AuthBroker is only created when a destination is actually needed (not at server startup)
- Each destination gets its own AuthBroker instance, cached in a map for reuse
- Reduces memory usage and startup time when auth-broker is not needed
- Default AuthBroker instance for non-destination requests
-
Improved method filtering – only
tools/callrequires SAP configuration:- All other MCP methods (
tools/list,tools/get,initialize,ping,notifications/initialized, etc.) work without SAP config - Prevents unnecessary authentication errors for metadata requests
- Better separation between metadata operations and actual tool execution
- All other MCP methods (
Changed
-
AuthBroker instance management – switched from single instance to per-destination map:
authBrokersmap stores AuthBroker instances keyed by destination namedefaultAuthBrokerfor requests without specific destination- Lazy initialization via
getOrCreateAuthBroker()method - Better isolation between different destinations
-
Platform store imports – fixed ES module compatibility:
- Replaced
require()with static imports ingetPlatformStores() - Fixes "UnixFileSessionStore is not a constructor" error
- Proper ES module support for platform-specific stores
- Replaced
Fixed
-
ES module compatibility – fixed "UnixFileSessionStore is not a constructor" error:
- Changed
getPlatformStores()to use static imports instead ofrequire() - Properly handles ES module exports for Unix/Windows store implementations
- AuthBroker now correctly initializes on Unix systems
- Changed
-
Request processing logic – improved handling of requests that don't require SAP connection:
- Only
tools/callmethod triggers SAP configuration validation - All other methods bypass authentication checks
- Prevents false errors for metadata and initialization requests
- Only
-
Features 3, Changed 2, Fixes 2, Dependencies 1
Notes
Added
-
Cross-platform session storage – optional persistent session management:
- Session storage now disabled by default (stateless mode)
- Enable via
MCP_ENABLE_SESSION_STORAGE=trueenvironment variable - Custom session directory via
MCP_SESSION_DIR=/path/to/sessions - Platform-specific defaults: Windows temp dir,
/tmpon Linux,/var/folderson macOS - Prevents
ENOENTerrors when running from different working directories
-
Cline configuration documentation – comprehensive setup guide:
- Created
doc/installation/CLINE_CONFIGURATION.mdwith detailed configuration for all transport types - Added example configs in
doc/installation/examples/for NPX, global install, and local development - Platform-specific notes for macOS, Linux, and Windows
- Session storage configuration examples and best practices
- Troubleshooting guide for common connection issues
- Created
-
Cross-platform fixes documentation – created
doc/development/CROSS_PLATFORM_FIXES.md:- Documented dotenv removal and stdio transport fixes
- Cross-platform path handling with
os.tmpdir()andpath.join() - Platform-specific session storage locations
- Testing instructions for all three transports (stdio, HTTP, SSE)
Changed
-
Session storage architecture – improved reliability and cross-platform support:
- Moved from relative
.sessionspath to absolute paths usingos.tmpdir() - Session storage now optional and controlled by environment variables
- Removed
FileSessionStorageusage from individual handlers (e.g.,handleDeletePackage) - All session management now centralized in connection manager (
utils.ts)
- Moved from relative
-
Environment variable documentation – comprehensive env var reference:
- Added table of all available environment variables in Cline configuration docs
- Documented
MCP_ENABLE_SESSION_STORAGEandMCP_SESSION_DIRusage - Platform-specific default values and examples
- Guidance on when to enable/disable session storage
Fixed
-
Session directory creation errors – fixed
ENOENT: no such file or directory, mkdir '/.sessions':- Replaced relative
.sessionspath with absolute paths - Session directory now uses OS-specific temp directory by default
- Works correctly when running as global npm package or via npx
- No longer depends on current working directory
- Replaced relative
-
Handler session management – simplified connection handling:
- Removed custom
FileSessionStoragecreation inhandleDeletePackage - Deprecated
force_new_connectionparameter (now ignored) - All connections use centralized session management
- Restart server to force new session instead of per-handler sessions
- Removed custom
Dependencies
- No dependency changes in this release
-
Removed 1, Changed 3, Fixes 1, Dependencies 2
Notes
Removed
- dotenv dependency – completely removed
dotenvpackage from dependencies:- Eliminated
dotenvas a dependency to prevent stdout pollution in stdio mode - Resolved
"[dotenv@17."... is not valid JSONerror that was breaking stdio transport - Server now uses manual
.envfile parsing for all transport modes
- Eliminated
Changed
-
.env file parsing – replaced
dotenvlibrary with manual parsing:- Manual
.envfile parsing for all transport modes (stdio, http, sse) - Supports both Unix (
\n) and Windows (\r\n) line endings - Handles comments, quoted values, and empty lines correctly
- Cross-platform compatible (works on Linux, Windows, macOS)
- No external dependencies for environment variable loading
- Manual
-
stdio mode auto-detection – improved stdio mode detection:
- Auto-detects stdio mode when
stdinis not a TTY (piped by MCP Inspector or other tools) - Checks
!process.stdin.isTTYin addition to command-line arguments and environment variables - Allows seamless connection from MCP Inspector and other stdio-based clients without explicit
--transport=stdioflag
- Auto-detects stdio mode when
-
stderr handling in stdio mode – restored stderr for error logging:
- Following reference implementation pattern, stderr is now available for error logging in stdio mode
- stdout remains reserved exclusively for MCP JSON-RPC protocol
- console.error() and console.warn() now work correctly in stdio mode (write to stderr)
Fixed
- stdio transport connection – fixed issue where server was not connecting properly in stdio mode:
- Server now correctly detects stdio mode when launched by MCP Inspector
- Tools are properly registered and available when connecting via stdio
- Resolved connection issues that prevented tools from being listed
Dependencies
- Updated
@mcp-abap-adt/connectionto^0.1.12:- Connection package no longer reads
.envfiles or depends ondotenv - Consumers must pass
SapConfigdirectly to connection constructors
- Connection package no longer reads
- Updated
@mcp-abap-adt/adt-clientsto^0.1.27:- Updated to work with connection@0.1.12
- Fixed example scripts to use manual
.envparsing
- dotenv dependency – completely removed
Fixes 1
Notes
Fixed
- Git tag management – fixed issues with release tag creation and management:
- Corrected tag placement on the latest commit with CHANGELOG updates
- Ensured proper tag synchronization between local and remote repositories
- Fixed tag deletion and recreation workflow for release management
- Git tag management – fixed issues with release tag creation and management:
Features 1, Changed 2, Fixes 1
Notes
Added
- Command-line flags --version/-v and --help/-h – added support for standard command-line flags:
--versionor-v– displays package version and exits--helpor-h– displays help message and exits- Flags are processed before any other initialization, allowing quick version/help checks
Changed
-
.env file search logic – improved .env file discovery and loading:
- Search location: Now searches for
.envfile only in the current working directory (where the command is executed) - No recursive search: Removed fallback searches in parent directories or project root
- Explicit path support: Still supports
--env=/path/to/.envorMCP_ENV_PATHenvironment variable for custom locations - Cross-platform paths: Uses
path.resolve()andpath.join()for proper path handling on Windows, Linux, and macOS
- Search location: Now searches for
-
Transport mode and .env file relationship – refined logic for transport mode selection and .env file requirements:
- Default behavior: If transport is not explicitly specified and no
.envfile is found, server starts in HTTP mode (no .env required) - Explicit transport with .env: If transport is explicitly set to
stdioorssebut.envfile is missing, server exits with clear error message - Explicit transport without .env: If transport is explicitly set to
httporstreamable-http, server starts without .env file (as expected) - Error messages: Improved error messages that clearly indicate what transport mode requires .env file and how to specify custom .env location
- Default behavior: If transport is not explicitly specified and no
Fixed
- Cross-platform compatibility – ensured all file path operations work correctly on Windows, Linux, and macOS:
- All path operations use Node.js
pathmodule methods (path.join(),path.resolve(),path.isAbsolute()) - Proper handling of Windows path separators (
\) vs Unix path separators (/) - Version reading from
package.jsonuses cross-platform path resolution
- All path operations use Node.js
- Command-line flags --version/-v and --help/-h – added support for standard command-line flags:
Changed 1, Fixes 1, Dependencies 1
Notes
Fixed
- Handler parameter schemas alignment with CrudClient – comprehensive fix to ensure all handler input schemas match actual CrudClient method parameters:
- Data Element handlers:
- Added
type_nameparameter tohandleCreateDataElementschema (was missing but used in code) - Added
search_help,search_help_parameter,set_get_parametertohandleUpdateDataElementschema (now properly passed to builder) - Updated field label descriptions to clarify they are applied during update step after creation
- Added
- Domain handlers:
- Removed unsupported parameters from
handleCreateDomainlow-level handler:domain_type,application,master_system,responsible
- Removed unsupported parameters from
- Program handlers:
- Removed
master_systemandresponsiblefrom both high and low-level handlers (these are set automatically by system)
- Removed
- Class handlers:
- Removed
master_systemandresponsiblefrom high-level handler schema (set automatically by system) - Removed
master_systemandresponsiblefrom low-level handler schema and code
- Removed
- Interface handlers:
- Removed
master_systemandresponsiblefrom both high and low-level handlers (set automatically by system)
- Removed
- Structure, View, Table handlers:
- Removed
master_systemandresponsiblefrom low-level create handlers (set automatically by system)
- Removed
- Behavior Definition, Metadata Extension handlers:
- Removed
master_systemandresponsiblefrom low-level create handlers (set automatically by system)
- Removed
- Impact: All handler schemas now accurately reflect what parameters are actually supported and used by CrudClient methods, preventing confusion and ensuring correct API usage
- Data Element handlers:
Changed
- Data Element handlers – search help support – enhanced data element handlers to support search help configuration:
handleCreateDataElementnow acceptssearch_help,search_help_parameter,set_get_parameterparametershandleUpdateDataElementnow acceptssearch_help,search_help_parameter,set_get_parameterparameters- These parameters are properly passed through to
DataElementBuilderand included in update operations - Enables full configuration of search help and parameter settings for data elements
Dependencies
- Updated
@mcp-abap-adt/adt-clientsto^0.1.26– upgraded to latest version which includes:- Added
searchHelp,searchHelpParameter,setGetParametertoDataElementBuilderConfig - Updated
DataElementBuilder.update()to pass search help parameters toUpdateDataElementParams - Full support for search help configuration in data element operations
- Added
- Handler parameter schemas alignment with CrudClient – comprehensive fix to ensure all handler input schemas match actual CrudClient method parameters:
Changed 1, Fixes 1, Dependencies 1, Docs 1, Other 1
Notes
Fixed
- DomainHighHandlers - Update workflow detection bug – fixed critical issue where domain update operations were incorrectly using CREATE workflow instead of UPDATE workflow:
- Root cause:
DomainBuilder.update()method determines which workflow to use (CREATE vs UPDATE) by checking ifthis.state.createResultexists. WhenCrudClient.getDomainBuilder()reuses a builder instance from a previouscreateDomain()call, the builder still hascreateResultin its state, causingupdate()to incorrectly use CREATE workflow (upload()function) instead of UPDATE workflow (updateDomain()function). - Solution: Modified
handleUpdateDomainto passpackageNamedirectly tolockDomain()call, ensuring the builder is created with correct configuration from the start. This prevents builder reuse issues and ensures proper workflow detection. - Additional fix: Removed redundant validation step from
handleUpdateDomainhandler. The validation was checking if domain exists, butlockDomain()will fail if domain doesn't exist anyway, making the validation step unnecessary and potentially causing confusion. - Impact: Domain update operations now correctly use UPDATE workflow for existing domains, preventing "Domain already exists" errors that were occurring when the system tried to create an already-existing domain.
- Root cause:
Changed
- DomainHighHandlers test logging – completely refactored test logging system for better information density and clarity:
- Removed verbose
debugLog()system – eliminated alldebugLog()calls that were cluttering test output with verbose JSON structures and nested data objects - Introduced concise logging – replaced with simple, informative
console.log()statements that provide clear, actionable information:- Clear operation names (e.g., "High Create: Creating domain...", "High Update: Updating domain...")
- Success/failure status with object names
- Skip reasons when tests are skipped
- Visual infographics (emojis) for quick visual scanning of test output
- Simplified error handling – removed redundant try-catch blocks and verbose error logging, now relies on Jest's native error handling which provides better stack traces
- More informative output – each log statement now provides essential information (operation type, object name, status) without JSON noise
- Consistent with other tests – matches logging patterns used in BehaviorDefinitionHighHandlers, PackageHighHandlers, and other high-level handler tests
- Better maintainability – removed ~50 lines of verbose debug logging code, making tests easier to read and maintain
- Improved debugging – concise logs make it easier to identify which operation failed and why, without scrolling through JSON dumps
- Removed verbose
Dependencies
- Updated
@mcp-abap-adt/adt-clientsto^0.1.25– upgraded to latest version which includes:- Improved
DomainBuilder.update()workflow detection logic - Better handling of CREATE vs UPDATE workflow selection based on builder state
- Enhanced error messages for domain operations
- Improved
Documentation
- Test Issues Roadmap – comprehensive update to development roadmap:
- Issue #10 (DomainHighHandlers) – changed status from "Expected Skip" to "Fixed" with detailed explanation
- Updated statistics: 8 fixed issues (was 7), 1 expected skip (was 3)
- Added detailed problem analysis: Documented root cause, solution approach, and code changes
- Improved issue tracking: Better categorization of issues vs expected skips vs cloud limitations
Development Process
- Issue Roadmap System – introduced systematic problem analysis and resolution tracking:
- New workflow: Test failures are now systematically analyzed and documented in
doc/development/TEST_ISSUES_ROADMAP_*.md - Issue classification: Problems are categorized as Simple (⚡) or Complex (🔍), with clear distinction between real issues and expected skips
- Problem analysis: Each issue includes detailed error messages, root cause analysis, solution approach, and code references
- Progress tracking: Roadmap maintains statistics on fixed vs pending vs expected issues, providing clear visibility into test suite health
- Solution documentation: All fixes are documented with code references, making it easier to understand what was changed and why
- Continuous improvement: Roadmap is updated after each test run, ensuring it reflects current state and helps prioritize future work
- Benefits: Enables faster problem resolution, prevents duplicate work, and provides historical context for similar issues
- New workflow: Test failures are now systematically analyzed and documented in
- DomainHighHandlers - Update workflow detection bug – fixed critical issue where domain update operations were incorrectly using CREATE workflow instead of UPDATE workflow:
Features 2, Changed 2, Fixes 1
Notes
Added
-
Client Connection Isolation: Implemented per-session connection isolation to prevent data mixing between different clients
- Each client session now maintains its own isolated SAP connection based on
sessionIdand configuration hash - Connections are cached per unique combination of
sessionId+sapUrl+ authentication parameters - Uses
AsyncLocalStorageto pass session context to handlers, ensuring each request uses the correct connection - Prevents race conditions where concurrent requests from different clients could overwrite each other's connection settings
- Backward compatible: falls back to global connection cache for non-HTTP transports (stdio)
- Each client session now maintains its own isolated SAP connection based on
-
Non-Local Connection Restrictions: Added security restrictions for non-local connections
- SSE Transport: Always restricted to localhost connections only (127.0.0.1, ::1, localhost)
- HTTP Transport: Non-local connections are restricted when:
.envfile exists (was found at startup)- AND request does not include SAP connection headers (
x-sap-url,x-sap-auth-type)
- Non-local connections with SAP headers are allowed (enables multi-tenant scenarios)
- Local connections are always allowed regardless of
.envfile presence - Clear error messages guide users when connections are rejected
Changed
-
Connection Management: Refactored
getManagedConnection()to support session-based connection caching- Added
generateConnectionCacheKey()function to create unique cache keys from sessionId and config signature - Implemented
getConnectionForSession()to retrieve or create session-specific connections - Added automatic cleanup of old connection cache entries (older than 1 hour)
- Each session uses unique
sessionIdfor itsAbapConnectionto prevent session mixing
- Added
-
Session Tracking: Enhanced
streamableHttpSessionsto store SAP configuration per session- Added
sapConfigfield to session objects to track configuration per client applyAuthHeaders()now stores configuration in session object- Session cleanup automatically removes associated connection from cache
- Added
Security
- Connection Isolation: Prevents one client from receiving another client's data when multiple clients connect to different SAP systems
- Access Control: Restricts non-local access when
.envfile is present, requiring explicit SAP headers for remote connections
-
Security 2, Features 2, Changed 2
Notes
Added
-
Client Connection Isolation: Implemented per-session connection isolation to prevent data mixing between different clients
- Each client session now maintains its own isolated SAP connection based on
sessionIdand configuration hash - Connections are cached per unique combination of
sessionId+sapUrl+ authentication parameters - Uses
AsyncLocalStorageto pass session context to handlers, ensuring each request uses the correct connection - Prevents race conditions where concurrent requests from different clients could overwrite each other's connection settings
- Backward compatible: falls back to global connection cache for non-HTTP transports (stdio)
- Each client session now maintains its own isolated SAP connection based on
-
Non-Local Connection Restrictions: Added security restrictions for non-local connections
- SSE Transport: Always restricted to localhost connections only (127.0.0.1, ::1, localhost)
- HTTP Transport: Non-local connections are restricted when:
.envfile exists (was found at startup)- AND request does not include SAP connection headers (
x-sap-url,x-sap-auth-type)
- Non-local connections with SAP headers are allowed (enables multi-tenant scenarios)
- Local connections are always allowed regardless of
.envfile presence - Clear error messages guide users when connections are rejected
Changed
-
Connection Management: Refactored
getManagedConnection()to support session-based connection caching- Added
generateConnectionCacheKey()function to create unique cache keys from sessionId and config signature - Implemented
getConnectionForSession()to retrieve or create session-specific connections - Added automatic cleanup of old connection cache entries (older than 1 hour)
- Each session uses unique
sessionIdfor itsAbapConnectionto prevent session mixing
- Added
-
Session Tracking: Enhanced
streamableHttpSessionsto store SAP configuration per session- Added
sapConfigfield to session objects to track configuration per client applyAuthHeaders()now stores configuration in session object- Session cleanup automatically removes associated connection from cache
- Added
Security
- Connection Isolation: Prevents one client from receiving another client's data when multiple clients connect to different SAP systems
- Access Control: Restricts non-local access when
.envfile is present, requiring explicit SAP headers for remote connections
-
Features 4, Changed 5, Docs 2
Notes
Added
-
DDLX (Metadata Extension) Management Tools:
CreateMetadataExtension: Create new ABAP Metadata Extensions (DDLX) with automatic activationUpdateMetadataExtension: Update source code of existing Metadata Extensions- Full CRUD workflow: Create → Lock → Check → Unlock → Activate
- Support for transport request validation
- Integrated with CrudClient API for consistent behavior
-
BDEF (Behavior Definition) Management Tools:
CreateBehaviorDefinition: Create new ABAP Behavior Definitions (BDEF) with support for Managed, Unmanaged, Abstract, and Projection implementation typesUpdateBehaviorDefinition: Update source code of existing Behavior Definitions- Full CRUD workflow: Create → Lock → Check → Unlock → Activate
- Support for root entity specification and implementation type selection
- Transport request validation integrated
-
Full Low-Level CRUD Coverage:
- Added dedicated
create,lock,unlock,check,validate,delete, andupdatehandlers for classes, programs, interfaces, function groups/modules, domains, data elements, packages, tables, views, structures, transports, and more to cover everyCrudClientmethod. - Each handler now has a consistent naming scheme (
CreateX,UpdateX, etc.) to match the high-level counterparts.
- Added dedicated
-
System Management Tools:
GetInactiveObjects: Retrieve list of inactive ABAP objects (objects that have been modified but not activated)- Provides count and detailed list of objects waiting for activation
- Useful for monitoring development progress and identifying objects requiring attention
Changed
-
Handler Organization Refactoring: All handlers reorganized into categorized subdirectories with explicit
high/,low/, andreadonly/layers for better maintainability. Each low-level handler description now starts with[low-level], and every read handler was moved to the newreadonly/folders and tagged[read-only]. This improves discoverability, enforces single-responsibility boundaries, and makes it clear which tools mutate SAP data.bdef/- Behavior Definition handlers (GetBdef, CreateBehaviorDefinition, UpdateBehaviorDefinition)class/- Class handlers (GetClass, CreateClass, UpdateClass, ValidateClass, CheckClass)common/- Common handlers (ActivateObject, DeleteObject, CheckObject, LockObject, UnlockObject, ValidateObject)data_element/- Data Element handlers (GetDataElement, CreateDataElement, UpdateDataElement)ddlx/- Metadata Extension handlers (CreateMetadataExtension, UpdateMetadataExtension)domain/- Domain handlers (GetDomain, CreateDomain, UpdateDomain)enhancement/- Enhancement handlers (GetEnhancements, GetEnhancementImpl, GetEnhancementSpot)function/- Function handlers (GetFunction, GetFunctionGroup, CreateFunctionGroup, CreateFunctionModule, UpdateFunctionModule, ValidateFunctionModule, CheckFunctionModule)include/- Include handlers (GetInclude, GetIncludesList)interface/- Interface handlers (GetInterface, CreateInterface, UpdateInterface)package/- Package handlers (GetPackage, CreatePackage)program/- Program handlers (GetProgram, CreateProgram, UpdateProgram)search/- Search handlers (SearchObject, GetObjectsByType, GetObjectsList)structure/- Structure handlers (GetStructure, CreateStructure)system/- System handlers (GetTypeInfo, GetTransaction, GetSqlQuery, GetWhereUsed, GetObjectInfo, GetSession, GetAbapAST, GetAbapSemanticAnalysis, GetAbapSystemSymbols, GetAllTypes, GetObjectStructure, GetObjectNodeFromCache, GetInactiveObjects)table/- Table handlers (GetTable, GetTableContents, CreateTable, ValidateTable, CheckTable)transport/- Transport handlers (GetTransport, CreateTransport)view/- View handlers (GetView, CreateView, UpdateView)- This reorganization improves code navigation, reduces merge conflicts, and makes the codebase more maintainable
-
Dependencies Updated:
@mcp-abap-adt/adt-clients: ^0.1.9 → ^0.1.12@mcp-abap-adt/connection: ^0.1.4 → ^0.1.9- Updated to leverage new CrudClient methods for DDLX and BDEF operations
-
Index and Tools Registry Updates:
src/index.ts: Updated all handler imports to reflect new subdirectory structuresrc/lib/toolsRegistry.ts: Updated tool definitions imports to match new handler locations- All 81 handler files moved and imports updated consistently
-
Tooling Improvements:
tools/generate-tools-docs.jsnow outputs a navigation tree that mirrors the document structure, separates high-/low-/read-only tools, and adds summary counts for each level.doc/user-guide/AVAILABLE_TOOLS.mdregenerated to include the new navigation, level-specific anchors, and the[read-only]marker.- Test suite, configs, and helper scripts updated to follow the new directory layout and renamed high-level handlers (
UpdateClass,UpdateProgram, etc.).
-
Low-Level Tool Names:
- Every low-level handler now advertises a unique MCP tool name suffixed with
Low(e.g.,CreateClassLow,UpdateDomainLow,LockPackageLow). This preventsTool <name> is already registerederrors when both low/high versions exist and keeps the server compatible with clients that look up tools by name.
- Every low-level handler now advertises a unique MCP tool name suffixed with
Documentation
- Added
implementation_plan.md: Plan for future refactoring of read handlers tosrc/readersdirectory - Removed
roadmap.md: Work items are complete, so the standalone roadmap is no longer required
-
Notes
Documentation for this tag is intentionally minimal; see the Git tag
v1.1.8for its exact contents.Docs 1
Notes
Documentation
- Comprehensive CLI documentation: Added detailed documentation for all command line options and configuration
- Updated README.md with global installation guide and CLI usage examples
- Enhanced INSTALLATION.md with complete CLI options reference
- Created new CLI_OPTIONS.md with comprehensive command line reference
- Documented environment file priority and auto-discovery behavior
- Added troubleshooting section for common CLI issues
- Comprehensive CLI documentation: Added detailed documentation for all command line options and configuration
Features 1, Changed 1, Fixes 4
Notes
Added
- --help flag: Added comprehensive help message showing all CLI options, environment variables, and usage examples
- Shows transport options (stdio, http, sse)
- Lists all HTTP and SSE configuration options
- Documents SAP connection environment variables
- Includes practical usage examples
Fixed
- Global installation .env loading: Fixed .env file discovery for globally installed packages
- Now correctly prioritizes
process.cwd()/.env(user's working directory) over package directory - Works correctly when installed via
npm install -g - Better error messages showing current directory and suggesting --env flag
- Now correctly prioritizes
- --env argument parsing: Fixed custom .env file path support
- Both
--env=/path/to/.envand--env /path/to/.envformats now work correctly - Relative paths are resolved from current working directory
- Clear feedback messages showing which .env file is being used
- Both
- Runtime dependencies: Moved
dotenvfrom devDependencies to dependencies- Fixes "Cannot find module 'dotenv'" error when installed globally
- Ensures all runtime dependencies are available in production
Changed
- All handlers refactored to use CrudClient – replaced Builder pattern with unified CrudClient API
- 18 handlers converted: Create (Program, DataElement, Domain, FunctionGroup, FunctionModule, Package, Structure, Table, Transport, View), Update (ClassSource, DataElement, InterfaceSource), Check (Class, FunctionModule, Table, Object), Validate (Class, Object), Lock/Unlock (Object)
- Removed direct Builder instantiation from all handlers
- All CRUD operations now use CrudClient methods (createProgram, lockClass, updateInterface, etc.)
- Session ID no longer exposed - internal to CrudClient implementation
- Simplified error handling with try-catch around lock/update/unlock sequences
Fixed
- utils.ts deprecated methods – added TODO comments for missing ReadOnlyClient methods
fetchNodeStructure()- marked for future implementationgetSystemInformation()- marked for future implementation- Both throw errors with clear TODO messages instead of attempting non-existent method calls
- --help flag: Added comprehensive help message showing all CLI options, environment variables, and usage examples
Features 1, Changed 1
Notes
Added
- Parameter Optionality Sync Tool: Created
tools/sync-optional-from-interfaces.jsto extract optional parameter information from TypeScript interfaces- Extracts required vs optional fields from
@mcp-abap-adt/adt-clientsbuilder interfaces - Provides single source of truth for parameter optionality
- Prevents drift between TypeScript interfaces and MCP tool definitions
- Documentation added in
doc/development/SYNC_OPTIONAL_PARAMS.md
- Extracts required vs optional fields from
Changed
- CreateDomain Handler: Synced parameter optionality with
DomainBuilderConfiginterface- Only
domain_nameis required (was incorrectly requiringpackage_name) - Marked all optional parameters with
(optional)prefix in descriptions - Ensures consistency with TypeScript interface definitions
- Only
- Parameter Optionality Sync Tool: Created
Features 1, Fixes 1
Notes
Fixed
- STDIO Transport: Fixed STDIO transport broken by mixing old
Serverand newMcpServerAPIs- Removed legacy
Serverclass andsetupHandlers()method - Unified all transports (STDIO, HTTP, SSE) to use single
McpServerinstance - Fixed STDIO connection to use
mcpServer.server.connect(transport)pattern - Removed unused imports:
Server,CallToolRequestSchema,ListToolsRequestSchema
- Removed legacy
Added
- SSE Development Tool: Created
tools/dev-sse.jsfor proper SSE server development workflow- Launches SSE server on port 3001 (default)
- Automatically starts MCP Inspector with correct SSE endpoint (
http://localhost:3001/sse) - Mirrors
dev-http.jsfunctionality for consistent development experience - Updated
npm run dev:sseto use new development script
- STDIO Transport: Fixed STDIO transport broken by mixing old
Features 6
Notes
Added
- All MCP handler functions now support an optional
filePathparameter. If provided, the handler will save the result to the specified file path (any absolute or relative path, with any extension). - All CLI test scripts now accept the
--filePath=...argument to save the result to a file. - The result written to file is exactly what is returned to the user (no extra formatting or caching).
- Improved error logging and debug output for file writing operations.
- Updated documentation and usage examples in README.md to reflect new file output support.
- Implemented utility
writeResultToFilefor safe file writing with directory restriction and logging.
- All MCP handler functions now support an optional
Features 3, Changed 1
Notes
Added
- Added integration test
tests/integration/handleGetFunction.int.test.jsfor handleGetFunction. - Significantly expanded integration test coverage in
src/index.test.tsfor all main tools (GetProgram, GetClass, GetFunctionGroup, GetFunction, GetTable, GetStructure, GetTableContents, GetPackage, GetInclude, GetTypeInfo, GetInterface, GetTransaction, GetEnhancements, GetSqlQuery, SearchObject). - Added new checks for advanced scenarios (e.g., SQL generation, error handling, enhancement XML parsing).
Changed
- Updated documentation regarding testing and integration scenarios.
- Added integration test
Changed 2
Notes
Changed
GetWhereUsednow supports any ADT object type (e.g. table/TABL, bdef/BDEF, etc.), not just class, program, include, function, interface, package.- Updated documentation in README.md and jsdoc for supported object types and usage examples.
Features 1
Notes
Added
- New
GetTransactiontool to retrieve ABAP transaction details.- Allows fetching transaction details using the ADT endpoint
/sap/bc/adt/repository/informationsystem/objectproperties/values. - Added documentation in README.md.
- Allows fetching transaction details using the ADT endpoint
- New
Changed 4
Notes
Changed
- Added Jest Test Script
index.test.tsavailable throughnpm test - Enhanced
makeAdtRequestmethod to support:- Custom headers through an optional parameter
- Query parameters through an optional
paramsparameter
- Improved
handleGetPackagemethod to use ADT's nodeContent API- Now uses POST request with proper XML payload
- Added specific content type headers for nodeContent endpoint
- Added filtering to return only objects with URI
- Improved CSRF token handling in utils.ts
- Added automatic CSRF token fetching for POST/PUT requests
- Enhanced token extraction to work with error responses
- Added cookie management for better session handling
- Implemented singleton axios instance for consistent state
- Added proper cleanup for test environments
- Added Jest Test Script
Features 1
Notes
Added
- New
GetInterfacetool to retrieve ABAP interface source code- Allows fetching source code of ABAP interfaces using the ADT endpoint
/sap/bc/adt/oo/interfaces/ - Similar functionality to GetClass but for interfaces
- Added documentation in README.md
- Allows fetching source code of ABAP interfaces using the ADT endpoint
- New
Features 4
Notes
Added
- Initial release of the MCP ABAP ADT server
- Basic ABAP object retrieval functionality
- Support for programs, classes, function modules, and more
- Documentation and setup instructions
Others providing
Compare all 43 on the Agent access to ABAP code page →- @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 loop
- 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 enhancements
- 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 CDS
- 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-ls
- 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 objects
- 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 Code
- 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 tools
- 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 Kiro
- 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 work
- 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 strategies
- 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 recovery
- 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 server
- 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 objects
- 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 standalone
- 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 objects
- 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.
- 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 Cloud
- 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 writes
- 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 system
- 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 ADT
- 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 Tools
- 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 ADT
- 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 ADT
- 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 filesystem
- 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-api
- 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, tables
- 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 MCP
- 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 side
- 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 exposes
- ADT MCP ServerADT MCP ServerSAP's own ADT MCP server, and not a package: a preference inside ABAP Development Tools for VS Code that starts a local HTTP MCP server on a port you choose.sap official, abapLocal HTTP MCP server started from ABAP Development Tools for VS Code
- ABAP Development Tools for VS CodeABAP Development Tools for VS CodeSAP's ABAP tools in VS Code: editing, debugging, ABAP Unit, ATC and transports for classes, CDS and RAP objects, over RFC to an on-premise or Private Cloud system and HTTP to a cloud one, with Joule's ADT MCP server and code completion behind an AI-unit licence.sap official, abapSAP's ABAP tools in VS Code for editing, debugging, ATC and transports
- 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 Code
- 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 specification
- 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-1
- 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 tools
- 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 ADT
- 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 Korean
- 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 skills
- 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 allowlist
- 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 Code
- 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 report
- 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 tools
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
Flavors
“Supports ABAP Cloud (BTP), On-Premise, and Legacy SAP systems.” — babamba2/abap-mcp-adt-powerup — README
“Supports ABAP Cloud (BTP), On-Premise, and Legacy SAP systems.” — babamba2/abap-mcp-adt-powerup — README
History in the atlas
- Triaged out of data/crawled/mcp-candidates.json, the sap-ai-mcp-servers sweep. Written from the repository's own README; the catalogue is credited as where it was found and its words are not reused.
- First seen.
For your agent
- Ref
artifact:babamba2-abap-mcp-adt-powerup- JSON
- /artifacts/babamba2-abap-mcp-adt-powerup.json
- MCP
- Connecting an agent