Skip to main content
Glama

ABAP MCP Server

Standalone MCP Server für agentives ABAP-Development — 67 Tools via ADT REST API.


Top-Features — was diesen MCP unterscheidet

Die ABAP-MCP-Landschaft reicht von reinen Read-only-ADT-Wrappern bis zu großen Tool-Sammlungen. Dieser Server verfolgt einen anderen Schwerpunkt: nicht möglichst viele Tools, sondern qualitativ hochwertige, agentengetriebene Entwicklung gegen real erreichbare Systeme. Die folgenden drei Punkte gibt es in dieser Kombination bei keinem anderen ABAP-MCP-Server:

🧹 Clean ABAP als erzwungener Workflow — nicht als Linter-Nachgedanke

Andere Server bieten bestenfalls einen optionalen Lint-Aufruf. Hier ist Clean Code in den Entwicklungsprozess eingebaut: Der abap_develop-Prompt erzwingt einen 6-Schritte-Workflow (Kontextanalyse → Referenzrecherche → Clean-ABAP-Check → Code-Platzierung → Implementierung → Qualitätsprüfung). Zusätzlich liegt eine Claude-Code-Skill clean-abap bei, die den Clean-ABAP-Styleguide automatisch anwendet, sobald Code geschrieben oder reviewt wird, plus review_clean_abap und search_clean_abap als Werkzeuge. Ergebnis: Der Agent produziert styleguide-konformen Code — ohne dass du ihn ständig daran erinnern musst.

🔍 DDIC-Validierung VOR dem Coding — gegen Halluzination an der Wurzel

Mit validate_ddic_references prüft der Agent Tabellen-, Struktur- und Feldnamen gegen das echte Data Dictionary, bevor er sie im Code verwendet. Das eliminiert die häufigste Halluzinationsquelle bei ABAP-Generierung — erfundene Feldnamen, die sonst erst bei der Aktivierung auffliegen. Andere Server prüfen Code erst nachträglich per Syntaxcheck oder ATC; hier wird die Fehlerquelle vorab abgeschnitten.

🌐 Vier Netzwerk-Routing-Modi — erreicht Systeme, die andere nicht erreichen

Die meisten ADT-Bridges sprechen nur direktes HTTPS. Dieser Server probiert vier Modi in fester Reihenfolge und nimmt den ersten konfigurierten: BTP Connectivity Proxy → SAProuter-NI-Tunnel → HTTP-CONNECT-Proxy → direktes HTTPS. Damit erreichst du das ABAP-System auch in klassischen B2B-VPNs (nur Port 3299 offen) und in hybriden CAP-/Cloud-Connector-Szenarien — Konstellationen, an denen reine HTTPS-Wrapper scheitern.

Weitere starke Merkmale

  • 🚀 Lokale .abap-Datei + Bulk-Push — 15 Minuten → Sekunden — Andere KI-Ansätze schreiben ABAP-Code zeichenweise direkt in das ADT-System; bei einem großen Programm dauert das bis zu 15 Minuten pro Schreibvorgang. Dieser Server arbeitet stattdessen mit einer lokalen .abap-Datei: der Agent editiert lokal, und write_abap_source pusht den vollständigen Stand in einem einzigen ADT-API-Aufruf — in Sekunden. Bei 10 iterativen Korrekturen sind das bis zu 150 gesparte Minuten pro Session.

  • 🔁 Rekursives Coding bis zur erfolgreichen Aktivierung — Der Write-Workflow läuft lock → write → Syntaxcheck → aktivieren → unlock und aktiviert nur bei sauberem Syntaxcheck. Schlägt etwas fehl, bekommt der Agent die konkrete Fehlerliste zurück und korrigiert iterativ weiter, bis das Objekt fehlerfrei aktiviert ist. Du erhältst aktivierten, lauffähigen Code statt eines Entwurfs mit roten Markern.

  • 🎯 Deferred Tools — ~75–80 % Token-Ersparnis — Statt alle 67 Tools in jeden Kontext zu laden, startet der Server mit nur 13 Core-Tools. Der Rest wird bei Bedarf über das Meta-Tool find_tools aktiviert (find_tools(category=…) oder find_tools(query=…)).

  • ✂️ Method-Level Surgeryread_abap_method / edit_abap_method lesen bzw. ersetzen einen einzelnen METHOD…ENDMETHOD-Block. Der Agent gibt nicht mehr die ganze Klasse aus, um eine Methode zu ändern — der Server splittet den neuen Rumpf server-seitig in die Quelle und durchläuft den normalen Write-Workflow. Größter Token-Hebel bei iterativem Coding.

  • 🗜️ Dependency Contractsget_abap_contract (und analyze_abap_context(mode=contract)) komprimieren eine Klasse/Interface auf ihre öffentliche Signatur-Oberfläche ohne Methodenrümpfe — typischerweise 5–10 % der Quellgröße. So bekommt der Agent die API einer Abhängigkeit billig, bevor er dagegen codet.

  • ⚡ Source-Cache — TTL-Cache für getObjectSource (SOURCE_CACHE_TTL_MS, Default 30 s); wiederholte Reads treffen den Cache, Writes/Deletes invalidieren automatisch — nie veralteter Quelltext nach einer Mutation.

  • 🧰 Intent-Facade — vier konsolidierte Verben SAPRead/SAPWrite/SAPSearch/SAPDiagnose für Clients, die eine kleine Tool-Oberfläche statt 67 Einzeltools wollen. Reine Routing-Schicht — alle Safety-Guards bleiben aktiv.

  • 🛂 Governance (Rollen + Audit) — Rollen viewer/developer/admin (SAP_ROLE) schränken zusätzlich zu den ALLOW_*-Flags ein; jede verändernde Aktion wird als JSON-Audit-Zeile nach STDERR (und optional AUDIT_LOG_FILE) protokolliert.

  • 🕸️ Impact-Analyseget_call_graph rendert den rekursiven Where-Used-Graph als Mermaid-Diagramm; find_dead_code markiert Objekte ohne eingehende Verwendungen als Löschkandidaten.

  • 🧠 Voller Kontext vor dem Schreibenanalyze_abap_context, where_used und read_abap_source(includeRelated=true) lesen rekursiv alle verbundenen Objekte (Includes, Funktionsbausteine, Klassen), damit der Agent das gesamte Programm versteht, bevor er es anfasst.

  • ⚡ Sichere Ad-hoc-Ausführungexecute_abap_snippet führt Code in einem temporären $TMP-Programm aus und löscht es immer (auch bei Laufzeitfehlern). Eine statische Verbotsliste (COMMIT WORK, DB-INSERT/UPDATE/DELETE, …) blockiert datenverändernde Operationen vorab.

  • 🛡️ Default-sichere Safety-Guards — Schreiben, Löschen und Ausführen sind standardmäßig deaktiviert und müssen explizit freigeschaltet werden. Kundennamensraum-Zwang (Z/Y) und BLOCKED_PACKAGES schützen SAP-eigene Objekte. PROD bleibt komplett gesperrt.

  • 🔒 Concurrency-Safe — Serieller Write-Lock und Stateful-Sessions mit automatischer Lock-Recovery verhindern Konflikte bei parallelen Schreiboperationen.

  • 📚 Integrierte SAP-Doku-Suchesearch_sap_web, fetch_url (liest beliebige URLs inkl. SPAs wie das SAP Help Portal) und versionsabhängige help.sap.com-Verweise (SAP_ABAP_VERSION) liefern dem Agenten aktuelle, korrekte Referenzen statt veraltetem Trainingswissen.

