Skip to main content
Glama
xiaoliang2

dsh-abap-mcp

by xiaoliang2

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.yaml geschrieben. 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.tsdist/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

login logout dropSession

Anmelden / Abmelden / Lokalen Sitzungscache löschen

Objektentdeckung

objectStructure searchObject findObjectPath objectTypes reentranceTicket

Objektstruktur abfragen / Suchen / Pfad finden / Objekttypen / Wiedereintritts-Ticket

Klassen-Introspektion

classIncludes classComponents

Include-Zusammensetzung der Klasse / Komponentenliste

Codeanalyse (schreibgeschützt)

syntaxCheckCode syntaxCheckCdsUrl codeCompletion findDefinition usageReferences syntaxCheckTypes codeCompletionFull codeCompletionElement usageReferenceSnippets fixProposals fixEdits fragmentMappings abapDocumentation

Syntaxprüfung / Vervollständigung / Definition springen / Referenzabfrage / Korrekturvorschläge / Dokumentation (schreibgeschützt)

Quellcode lesen

getObjectSource

Objektquellcode lesen

Inaktive Objekte

inactiveObjects

Inaktive Objekte auflisten

Registrierung / Validierung

objectRegistrationInfo validateNewObject

Objektregistrierungsinformationen / Parameterprüfung für neue Objekte (schreibgeschützt)

Transport lesen

transportInfo hasTransportConfig transportConfigurations getTransportConfiguration userTransports transportsByConfig systemUsers transportReference

Transportanforderungsinformationen / Benutzertransporte / Konfiguration / Systembenutzer (schreibgeschützt)

Repository-Browsing

nodeContents mainPrograms

Objektbaum durchsuchen / Include-Hauptprogramme

Funktionen / Entdeckung

featureDetails collectionFeatureDetails findCollectionByUrl loadTypes adtDiscovery adtCoreDiscovery adtCompatibiliyGraph

ADT-Fähigkeitserkennung / Funktionsabfrage

Unit-Test-Ergebnisse lesen

unitTestEvaluation unitTestOccurrenceMarkers

Unit-Test-Ergebnisse auswerten / Markierungspositionen (schreibgeschützt)

Formatierungseinstellungen lesen

prettyPrinterSetting

Formatierungseinstellungen lesen (ohne Änderung)

Git lesen

gitRepos gitExternalRepoInfo checkRepo remoteRepoInfo

Repository-Liste / Remote-Informationen / Prüfung (schreibgeschützt)

DDIC lesen

annotationDefinitions ddicElement ddicRepositoryAccess packageSearchHelp

Annotationen / DDIC-Elemente / Paketsuche (schreibgeschützt)

Service-Bindungsdetails

bindingDetails

Service-Bindungsdetails (schreibgeschützt)

Daten lesen

tableContents runQuery

Tabellendaten / SQL-Abfrage (schreibgeschützt)

Feeds / Dumps

feeds dumps

Dynamische Objektliste / Kurzdump-Liste (Dumps)

Umbenennungsanalyse

renameEvaluate renamePreview

Umbenennungsbewertung / Vorschau (nur ausführen, nicht speichern)

ATC lesen

atcCustomizing atcCheckVariant atcWorklists atcUsers isProposalMessage atcContactUri

ATC-Prüfkonfiguration / Varianten / Arbeitslisten / Benutzer / Kontakte (schreibgeschützt)

Tracing lesen

tracesList tracesListRequests tracesHitList tracesDbAccess tracesStatements

Trace-Liste / Anforderungen / Treffer / DB-Zugriffe / Anweisungen (schreibgeschützt)

Revisionen / Gesundheit

revisions healthcheck

Objekt-Revisionshistorie / Verbindungs-Healthcheck

7 Kategorien von Schreibberechtigungen (standardmäßig alle deaktiviert)

Schalter

Unterkategorie

Werkzeuge

Beschreibung

sourceWrite

