AI-Agentic Development Unlocked for ABAP — ECC, S/4HANA, everywhere ADT is available.
ADT ↔ MCP Bridge: Gives Claude (and other AI assistants) full access to SAP ADT APIs. Read code, write code, debug, deploy, run tests — all through natural language (or DSL for automation).
See also: OData ↔ MCP Bridge for SAP data access.
Want to review or test? Start here: Reviewer Guide — 8 hands-on tasks, no SAP needed.
Read the milestone article: Agentic ABAP at 100 Stars: The Numbers, The Community, and What's Cooking
v2.25.0 - CreatePackage Software Component Support
software_componentParameter: Create transportable packages with proper software component (e.g.,HOME,ZLOCAL)- Viper Env Fix: Comma-separated env vars (
SAP_ALLOWED_PACKAGES,SAP_ALLOWED_TRANSPORTS) now parse correctly - Closes #18: Namespace URL encoding verified working
⚠️ Requires:--allow-transportable-editsor--enable-transportsflag for transportable packages
v2.24.0 - Transportable Edits Safety Feature
- Safety by Default: Editing objects in transportable packages blocked unless explicitly enabled
--allow-transportable-edits: Opt-in flag to enable editing non-local objects- Transport Whitelisting:
--allowed-transports "A4HK*,DEVK*"restricts allowed TRs - Package Whitelisting:
--allowed-packages "Z*,$TMP"restricts editable packages - Clear Error Messages: Explains why edits are blocked and how to enable
- Transport Tool Visibility:
ListTransports/GetTransportvisible when flag enabled - See Transportable Edits Report
v2.23.0 - GitExport to Disk & GetAbapHelp via WebSocket
- GitExport saves ZIP to disk: No more base64 - files written directly to
output_dir - GetAbapHelp via WebSocket: Real SAP documentation from system (uses ZADT_VSP if connected)
- Lazy WebSocket Connection: WebSocket connects on-demand for Git/Help operations
- Embedded ABAP Sync: Updated all ZADT_VSP classes from SAP system (2026-02-02)
v2.22.0 - SAP GUI Debugger Integration
- SAP_TERMINAL_ID: Share breakpoints between vsp and SAP GUI sessions
- MoveObject Tool: Move ABAP objects between packages (via ZADT_VSP WebSocket)
- RunReport Refactor: Uses background jobs with spool output - more reliable execution
- Cross-Tool Debugging: Set breakpoint in vsp, hit it in SAP GUI (or vice versa)
- Configure:
--terminal-id <id>orSAP_TERMINAL_ID=<id>(get ID from SAP GUI registry/file)
v2.21.0 - Method-Level Source Operations
- GetSource with
method: Returns only theMETHOD...ENDMETHODblock (~50 lines vs 1000+) - EditSource with
method: Constrains find/replace to specific method - no accidental edits elsewhere - WriteSource with
method: Replace only one method implementation (method must exist) - 95% Token Reduction: Work with individual methods instead of entire classes
- AI-Optimized: Faster responses, more precise edits, safer refactoring
- See Method-Level Operations Report
v2.20.0 - CLI Mode & Multi-System Management
- CLI Subcommands:
vsp search,vsp source,vsp export,vsp systems- direct ABAP operations without MCP - System Profiles:
.vsp.jsonconfig file for managing multiple SAP systems - Config Conversion:
vsp config mcp-to-vsp/vsp-to-mcp- convert between config formats - Cookie Auth in Profiles: Support
cookie_file/cookie_stringfor SSO environments - Password Sync: Passwords imported from
.mcp.jsonenv blocks automatically - GitExport FULL Mode: Multi-package exports with proper folder hierarchy (
src/$package/) - abapGit Compatible: Exports now include
.abapgit.xmlwith FULL folder logic
v2.19.0 - Async Execution & Developer Productivity
- RunReportAsync: Execute reports in background goroutine - no more timeouts!
- GetAsyncResult: Poll or wait for async task completion (up to 60s)
- CompareSource: Unified diff between any two ABAP objects (LCS algorithm)
- CloneObject: Copy PROG/CLAS/INTF to new name with auto-replace
- GetClassInfo: Quick class metadata via CAI (methods, attrs, interfaces)
- CreateTable: Create DDIC tables from simple JSON definition
- GetSystemInfo: Fixed to use SQL (CVERS/T000) - works across all SAP versions
- 54 Focused / 99 Expert Tools - see Release Notes
v2.18.1 - Interactive CLI Debugger
vsp debugCommand: Standalone interactive ABAP debugger- REPL Interface: s=step, n=next, o=out, c=continue, r=stack, v=vars
- WebSocket Breakpoints: Set/delete/list via ZADT_VSP
- Attach Mode: Wait for any debuggee or filter by user
- Graceful Handling: Ctrl+C cleanup, session state management
- Phase 1 of DAP implementation - see DAP Plan
v2.18.0 - Report Execution Tools
- RunReport: Execute selection-screen reports with params/variants, capture ALV output
- GetVariants: List available variants for a report
- GetTextElements: Read selection texts and text symbols
- SetTextElements: Update selection texts and text symbols programmatically
- Tool Group "R": Disable report tools with
--disabled-groups R - ZADT_VSP v2.3.0: New "report" domain for WebSocket-based report execution
- See Report Design
v2.17.0 - Install Tools & One-Command Deployment
- InstallZADTVSP: Deploy WebSocket handler to SAP in one command
- InstallAbapGit: Deploy abapGit standalone or dev edition
- ListDependencies: Show available installable packages
- Upsert Logic: Proper CREATE vs UPDATE detection for all objects
- Embedded ABAP source in binary - no external files needed
v2.16.0 - abapGit WebSocket Integration
- GitTypes Tool: Query 158 supported abapGit object types
- GitExport Tool: Export packages/objects as abapGit-compatible ZIP (base64)
- WebSocket Transport: Via ZADT_VSP handler (domain: "git")
- abapGit Serialization: Uses native
ZCL_ABAPGIT_OBJECTS=>serialize()for full compatibility - Tool Group "G": Disable Git tools with
--disabled-groups G - Requires: abapGit installed on SAP system
- See abapGit Integration Report
v2.15.0 - Phase 5 TAS-Style Debugging Complete
- Variable History Recording: Track all variable changes during debug sessions
- Extended Breakpoint Types: Statement, exception, and watchpoint scripting
- Force Replay / State Injection: THE KILLER FEATURE - inject captured state into live debug sessions
- WebSocket Debugging: Full TPDAPI integration via ZADT_VSP WebSocket handler
- AMDP Debugging: Experimental support (session works, breakpoint triggering under investigation)
- See Observations Since v2.12.5 for complete changelog
v2.14.0 - Lua Scripting Integration (Phase 5)
vsp luaCommand: Interactive REPL and script execution- 40+ Lua Bindings: All MCP tools accessible from Lua (searchObject, getSource, setBreakpoint, etc.)
- Debug Session Management: listen, attach, stepOver, stepInto, stepReturn, continue, getStack
- Checkpoint System: saveCheckpoint, getCheckpoint, listCheckpoints, injectCheckpoint (Force Replay foundation)
- Example Scripts: search-and-grep, call-graph-analysis, debug-session, analyze-dumps
- See TAS & RCA Vision and Roadmap for Phase 5-8 plans
v2.13.0 - Call Graph & RCA Tools
- GetCallersOf/GetCalleesOf: Navigate call graphs up (who calls) and down (what's called)
- TraceExecution: Composite RCA tool - static graph + trace + comparison in one call
- CompareCallGraphs: Find untested paths (static only) and dynamic calls (actual only)
- AnalyzeCallGraph: Statistics on nodes, edges, depth, types
- WebSocket Debugging: Full TPDAPI integration for statement/exception breakpoints
v2.12.5 - EditSource Line Ending Fix
- CRLF→LF Normalization: EditSource now works reliably across platforms
- SAP ADT returns
\r\n, AI sends\n- now automatically normalized - No more "old_string not found" errors due to line ending mismatches
v2.12.4 - Feature Detection & Safety Network
- GetFeatures Tool: Probe SAP system for available optional capabilities
- Feature Flags:
--feature-abapgit,--feature-rap,--feature-amdp,--feature-ui5,--feature-transport - Feature Modes:
auto(probe system),on(force enable),off(force disable) - SRVB WriteSource: Create Service Bindings via unified WriteSource tool
- BDEF Improvements: Fixed behavior definition creation flow
v2.12.0 - abapGit-Compatible Format & Batch Operations
- Class Includes: Import/export
.clas.testclasses.abap,.clas.locals_def.abap,.clas.locals_imp.abap - Batch Import DSL:
dsl.Import(client).FromDirectory("./src/").RAPOrder().Execute(ctx) - Batch Export DSL:
dsl.Export(client).Classes("ZCL_*").ToDirectory("./backup/").Execute(ctx) - Pipeline Builder:
dsl.RAPPipeline(client, "./src/", "$PKG", "ZSRV_BINDING")- full RAP deployment - Priority Control:
DDLSFirst(),RAPOrder(),CustomOrder()for dependency handling
v2.11.0 - Transport Management & Safety Controls
- 5 Transport Tools: ListTransports, GetTransport, CreateTransport, ReleaseTransport, DeleteTransport
- Safety Controls:
--enable-transports,--allowed-transports "A4HK*",--allowed-packages "Z*" - Tool Group "C": Disable all CTS tools with
--disabled-groups C - Enterprise-grade transport governance for AI assistants
- See also v2.24.0 for
--allow-transportable-editssafety feature
v2.10.0 - UI5/BSP Management & Tool Groups
- 7 UI5/BSP Tools: List apps, read files, search content, view manifests
- AMDP Debugger: 5 tools for HANA stored procedure debugging
- Tool Groups: Selectively disable features (
--disabled-groups 5THD) - 94 Total Tools: 46 focused mode, 94 expert mode
v2.8.0 - Full Debug Session Support
- DebuggerAttach/Detach - Attach to caught debuggees, release sessions
- DebuggerGetStack - View call stack with program/line info
- DebuggerGetVariables - Inspect variable values during debugging
- DebuggerStep - Step into/over/return/continue through code
- Complete AI-powered debugging: breakpoint → listen → attach → inspect → step
v2.7.0 - External Debugger & Listener
- Set external breakpoints (line, exception, statement, message)
- Long-polling debug listener for autonomous debugging
- Foundation for AI-powered debugger scripting
v2.6.0 - RAP OData E2E Support
- Create CDS views, Service Definitions, and Service Bindings
- Publish OData V2/V4 services directly from AI assistant
- Full RAP development lifecycle via MCP tools
Single binary with 81 focused tools (default) or 122 expert tools for AI-assisted ABAP development.
| Feature | Description |
|---|---|
| AI Debugger | Breakpoints, listener, attach, step, inspect stack & variables |
| RAP OData E2E | Create CDS views, Service Definitions, Bindings → Publish OData services |
| Focused Mode | 37 curated tools optimized for AI assistants (50% token reduction) |
| AI-Powered RCA | Root cause analysis with dumps, traces, profiler + code intelligence |
| DSL & Workflows | Fluent Go API + YAML automation for CI/CD pipelines |
| ExecuteABAP | Run arbitrary ABAP code via unit test wrapper |
| Code Analysis | Call graphs, object structure, find definition/references |
| System Introspection | System info, installed components, CDS dependencies |
| Diagnostics | Short dumps (RABAX), ABAP profiler (ATRA), SQL traces (ST05) |
| File Deployment | Bypass token limits - deploy large files directly from filesystem |
| Surgical Edits | EditSource tool matches Claude's Edit pattern for precise changes |
#Download binary from releases
curl -LO https://github.com/oisee/vibing-steampunk/releases/latest/download/vsp-linux-amd64
chmod +x vsp-linux-amd64
#Or build from source
git clone https://github.com/oisee/vibing-steampunk.git && cd vibing-steampunk
make buildhttps://github.com/oisee/vibing-steampunk/releases.
If you have trouble downloading executable files in your browser, use curl -o url or wget to download the file. Name the file vsp.exe.
Put the file in a local folder and open the folder in VS Code.
Add the vsp folder to your PATH environment variable for your user. Either through command line or Windows Registry Editor regedit. Add the vsp folder to KEY_CURRENT_USER\Environment\Path.
Restart your VS Code to recognize the updated PATH before progressing to the next steps.
Open a terminal in VS Code, then run ./vsp config init to create config template files:
.env.example.vsp.json.example.mcp.json.example
Make sure you delete the comment lines. Refer to the example files in this README.
For basic auth: Set up a password for your user to allow for basic authentication. Go to SU01 > Logon Data, generate an initial password. Then log in again (without SNC/SSO in SAPGUI) and change the initial password. You are now set up for basic authentication via config file in vsp. Set your environment variables SAP_USER and SAP_PASSWORD accordingly.
You now need to obtain the SAP hostname for your SAP_URL environment variable: Log in to any web-based application (e.g. Fiori Launchpad) and obtain the URL from your browser. Attention: SAP_URL is not not your message/group server from SAP Logon!
Alternatively use cookie authentication: If you cannot set a password for your user, you may still use cookie authentication to access your SAP system from vsp.
Extract cookies manually and save them in cookies.txt in your vsp folder. Use cookies SAP_SESSIONID_SYS_CLI and sap-usercontext on your previously determined URL (caution: use https:// prefix for secure connections). Refer to below guide on how to manually extract cookies from your browser.
Template cookie file:
# Netscape HTTP Cookie File
# https://curl.haxx.se/rfc/cookie_spec.html
https://your.domain.com FALSE / TRUE 0 SAP_SESSIONID_SYS_CLI YOUR_CONTENT
https://your.domain.com FALSE / TRUE 0 sap-usercontext YOUR_CONTENT
Replace the hostname, SYS with your system ID (e.g. DS1) and CLI with your client number (e.g. 100).
For BTP/Cloud based systems: Use cookies __VCAP_ID__ and JSESSIONID on your domain https://xyz.ondemand.com. This also works for BTP trial accounts. Also refer to this article.
Obtaining cookies from your browser session:
The easiest way to do so is to use Edge as it allows you to display cookie contents from its settings page. From there you can copy & paste them into the newly created cookies.txt file.
Open any transaction in WebDynpro or Fiori Launchpad. For older environments like ECC it should work with BRF+ transactions that open in a browser. Login with your credentials. Once logged in it’s a matter of extracting the created session cookies.
In Edge, go to Settings > Privacy, search and services > Cookies > See all cookies and site data. Search for your top-level domain. There should be two cookies for your system as described above (SAP_SESSIONID and sap-usercontext or VCAP_ID and JSESSIONID if your system is cloud-based). Copy the content values for each cookie to your local file and save.
The created cookies are session cookies. They will eventually expire after a timeout and the values in cookies.txt need to be updated. Usually Claude will tell you if this is the case.
Use the terminal with this command: ./vsp -s dev search "zcl_*" --type CLAS --max 50.
You will get prompted with a list of found objects if the connection could be established.
VSP works with 8 CLI coding agents — not just Claude! Full setup guides with config templates:
| Agent | LLM | Free? | Config |
|---|---|---|---|
| Gemini CLI | Gemini 2.5 Pro/Flash | Yes (1000 req/day) | .gemini/settings.json |
| Claude Code | Claude Opus/Sonnet 4.6 | No ($20+/mo) | .mcp.json |
| GitHub Copilot | Claude, GPT-5, Gemini | No ($10+/mo) | .copilot/mcp-config.json |
| OpenAI Codex | GPT-5-Codex, GPT-4.1 | No ($20+/mo) | .mcp.json |
| Qwen Code | Qwen3-Coder | Yes (1000 req/day) | .qwen/settings.json |
| OpenCode | 75+ models (BYOK) | Yes (own key) | opencode.json |
| Goose | 75+ providers (BYOK) | Yes (own key) | ~/.config/goose/config.yaml |
| Mistral Vibe | Devstral 2, local models | Yes (Ollama) | .vibe/config.toml |
Full setup guide with config examples | Русский | Українська | Español
vsp works in two modes:
- MCP Server Mode (default) - Exposes tools via Model Context Protocol for Claude
- CLI Mode - Direct command-line operations without MCP
# Search for ABAP objects
vsp -s a4h search "ZCL_*"
vsp -s dev search "Z*ORDER*" --type CLAS --max 50
# Get source code
vsp -s a4h source CLAS ZCL_MY_CLASS
vsp -s dev source PROG ZTEST_PROGRAM
# Export packages to ZIP (abapGit format)
vsp -s a4h export '$ZORK' '$ZLLM' -o packages.zip
vsp -s dev export '$TMP' --subpackages
# List configured systems
vsp systems
# Configuration management
vsp config init # Create example configs
vsp config show # Show effective configuration
vsp config mcp-to-vsp # Import from .mcp.json to .vsp.json
vsp config vsp-to-mcp # Export from .vsp.json to .mcp.jsonConfigure multiple SAP systems in .vsp.json:
{
"default": "dev",
"systems": {
"dev": {
"url": "http://dev.example.com:50000",
"user": "DEVELOPER",
"client": "001"
},
"a4h": {
"url": "http://a4h.local:50000",
"user": "ADMIN",
"client": "001",
"insecure": true
},
"prod": {
"url": "https://prod.example.com:44300",
"user": "READONLY",
"client": "100",
"read_only": true,
"cookie_file": "/path/to/cookies.txt"
}
}
}Password Resolution:
- Set via environment variable:
VSP_<SYSTEM>_PASSWORD(e.g.,VSP_DEV_PASSWORD) - Or use cookie authentication:
cookie_fileorcookie_string
Config Locations (searched in order):
.vsp.json(current directory).vsp/systems.json~/.vsp.json~/.vsp/systems.json
MCP Server Configuration
vsp --url https://host:44300 --user admin --password secret
vsp --url https://host:44300 --cookie-file cookies.txt
vsp --mode expert # Enable all 122 toolsexport SAP_URL=https://host:44300
export SAP_USER=developer
export SAP_PASSWORD=secret
export SAP_CLIENT=001# .env (auto-loaded from current directory)
SAP_URL=https://host:44300
SAP_USER=developer
SAP_PASSWORD=secret| Flag | Env Variable | Description |
|---|---|---|
--url |
SAP_URL |
SAP system URL |
--user |
SAP_USER |
Username |
--password |
SAP_PASSWORD |
Password |
--client |
SAP_CLIENT |
Client (default: 001) |
--mode |
SAP_MODE |
focused (default) or expert |
--cookie-file |
SAP_COOKIE_FILE |
Netscape cookie file |
--insecure |
SAP_INSECURE |
Skip TLS verification |
--terminal-id |
SAP_TERMINAL_ID |
SAP GUI terminal ID for cross-tool debugging |
--allow-transportable-edits |
SAP_ALLOW_TRANSPORTABLE_EDITS |
Enable editing transportable objects |
--allowed-transports |
SAP_ALLOWED_TRANSPORTS |
Whitelist transports (wildcards: A4HK*) |
--allowed-packages |
SAP_ALLOWED_PACKAGES |
Whitelist packages (wildcards: Z*,$TMP) |
Add to ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"abap-adt": {
"command": "/path/to/vsp",
"env": {
"SAP_URL": "https://your-sap-host:44300",
"SAP_USER": "your-username",
"SAP_PASSWORD": "your-password"
}
}
}
}Add .mcp.json to your project:
{
"mcpServers": {
"abap-adt": {
"command": "/path/to/vsp",
"env": {
"SAP_URL": "https://your-sap-host:44300",
"SAP_USER": "your-username",
"SAP_PASSWORD": "your-password"
}
}
}
}To work with transportable packages (non-$ prefixed), you must explicitly enable transport support:
{
"mcpServers": {
"abap-adt": {
"command": "/path/to/vsp",
"env": {
"SAP_URL": "https://your-sap-host:44300",
"SAP_USER": "your-username",
"SAP_PASSWORD": "your-password",
"SAP_CLIENT": "001",
"SAP_ALLOW_TRANSPORTABLE_EDITS": "true",
"SAP_ALLOWED_TRANSPORTS": "DEVK*,A4HK*",
"SAP_ALLOWED_PACKAGES": "ZPROD,$TMP,$*,Z*"
}
}
}
}| Env Variable | Purpose |
|---|---|
SAP_ALLOW_TRANSPORTABLE_EDITS |
Enable editing objects in transportable packages |
SAP_ENABLE_TRANSPORTS |
Enable full transport management (create, release) |
SAP_ALLOWED_TRANSPORTS |
Whitelist transport patterns (wildcards supported) |
SAP_ALLOWED_PACKAGES |
Whitelist package patterns (wildcards supported) |
CreatePackage with software component:
CreatePackage(
name="ZPROD_005",
description="Sub-package",
parent="ZPROD",
transport="DEVK900123",
software_component="HOME"
)
Without these flags, operations on transportable packages will be blocked by the safety system.
| Aspect | Focused (Default) | Expert |
|---|---|---|
| Tools | 52 essential | 99 complete |
| Token overhead | ~2,800 | ~8,000 |
| Use case | Daily development | Edge cases, debugging |
| Unified tools | GetSource, WriteSource | + granular Get*/Write* |
Focused mode consolidates 11 read/write tools into 2 unified tools, reducing cognitive load and token usage by 58%.
Enable expert mode: --mode=expert or SAP_MODE=expert
# ci-pipeline.yaml
name: CI Pipeline
vars:
package: "$TMP"
steps:
- action: search
query: "ZCL_*"
types: [class]
package: "{{ .package }}"
save_as: classes
- action: test
objects: "{{ .classes }}"
parallel: 4
- action: fail_if
condition: tests_failed
message: "Unit tests failed"vsp workflow run ci-pipeline.yaml --var package='$ZRAY'// Fluent search
objects, _ := dsl.Search(client).
Query("ZCL_*").Classes().InPackage("$TMP").Execute(ctx)
// Test orchestration
summary, _ := dsl.Test(client).
Objects(objects...).Parallel(4).Run(ctx)
// Batch import from directory (abapGit-compatible)
result, _ := dsl.Import(client).
FromDirectory("./src/").
ToPackage("$ZRAY").
RAPOrder(). // DDLS → BDEF → Classes → SRVD
Execute(ctx)
// Export classes with all includes
result, _ := dsl.Export(client).
Classes("ZCL_TRAVEL", "ZCL_BOOKING").
ToDirectory("./backup/").
Execute(ctx)
// RAP deployment pipeline
pipeline := dsl.RAPPipeline(client, "./src/", "$ZRAY", "ZTRAVEL_SB")See docs/DSL.md for complete documentation.
VSP supports full RAP OData E2E development since v2.6.0. Create complete OData services via AI assistant:
1. Create CDS View (DDLS)
WriteSource(
object_type="DDLS",
name="ZTRAVEL",
package="$TMP",
description="Travel Entity",
source=`
@EndUserText.label: 'Travel'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define root view entity ZTRAVEL as select from ztravel_tab {
key travel_id as TravelId,
description as Description,
start_date as StartDate,
end_date as EndDate,
status as Status
}
`
)
2. Create Behavior Definition (BDEF)
WriteSource(
object_type="BDEF",
name="ZTRAVEL",
package="$TMP",
description="Travel Behavior",
source=`
managed implementation in class ZBP_TRAVEL unique;
strict ( 2 );
define behavior for ZTRAVEL alias Travel
persistent table ztravel_tab
lock master
authorization master ( instance )
{
field ( readonly ) TravelId;
field ( mandatory ) Description;
create;
update;
delete;
mapping for ztravel_tab {
TravelId = travel_id;
Description = description;
StartDate = start_date;
EndDate = end_date;
Status = status;
}
}
`
)
3. Create Service Definition (SRVD)
WriteSource(
object_type="SRVD",
name="ZTRAVEL_SD",
package="$TMP",
description="Travel Service Definition",
source=`
@EndUserText.label: 'Travel Service'
define service ZTRAVEL_SD {
expose ZTRAVEL;
}
`
)
4. Create Service Binding (SRVB)
WriteSource(
object_type="SRVB",
name="ZTRAVEL_SB",
package="$TMP",
description="Travel OData V4 Binding",
service_definition="ZTRAVEL_SD",
binding_version="V4"
)
| Parameter | Values | Description |
|---|---|---|
binding_version |
V2, V4 |
OData protocol version |
binding_category |
0, 1 |
0=Web API, 1=UI |
Add transport parameter to all WriteSource calls:
WriteSource(
object_type="DDLS",
name="ZTRAVEL",
package="ZPROD",
transport="DEVK900123",
...
)
- RAP OData Lessons Report
- DSL Pipeline:
dsl.RAPPipeline(client, "./src/", "$PKG", "ZSRV_SB")
Run arbitrary ABAP code via unit test wrapper:
ExecuteABAP:
code: |
DATA(lv_msg) = |Hello from SAP at { sy-datum }|.
lv_result = lv_msg.
Risk levels: harmless (read-only), dangerous (write), critical (full access)
See ExecuteABAP Report for details.
vsp enables AI assistants to investigate production issues autonomously:
User: "Investigate the ZERODIVIDE crash in production"
AI Workflow:
1. GetDumps → Find recent crashes by exception type
2. GetDump → Analyze stack trace and variable values
3. GetSource → Read code at crash location
4. GetCallGraph → Trace call hierarchy
5. GrepPackages → Find similar patterns
6. Analysis → Identify root cause
7. Propose Fix → Generate solution + test case
Example Output:
"The crash occurs in
ZCL_PRICING=>CALCULATE_RATIOwhenLV_TOTAL=0. This happens for archived orders with no line items. Here's the fix..."
See AI-Powered RCA Workflows for the complete vision.
52 Focused Mode Tools:
- Search: SearchObject, GrepObjects, GrepPackages
- Read: GetSource, GetTable, GetTableContents, RunQuery, GetPackage, GetFunctionGroup, GetCDSDependencies
- Debugger: DebuggerListen, DebuggerAttach, DebuggerDetach, DebuggerStep, DebuggerGetStack, DebuggerGetVariables
- Note: Breakpoints now managed via WebSocket (ZADT_VSP)
- Write: WriteSource, EditSource, ImportFromFile, ExportToFile, MoveObject
- Dev: SyntaxCheck, RunUnitTests, RunATCCheck, LockObject, UnlockObject
- Intelligence: FindDefinition, FindReferences
- System: GetSystemInfo, GetInstalledComponents, GetCallGraph, GetObjectStructure, GetFeatures
- Diagnostics: GetDumps, GetDump, ListTraces, GetTrace, GetSQLTraceState, ListSQLTraces
- Git: GitTypes, GitExport (requires abapGit on SAP)
- Reports: RunReport, GetVariants, GetTextElements, SetTextElements
- Install: InstallZADTVSP, InstallAbapGit, ListDependencies
See README_TOOLS.md for complete tool documentation (122 tools).
Capability Matrix
| Capability | ADT (Eclipse) | abap-adt-api (TS) | vsp |
|---|---|---|---|
| Programs, Classes, Interfaces | Y | Y | Y |
| Functions, Function Groups | Y | Y | Y |
| Tables, Structures | Y | Y | Y |
| CDS Views | Y | Y | Y |
| Syntax Check, Activation | Y | Y | Y |
| Unit Tests | Y | Y | Y |
| CRUD Operations | Y | Y | Y |
| Find Definition/References | Y | Y | Y |
| Code Completion | Y | Y | Y |
| ATC Checks | Y | Y | Y |
| Call Graph | Y | Y | Y |
| System Info | Y | Y | Y |
| Surgical Edit (Edit pattern) | - | - | Y |
| File-based Deploy | - | - | Y |
| ExecuteABAP | - | - | Y |
| RAP OData (DDLS/SRVD/SRVB) | Y | - | Y |
| OData Service Publish | Y | - | Y |
| abapGit Export | Y | - | Y (WebSocket) |
| Debugging | Y | Y | N |
| Project | Author | Contribution |
|---|---|---|
| abap-adt-api | Marcello Urbani | TypeScript ADT library, definitive API reference |
| mcp-abap-adt | Mario Andreschak | First MCP server for ABAP ADT |
vsp is a Go rewrite with:
- Single binary, zero dependencies
- 62 tools (vs 13 original)
- ~50x faster startup
vsp can optionally deploy a WebSocket handler to SAP for enhanced functionality like RFC calls:
# 1. Create package
vsp CreatePackage --name '$ZADT_VSP' --description 'VSP WebSocket Handler'
# 2. Deploy objects (embedded in binary)
vsp WriteSource --object_type INTF --name ZIF_VSP_SERVICE --package '$ZADT_VSP' \
--source "$(cat embedded/abap/zif_vsp_service.intf.abap)"
vsp WriteSource --object_type CLAS --name ZCL_VSP_RFC_SERVICE --package '$ZADT_VSP' \
--source "$(cat embedded/abap/zcl_vsp_rfc_service.clas.abap)"
vsp WriteSource --object_type CLAS --name ZCL_VSP_APC_HANDLER --package '$ZADT_VSP' \
--source "$(cat embedded/abap/zcl_vsp_apc_handler.clas.abap)"
# 3. Manually create APC app in SAPC + activate in SICF
# See embedded/abap/README.md for detailsAfter deployment, connect via WebSocket to call RFCs:
{"id":"1","domain":"rfc","action":"call","params":{"function":"BAPI_USER_GET_DETAIL","USERNAME":"TESTUSER"}}See WebSocket Handler Report for complete documentation.
| Document | Description |
|---|---|
| docs/architecture.md | Architecture diagrams (Mermaid) |
| README_TOOLS.md | Complete tool reference (94 tools) |
| MCP_USAGE.md | AI agent usage guide |
| docs/DSL.md | DSL & workflow documentation |
| ARCHITECTURE.md | Technical architecture (detailed) |
| CLAUDE.md | AI development guidelines |
| embedded/abap/README.md | WebSocket handler deployment |
| docs/cli-agents/ | CLI coding agents setup guide (8 agents, 4 languages) |
| Roadmap: Quick/Mid/Far Wins | Prioritized feature backlog |
| Observations Since v2.12.5 | Recent changes & research summary |
SQL Query Notes
Uses ABAP SQL syntax, not standard SQL:
| Feature | Status |
|---|---|
ORDER BY col ASCENDING |
Works |
ORDER BY col DESCENDING |
Works |
ORDER BY col ASC/DESC |
FAILS - use ASCENDING/DESCENDING |
LIMIT n |
FAILS - use max_rows parameter |
# Build
make build # Current platform
make build-all # All 9 platforms
# Test
go test ./... # Unit tests (249)
go test -tags=integration -v ./pkg/adt/ # Integration tests (21+)Architecture
vibing-steampunk/
├── cmd/vsp/main.go # CLI (cobra/viper)
├── pkg/adt/
│ ├── client.go # ADT client + read ops
│ ├── crud.go # CRUD operations
│ ├── devtools.go # Syntax check, activate, tests
│ ├── codeintel.go # Definition, refs, completion
│ ├── workflows.go # High-level workflows
│ └── http.go # HTTP transport (CSRF, auth)
├── internal/mcp/server.go # MCP tool handlers (62 tools)
└── pkg/dsl/ # DSL & workflow engine
| Metric | Value |
|---|---|
| Tools | 122 (81 focused, 122 expert) |
| Unit Tests | 270+ |
| Platforms | 9 (Linux, macOS, Windows × amd64/arm64/386) |
Roadmap
- DSL & Workflow Engine
- CDS Dependency Analysis (
GetCDSDependencies) - ATC Code Quality Checks (
RunATCCheck) - ExecuteABAP (code injection via unit tests)
- System Info & Components (
GetSystemInfo,GetInstalledComponents) - Call Graph & Object Structure (
GetCallGraph,GetObjectStructure) - Short Dumps / Runtime Errors -
GetDumps,GetDump(RABAX) - ABAP Profiler / Traces -
ListTraces,GetTrace(ATRA) - SQL Trace -
GetSQLTraceState,ListSQLTraces(ST05) - RAP OData E2E - DDLS, SRVD, SRVB create + publish (v2.6.0)
- External Breakpoints - Line, exception, statement, message (v2.7.0)
- Debug Session - Listener, attach, detach, step, stack, variables (v2.8.0)
- Tool Group Disablement -
--disabled-groups 5THD(v2.10.0) - UI5/BSP Read -
UI5ListApps,UI5GetApp,UI5GetFileContent(v2.10.1) - Feature Detection -
GetFeaturestool + system capability probing (v2.12.4) - WriteSource SRVB - Create Service Bindings via unified API (v2.12.4)
- Call Graph & RCA - GetCallersOf, GetCalleesOf, TraceExecution (v2.13.0)
- Lua Scripting - REPL, 40+ bindings, debug session management (v2.14.0)
- WebSocket Debugging - ZADT_VSP handler, TPDAPI integration (v2.15.0)
- Force Replay - Variable history, state injection (v2.15.0)
- AMDP Debugger - Experimental: Session works, breakpoint triggering under investigation (Report)
- UI5/BSP Write - ADT filestore is read-only, needs custom plugin via
/UI5/CL_REPOSITORY_LOAD - abapGit Export - WebSocket integration complete (v2.16.0) - GitTypes, GitExport tools (Report)
- abapGit Import - Requires
ZCL_ABAPGIT_OBJECTS=>deserializewith virtual repository
- API Release State (ARS) - Contract stability checks
- Message Server Logs
- Background Job Management
- AMDP Session Persistence (enable full HANA debugging)
- Graph Traversal & Analysis (code dependency graphs)
- Test Intelligence (smart test execution based on changes)
- Standard API Surface Scraper
Research Reports:
- AMDP Session Architecture - Session binding analysis & solutions
- Native ADT Features - Comprehensive ADT capability analysis
- ADT Debugger API - External debugging REST API
- AI-Powered RCA - Vision for AI-assisted debugging
Automate debugging workflows with Lua scripts:
# Interactive REPL
vsp lua
# Run a script
vsp lua examples/scripts/debug-session.lua
# Execute inline
vsp lua -e 'print(json.encode(searchObject("ZCL_*", 10)))'Example: Set breakpoint and debug
-- Set breakpoint
local bpId = setBreakpoint("ZTEST_PROGRAM", 42)
print("Breakpoint: " .. bpId)
-- Wait for debuggee
local event = listen(60)
if event then
attach(event.id)
print("Stack:")
for i, frame in ipairs(getStack()) do
print(" " .. frame.program .. ":" .. frame.line)
end
stepOver()
detach()
endAvailable Functions:
- Search:
searchObject,grepObjects - Source:
getSource,writeSource,editSource - Debug:
setBreakpoint,listen,attach,detach,stepOver,stepInto,stepReturn,continue_,getStack,getVariables - Checkpoints:
saveCheckpoint,getCheckpoint,listCheckpoints,injectCheckpoint - Diagnostics:
getDumps,getDump,runUnitTests,syntaxCheck - Call Graph:
getCallGraph,getCallersOf,getCalleesOf - Utilities:
print,sleep,json.encode,json.decode
See examples/scripts/ for more examples.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 1. SET BREAKPOINT → 2. RUN PROGRAM → 3. CAPTURE CONTEXT │
│ setBreakpoint() (trigger via saveCheckpoint() │
│ on FM/method unit test/RFC) for each hit │
├─────────────────────────────────────────────────────────────────────────────┤
│ 4. EXTRACT TEST CASES → 5. AI NORMALIZE → 6. GENERATE UNIT TESTS │
│ inputs + outputs deduplicate, ABAP Unit classes │
│ from checkpoints explain patterns with mocks │
└─────────────────────────────────────────────────────────────────────────────┘
-- Step 1: Set breakpoint on function module entry
local bpId = setBreakpoint("SAPL<FGROUP>", 10) -- Entry point
-- Step 2: Prepare to capture multiple executions
local captures = {}
-- Step 3: Loop to capture test cases
for i = 1, 10 do
local event = listen(120) -- Wait for debuggee
if not event then break end
attach(event.id)
-- Capture input parameters at entry
local vars = getVariables()
local testCase = {
id = i,
inputs = extractInputs(vars), -- IV_*, IT_*, IS_*
timestamp = os.time()
}
-- Step to end to capture outputs
continue_()
local event2 = listen(5)
if event2 then
attach(event2.id)
testCase.outputs = extractOutputs(getVariables()) -- EV_*, ET_*, ES_*, RETURN
end
-- Save checkpoint for replay
saveCheckpoint("testcase_" .. i, testCase)
table.insert(captures, testCase)
detach()
end
-- Step 4: Export for AI processing
print(json.encode(captures))After capturing test cases, AI can:
- Normalize & Deduplicate - Group similar inputs, identify unique scenarios
- Explain Patterns - "TestCase 3 tests error path when IV_AMOUNT < 0"
- Generate Unit Tests - Create ABAP Unit test class with proper mocks
User: "Analyze captured test cases and generate unit tests"
AI Workflow:
1. Load checkpoints → listCheckpoints("testcase_*")
2. Analyze patterns → Cluster by input signatures
3. Identify edge cases → Empty tables, zero values, error conditions
4. Generate mock specs → Which FMs/DB tables need mocking
5. Create ABAP Unit → ZCL_TEST_<FM> with test methods
6. Deploy tests → WriteSource to SAP system
| Feature | Status | Command/Function |
|---|---|---|
| Set breakpoints | ✅ | setBreakpoint(program, line) |
| Listen for debuggee | ✅ | listen(timeout) |
| Attach/detach | ✅ | attach(id), detach() |
| Step execution | ✅ | stepOver(), stepInto(), continue_() |
| Get variables | ✅ | getVariables() |
| Get stack trace | ✅ | getStack() |
| Save checkpoints | ✅ | saveCheckpoint(name, data) |
| Load checkpoints | ✅ | getCheckpoint(name) |
| Call graph analysis | ✅ | getCallersOf(), getCalleesOf() |
| Short dump analysis | ✅ | getDumps(), getDump(id) |
| Feature | Phase | Description |
|---|---|---|
| Variable history recording | 5.2 | ✅ Track all variable changes during execution |
| Force Replay (state injection) | 5.5 | ✅ Inject saved state into live debug session |
| Test case extraction | 6.1 | Automated input/output extraction from recordings |
| ABAP test generator | 6.3 | Generate ABAP Unit classes from test cases |
| Mock framework | 6.4 | ZCL_VSP_MOCK for DB/RFC mocking |
| Isolated playground | 7.1 | Fast test execution with mocked dependencies |
| Time-travel debugging | 8.1 | Navigate backwards through execution |
| Document | Description |
|---|---|
| VISION.md | The dream: AI as a senior developer |
| ROADMAP.md | Detailed implementation timeline |
| TAS & Scripting | Technical design for TAS-style debugging |
| Test Extraction | Playground and mock architecture |
| Force Replay | State injection design |
| Implications Analysis | Paradigm shift: archaeology → observation |
| AI-Powered RCA | Root cause analysis workflows |
Where we're going: TAS-style debugging, time-travel, AI-powered RCA
| Phase | Target | Features |
|---|---|---|
| 5 | Q1 2026 | Lua scripting ✅, variable history, checkpoints, Force Replay |
| 6 | Q2 2026 | Test case extraction, ABAP test generator, mock framework |
| 7 | Q3 2026 | Isolated playground with mocks, patch & re-run |
| 8 | Q4 2026 | Time-travel debugging, temporal queries |
| 9+ | 2027 | AI-suggested breakpoints, multi-agent debugging, self-healing |
Read more:
- VISION.md - The dream: AI as a senior developer
- ROADMAP.md - Detailed implementation plan
- TAS & Scripting Report - Full technical design
- Test Extraction Report - Playground architecture
MIT
Contributions welcome! See ARCHITECTURE.md and CLAUDE.md for guidelines.