Token-effizient arbeiten — Beispiele

// Nur die API-Oberfläche einer Abhängigkeit holen (statt der ganzen Klasse):
get_abap_contract({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing" })

// Eine einzelne Methode lesen bzw. ersetzen (statt Voll-Read/-Write der Klasse):
read_abap_method({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing", methodName: "calculate" })
edit_abap_method({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing",
                   methodName: "calculate", source: "    rv_total = iv_net * ( 1 + iv_tax )." })

// Kontext als komprimierte Contracts statt Volltext:
analyze_abap_context({ objectUrl: "...", mode: "contract" })

// Impact-Analyse vor einer Änderung:
get_call_graph({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing", depth: 2 })

// Kleine Tool-Oberfläche via Intent-Verben (delegiert an die granularen Tools):
SAPRead({ operation: "method", args: { objectUrl: "...", methodName: "calculate" } })

Related MCP server: ABAP-ADT-API MCP-Server

Quickstart

1. Abhängigkeiten installieren & bauen

npm install
npm run build

2. Konfiguration

cp .env.example .env
# .env öffnen und SAP_URL, SAP_USER, SAP_PASSWORD eintragen

3. Starten

npm start
# oder direkt:
node dist/index.js

Wenn alles klappt, siehst du:

╔══════════════════════════════════════════╗
║   ABAP MCP Server v2.0 — Extended        ║
╚══════════════════════════════════════════╝
  System  : https://<SAP_SYSTEM>:<PORT>
  User    : <USERNAME>  Client: <CLIENT>  Lang: EN
  Write   : ❌ deaktiviert
  Delete  : ❌ deaktiviert
  Tools   : 13 initial (67 gesamt, deferred)
  Doku    : help.sap.com vlatest
  Prompts : 1 (abap_develop)
  ADT     : ✅ Verbunden
✅ MCP Server läuft auf stdio — bereit für Verbindungen

Vergleich: Dieser MCP vs. SAP ADT for VS Code (offizielles MCP)

SAP hat mit dem ADT for VS Code MCP-Server (Q2 2026 GA) ein ähnliches Konzept geliefert — ein MCP-Server über die ADT REST API. Der Vergleich zeigt, wo die Unterschiede liegen:

Feature

Dieser MCP

SAP ADT for VS Code

Tool-Anzahl

67 Tools

~10 Capability-Kategorien

IDE-Bindung

Keine — jeder MCP-Client

VS Code + Eclipse (gemeinsamer ADT-Core)

Systemunterstützung

ECC 6.0+, S/4HANA on-prem, BTP

BTP + on-prem (RFC); erster Release ABAP-Cloud-fokussiert

Klassisches ABAP (Programme, FuGr, BAPIs, Nachrichten)

✅ Vollständig

❌ Noch nicht (FuGr/Programme für späteren Release geplant)

SAP Business Workflow (SWDD)

analyze_workflow (definitions/instances/steps/agents)

CDS Views (DDLS)

CDS Metadata Extensions (DDLX)

Service Definitions (SRVD)

Service Bindings (SRVB) + Publish

Data Control Language (DCLS)

Behavior Definitions (BDEF)

create_behavior_definition

Behavior Implementations (ABP)

✅ via Klassen-Tools

Method-Level Surgery

read/edit_abap_method

Context Compression (Contracts)

get_abap_contract

Call Graph / Dead-Code-Erkennung

Parallele Batch-Reads

batch_read

ABAP-Snippet-Ausführung

✅ ephemer + Cleanup

Deferred Tool Loading

✅ 75–80 % Token-Ersparnis

N/A

Audit-Logging

✅ Strukturiertes JSON

RBAC-Governance

✅ viewer/developer/admin

Paket-Guards + Namespace-Zwang

SAProuter / BTP Proxy / HTTP Proxy

✅ Alle 4 Routing-Modi

BTP + direkt

Web-Suche

search_sap_web + fetch_url (Tavily)

Clean ABAP Lint

review_clean_abap + Skill

✅ ATC clean-core

Unit Tests

✅ Ausführen + Include erstellen

✅ Generieren + Ausführen

DDIC-Feldvalidierung (Pre-Write)

✅ Statische Analyse vor Write

RAP BDEF-Wissen

rap-bdef-Skill

✅ SAP-eigenes Modell

Spezialisiertes ABAP-LLM

❌ (nutzt Client-Modell)

✅ SAP-ABAP-1

Native VS Code UX

❌ (bewusst IDE-agnostisch)

Enterprise SLA

❌ Open Source

Lizenzkosten

Kostenlos

AI Units (BTP-Subscription)

Fazit: SAP hat ein schmaleres initiales Angebot (BTP-fokussiert, VS Code + Eclipse, ~10 Kategorien) mit einem proprietären ABAP-Modell. Dieser Server ist breiter (alle SAP-Systeme, alle ABAP-Artefakte, jeder MCP-Client), tiefer (67 Tools, Governance, Audit, Kontextkompression) und kostenlos. Die einzige echte Lücke ist das spezialisierte SAP-ABAP-1 Sprachmodell.


MCP-Client Konfiguration

Wichtig: Den Server rufst du normalerweise nicht manuell auf — er wird vom MCP-Client (Claude Desktop, Claude Code usw.) automatisch gestartet. Du trägst ihn einmalig in die Config ein:

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "abap": {
      "command": "node",
      "args": ["/pfad/zum/abap-mcp-server/dist/index.js"],
      "env": {
        "SAP_URL": "https://<SAP_SYSTEM>:<PORT>",
        "SAP_USER": "<USERNAME>",
        "SAP_PASSWORD": "<PASSWORD>",
        "SAP_CLIENT": "<CLIENT>",
        "ALLOW_WRITE": "true"
      }
    }
  }
}

Dann Claude Desktop neu starten — der Server läuft im Hintergrund sobald du eine Konversation öffnest.

Claude Code

Im Projektordner .claude/mcp.json:

{
  "mcpServers": {
    "abap": {
      "command": "node",
      "args": ["/pfad/zum/abap-mcp-server/dist/index.js"]
    }
  }
}

Clean ABAP Skill (optional, Claude Code)

Das Repo enthält eine Claude-Code-Skill clean-abap (.claude/skills/clean-abap/SKILL.md), die den Clean-ABAP-Styleguide automatisch anwendet, sobald ABAP-Code geschrieben oder reviewt wird. Sie ist bereits eingecheckt — nach dem Klonen Claude Code im Projektordner neu starten, dann greift sie automatisch. Details siehe DOCUMENTATION.md → Abschnitt „Claude Skills“.

Cline (VS Code Extension)

In VS Code öffne die Cline Settings (Cline-Symbol → Settings) und gehe zu "MCP Server Configuration". Dort ergänze:

{
  "mcpServers": {
    "ABAP Server": {
      "autoApprove": [
        "search_abap_objects",
        "read_abap_source",
        "where_used",
        "write_abap_source",
        "analyze_abap_context",
        "abap_develop"
      ],
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "node",
      "args": [
        "/pfad/zum/abap-mcp-server/dist/index.js"
      ],
      "env": {
        "SAP_URL": "https://<SAP_SYSTEM>:<PORT>",
        "SAP_USER": "<USERNAME>",
        "SAP_PASSWORD": "<PASSWORD>",
        "SAP_CLIENT": "<CLIENT>",
        "SAP_LANGUAGE": "EN",
        "ALLOW_WRITE": "true",
        "ALLOW_DELETE": "false",
        "ALLOW_EXECUTE": "true",
        "BLOCKED_PACKAGES": "SAP,SHD,SMOD",
        "DEFAULT_TRANSPORT": "",
        "SYNTAX_CHECK_BEFORE_ACTIVATE": "true",
        "SAP_ALLOW_UNAUTHORIZED": "true",
        "MAX_DUMPS": "20",
        "DEFER_TOOLS": "true",
        "SAP_ABAP_VERSION": "latest",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0",
        "TAVILY_API_KEY": "<TAVILY_KEY>"
      }
    }
  }
}

Hinweise:

  • autoApprove listet die Tools auf, die ohne Benutzerbestätigung ausgeführt werden dürfen. Erweitere die Liste nach Bedarf (z.B. search_abap_syntax, validate_ddic_references, get_object_info, find_tools).

  • timeout: Maximale Laufzeit pro Tool-Aufruf in Sekunden (60 empfohlen für ATC-Checks u.ä.).

  • SAP_ALLOW_UNAUTHORIZED=true / NODE_TLS_REJECT_UNAUTHORIZED=0: Nur bei Self-signed Zertifikaten (DEV-Systeme) setzen!

  • TAVILY_API_KEY: Optional — wird für die Tools fetch_url und search_sap_web benötigt. API-Key von tavily.com beziehen.

  • Alle env-Variablen können alternativ in einer .env-Datei im Server-Verzeichnis konfiguriert werden.

Nach dem Speichern: Cline neu starten oder die MCP-Verbindung neu laden.


Credentials konfigurieren

Der Server lädt die Credentials aus der .env-Datei im Projekt:

# Pflicht
SAP_URL=https://<SAP_SYSTEM>:<PORT>
SAP_USER=<USERNAME>
SAP_PASSWORD=<PASSWORD>
SAP_CLIENT=<CLIENT>
SAP_LANGUAGE=EN

# Sicherheit (alle default-safe)
ALLOW_WRITE=false
ALLOW_DELETE=false
ALLOW_EXECUTE=false
BLOCKED_PACKAGES=SAP,SHD,SMOD

# Governance (Rollen & Audit)
# SAP_ROLE schränkt zusätzlich zu den ALLOW_*-Flags ein (kann nur weiter
# einschränken, nie freischalten): viewer = nur lesen, developer = write+execute
# (kein delete), admin = alles (Default = bisheriges Verhalten).
SAP_ROLE=admin
# Optionales JSON-Audit-Log aller verändernden Aktionen (zusätzlich immer nach STDERR).
AUDIT_LOG_FILE=

# Optionen
SYNTAX_CHECK_BEFORE_ACTIVATE=true
DEFER_TOOLS=true
SAP_ABAP_VERSION=latest
DEFAULT_TRANSPORT=
MAX_DUMPS=20
# Source-Cache-TTL in ms für getObjectSource (Default 30000; 0 = aus).
# Writes/Deletes invalidieren automatisch.
SOURCE_CACHE_TTL_MS=30000

# Web Search (optional — für fetch_url & search_sap_web Tools)
TAVILY_API_KEY=

Du brauchst die Credentials nicht in der MCP-Config zu wiederholen — der Server lädt sie automatisch beim Start.

Empfohlene Einstellungen pro Umgebung:

Variable

DEV

QAS/TEST

PROD

ALLOW_WRITE

true

false

false

ALLOW_DELETE

false

false

false

ALLOW_EXECUTE

true

false

false

SAP_ROLE

admin/developer

viewer

viewer


Warum braucht der Server keinen Port?

Der ABAP MCP Server läuft im stdio-Modus (Standard Input/Output), nicht im HTTP-Modus:

  • stdio-Modus (dieser Server) ✅

    • Der Server kommuniziert über stdin/stdout direkt mit dem Client

    • Kein HTTP-Server, kein TCP-Port nötig

    • Das ist der Standard für MCP (Model Context Protocol)

    • Wird vom Client automatisch gestartet, wenn benötigt

    • Perfekt für: Claude Desktop, Claude Code, Cline

  • HTTP-Modus (optional, z.B. für externe Clients)

    • Server lauscht auf TCP-Port (z.B. 4847)

    • Clients verbinden sich via HTTP

    • Nötig wenn du mehrere Client-Prozesse hast oder externe Integration brauchst

Kurz: Du brauchst keinen Port, weil dein Client (Claude, Cline) den Server direkt startet und über stdio mit ihm spricht. Das ist schneller und sicherer.


Netzwerk-Routing

Das ABAP-System muss vom Rechner, auf dem der MCP-Server läuft, erreichbar sein. Der Server unterstützt vier Routing-Modi — er probiert sie in dieser Reihenfolge und nimmt den ersten konfigurierten:

Priorität

Modus

Wann sinnvoll

1

BTP Connectivity Proxy

Hybride CAP-Entwicklung; ABAP-System nur via Cloud Connector erreichbar

2

SAProuter NI-Tunnel

Klassische B2B-VPN, in denen nur Port 3299 von außen offen ist

3

HTTP-CONNECT-Proxy

Corporate-Proxy oder lokaler SSH-/socat-Tunnel

4

Direkt HTTPS

DNS und Firewall erlauben direkten Zugriff

Modus 1 — BTP Connectivity Proxy (empfohlen für CAP-Dev)

Routet HTTPS durch den vom BTP-Subaccount vertrauten Cloud Connector. Der MCP-Server piggybacked auf dem lokal weitergeleiteten Connectivity Proxy einer Cloud-Foundry-App, die das connectivity-Service gebunden hat.

Einmalige Vorbereitung:

# In separatem Terminal — solange aktiv lassen, wie der MCP läuft.
cf ssh <app> -N -L 20003:connectivityproxy.internal.cf.<region>.hana.ondemand.com:20003

# Im CAP-Projekt: connectivity-Service binden (einmalig)
cds bind --to <connectivity-instance> --credentials '{"onpremise_proxy_host":"localhost"}' --for hybrid

MCP-Konfiguration (.env oder MCP-Client env):

SAP_URL=http://mdadneap1.example.com:44300        # http:// auf Port 20003!
SAP_BTP_CONNECTIVITY_PROXY=http://localhost:20003
SAP_BTP_CONNECTIVITY_LOCATION_ID=                  # leer = Default-CC; ggf. mit dem Diagnose-Tool ermitteln
SAP_BTP_CONNECTIVITY_CDS_BIND_FILE=/abs/path/<project>/.cdsrc-private.json
SAP_BTP_CONNECTIVITY_CDS_BIND_NAME=connectivity
SAP_BTP_CF_HOME=/abs/path/<project>                # optional, projekteigene cf-Session

Drei JWT-Quellen werden in dieser Reihenfolge probiert: *_CREDS_FILE*_CDS_BIND_FILE + *_CDS_BIND_NAME → direkte *_CLIENT_ID/_SECRET/_TOKEN_URL. Details siehe .env.example.

Hinweise zum Protokoll:

  • Connectivity Proxy auf Port 20003 ist ein HTTP-Forward-Proxy → SAP_URL muss http://... sein. Der Cloud Connector übernimmt die Backend-TLS.

  • Auf Port 20004 spricht der Proxy CONNECT-Tunneling → SAP_URL=https://....

  • Der Cloud Connector muss /sap/bc/adt/* als Resource freigeben.

Diagnose:

npm run diag:btp-proxy           # End-to-End-Probe gegen SAP_URL/sap/bc/adt/discovery
npm run diag:btp-token           # XSUAA-JWT-Claims anzeigen (subaccount, audience, scope)
npm run diag:btp-destination -- --list             # alle Destinations auflisten
npm run diag:btp-destination -- <DESTINATION_NAME> # Location-ID + virtual host ermitteln
npm run diag:adt                                   # End-to-End-Test via getClient()

Modus 2 — SAProuter NI-Tunnel

SAP_URL=https://<target-host>:<port>
SAP_ROUTER=/H/saproutprd.example.com/S/3299        # oder kurz: host:port
# SAP_ROUTER_PASSWORD=                              # falls saprouttab Passwort verlangt
# SAP_ROUTER_DEBUG=true                             # NI-Frames auf stderr

Voraussetzung: der saprouttab muss eine Permit-Regel für (deine Quelle → target host:port) enthalten. Sonst antwortet der SAProuter mit NI_RTERR. Die Backend-Hosts müssen außerdem HTTPS auf dem genannten Port wirklich akzeptieren (Web Dispatcher oder ICM icm/server_port).

Modus 3 — HTTP-CONNECT-Proxy

SAP_PROXY_URL=http://proxy.corp.example.com:8080    # oder http://localhost:8443 (SSH-Tunnel)

Standard-Env-Variablen HTTPS_PROXY / HTTP_PROXY werden ebenfalls honoriert.

Modus 4 — Direkt HTTPS

Keine zusätzlichen Variablen. Falls das Backend ein selbst signiertes Zertifikat hat, zusätzlich SAP_ALLOW_UNAUTHORIZED=true (nur DEV-Systeme).

Was NICHT in SAP_URL gehört

  • SAProuter-Routes (/H/.../S/...): SAProuter spricht SAP-NI-Binärprotokoll, nicht HTTP. Gehört in SAP_ROUTER.

  • Cloud-Connector-virtual-host-only-Pfade: das ist die SAP_URL. Der Pfad-Präfix-Mapping macht der Cloud Connector.


Troubleshooting

"ADT Fehler: User ist currently editing..."

  • Der Server versucht, eine Datei zu sperren, die schon gesperrt ist (z.B. von einem vorherigen Fehler).

  • Lösung: SAP Studio öffnen und die Lock-Session beenden, oder Server neu starten.

Include-Aktivierungsfehler

  • Includes können nicht standalone aktiviert werden. Der Server erkennt das automatisch und aktiviert die Include im Kontext des Hauptprogramms. Falls nötig, mainProgram-Parameter beim Schreiben angeben.

"SAP_URL, SAP_USER and SAP_PASSWORD must be set"

  • .env-Datei fehlt oder Server wurde aus dem falschen Verzeichnis gestartet. Bei Cline: cwd-Feld in der MCP-Config prüfen.

Connection refused / ENOTFOUND <host>

  • VPN aktiv? SAP-System erreichbar? URL korrekt? nslookup <host> muss von dieser Maschine funktionieren — falls nicht, ist es kein Codeproblem, sondern DNS/VPN.

BTP Connectivity Proxy: HTTP 503 "no SAP Cloud Connector matching the requested tunnel"

  • Falsche Subaccount-Audience im JWT (z.B. Service-Key aus anderem Subaccount) oder fehlende/falsche SAP_BTP_CONNECTIVITY_LOCATION_ID.

  • npm run diag:btp-token zeigt die zid (Subaccount-ID) und aud des Tokens an.

  • npm run diag:btp-destination -- --list zeigt alle in deinem Subaccount konfigurierten Location-IDs.

BTP Connectivity Proxy: HTTP 405 "HTTPS proxying is not supported"

  • SAP_URL ist https://..., aber der Proxy läuft auf dem HTTP-Forward-Port (20003). Entweder SAP_URL auf http:// umstellen oder die SSH-Weiterleitung auf Port 20004 setzen.

cf service-key schlägt fehl (login expired / no org targeted)

  • Der Server gibt eine präzise Fehlermeldung mit cf-Befehl-Vorschlag aus. Üblicherweise reicht: CF_HOME=<projekt> cf login --sso.

Self-signed Zertifikat (nur DEV)

  • SAP_ALLOW_UNAUTHORIZED=true setzen. Niemals in Produktion!

Available Tools

13 tools
analyze_abap_contextA

Analyzes the complete context of an ABAP object: reads source code including all includes, detects referenced function modules, classes and interfaces via regex, retrieves their metadata and returns a structured context report. Entry point for the abap_develop workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectUrlYesADT URL of the main object
depthNoshallow = main source + direct includes only; deep = recursively all references
modeNofull = embed complete source of main + includes; contract = compress each to its public signatures only (much fewer tokens — use when you only need the API surface, not the bodies)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Describes reading, detecting, and retrieving, but does not explicitly state read-only nature, side effects, failure modes, or permissions needed. Does not disclose what 'structured context report' contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. First sentence delivers core functionality; second sentence contextualizes as workflow entry point. Perfectly front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters (all with enums) and no output schema, description covers purpose and mode semantics adequately. However, lacks hints about output structure or prerequisites. Slightly incomplete for a tool that likely produces complex results, but reasonable for an entry-point tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). Description adds meaningful context beyond schema: 'shallow = main source + direct includes only; deep = recursively all references' and explains full vs contract modes by token usage. Adds value above raw enum descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Analyzes the complete context of an ABAP object' with specifics (reads source, detects references, retrieves metadata, returns structured report). Identifies as entry point for a workflow, but does not explicitly differentiate from siblings like get_abap_contract or SAPRead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage as entry point for abap_develop workflow, but no explicit when-to-use, when-not, or alternatives mentioned. Lacks guidance on selecting between shallow/deep or full/contract modes for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_readA

Executes multiple read-only tool calls in a single MCP request — the server runs them in parallel (Promise.allSettled) and returns all results at once. Dramatically reduces round-trip latency for clients like Cline that execute tools sequentially. Each operation specifies a tool name and its arguments (same as calling the tool directly). Only read-only tools are allowed (no write/create/delete). Max 20 operations per batch. Example: batch_read({ operations: [ { tool: 'read_abap_source', args: { objectUrl: '...', includeRelated: true }, label: 'main' }, { tool: 'where_used', args: { objectUrl: '...' }, label: 'usages' }, { tool: 'get_object_info', args: { objectUrl: '...' }, label: 'info' } ] })

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesList of operations to execute in parallel (1–20)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description details parallel execution via Promise.allSettled, read-only restriction, max 20 ops, and latency benefits. Adds behavioral context beyond basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two paragraphs plus a concise example. Every sentence is informative, no fluff. Structure is logical: purpose, constraints, usage pattern.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description indicates all results are returned. Could mention error handling or result format, but for a batching utility it's sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed description of operations array. The description reinforces structure with an example and max limit, adding value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool batches multiple read-only calls, executes them in parallel, and returns results together. It distinguishes from siblings by being a batching tool for read-only operations, with explicit list of allowed tools in schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies that only read-only tools are allowed and max 20 operations, with an example. Missing explicit guidance on when not to use (e.g., for single calls), but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_urlA

Fetches and extracts readable content from a URL. Works with JavaScript-rendered pages (SPAs) like SAP Help Portal, SAP Community blogs, SAP Notes, or any web page. Returns the extracted text content. Use when you need to read the actual content of a specific URL (not search). Requires TAVILY_API_KEY in .env.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to fetch and extract readable content from (e.g. 'https://help.sap.com/docs/...'). Works with JavaScript-rendered pages (SPAs) like SAP Help Portal.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that it works with JavaScript-rendered pages and returns extracted text. However, it does not mention potential failure modes, rate limits, or error handling, leaving gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, followed by context and usage. Every sentence earns its place with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one simple parameter and no output schema, the description is fairly complete: it explains the tool's function, usage context, and a prerequisite. It could elaborate on error behavior, but it is sufficient for a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add new meaning for the 'url' parameter beyond what the schema already provides, as both state the same examples and behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches and extracts readable content from a URL, works with JavaScript-rendered pages, and distinguishes itself from search tools by noting 'not search'. It specifies the verb 'Fetches and extracts' and the resource 'readable content from a URL'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use: 'when you need to read the actual content of a specific URL (not search)'. It also mentions the requirement for TAVILY_API_KEY, providing context for usage. However, it does not explicitly exclude alternatives or specify when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_toolsA

Finds and enables ABAP tools by search term or category. ⚠️ Most tools are deferred — call this BEFORE using any non-core tool! Categories: SEARCH, READ, WRITE, CREATE (programs, classes, interfaces, function groups, CDS views, tables, message classes, CDS metadata extensions, service definitions, service bindings, data control language), DELETE, TEST, QUALITY (syntax check, ATC, Clean ABAP review, DDIC validation), DIAGNOSTICS (short dumps, traces), TRANSPORT, ABAPGIT, QUERY, DOCUMENTATION (ABAP syntax help), WEBSEARCH (Google SAP web search), BATCH (parallel read operations), ANALYSIS (call graph, dead-code detection), INTENT (consolidated SAPRead/SAPWrite/SAPSearch/SAPDiagnose verbs). Enabled tools become immediately available.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch pattern for tool names/descriptions
categoryNoCategory: SEARCH | READ | WRITE | CREATE | DELETE | TEST | QUALITY | DIAGNOSTICS | TRANSPORT | ABAPGIT | QUERY | DOCUMENTATION | WEBSEARCH | BATCH | ANALYSIS | INTENT
enableNoEnable tools (default: true)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It warns that most tools are deferred and that the 'enable' parameter defaults to true, but does not elaborate on side effects of enabling, rate limits, or idempotency. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the core purpose and warning, then lists categories concisely within a single paragraph. While the category list is somewhat lengthy, it is necessary for clarity. No redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's purpose and behavior well, including the deferred nature and enablement. However, it lacks information about return values (no output schema) and what happens if tools are already enabled or if enable is false. Adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description only adds marginal value beyond the schema. It mentions categories and implies search by name/description, but does not detail parameter usage or format needs. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds and enables ABAP tools by search term or category, with a specific warning about deferred tools. It distinguishes from siblings like list_tools by explaining its role as a prerequisite for non-core tool usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises calling this tool before using any non-core tool, provides a comprehensive list of categories, and notes that enabled tools become immediately available. It could further clarify when not to use it or contrast with sibling tools, but the guidance is effective.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_abap_contractA

Returns the COMPRESSED public interface (signatures, no method bodies) of a class or interface — typically 5–10% of the full source. Use to give an agent the API surface of a dependency cheaply before writing code against it.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectUrlYesADT URL of a class or interface, e.g. /sap/bc/adt/oo/classes/zcl_foo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description partially discloses behavior: it returns compressed content (5-10% of source), no method bodies, and implies cheapness. But it doesn't mention permissions, error cases, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and purpose, with zero waste. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the return value (compressed public interface, signatures) adequately for a simple tool. Lacks output schema or error details, but sufficient given tool complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description provides 100% coverage for the single parameter, so baseline is 3. The tool description does not add additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the compressed public interface (signatures, no method bodies) of a class or interface, using specific verbs and specifying the resource type. It is distinct from sibling tools like SAPRead or analyze_abap_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: to give an agent the API surface of a dependency cheaply before writing code. However, it does not mention when not to use or compare with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_toolsA

Returns a compact overview of ALL 50+ available tools with short descriptions, grouped by category. Shows which tools are currently active (core/enabled) vs. deferred. Use this to discover the right tool for a task. Unlike find_tools, this does NOT enable tools — it only lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category: SEARCH | READ | WRITE | CREATE | DELETE | TEST | QUALITY | DIAGNOSTICS | TRANSPORT | ABAPGIT | QUERY | DOCUMENTATION | WEBSEARCH | BATCH | ANALYSIS | INTENT. Omit for all.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It correctly discloses the tool is read-only (does not enable tools) and describes output format. Could mention absence of side effects, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with front-loaded first sentence stating functionality. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive for a listing tool: covers what it returns, how to use, what it doesn't do. No missing information given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage for the single optional parameter. Description adds context about grouping by category but does not elaborate on parameter usage beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a compact overview of all tools with short descriptions grouped by category, and distinguishes from sibling find_tools by noting it does not enable tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance to use this tool for discovering the right tool for a task, and explicitly contrasts with find_tools which enables tools. Provides clear when-to-use and when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SAPDiagnoseB

Consolidated QUALITY/DIAGNOSTICS verb. Delegates by 'operation': syntax | atc | unit | ddic_validate | clean_abap | dumps | dump_detail | traces | trace_detail | workflow. Pass 'args' as the underlying tool expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhat to diagnose: syntax | atc | unit | ddic_validate | clean_abap | dumps | dump_detail | traces | trace_detail | workflow
argsYesArguments for the underlying tool

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions delegation and passing 'args' as expected, but does not disclose side effects, auth needs, rate limits, or error behavior. For a dispatching tool, more transparency is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and delegate mechanism. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10+ operations), the description is too brief. It does not explain return values, error handling, or how to choose operations. Missing output schema and behavioral details make it incomplete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions. The description adds that 'args' are 'as the underlying tool expects', which provides marginal extra context. No parameter details beyond schema are added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a consolidated diagnostics verb that delegates by operation, listing specific operations. This distinguishes it from sibling tools like analyze_abap_context or search_abap_syntax which are more specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for diagnostics by listing operations, but does not explicitly state when to use this tool vs alternatives or provide exclusions. The sibling list hints at specialization, but no direct guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SAPReadB

Consolidated READ verb. Delegates by 'operation': source | method | contract | info | where_used | table | table_fields | ddic | revisions | context. Pass 'args' exactly as the underlying granular tool expects. Use this when you want a small tool surface instead of the 50 granular tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhat to read: source | method | contract | info | where_used | table | table_fields | ddic | revisions | context
argsYesArguments for the underlying tool (same shape as the granular tool)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states delegation and argument passing, but does not disclose safety (e.g., read-only nature), side effects, authentication, or rate limits. For a read tool, more safety context would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences: purpose, operation list, and usage rationale. No filler or redundant information. Well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (delegation to 10+ operations) and no output schema, the description lacks return value details, error handling, or examples. It is incomplete for an agent to understand what each operation returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds that 'args' must match the underlying granular tool's shape, which provides extra context beyond the schema description. However, it largely repeats the operation enum from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a consolidated READ verb that delegates to multiple operations, listing all available operations. This distinguishes it from siblings like SAPWrite, though it doesn't explicitly contrast with each sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a use case: wanting a smaller tool surface instead of 50 granular tools. However, it does not mention when NOT to use it or specify alternatives (e.g., the underlying granular tools are not listed as siblings).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SAPSearchB

Consolidated SEARCH verb. Delegates by 'operation': objects | source | call_graph | dead_code. Pass 'args' as the underlying tool expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhat to search: objects | source | call_graph | dead_code
argsYesArguments for the underlying tool

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the delegation behavior and the need to pass appropriate args, but does not specify whether the tool is read-only, what happens on invalid operation, or any side effects. The disclosure is accurate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences with no extraneous information. It front-loads the tool's purpose and then gives the key delegation pattern.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a consolidated tool with nested args and no output schema or annotations, the description is incomplete. It does not specify what args each operation expects or provide examples, leaving the agent to infer or rely on external knowledge, which risks incorrect invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds the list of accepted operations and clarifies that args are passed through to the underlying tool, which adds some context beyond the schema. However, it does not elaborate on the structure of args for each operation, so value added is moderate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a consolidated search verb that delegates by operation (objects, source, call_graph, dead_code). It distinguishes itself from sibling tools like search_abap_syntax and search_sap_web by being a meta-tool covering multiple ABAP search domains, but does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this consolidated tool versus the individual search tools (e.g., search_abap_syntax, search_sap_web) or other siblings. The description lacks any 'when to use' or 'alternative' hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SAPWriteB

Consolidated WRITE verb. Delegates by 'operation': source | method | activate | pretty_print | create_program | create_class | create_interface | create_function_group | create_cds_view | create_table | create_message_class | create_metadata_extension | create_service_definition | create_service_binding | publish_service_binding | create_dcl | create_bdef | delete. Inherits all safety guards (ALLOW_WRITE/DELETE, role, audit) from the delegate. Pass 'args' as the granular tool expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhat to write: source | method | activate | pretty_print | create_program | create_class | create_interface | create_function_group | create_cds_view | create_table | create_message_class | create_metadata_extension | create_service_definition | create_service_binding | publish_service_binding | create_dcl | create_bdef | delete
argsYesArguments for the underlying tool (same shape as the granular tool)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It mentions inheriting safety guards (ALLOW_WRITE/DELETE, role, audit) which gives some context, but fails to disclose important details like error behavior, idempotency, rate limits, or what happens on failure. The inclusion of 'delete' implies destructiveness but is not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and front-loads the purpose. It avoids redundancy and directly states the delegation mechanism. However, it could be more structured with bullet points for the operation list to improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (18+ operations, dynamic args) and lack of output schema, the description is incomplete. It does not explain return values, error handling, prerequisites, or how to determine the correct operation for a task. Users are left to infer from the operation list without guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds value by clarifying that 'args' must match the shape expected by the granular tool for a given operation, which is not evident from the schema alone. This dynamic structure is hinted, though no per-operation details are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a 'Consolidated WRITE verb' that delegates by operation, listing many specific write operations. This distinguishes it from sibling tools like SAPRead (read) and SAPSearch (search), though it doesn't explicitly differentiate from potential granular write tools that might exist outside the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for writing SAP objects but does not explicitly specify when to use this consolidated tool versus alternatives (e.g., if there were separate tools per operation). It lacks when-not-to-use guidance or scenarios where other tools would be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_abap_syntaxA

Searches the official ABAP syntax documentation from help.sap.com based on a free-text query (e.g. 'SELECT UP TO ROWS', 'LOOP AT clause order'). Automatically identifies the main keyword, loads the documentation page and returns the relevant syntax section. Call BEFORE writing ABAP code to ensure correct syntax.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFree-text search query for ABAP syntax (e.g. 'SELECT UP TO ROWS', 'LOOP AT clause order', 'READ TABLE WITH KEY'). The tool identifies the main keyword, loads the official SAP documentation page and returns the relevant syntax section.
versionNoABAP version (e.g. 'latest', '758', '754'). Default: cfg.sapAbapVersion

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses behavior: automatically identifies main keyword, loads documentation page, and returns relevant section. This implies a read-only operation with no side effects, but does not explicitly state non-destructiveness or error handling. Adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each purposeful. First sentence defines functionality, second provides usage guidance. No redundant words or fluff. Front-loaded with core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description adequately explains input and process. It does not specify return format (e.g., text, JSON) or error handling, but for a simple search tool with two parameters and high schema coverage, this is mostly complete. Slightly lacking for full transparency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds context about how the tool processes the query (identifies main keyword, loads page), but does not add new parameter-level meaning beyond the schema descriptions. Minimal added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it searches official ABAP syntax documentation and returns relevant syntax section, using specific verb 'searches' and resource 'ABAP syntax documentation'. It distinguishes from siblings like 'search_sap_web' which searches broader SAP web, and 'analyze_abap_context' which analyzes ABAP code context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends calling 'before writing ABAP code to ensure correct syntax', giving clear when-to-use guidance. However, it does not explicitly mention when not to use or suggest alternatives, which would elevate it to a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sap_webA

Searches SAP Help (help.sap.com), SAP Community (community.sap.com) and SAP Notes (me.sap.com) via Tavily Search API. Returns compact results (title + URL + snippet) to minimize token usage. Use for: error messages, SAP Notes, best practices, blog posts, KBAs, migration guides. Requires TAVILY_API_KEY in .env.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query — error message, topic, SAP Note number, or any SAP-related question (e.g. 'CX_SY_OPEN_SQL_DB error SELECT', 'ALV grid editable', 'SAP Note 2081285')
sourcesNoWhich sources to search: 'help' (help.sap.com), 'community' (community.sap.com), 'notes' (me.sap.com). Default: all three.
maxResultsNoMaximum results per source (1–10, default: 5)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It mentions returning compact results (title+URL+snippet) to minimize token usage and the API key requirement. However, it does not disclose rate limits, error handling, or behavior when sources are unavailable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of three sentences, front-loaded with the tool's main purpose. Every sentence adds essential information: what it searches, output format, use cases, and prerequisite. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description still explains the return format (compact results with title, URL, snippet). It covers usage, parameters, and prerequisites comprehensively. However, it could be more explicit about the absence of complex behavior like pagination or sorting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The description adds value by providing examples for the query parameter (e.g., 'SAP Note 2081285') and clarifying sources with human-readable names, going beyond the schema enum descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches three specific SAP resources (help.sap.com, community.sap.com, me.sap.com) via Tavily API, and returns compact results. The verb 'searches' is specific, and the resource is well-defined, distinguishing it from sibling tools like SAPSearch or search_abap_syntax.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists use cases: error messages, SAP Notes, best practices, etc. It also notes the prerequisite TAVILY_API_KEY. However, it does not explicitly contrast with sibling tools or state when not to use it, which would improve the score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_ddic_referencesA

Statically analyzes ABAP source code and checks all referenced table fields against DDIC metadata. Returns a list of invalid field names. ⚡ Recommended to call before write_abap_source to avoid 'Field unknown' syntax errors. Detects: (1) TYPE/LIKE tab-field, (2) table~field (New SQL), (3) SELECT field list FROM table, (4) WHERE clause fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesABAP source code to validate program logic for

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses read-only analysis, return of invalid field names, and detection patterns. However, it omits error handling details (e.g., malformed source) and does not specify the return format—though this is acceptable for a simple validation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a bulleted list of detection patterns. Front-loaded with the main purpose and usage recommendation. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one string input, no output schema, and no annotations, the description sufficiently explains the tool's function and output. It could optionally detail the format of the invalid field names list, but the current level is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters (source) with a description. The tool description adds context by explaining what happens to the source during validation (DDIC reference checking), which provides meaning beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool does static analysis of ABAP source code to check DDIC references, naming four specific detection patterns. This verb+resource definition distinguishes it from sibling tools like SAPWrite or analyze_abap_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends calling before write_abap_source to prevent syntax errors, providing a concrete when-to-use scenario. No exclusion criteria needed for such a targeted tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv2.0.0
    • First observedanalyze_abap_context
    • First observedbatch_read
    • First observedfetch_url
    • First observedfind_tools
    • First observedget_abap_contract
    • First observedlist_tools
    • First observedSAPDiagnose
    • First observedSAPRead
    • First observedSAPSearch
    • First observedSAPWrite
    • First observedsearch_abap_syntax
    • First observedsearch_sap_web
    • First observedvalidate_ddic_references

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation5/5

Each of the 13 tools has a clearly distinct purpose: analyze_abap_context provides structured context, batch_read parallelizes reads, fetch_url fetches web content, find_tools enables deferred tools, get_abap_contract returns compressed interfaces, list_tools lists all tools, the four SAP verbs (Diagnose, Read, Search, Write) consolidate granular operations, search_abap_syntax queries syntax docs, search_sap_web searches SAP resources, and validate_ddic_references checks DDIC references. No two tools overlap in functionality.

Naming Consistency3/5

Most tools follow a verb_noun pattern (e.g., fetch_url, find_tools, search_abap_syntax), but there are stylistic inconsistencies: three tools use a capitalized 'SAP' prefix (SAPDiagnose, SAPRead, SAPSearch, SAPWrite) which mixes with lowercase verb-first names, and 'batch_read' uses an adjective-noun structure. While still readable, the convention is not uniform.

Tool Count5/5

With 13 tools, the set is well-scoped. It provides a reasonable number of high-level abstractions that cover the main workflows (read, write, search, diagnostics, utilities) without overwhelming the user. The count is appropriate for a specialized ABAP development server.

Completeness5/5

The tool set covers all major aspects of ABAP development: reading source code and context, writing and activating code, searching code and documentation, performing diagnostics, validating DDIC references, and enabling/disabling tools. The consolidated SAP verbs (Read, Write, Search, Diagnose) ensure that granular operations are accessible, and utilities like batch_read and fetch_url address additional needs. No obvious gaps are present.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    Not graded
    maintenance
    An MCP server that facilitates seamless interaction with SAP ABAP systems to manage development objects, transport requests, and source code. It provides a comprehensive suite of tools for performing syntax checks, object searches, and code modifications via the ADT API.
    100
    -
  • A
    license
    C
    quality
    D
    maintenance
    An MCP server that enables seamless communication between ABAP systems and MCP clients using the ABAP Development Tools (ADT) API. It provides tools for managing ABAP objects, handling transport requests, and performing code analysis directly through MCP-compatible interfaces.
    100
    MIT
  • F
    license
    B
    quality
    Not graded
    maintenance
    An MCP server that enables AI assistants to interact with SAP systems via the ABAP Development Tools (ADT) REST API. It allows users to read ABAP source code, inspect DDIC objects, and execute SQL queries directly.
    66
    -