Quellcode-Schreiben

setObjectSource deleteObject activateObjects activateByName createObject createTestInclude lock unLock

Quellcode schreiben / Objekt löschen / aktivieren / Objekt anlegen / Test-Include anlegen / sperren und entsperren

transports

Transport-Anfragen

createTransport setTransportsConfig createTransportsConfig transportDelete transportRelease transportSetOwner transportAddUser

Anlegen / Konfigurieren / Löschen / Freigeben / Verantwortlichen ändern / Benutzer hinzufügen

refactor

Refactoring

renameExecute extractMethodEvaluate extractMethodPreview extractMethodExecute prettyPrinter setPrettyPrinterSetting

Umbenennen ausführen / Methode extrahieren (Bewertung/Vorschau/Ausführung) / Formatieren (Lesen/Schreiben)

exec

Ausführung

runClass unitTestRun

ABAP-Klasse ausführen / Unit-Tests ausführen

ATC-Schreiboperationen

createAtcRun atcExemptProposal atcRequestExemption atcChangeContact

ATC-Prüfung starten / Ausnahme vorschlagen / Ausnahme beantragen / Kontakt ändern

Trace-Konfiguration

tracesSetParameters tracesCreateConfiguration tracesDeleteConfiguration tracesDelete

Trace-Parameter setzen / Konfiguration anlegen / Konfiguration löschen / Einträge löschen

git

Git-Schreiboperationen

gitCreateRepo gitPullRepo gitUnlinkRepo stageRepo pushRepo switchRepoBranch

Repository anlegen / Pull / Verknüpfung aufheben / Staging / Push / Branch wechseln

debug

Debugging

debuggerListeners debuggerListen debuggerDeleteListener debuggerSetBreakpoints debuggerDeleteBreakpoints debuggerAttach debuggerSaveSettings debuggerStackTrace debuggerVariables debuggerChildVariables debuggerStep debuggerGoToStack debuggerSetVariableValue

Lauschen / Breakpoints / Anhängen / Einzelschritt / Stack / Variablen lesen und schreiben

serviceBinding

Service-Bindung

publishServiceBinding unPublishServiceBinding

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ötigt refactor.

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 von settings.yaml / das Auffordern des Modells im Dialog, permissions zu ä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-mcp

Lokales 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)

  1. 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/adt und seine Unterknoten zu aktivieren (die konkreten Knoten variieren je nach Systemversion).

  2. SAP-Adressformat: Meistens http://Adresse:Port oder https://Adresse:Port (bei einigen neueren Versionen/Gateway-Konfigurationen auch der vollständige Pfad http://Adresse:Port/sap/bc/adt). Bitte bestätigen Sie Protokoll und Port anhand des tatsächlichen Systems, z. B. http://10.0.0.1:8000 oder https://sap.example.com:44300.

Feld

Beschreibung

Verbindung aktivieren

Hauptschalter; bei deaktiviert keine Verbindung und keine Werkzeugregistrierung

SAP-Adresse

z. B. http://Adresse:Port / https://Adresse:Port (ADT-Dienst muss zuerst aktiviert sein)

Benutzername / Passwort

Verbindungsnachweise

Mandant / Sprache

z. B. 000 / EN

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.js existiert (wenn der server/-Quellcode nicht geändert wurde, ist kein Neubuild erforderlich); wenn node server/dist/index.js direkt 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 mode in abap_mcp_status bereits read-only + <Kategorie> ist; wenn er weiterhin read-only ist, 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 neue dist/ 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__dumps an 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.yaml geschrieben (durch den Settings-Dienst von DSH persistiert). Für ein höheres Sicherheitsniveau erweitern Sie dies bitte selbst um die Speicherung über den credentials-Dienst.

  • Der Server-Unterprozess erbt nur die SDK-Whitelist-Umgebungsvariablen plus die explizit vom Plugin injizierten SAP_*- und MCP_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.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    9
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
    4
    24

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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