dsh-abap-mcp
dsh-abap-mcp
⚠️ Experimentelle Phase · EXPERIMENTAL
Dieses Plugin befindet sich noch in der experimentellen Phase (Experimental) und ist nur für Entwicklungs-/Testumgebungen (Dev/Test) gedacht.
Nicht direkt an Produktionssysteme anschließen. Auch wenn standardmäßig nur lesend, können die schreibgeschützten Tools den Quellcode und die Geschäftsdaten des Produktionssystems lesen.
Verwenden Sie ein SAP-Konto mit minimalen Rechten (least-privilege).
Die Schreibberechtigungen (
sourceWrite/transports/refactor/exec/git/debug/serviceBinding) sind standardmäßig alle deaktiviert und sollten nur bei Bedarf und vorsichtig auf Entwicklungssystemen aktiviert werden.Das Passwort wird im Klartext in die lokale
settings.yamlgeschrieben. Achten Sie auf die Sicherheit der Anmeldedaten.Mit der Nutzung dieses Plugins bestätigen Sie, dass Sie die oben genannten Risiken kennen und die Konsequenzen selbst tragen.
DeepSeek Harness Plugin: Verbindet über MCP mit SAP ABAP ADT und ermöglicht das direkte Abfragen/Lesen von ABAP-Objekten in SAP innerhalb von DSH. Standardmäßig strikt schreibgeschützt, mit 7 Kategorien von Schreibberechtigungen als konfigurierbare Schalter.
Upstream-Server: mario-andreschak/mcp-abap-abap-adt-api Dieses Plugin enthält in
server/eine mit einer Berechtigungsschicht versehene Kopie des Servers (standardmäßig schreibgeschützt + Schalter) und ist für die Verbindung, die Registrierung der Tools und die erneute Verbindung bei Einstellungsänderungen verantwortlich.
Architektur
DSH 设置页卡片(ABAP MCP)
│ settingsScope.set(...) ←→ settings/updated
▼
Host 插件 lib/index.js
1. settings.register("abap-mcp", schema) # 连接配置 + 7 类权限开关 + 状态
2. spawn `node server/dist/index.js`(StdioClientTransport,env=SAP_* + MCP_ABAP_PERMISSIONS)
3. MCP Client 连接,把服务器工具注册为 mcp__abap__<tool>
4. 配置变更 → 去抖重连;连接断开 → 有界退避重试
▼
server/dist/index.js(MCP 服务器,权限在这里强制生效)
- MCP_ABAP_PERMISSIONS 未设置 → 默认只读(约 75 个只读工具)
- 7 类写权限通过 MCP_ABAP_PERMISSIONS 的 JSON 开关启用Die einzige Quelle der Wahrheit für Berechtigungen liegt auf der Serverseite: Der Host leitet nur die Schalterwerte an den Server weiter; die Tool-Liste und Aufrufe werden nach Berechtigungen gefiltert/abgelehnt. Selbst wenn jemand DSH umgeht und sich direkt mit dem Server verbindet, bleiben die Berechtigungen wirksam.
Tool-Namensgebung:
mcp__abap__<Toolname>(z. B.mcp__abap__searchObject).
Related MCP server: vibing-steampunk
Berechtigungsmodell (Standard = strikt schreibgeschützt)
Das Berechtigungsmodell wird auf der Serverseite erzwungen (server/src/permissions.ts → dist/permissions.js). Der schreibgeschützte Kern ist standardmäßig immer aktiviert; die 7 Kategorien von Schreibberechtigungen sind standardmäßig alle deaktiviert und werden über die Umgebungsvariable MCP_ABAP_PERMISSIONS pro Kategorie aktiviert. Nicht registrierte Tools werden standardmäßig abgelehnt (deny-by-default); neu hinzugefügte Handler werden nicht stillschweigend freigeschaltet.
Schreibgeschützter Kern (~75 Tools, immer aktiviert)
Untergruppe | Tools | Beschreibung |
Authentifizierung / Sitzung |
| Anmelden / Abmelden / Lokalen Sitzungscache löschen |
Objektentdeckung |
| Objektstruktur abfragen / Suchen / Pfad finden / Objekttypen / Wiedereintritts-Ticket |
Klassen-Introspektion |
| Include-Zusammensetzung der Klasse / Komponentenliste |
Codeanalyse (schreibgeschützt) |
| Syntaxprüfung / Vervollständigung / Definition springen / Referenzabfrage / Korrekturvorschläge / Dokumentation (schreibgeschützt) |
Quellcode lesen |
| Objektquellcode lesen |
Inaktive Objekte |
| Inaktive Objekte auflisten |
Registrierung / Validierung |
| Objektregistrierungsinformationen / Parameterprüfung für neue Objekte (schreibgeschützt) |
Transport lesen |
| Transportanforderungsinformationen / Benutzertransporte / Konfiguration / Systembenutzer (schreibgeschützt) |
Repository-Browsing |
| Objektbaum durchsuchen / Include-Hauptprogramme |
Funktionen / Entdeckung |
| ADT-Fähigkeitserkennung / Funktionsabfrage |
Unit-Test-Ergebnisse lesen |
| Unit-Test-Ergebnisse auswerten / Markierungspositionen (schreibgeschützt) |
Formatierungseinstellungen lesen |
| Formatierungseinstellungen lesen (ohne Änderung) |
Git lesen |
| Repository-Liste / Remote-Informationen / Prüfung (schreibgeschützt) |
DDIC lesen |
| Annotationen / DDIC-Elemente / Paketsuche (schreibgeschützt) |
Service-Bindungsdetails |
| Service-Bindungsdetails (schreibgeschützt) |
Daten lesen |
| Tabellendaten / SQL-Abfrage (schreibgeschützt) |
Feeds / Dumps |
| Dynamische Objektliste / Kurzdump-Liste (Dumps) |
Umbenennungsanalyse |
| Umbenennungsbewertung / Vorschau (nur ausführen, nicht speichern) |
ATC lesen |
| ATC-Prüfkonfiguration / Varianten / Arbeitslisten / Benutzer / Kontakte (schreibgeschützt) |
Tracing lesen |
| Trace-Liste / Anforderungen / Treffer / DB-Zugriffe / Anweisungen (schreibgeschützt) |
Revisionen / Gesundheit |
| Objekt-Revisionshistorie / Verbindungs-Healthcheck |
7 Kategorien von Schreibberechtigungen (standardmäßig alle deaktiviert)
Schalter | Unterkategorie | Werkzeuge | Beschreibung |
| Quellcode-Schreiben |
| Quellcode schreiben / Objekt löschen / aktivieren / Objekt anlegen / Test-Include anlegen / sperren und entsperren |
| Transport-Anfragen |
| Anlegen / Konfigurieren / Löschen / Freigeben / Verantwortlichen ändern / Benutzer hinzufügen |
| Refactoring |
| Umbenennen ausführen / Methode extrahieren (Bewertung/Vorschau/Ausführung) / Formatieren (Lesen/Schreiben) |
| Ausführung |
| ABAP-Klasse ausführen / Unit-Tests ausführen |
ATC-Schreiboperationen |
| ATC-Prüfung starten / Ausnahme vorschlagen / Ausnahme beantragen / Kontakt ändern | |
Trace-Konfiguration |
| Trace-Parameter setzen / Konfiguration anlegen / Konfiguration löschen / Einträge löschen | |
| Git-Schreiboperationen |
| Repository anlegen / Pull / Verknüpfung aufheben / Staging / Push / Branch wechseln |
| Debugging |
| Lauschen / Breakpoints / Anhängen / Einzelschritt / Stack / Variablen lesen und schreiben |
| Service-Bindung |
| OData-Service-Bindung veröffentlichen / Veröffentlichung aufheben |
Hinweis: Die „ATC lesen", „Trace lesen", „Git lesen" und „Transport lesen" im schreibgeschützten Kern sind nur zum Lesen gedacht; nur die Schreibwerkzeuge in den entsprechenden Kategorien (Prüfung starten, Konfiguration ändern, Code pushen, Service veröffentlichen usw.) benötigen eine Berechtigung. Vor dem Umbenennen ist nur die Vorschau (
renameEvaluate/renamePreview) schreibgeschützt; erst die tatsächliche Ausführung (renameExecute) benötigtrefactor.
Manuelle Bestätigung der Berechtigungen (verhindert, dass KI Berechtigungen selbst aktiviert)
Beim Aktivieren beliebiger Berechtigungsschalter verlangt das Plugin eine manuelle Bestätigung: Beim Ankreuzen der Karte auf der Einstellungsseite wird ein einmaliger Bestätigungsnachweis (confirm-<Zeitstempel>-<Zufallszeichenfolge>) generiert und in die Konfiguration geschrieben. Die Host-Seite erlaubt die Verbindung im entsprechenden Modus nur, wenn der Nachweis frisch (innerhalb von 60 Sekunden) und formatkorrekt ist; andernfalls wird zwangsweise auf schreibgeschützt zurückgefallen und im Status der Hinweis „Manuelle Bestätigung auf der Einstellungskarte erforderlich" angezeigt. Dieser Mechanismus deckt alle 7 Kategorien von Berechtigungsschaltern ab (sourceWrite / transports / refactor / exec / git / debug / serviceBinding) und behandelt sie gleich.
Berechtigungen können nur über die Karte auf der Einstellungsseite aktiviert werden. Das Aktivieren über die
settings-API / direktes Ändern vonsettings.yaml/ das Auffordern des Modells im Dialog,permissionszu ändern, wird wegen fehlender gültiger Nachweise abgelehnt.Der Nachweis hat eine Gültigkeit von 60 Sekunden und läuft nach einem Neustart automatisch ab; er muss dann erneut über die Karte erzeugt werden.
Das Deaktivieren aller Berechtigungen (zurück auf komplett aus) erfordert keine Bestätigung und ist immer erlaubt.
Installation
Von npm (offizielles Paket)
dsh plugin add @xiaobanli/dsh-abap-mcpLokales Verzeichnis (Entwicklung/Integration)
Fügen Sie in der package.json des Profils die Abhängigkeit hinzu und führen Sie pnpm install aus:
{
"dependencies": {
"@xiaobanli/dsh-abap-mcp": "link:C:/othersoftware/harness/harness/project6/dsh-abap-mcp"
},
"dsh": { "profile": { "bundles": [ "...", "dsh-abap-mcp" ] } }
}Nach dem Neustart von DSH erscheint auf der linken Seite der Einstellungsseite die Karte „ABAP MCP".
Konfiguration (Karte auf der Einstellungsseite)
Vorbereitung (bitte vor der Verbindung prüfen)
Auf SAP-Seite muss der ADT-Dienstknoten im Transaktionscode SICF aktiviert werden: Das Plugin greift über den HTTP(S)-Dienst der ABAP Development Tools (ADT) auf SAP zu. Wenn die zugehörigen ADT-Dienstknoten nicht aktiviert sind, schlägt die Verbindung fehl. In der Regel genügt es, in SICF
default_host/sap/bc/adtund seine Unterknoten zu aktivieren (die konkreten Knoten variieren je nach Systemversion).SAP-Adressformat: Meistens
http://Adresse:Portoderhttps://Adresse:Port(bei einigen neueren Versionen/Gateway-Konfigurationen auch der vollständige Pfadhttp://Adresse:Port/sap/bc/adt). Bitte bestätigen Sie Protokoll und Port anhand des tatsächlichen Systems, z. B.http://10.0.0.1:8000oderhttps://sap.example.com:44300.
Feld | Beschreibung |
Verbindung aktivieren | Hauptschalter; bei deaktiviert keine Verbindung und keine Werkzeugregistrierung |
SAP-Adresse | z. B. |
Benutzername / Passwort | Verbindungsnachweise |
Mandant / Sprache | z. B. |
7 Schreibberechtigungsschalter | Ankreuzen aktiviert die entsprechende Schreibfunktion |
Nach dem Speichern verbindet sich der Host automatisch neu; Sie können auch direkt im Dialog das Modell nach abap_mcp_status fragen, um den Verbindungsstatus zu prüfen.
Schaltfläche „Verbindung testen": Speichert zunächst das aktuelle Formular, führt dann mit der aktuellen Konfiguration einen echten Spawn → Verbindung → Werkzeugaufzählung → Trennung durch. Das Ergebnis (Erfolg/Fehler, Dauer, Anzahl der Werkzeuge) wird neben der Schaltfläche angezeigt; der Schalter „Verbindung aktivieren" wird dabei nicht verändert.
Wenn SAP-Adresse / Benutzername / Passwort nicht ausgefüllt sind, zeigt die Schaltfläche direkt „Bitte zuerst Konfiguration ausfüllen" an und führt keinen leeren Testlauf durch.
Während des Tests zeigt die Schaltfläche „Test läuft…"; nach 60 Sekunden ohne Ergebnis wird automatisch ein Timeout angenommen und gemeldet.
Das Testergebnis (
status.lastTest) wird dauerhaft neben der Schaltfläche angezeigt und wird nicht durch den Neuverbindungsstatus überschrieben.Der Test ist eine einmalige Aktion: Er löst keine dauerhafte Verbindung oder automatische Neuverbindung aus; ein fehlgeschlagener Test führt auch nicht in den Backoff-Wiederholungsmodus. Nur bei Konfigurationsänderungen (Aktivierungsschalter/Verbindungsfelder/Berechtigungen) werden eine dauerhafte Verbindung und begrenzte Neuverbindungen ausgelöst (maximal 5 Versuche, danach wird aufgegeben).
Server erstellen (nach Änderungen an server/)
cd server
npm install --ignore-scripts # 依赖均为纯 JS,无需生命周期脚本
node node_modules/typescript/bin/tsc -p tsconfig.json # 产出 dist/Fehlerbehebung (Troubleshooting)
„Verbindung testen" zeigt dauerhaft „Test läuft…" oder reagiert nicht auf Klicks
Meistens wurde die Einstellung nicht erfolgreich auf die Festplatte geschrieben. Stellen Sie sicher, dass SAP-Adresse / Benutzername / Passwort ausgefüllt sind; das Plugin schreibt die Einstellungen zurück in die lokale
settings.yaml.Wenn es wiederholt hängen bleibt, prüfen Sie im DSH-Log auf
SettingsConflictError(Einstellungs-Revisionskonflikt, der dazu führt, dass der Schreibvorgang verworfen wird) – starten Sie DSH neu und versuchen Sie es erneut.
Verbindung meldet McpError: Connection closed
Der Desktop-Host läuft in Electron; der Unterprozess muss im Node-Modus gestartet werden (das Plugin setzt automatisch
ELECTRON_RUN_AS_NODE=1).Falls es weiterhin auftritt, stellen Sie sicher, dass
server/dist/index.jsexistiert (wenn derserver/-Quellcode nicht geändert wurde, ist kein Neubuild erforderlich); wennnode server/dist/index.jsdirekt im Terminal im Wartezustand bleibt, funktioniert der Server selbst normal.
Ein Schreibberechtigungsschalter wurde aktiviert, aber das entsprechende Werkzeug erscheint nicht
Der eigentliche Wirkungspunkt der Berechtigung liegt auf der Serverseite: Nach dem Speichern des Schalters verbindet sich das Plugin neu und zählt die Werkzeuge erneut auf (die Werkzeuganzahl sollte steigen, z. B. 75 → 83).
Wenn die Anzahl der Werkzeuge bei aktivierter Berechtigung unverändert bleibt, prüfen Sie, ob der
modeinabap_mcp_statusbereitsread-only + <Kategorie>ist; wenn er weiterhinread-onlyist, wurde der Schalter nicht erfolgreich gespeichert.
Nach Änderungen am server/-Quellcode ändert sich das Werkzeugverhalten nicht
Ein Neubuild ist erforderlich:
cd server && npm install --ignore-scripts && node node_modules/typescript/bin/tsc -p tsconfig.json, dann DSH neu starten, damit das Plugin das neuedist/verwendet.
ABAP meldet zur Laufzeit Fehler wie STRING_OFFSET_TOO_LARGE
Solche Fehler stammen vom ABAP-Programm selbst, das auf SAP-Seite gelesen/ausgeführt wird, und haben nichts mit dem Plugin zu tun. Sehen Sie sich die Kurzdump-Details mit
mcp__abap__dumpsan oder korrigieren Sie das entsprechende Programm in SE38.
Sicherheitshinweise
Schreibgeschützt ≠ harmlos: Schreibgeschützte Werkzeuge können dennoch Quellcode und Geschäftsdaten in Produktionssystemen lesen. Es wird dringend empfohlen, sich mit einem Konto mit minimalen Rechten mit Entwicklungs-/Testsystemen zu verbinden (die Berechtigungsschalter sind nur Schutzmaßnahmen auf DSH-Seite und ersetzen keine SAP-seitige Autorisierung).
Der Server gibt beim Start den Berechtigungsmodus und den Hinweis „Nur für Entwicklungs-/Testsysteme empfohlen" aus (dies ist eine Empfehlung + Hinweis, keine Pflicht).
Das Passwort wird im Klartext in die lokale
settings.yamlgeschrieben (durch den Settings-Dienst von DSH persistiert). Für ein höheres Sicherheitsniveau erweitern Sie dies bitte selbst um die Speicherung über dencredentials-Dienst.Der Server-Unterprozess erbt nur die SDK-Whitelist-Umgebungsvariablen plus die explizit vom Plugin injizierten
SAP_*- undMCP_ABAP_PERMISSIONS-Variablen; die übrigen Umgebungsvariablen des Hosts werden nicht durchgereicht.
Lizenz
MIT. Der Serverteil ist urheberrechtlich beim ursprünglichen Autor mario-andreschak (MIT); dieses Plugin fügt auf dieser Grundlage eine Berechtigungsebene hinzu.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with SAP ABAP systems through ABAP Development Tools (ADT), providing access to repository objects, source code, where-used analysis, and SQL queries with support for both on-premise and BTP systems.2
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.448MIT
- AlicenseAqualityCmaintenanceEnables AI assistants like Claude Code to directly connect to SAP ABAP systems via the ADT REST API with read/write capabilities, featuring AI-friendly high-level tools and built-in safety measures such as read-only mode, prefix whitelisting, and automatic locking.9MIT
- FlicenseAqualityCmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.424
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaoliang2/dsh-abap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server