mcp-abap-adt is an MCP server for ABAP ADT in SAP ECC/S/4HANA (on-premise) and SAP BTP ABAP Cloud systems. It gives agents controlled access to real ABAP repositories through ADT, so analysis and changes are grounded in system data instead of assumptions.
Primary workflows:
- Deep ABAP analysis: where-used, object metadata, repository navigation, object structure, semantic analysis, dependency and impact exploration.
- High-level ABAP development: rapid CRUD and iterative updates for RAP and classic ABAP artifacts (classes, interfaces, function groups/modules, programs, DDIC, CDS/view/service artifacts), validated through ADT flows.
Why teams use it:
- Full CRUD (not read-only): create, read, update, and delete ABAP artifacts
- Works with On-Premise (ECC/S/4HANA) and ABAP Cloud (BTP) systems
- JWT/XSUAA and service key (destination-based) authorization
- Multiple transports: stdio, HTTP, SSE
- Rich tool surface for ABAP objects, metadata, transports, and search
Authorization & Destinations (Important): A destination is the filename of a service key stored locally. You place service keys in the service-keys directory, and use --mcp=<destination> to select which one to use. This is the primary auth model for onβprem and BTP systems. See Authentication & Destinations.
You can configure MCP clients either manually (JSON/TOML) or via the configurator CLI (@mcp-abap-adt/configurator, repo: mcp-abap-adt-conf).
- Getting Started
- Architecture
- Quick Start
- Use Cases
- Target Users
- Capabilities (High-Level Focus)
- Terminology
- Authorization & Destinations
- Registries
- Features
- Documentation
- Dependencies
- Running the Server
Install the server and configure your client using the configurator:
npm install -g @mcp-abap-adt/core
npm install -g @mcp-abap-adt/configurator
# stdio (destination)
mcp-conf --client cline --name abap --mcp TRIAL
# HTTP (streamable HTTP)
mcp-conf --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http --header x-mcp-destination=trialFull configurator usage (separate repo): CLIENT_INSTALLERS.md.
Destination: a local service key filename. You store service keys in the standard service-keys directory, and pass the filename (without extension) via --mcp=<destination> to select which system to use.
See docs/user-guide/TERMINOLOGY.md for the full list.
Destination-based auth is the default. Drop service keys into the standard platform folder and use the filename as your destination:
mcp-abap-adt --transport=stdio --mcp=TRIALStandard service key paths:
- Unix (Linux/macOS):
~/.config/mcp-abap-adt/service-keys/<destination>.json - Windows:
%USERPROFILE%\\Documents\\mcp-abap-adt\\service-keys\\<destination>.json
For full details (paths, .env, direct headers), see Authentication & Destinations.
The project provides two main usage patterns:
Run as a standalone MCP server with stdio, HTTP, or SSE transport:
mcp-abap-adt # stdio (default)
mcp-abap-adt --transport=http # HTTP mode
mcp-abap-adt --transport=sse # SSE modeEmbed MCP server into existing applications (e.g., SAP CAP/CDS, Express):
import { EmbeddableMcpServer } from '@mcp-abap-adt/core/server';
const server = new EmbeddableMcpServer({
connection, // Your AbapConnection instance
logger, // Optional logger
exposition: ['readonly', 'high'], // Handler groups to expose
});
await server.connect(transport);- Install server: See Installation Guide
- Configure client (auto): Use
mcp-conffrom@mcp-abap-adt/configurator(repo:mcp-abap-adt-conf, docs: CLIENT_INSTALLERS.md) - Configure client (manual): See Client Configuration
- Use:
- Impact analysis / where-used before changes: map object usage and probable blast radius.
- Dependency audit: inspect links across classes, interfaces, DDIC, CDS/views, and RAP artifacts.
- Migration and cleanup prep: extract repository facts to plan refactoring or cloud-readiness work.
- RAP and ABAP iterative development: create/update artifacts quickly with ADT-backed operations.
- Automated documentation and RAG ingestion: pull structured facts from ABAP systems for downstream tooling.
- ABAP developers and ABAP architects
- RAP developers
- Team leads and tech leads who need fast repository visibility
- Teams building RAG/agent workflows for SAP landscapes
Key examples of high-value workflows and tools:
- Repository and impact analysis:
GetWhereUsed,DescribeByList,GetObjectStructure,GetObjectInfo,SearchObject,GetPackageTree,GetPackageContents - Code and semantic introspection:
GetAbapAST,GetAbapSemanticAnalysis,GetIncludesList,GetProgFullCode - RAP development:
CreateBehaviorDefinition,UpdateBehaviorDefinition,CreateBehaviorImplementation,UpdateBehaviorImplementation,CreateServiceDefinition,UpdateServiceDefinition,CreateMetadataExtension,UpdateMetadataExtension - CDS/View development:
CreateView,UpdateView,GetView,DeleteView - ABAP OO CRUD:
CreateClass,UpdateClass,GetClass,DeleteClass,CreateInterface,UpdateInterface,GetInterface,DeleteInterface - Function module/group CRUD:
CreateFunctionGroup,UpdateFunctionGroup,GetFunctionGroup,DeleteFunctionGroup,CreateFunctionModule,UpdateFunctionModule,GetFunctionModule,DeleteFunctionModule - Transport and activation support:
CreateTransport,GetTransport,ActivateObject
Published in the official MCP Registry and listed on Glama.ai.
- MCP Registry: docs/deployment/MCP_REGISTRY.md
- Glama.ai:
- ποΈ Domain Management:
GetDomain,CreateDomain,UpdateDomain- Create, retrieve, and update ABAP domains - π Data Element Management:
GetDataElement,CreateDataElement,UpdateDataElement- Create, retrieve, and update ABAP data elements - π¦ Table Management:
GetTable,CreateTable,GetTableContents- Create and retrieve ABAP database tables with data preview - ποΈ Structure Management:
GetStructure,CreateStructure- Create and retrieve ABAP structures - ποΈ View Management:
GetView,CreateView,UpdateView- Create and manage CDS Views and Classic Views - π Class Management:
GetClass,CreateClass,UpdateClass- Create, retrieve, and update ABAP classes - π Program Management:
GetProgram,CreateProgram,UpdateProgram- Create, retrieve, and update ABAP programs - π§ Behavior Definition (BDEF) Management:
GetBehaviorDefinition,CreateBehaviorDefinition,UpdateBehaviorDefinition- Create and manage ABAP Behavior Definitions with support for Managed, Unmanaged, Abstract, and Projection types - π Metadata Extension (DDLX) Management:
CreateMetadataExtension,UpdateMetadataExtension- Create and manage ABAP Metadata Extensions - β‘ Activation:
ActivateObject- Universal activation for any ABAP object - π Transport Management:
CreateTransport,GetTransport- Create and retrieve transport requests - π Enhancement Analysis:
GetEnhancements,GetEnhancementImpl,GetEnhancementSpot- Enhancement discovery and analysis - π Include Management:
GetIncludesList- Recursive include discovery - π System Tools:
GetInactiveObjects- Monitor inactive objects waiting for activation - π SAP BTP Support: JWT/XSUAA authentication with browser-based token helper
- π Destination-Based Authentication: Service key-based authentication with automatic token management (see Client Configuration)
- πΎ Freestyle SQL:
GetSqlQuery- Execute custom SQL queries via ADT Data Preview API
βΉοΈ ABAP Cloud limitation: Direct ADT data preview of database tables is blocked by SAP BTP backend policies. The server returns a descriptive error when attempting such operations. On-premise systems continue to support data preview.
- Docs Index - Full documentation index
- Installation Guide - Installation overview and platform guides
- User Guide - End-user docs (auth, config, tools)
- Authentication & Destinations - Destination-based auth and service keys
- Handlers Management - Enable/disable handler groups
- Configurator:
@mcp-abap-adt/configurator(repo:mcp-abap-adt-conf) provides themcp-confCLI to auto-configure clients - Tools by level
- Deployment Docs - MCP Registry, Docker, release notes
- Server Configuration - YAML config reference
- Architecture Documentation - System architecture and design decisions
- Development Documentation - Testing guides and development resources
- CHANGELOG.md - Version history and changes
This project uses two npm packages:
- @mcp-abap-adt/connection β connection/auth/session layer
- @mcp-abap-adt/adt-clients β Builder-first ADT clients
These packages are automatically installed via npm install and are published to npm.
After installing globally with npm install -g, you can run from any directory:
# Show help
mcp-abap-adt --help
# Default HTTP mode (works without .env file)
mcp-abap-adt
# HTTP mode on custom port
mcp-abap-adt --http-port=8080
# Use stdio mode (for MCP clients, requires .env file or --mcp parameter)
mcp-abap-adt --transport=stdio
# Use stdio mode with auth-broker (--mcp parameter)
mcp-abap-adt --transport=stdio --mcp=TRIAL
# Use env destination from platform sessions store
mcp-abap-adt --env=trial
# Use explicit .env file path
mcp-abap-adt --env-path=/path/to/my.env
# SSE mode (requires .env file or --mcp parameter)
mcp-abap-adt --transport=sse --sse-port=3001
# SSE mode with auth-broker (--mcp parameter)
mcp-abap-adt --transport=sse --mcp=TRIAL# Build and run locally
npm run build
npm start
# HTTP mode
npm run start:http
# SSE mode
npm run start:sse
# Legacy v1 server (for backward compatibility)
npm run start:legacyEnv resolution:
--env-path=<path|file>(orMCP_ENV_PATH) for explicit.envfile.- Absolute path: used as-is.
- Relative path or file name only (e.g.
my.env): resolved from current working directory.
--env=<destination>for destination file in standard sessions store:- Unix:
~/.config/mcp-abap-adt/sessions/<destination>.env - Windows:
%USERPROFILE%\\Documents\\mcp-abap-adt\\sessions\\<destination>.env
- Unix:
- Fallback to
.envin current working directory.
Example .env file:
SAP_URL=https://your-sap-system.com
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your-username
SAP_PASSWORD=your-passwordFor JWT authentication (SAP BTP):
SAP_URL=https://your-btp-system.com
SAP_CLIENT=100
SAP_AUTH_TYPE=jwt
SAP_JWT_TOKEN=your-jwt-tokenGenerate .env from Service Key (JWT):
# Install the connection package globally (one-time setup)
npm install -g @mcp-abap-adt/connection
# Generate .env file from service key JSON
mcp-auth auth -k path/to/service-key.jsonThis will automatically create/update .env file with JWT tokens and connection details.
.env comments rule: only full-line comments are supported (lines that start with #).
Inline comments are not parsed, so keep comments on separate lines.
Claude recommendation: place the service key in the service-keys directory and use --mcp=<destination> (avoid manual JWT tokens).
Authentication:
--auth-broker- Force use of auth-broker (service keys), ignore .env file--auth-broker-path=<path>- Custom path for auth-broker service keys and sessions--unsafe- Enable file-based session storage (persists tokens to disk). By default, sessions are stored in-memory (secure, lost on restart)
Examples:
# Use auth-broker with file-based session storage (persists tokens)
mcp-abap-adt --auth-broker --unsafe
# Use auth-broker with in-memory session storage (default, secure)
mcp-abap-adt --auth-broker
# Custom path for service keys and sessions
mcp-abap-adt --auth-broker --auth-broker-path=~/prj/tmp/ --unsafeSee Client Configuration for complete configuration options.
AUTH_LOG_LEVEL=error|warn|info|debugβ sets base log level for handler logger;DEBUG_AUTH_LOG=truealso enablesdebug.HANDLER_LOG_SILENT=trueβ fully disables handler logging.DEBUG_CONNECTORS=trueβ verbose connection logging in high-level handlers.DEBUG_HANDLERS=trueβ enables verbose logs for selected read-only/system handlers.
npm testTEST_LOG_LEVEL=error|warn|info|debugβ controls test logger verbosity (DEBUG_TESTS/DEBUG_ADT_TESTS/DEBUG_CONNECTORS forcedebug).TEST_LOG_FILE=/tmp/adt-tests.logβ writes test logs to a file (best-effort).TEST_LOG_SILENT=trueβ disables test logging pipeline (console output muted).TEST_LOG_COLOR=trueβ adds colored/prefixed tags to test log lines.- All
console.*in tests are routed through the test logger with a[test]prefix.
npm run build# Generate tool documentation
npm run docs:tools
# See tools/README.md for more developer utilitiesThank you to all contributors! See CONTRIBUTORS.md for the complete list.
Acknowledgment: This project was originally inspired by mario-andreschak/mcp-abap-adt. We started with the core concept and then evolved it into an independent project with our own architecture and features.