abap-adt-mcp
Connects AI clients to SAP ABAP ADT to search, inspect, edit, and activate ABAP objects.
Test SAP ADT connectivity and see the logged-in user/security mode.
Search ABAP objects by wildcard/type and browse package contents.
Get object structure and read source code with line numbers and line-range reads.
Run syntax checks without locking or modifying the system.
List available modifiable transport requests.
Write source with automatic lock/unlock, optional concurrency check, syntax check, and optional activation.
Activate ABAP objects and return activation results/errors.
When configured, respects read-only/prod-read-only safety and name/package whitelists.
Allows AI agents to connect to SAP ABAP Development Tools (ADT) REST API, providing tools for reading and writing ABAP source code, syntax checking, activating objects, searching, browsing packages, and managing transports, with built-in safety features for production systems.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@abap-adt-mcp search for Z* objects in package ZMYPACKAGE"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
abap-adt-mcp
讓 Claude Code / Codex 直接連接 SAP ABAP ADT(ABAP Development Tools)REST API 的獨立 MCP server —— 不需要 VS Code、不需要 Eclipse,且具備完整讀寫能力。
Claude Code ◄── stdio (MCP) ──► abap-adt-mcp ◄── HTTPS (ADT REST) ──► SAP 系統為什麼做這個?
vscode_abap_remote_fs 是很棒的專案,但它的 MCP 模式有兩個限制:必須開著 VS Code 作為橋接層,而且 MCP 工具是唯讀的。市面上其他 standalone 方案則多半把 ADT API 一對一薄包裝,把 lock/unlock 等底層步驟直接丟給 AI 操作,容易出錯並留下殘留鎖定。
本專案的設計理念:封裝成「AI 友善」的高階工作流程工具。
write_source一個工具內部自動完成:讀取現況 → 並行衝突檢查 → 語法檢查 → lock → 寫入 → unlock(try/finally 保證釋放)錯誤訊息經過翻譯,附帶可行動的建議(例如「請檢查 SICF 節點 /sap/bc/adt」),AI 能自行修正
安全優先:唯讀模式、prod 系統強制唯讀、Z*/Y* 前綴白名單、audit log
Related MCP server: abap-adt-mcp
功能
AI 可以在 $TMP 從零完成「建立 → 寫 → 啟用 → ABAP Unit → ATC」,全程不需要 SAP GUI 或 Eclipse。
工具 | 說明 |
| 連線測試與診斷(每次實際連線,顯示回應時間與版本) |
| 萬用字元搜尋 ABAP 物件 |
| 瀏覽 package 內容 |
| 物件結構(methods / includes) |
| 讀取原始碼(含行號、分段讀取、截斷保護;含 class 的測試 include) |
| 語法檢查(免鎖定) |
| 查詢可用 transport requests |
| 執行 ATC 靜態檢查(依優先級分組,上限 100 筆) |
| 查詢物件或元件的使用處(含程式碼行,上限 50 筆) |
| 跳到定義 / 實作 |
| 列出 class / interface 的方法、屬性、介面、本地類別 |
| DDIC 定義:表與 CDS 欄位、結構、資料元素、domain(含固定值) |
| ST22 短傾印列表(依天數、使用者篩選) |
| 短傾印內容與出錯位置(以 source/main 為準的行號;不含變數內容) |
| 以系統 Pretty Printer 設定格式化原始碼(不寫回) |
| 目前使用者的 inactive 物件 |
| 版本歷史與兩版比較(unified diff) |
| 🔒 讀取資料表內容:單表或單一 SELECT;預設不註冊,需 |
| ✏️ 寫入原始碼(自動鎖定編排 + 並行保護 + 語法檢查 + 可選啟用;可寫測試 include) |
| ✏️ 啟用物件 |
| ✏️ 批次啟用(每個物件都要通過兩道白名單,任一不過整批拒絕) |
| 列出已連結的 abapGit repo(只讀;系統沒有 abapGit ADT 後端時回報說明。不提供 pull / push,理由見 SECURITY.md) |
| ✏️ 建立 CLAS/OC、INTF/OI、PROG/P、DDLS/DF、BDEF/BDO、TABL/DT(資料表) |
| ✏️ 由資料表產生 RAP BO 與 OData V4 UI 服務(約 14 個物件):預設只預覽, |
| ⚠️ 會執行測試程式碼:ABAP Unit(物件或 package;只跑宣告為 RISK LEVEL HARMLESS 的測試)。與 |
| ⚠️ 會在 SAP 系統上執行程式:執行 IF_OO_ADT_CLASSRUN(輸出上限 20,000 字元) |
| ✏️ 建立 workbench transport request(只在 |
✏️ / ⚠️ = 寫入或執行類工具,唯讀模式下不會註冊(AI 完全看不到),且必須通過名稱前綴與 package 兩道白名單。 🔒 = 資料讀取工具,預設關閉;開啟後唯讀模式也可用(只讀資料)。
v0.4 起還能診斷:AI 可以讀 DDIC 結構、查資料、從 ST22 短傾印定位出錯行號後自己修正,再用 run_class 驗證。
v0.5 起可以從一張表做到 Fiori:create_object(TABL/DT)→ write_source 定義欄位 → rap_generate 預覽 → 確認後產生並發佈 → 在 Eclipse 開 service binding 按 Preview。
Prompts 與 Resources(v0.5)
類型 | 名稱 | 用途 |
prompt |
| 依 Clean ABAP 要點審查一個物件,列出問題與建議(預設不修改) |
prompt |
| 建立(或沿用)一張 Z 資料表,再用 RAP 產生器產生 BO 與 Fiori 服務(先預覽、確認後才產生) |
prompt |
| 從 ST22 短傾印找出原因、修正程式並用 |
resource |
| 目前設定下可寫入的名稱前綴與 package |
resource |
| 目前啟用的安全設定(不含密碼) |
resource |
| Clean ABAP 重點摘要(連結到 SAP 官方 styleguide) |
唯讀模式下 prompts 與 resources 一樣可用。
系統需求
Node.js ≥ 20
SAP 系統已啟用 ADT(SICF 節點
/sap/bc/adt)— 已在 S/4HANA 2022 / ABAP 7.56 上以此為目標開發SAP 使用者具備開發權限(S_DEVELOP)
快速開始(Claude Code)
# 1. 安裝
git clone https://github.com/<your-account>/abap-adt-mcp.git
cd abap-adt-mcp
npm install && npm run build
# 2. 註冊到 Claude Code(密碼建議用環境變數帶入,勿寫死)
claude mcp add abap \
--env SAP_URL=https://your-sap-host:44300 \
--env SAP_CLIENT=100 \
--env SAP_USER=DEVELOPER \
--env SAP_PASSWORD="$SAP_PASSWORD" \
--env ABAP_MCP_SYSTEM_ROLE=dev \
-- node /絕對路徑/abap-adt-mcp/dist/index.js
# 3. 在 Claude Code 中測試
# > 請用 ping_system 確認 SAP 連線本機 ABAP Cloud Developer Trial(A4H,Windows PowerShell)
Trial 容器的 ADT 走本機 HTTP port 50000(http:// 只允許 localhost / 127.0.0.1 / ::1,遠端主機必須用 https):
# 密碼以隱藏輸入放進目前 PowerShell session,不進 history
$p = Read-Host "SAP 密碼" -AsSecureString
$env:SAP_PASSWORD = [System.Net.NetworkCredential]::new("", $p).Password
claude mcp add abap-a4h `
--env SAP_URL=http://localhost:50000 `
--env SAP_CLIENT=001 `
--env SAP_USER=DEVELOPER `
--env "SAP_PASSWORD=$env:SAP_PASSWORD" `
--env SAP_LANGUAGE=EN `
--env ABAP_MCP_SYSTEM_ROLE=dev `
-- node C:\path\to\abap-adt-mcp\dist\index.jsPowerShell 的換行符號是反引號 `(行尾不可有空白)。密碼含 #、$、" 等特殊字元時,用上面的 "SAP_PASSWORD=$env:SAP_PASSWORD" 寫法即可,不需另外跳脫。
詳細設定(含 Codex、自簽憑證、唯讀模式)請見 docs/SETUP.md。
環境變數
變數 | 必填 | 預設 | 說明 |
| ✅ | — | 例如 |
| ✅ | — | SAP 帳密(僅從環境變數讀取) |
|
| 例如 | |
|
| 登入語言 | |
|
|
| |
|
|
| |
|
| 可寫入的物件名稱前綴白名單 | |
|
| 可寫入/建立/執行物件所在的 package 白名單( | |
|
|
| |
|
|
| |
|
| 允許自簽憑證(限內網開發系統) | |
| (停用) | 寫入操作稽核紀錄檔路徑 | |
|
|
|
安全設計
AI 直接寫入 SAP 系統風險很高,本專案內建多層防護,詳見 docs/SECURITY.md:
唯讀模式 — 寫入工具不註冊,而非「註冊後拒絕」
prod 強制唯讀 — 設定
ABAP_MCP_SYSTEM_ROLE=prod後無法以任何方式覆寫前綴白名單 — 預設僅允許
Z*/Y*/$(本機物件),保護 SAP 標準物件package 白名單 — 預設僅允許
$TMP、Z*、Y*package;寫入、建立、執行都要同時通過名稱與 package 兩道白名單並行保護 — 寫入前比對先前讀取的版本,避免蓋掉他人變更;寫入類操作在 process 內依序執行
寫入前語法檢查 — 預設不讓語法錯誤的程式碼進系統
Audit log — JSON Lines 紀錄所有寫入、建立、執行操作(不含憑證與原始碼內容)
鎖定保證釋放 — try/finally,不留殘留鎖定,也不讓連線卡在 stateful
401 斷路 — 連續 2 次認證失敗後停止連線 SAP,避免重試把帳號鎖住
資料讀取預設關閉 —
data_preview需明確開啟;只接受單一 SELECT、每張表都要在表白名單內、audit 不記資料內容短傾印不帶出變數內容 —
dump_detail只取除錯需要的章節,不含 Selected VariablesRAP 產生兩段式 —
rap_generate預設只預覽;確認時預覽清單中每個物件都要過白名單,任一不過整批拒絕abapGit 只讀 — 不提供 pull / push(會覆寫系統物件或把程式碼送出系統)
開發
npm run build # tsc 編譯
npm test # vitest 單元測試(不需 SAP 系統)
npm run test:it # 整合測試唯讀組(連 .env 設定的 SAP 系統)
npm run test:it:write # 整合測試唯讀 + 寫入組(只在 $TMP 建暫存 class,測完刪除)整合測試會讀取專案根目錄的 .env(見 .env.example),PowerShell 與 bash 指令相同。寫入組含 RAP 產生(T34),A4H 熱機約需 3–4 分鐘。
跨模型評測(v0.5)
eval/tasks/*.yaml 有 8 個實際開發任務(讀懂 class、修語法錯誤、寫 unit test、修短傾印、清 ATC、產生 RAP、查資料、跨 class 重新命名)。評測以 headless Claude Code 執行,只載入本 MCP server 的工具,自動判定成敗並清除暫存物件:
npm run build
npm run eval -- --help # 說明(不連 SAP、不呼叫模型)
npm run eval -- --dry-run # 只驗證事前準備、判定與清除,不呼叫模型
npm run eval -- --model sonnet # 8 題 × 1 個模型(依模型收費)
npm run eval -- --model opus,sonnet,haiku --matrix # 多模型矩陣(需明確加 --matrix)結果寫到 eval/results/<日期>.md 與 .csv(題目 × 模型:成敗、回合、秒數、費用、工具呼叫次數與總計)。原始記錄在 eval/results/logs/,不入版控。密碼只經環境變數傳給子行程,不寫進任何檔案。Codex / Gemini 目前只有轉接介面,本版未實作。
Roadmap
Phase 2:create_object、ABAP Unit 測試、ATC、where-used(v0.3 完成)Phase 3:SQL 資料查詢(Data Preview)、ST22 dump 分析、DDIC 資訊(v0.4 完成)Phase 3.5:RAP 產生器、資料表建立、prompts / resources、跨模型評測(v0.5 完成)Phase 4:BTP ABAP Environment(JWT / Service Key)
致謝
abap-adt-api(Marcello Urbani, MIT)— 本專案的 ADT 存取底層
vscode_abap_remote_fs — 架構與工具設計的重要參考
License
MIT
Available Tools
9 toolsactivate_object啟用物件C
啟用(activate)指定的 ABAP 物件,回傳啟用結果與錯誤訊息(若有)。
Inputs: object_url (required), object_name.
browse_package瀏覽 Package 內容B
列出指定 package(開發類別)內的所有物件,例如 ZFI_TOOLS 或 $TMP。
Inputs: package_name (required).
get_object_structure取得物件結構A
取得 ABAP 物件的結構資訊(class 的 methods/includes、program 的組成等)與 source URI。
Inputs: object_url (required).
list_transports查詢 Transport RequestsA
列出使用者可用的(modifiable)workbench transport requests,供 write_source 指定使用。
Inputs: user.
ping_system測試 SAP 連線A
測試與 SAP 系統的 ADT 連線是否正常,回傳系統 URL、登入帳號與目前的安全模式。連線異常時會回傳診斷建議。建議在開始任何工作前先呼叫一次。
Inputs: no named parameters.
read_source讀取原始碼A
讀取 ABAP 物件的原始碼。可傳入物件 URI(自動解析 main include)或完整 source URI。回傳內容含行號,超過上限時會截斷並標註。
Inputs: object_url (required), end_line, start_line.
search_objects搜尋 ABAP 物件A
以名稱(支援 * 萬用字元)搜尋 ABAP 物件,例如 'ZCL_INVOICE*'。回傳物件名稱、類型、package 與 ADT URI(後續工具皆以此 URI 操作)。
Inputs: query (required), max_results, object_type.
syntax_check語法檢查A
對指定的原始碼內容執行 ABAP 語法檢查(不需要鎖定、不會修改系統)。可用來在寫入前先驗證修改後的程式碼。
Inputs: object_url (required), source.
write_source寫入原始碼(自動鎖定)A
修改 ABAP 物件的原始碼。內部自動完成:讀取現況 → 並行檢查 → 鎖定 → 寫入 → 解鎖,失敗時保證釋放鎖定。建議流程:先 read_source 取得現況,修改後將舊內容放入 expected_current_source 以啟用並行保護,再呼叫本工具。預設會先做語法檢查,有語法錯誤時不寫入。
Inputs: new_source (required), object_url (required), activate, transport, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
All 9 tools have clearly distinct purposes, from system testing and searching to reading, writing, syntax checking, and activating objects. There is no overlap or ambiguity between any tools.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., activate_object, list_transports, syntax_check). No mixing of conventions or irregular names.
With 9 tools, the set is well-scoped for an ABAP development server, covering the essential workflow without being bloated or sparse. Each tool has a clear role.
The tools cover the core lifecycle: search, browse, read, write, syntax check, activate, transport management, and system ping. Minor gaps like delete or rename operations are missing, but the primary workflow is complete.
Maintenance
Related MCP Connectors
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Read and write Sage Intacct from Claude or ChatGPT. Write tools are flagged for approval.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.522MIT
- AlicenseAqualityDmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.24576 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to work with SAP ABAP systems through the ADT REST API, supporting repository search, source code read/write, activation, syntax checks, and transport request management.1Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables Claude Code to connect to SAP systems via ADT, allowing it to search ABAP objects, read source code, run read-only SQL queries, and check connection status.-