Zusammenfassung
Lass Muse Geschäftsfragen aus SAP S/4HANA On-Premise oder Private Cloud beantworten, direkt aus HANA, mit SAPs Data Dictionary als Tools. Nur lesend, selbst gehostet, ohne BTP.
Frag einfach
Beispiel-Prompts für SAP S/4HANA (HANA SQL)
Klick auf einen Prompt, um ihn zu kopieren. In Claude, ChatGPT, Cursor, Gemini, Copilot oder OpenClaw einfügen — und gegen diesen Connector laufen lassen.
Claude ist KI und kann Fehler machen. Bitte Antworten gegenprüfen.
Kurzfassung: Mit dem Connector SAP S/4HANA (HANA SQL) liest Muse ein S/4HANA-System direkt aus seiner HANA-Datenbank. Bevor es eine Abfrage schreibt, schlägt Muse in SAPs eigenem Data Dictionary nach, was BUKRS, HSL oder VBRK bedeuten, und wählt so die richtige Tabelle, das richtige Währungsfeld und den richtigen Mandanten. Die Session ist in HANA selbst schreibgeschützt, Ergebnisse sind auf 1.000 Zeilen begrenzt und jedes Statement hat ein Timeout. Du brauchst einen HANA-Datenbankbenutzer von der SAP-Basis und ein self-hosted AnythingMCP, das den HANA-SQL-Port erreicht.
| Auf einen Blick | |
|---|---|
| Connector | SAP S/4HANA (HANA SQL), 10 Tools |
| Systeme | S/4HANA On-Premise, Private Cloud (RISE), HANA Enterprise Cloud |
| Zugriff | Nur lesend: ein einzelnes SELECT pro Aufruf, SET TRANSACTION READ ONLY, höchstens 1.000 Zeilen, 60 s Timeout |
| Treiber | hdb mitgeliefert; SAPs @sap/hana-client optional, von dir installiert |
| Hosting | Self-hosted in dem Netzwerk, das HANA erreicht (AnythingMCP ist Open Source, AGPL-3.0) |
| Getestet | Jedes Tool gegen ein laufendes SAP S/4HANA 2025 |
- 10 sap_*-Tools
- Rollen und Tool-Rechte
- Standardmäßig nur lesend
- Audit-Log
Warum ein einfacher SQL-Connector für SAP nicht reicht
SAPs Tabellen und Felder sind kurze, meist deutsche Abkürzungen: ACDOCA ist das Universal Journal, RBUKRS der Buchungskreis, HSL der Betrag in Hauswährung, VBRK der Fakturakopf. Ein Modell, das nur Spaltennamen sieht, rät, und SAP bestraft Raten: Beträge gehören zu einem Währungsfeld in einer anderen Spalte, jede Tabelle ist nach Mandant (MANDT) getrennt, Datumswerte sind YYYYMMDD-Strings und Belegnummern haben führende Nullen.
Der Connector gibt Muse SAPs eigenes Dictionary als Tools. Er liest die Tabellen, mit denen SAP sich selbst beschreibt (DD02L, DD03L, DD04T, DD07T, DD08L und die CDS-Annotationen). So sieht Muse die fachliche Bezeichnung jedes Felds, welches Währungs- oder Mengeneinheitenfeld zu welchem Betrag gehört, was die Codes eines Felds bedeuten, wie Tabellen verknüpft sind und welche CDS-Views SAP freigegeben hat und analytisch sind. Erst dann schreibt es die Abfrage.
Wie Muse die Daten findet
sap_guideerklärt SAPs Datenmodell für SQL: den Mandanten, Datumswerte alsYYYYMMDD, Währungen, das Universal Journal. Kostet nichts und berührt keine Daten.sap_org_structurelistet die Buchungskreise mit Währung und Geschäftsjahresvariante, Werke und Verkaufsorganisationen. Fast jede Frage ist auf eine davon eingegrenzt.sap_search_cds_viewsundsap_search_tablesfinden, wo die Daten liegen, bevorzugt in SAPs freigegebenen analytischen CDS-Views, in denen Joins, Währungen und Vorzeichen schon gelöst sind.sap_describe_tablegibt jedem Feld seine betriebswirtschaftliche Bezeichnung, das Währungs- oder Mengenfeld zu jedem Betrag und die Prüftabelle jedes Codes.sap_queryführt ein einzelnes lesendesSELECTaus, gefiltert nach Mandant, Organisationseinheit und Periode, aggregiert in SQL.
Was du fragen kannst
Drei Fragen von Anfang bis Ende. Das SQL stammt aus den Rezepten in sap_guide; ersetze Mandant 100, Buchungskreis 1010 und die Datumswerte durch deine eigenen. Muse nennt die Annahmen, die es getroffen hat, etwa welche Konten als Umsatz zählen, und bittet dich, sie zu bestätigen.
“Wie hoch war unser Umsatz pro Buchungsperiode 2025?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAUniversal Journal, führendes Ledger 0L
SELECT POPER, RHCUR AS CURRENCY, -SUM(HSL) AS REVENUE
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND GJAHR = '2025'
AND RACCT BETWEEN '0040000000' AND '0049999999' -- Umsatzkonten: Bereich bestätigen
GROUP BY POPER, RHCUR ORDER BY POPER;
Eine Zeile pro Buchungsperiode, in Hauswährung. Umsatz wird im Haben gebucht, daher wird die Summe negiert.
“Welche Kunden haben Rechnungen, die mehr als 60 Tage überfällig sind, und wie viel?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAUniversal Journal, Debitorenzeilen (KOART = D)
SELECT KUNNR, RHCUR AS CURRENCY,
SUM(HSL) AS OPEN_AMOUNT,
SUM(CASE WHEN NETDT >= '20251231' THEN HSL ELSE 0 END) AS NOT_DUE,
SUM(CASE WHEN NETDT < '20251231' AND NETDT >= '20251101' THEN HSL ELSE 0 END) AS OVERDUE_1_60,
SUM(CASE WHEN NETDT < '20251101' THEN HSL ELSE 0 END) AS OVERDUE_OVER_60
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND KOART = 'D' AND POPER <> '000'
AND BUDAT <= '20251231' AND (AUGDT = '00000000' OR AUGDT > '20251231')
GROUP BY KUNNR, RHCUR ORDER BY OVERDUE_OVER_60 DESC LIMIT 20;
Offene Posten zum Stichtag, nach Nettofälligkeit gerastert. Posten, die erst nach dem Stichtag ausgeglichen wurden, zählen an diesem Tag noch als offen.
“Wer waren 2025 unsere 10 umsatzstärksten Kunden?”
HANA SQLsap_guidesap_field_valuessap_queryVBRKFakturakopfVBRPFakturapositionenKNA1Kundenstamm
SELECT k.KUNAG, c.NAME1, k.WAERK, SUM(p.NETWR) AS NET_SALES
FROM VBRK k JOIN VBRP p ON p.MANDT = k.MANDT AND p.VBELN = k.VBELN
LEFT JOIN KNA1 c ON c.MANDT = k.MANDT AND c.KUNNR = k.KUNAG
WHERE k.MANDT = '100' AND k.FKDAT BETWEEN '20250101' AND '20251231'
AND k.FKSTO = '' AND k.VBTYP = 'M'
GROUP BY k.KUNAG, c.NAME1, k.WAERK ORDER BY NET_SALES DESC LIMIT 10;
Zehn Zeilen mit Kundennummer, Name, Währung und Nettoumsatz. Die Rangfolge kommt aus den Fakturen, nicht aus dem Journal: in ACDOCA steht der Kunde auf der Forderungszeile, nicht auf der Umsatzzeile. Muse liest zuerst die Werte von VBTYP, um Rechnungen von Gutschriften und Stornos zu unterscheiden.
HANA SQL oder OData?
AnythingMCP verbindet S/4HANA On-Premise und Private Cloud auf zwei Wegen. Nimm einen davon, oder beide nebeneinander.
| HANA SQL (diese Anleitung) | OData | |
|---|---|---|
| Liest | Jede Tabelle und CDS-View, die der Datenbankbenutzer lesen darf | Die OData-Services, die der SAP-Benutzer aufrufen darf |
| SAP-Berechtigungen | Greifen nicht: die Datenbank-Grants sind die Grenze | Prüft SAP bei jedem Aufruf |
| Stark bei | Summen über Millionen Zeilen, Finanz- und modulübergreifenden Analysen | Veröffentlichten APIs, Business-Objekten, SAPs eigenen Prüfungen |
| Du brauchst | Einen HANA-Datenbankbenutzer, Netzwerkzugang zum SQL-Port, eine Lizenz, die es erlaubt | Einen technischen SAP-Benutzer, aktive Gateway-Services |
Was du brauchst
- Eine SAP-Basis-Administration, die im Tenant mit dem ABAP-Schema (meist
SAPHANADBoderSAPABAP1) einen Benutzer anlegen kann. - Die Verbindungsdaten: Host, der SQL-Port des Tenants (
3<instance>15für den ersten Tenant,3<instance>41und höher für weitere), Tenant-Name, Schema, der dreistellige SAP-Mandant und die SAP-Sprache für Texte (EEnglisch,DDeutsch). - Ein self-hosted AnythingMCP, das diesen Port erreicht. Der HANA-SQL-Port ist normalerweise nur im Firmennetz oder in der Landing Zone von SAPs Private Cloud erreichbar.
- Einen Lizenz-Check. Direkter SQL-Zugriff einer Drittanwendung auf das ABAP-Schema richtet sich nach deiner SAP-HANA-Lizenz. Eine mit S/4HANA gebündelte Runtime-Lizenz deckt ihn meist nicht ab, eine Full-Use-Lizenz schon. Frag dein SAP-Account-Team, bevor du ein Produktivsystem anbindest. In SAPs Private-Cloud-Angeboten beantragst du den Datenbankbenutzer und den Netzwerkweg bei SAP.
So richtest du es ein
Schritt 1: Einen lesenden Datenbankbenutzer anlegen
Im Tenant mit dem ABAP-Schema:
CREATE USER AMCP_READER PASSWORD "<strong password>" NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER AMCP_READER DISABLE PASSWORD LIFETIME;
-- dictionary tools
GRANT SELECT ON SAPHANADB.DD02L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD02T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03ND TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD04T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD07T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD08L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD05S TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDHEADANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDFIELDANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.ARS_W_API_STATE TO AMCP_READER;
-- organization structure
GRANT SELECT ON SAPHANADB.T001 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001K TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001W TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TKA01 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKOT TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T024E TO AMCP_READER;
-- then the business tables and CDS views your use cases need, e.g.
GRANT SELECT ON SAPHANADB.ACDOCA TO AMCP_READER;
GRANT SELECT ON SCHEMA SAPHANADB ist für breite Analysen einfacher, macht aber alles im Schema lesbar, HR-Daten eingeschlossen. SQL wendet SAPs Anwendungsberechtigungen (Buchungskreis, Verkaufsorganisation, HR-Prüfungen) nicht an: Was der Datenbankbenutzer lesen darf, darf Muse lesen.
Optional begrenzt du die Statements des Benutzers auch serverseitig:
CREATE WORKLOAD CLASS "AMCP_READER_WC" SET 'STATEMENT TIMEOUT' = '60', 'STATEMENT MEMORY LIMIT' = '20';
CREATE WORKLOAD MAPPING "AMCP_READER_WM" WORKLOAD CLASS "AMCP_READER_WC" SET 'USER NAME' = 'AMCP_READER';
Schritt 2: AnythingMCP im Netzwerk starten
Auf einem Host, der den HANA-SQL-Port erreicht:
mkdir anythingmcp && cd anythingmcp
curl -fsSLo docker-compose.yml \
https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d # → http://localhost:3000
Trag den HANA-Host in SSRF_ALLOWED_HOSTS in der .env ein: Private Adressen lehnt AnythingMCP standardmäßig ab.
Schritt 3: Den Connector installieren
Öffne Connectors → Marketplace, suche nach S/4HANA und installiere SAP S/4HANA (HANA SQL):

Dann füllst du die Variablen aus. Die, aus denen die Verbindungsadresse besteht, sind Pflicht, bevor der Connector angelegt werden kann:
| Variable | Beispiel |
|---|---|
SAP_HANA_HOST | hana.internal |
SAP_HANA_PORT | 30015 |
SAP_HANA_TENANT | S4P |
SAP_HANA_SCHEMA | SAPHANADB |
SAP_CLIENT | 100 |
SAP_LANGUAGE | D |
SAP_HANA_TLS | verify, no-verify bei einem selbstsignierten Zertifikat, oder off |
SAP_HANA_USER / SAP_HANA_PASSWORD | AMCP_READER und sein Passwort |

Die Installation macht einen Testaufruf (sap_org_structure) und zeigt dir, ob Zugangsdaten und Grants funktionieren. Das Passwort wird verschlüsselt gespeichert und Muse nie gezeigt.

Schritt 4: Den MCP-Server zu Muse hinzufügen
Öffne in Muse Settings → Connectors, wähle Add custom connector, füg die URL deines MCP-Servers ein (steht unter MCP Servers in AnythingMCP) und melde dich bei AnythingMCP an, wenn Muse danach fragt. Die URL muss öffentlich per HTTPS erreichbar sein, weil Muse sich aus der Cloud von Meta verbindet; veröffentlicht wird nur der MCP-Endpunkt, nie der HANA-Port.
Schritt 5: Fragen
Fang mit etwas an, das die Daten eingrenzt, zum Beispiel „Welche Buchungskreise gibt es in diesem System, und in welcher Währung?“. Der Connector sagt Muse, zuerst sap_guide zu lesen; von dort arbeitet es sich selbstständig durch die Dictionary-Tools.
Die Tools
| Tool | Was Muse davon bekommt |
|---|---|
sap_guide | Das SAP-Datenmodell für SQL erklärt, nach Themen: Grundlagen (Mandant, Datumswerte, führende Nullen, Währungen), Finanzen (das Universal Journal ACDOCA), Vertrieb, Bestand, Einkauf, Operations, Stolperfallen und Abfrage-Rezepte. Kostet nichts und berührt keine Daten. |
sap_org_structure | Buchungskreise mit Währung, Kontenplan und Geschäftsjahresvariante; Kostenrechnungskreise, Werke, Verkaufs- und Einkaufsorganisationen. |
sap_search_tables | Tabellen nach Name oder Beschreibung mit ihrer Zeilenzahl, mit Hinweis auf S/4HANA-Kompatibilitäts-Views, die einfaches SQL falsch lesen würde. |
sap_describe_table | Jedes Feld mit Bezeichnung, Schlüsselkennzeichen, Typ, dem Währungs- oder Mengeneinheitenfeld jedes Betrags und der Prüftabelle. |
sap_find_fields | Welche Tabellen ein fachliches Feld enthalten, z. B. „Nettofälligkeit“. |
sap_field_values | Was die Codes eines Felds bedeuten, z. B. die Vertriebsbelegtypen der Fakturen. |
sap_table_relations | Fremdschlüssel mit ihren Join-Bedingungen, und die Texttabelle. |
sap_search_cds_views | SAPs CDS-Views nach Name oder Bezeichnung, mit Kennzeichen für freigegebene und analytische Views. |
sap_describe_cds_view | Spalten einer CDS-View mit Bezeichnungen, Kennzahlen, Währungs- und Einheitenfeldern und Assoziationen. |
sap_query | Ein einzelnes lesendes SELECT, auf 1.000 Zeilen begrenzt und mit Timeout. |

Was der Connector durchsetzt
SAPs nativen Treiber verwenden
AnythingMCP liefert hdb mit, SAPs HANA-Treiber in reinem JavaScript (Apache-2.0). Er deckt Benutzer und Passwort, TLS, Multi-Tenant-Systeme und alles ab, was der Connector tut. SAPs nativer Treiber @sap/hana-client bringt zusätzlich Kerberos, den Secure User Store (hdbuserstore) und Connection-Pooling. Er steht unter der SAP Developer License, die uns die Weitergabe nicht erlaubt, deshalb ist er nie Teil des Images: Du installierst ihn in deine eigene Installation, entweder indem du das Image erweiterst oder ihn als Volume einbindest, und wählst ihn mit driver=hana-client im Connection-String oder mit HANA_DRIVER=hana-client für alle HANA-Connectors. Prüf, ob dein SAP-Vertrag den produktiven Einsatz abdeckt. Auf arm64-Hosts bleibst du beim mitgelieferten hdb oder baust ein eigenes Debian-basiertes Image. Schritt für Schritt: SAP HANA in der AnythingMCP-Doku.
Prompts zum Ausprobieren
- „Zeig mir den Umsatz pro Buchungsperiode für Buchungskreis 1010 im Jahr 2025.“
- „Welche Kunden haben offene Forderungen, die älter als 30 Tage sind, und wie viel pro Kunde?“
- „Die 10 umsatzstärksten Kunden dieses Jahres nach Nettoumsatz, aus den Fakturen.“
- „Welche freigegebenen analytischen CDS-Views decken Journalbuchungen ab? Beschreib die Kennzahlen der ersten.“
- „Was bedeuten die Werte des Vertriebsbelegtyps in den Fakturen?“
- „Warenbewegungen pro Bewegungsart in Werk 1010 im letzten Monat.“
Fehlerbehebung
- Eine CDS-View liefert keine Zeilen.
SAP_CLIENTfehlt oder ist falsch; der Connector braucht ihn, umCDS_CLIENTzu setzen. - Verbindung abgelehnt oder Weiterleitung auf einen unbekannten Host. Nimm den eigenen SQL-Port des Tenants statt des Ports der Systemdatenbank, die auf einen internen Hostnamen weiterleiten kann, den der Connector nicht auflöst.
- „Insufficient privilege“. Die Tabelle ist dem Datenbankbenutzer nicht freigegeben. Gib sie frei, oder bitte Muse, eine Tabelle oder CDS-View zu nehmen, die es lesen darf.
- Zertifikatsfehler. Setz
SAP_HANA_TLS=no-verifybei einem selbstsignierten Zertifikat, oder installiere die CA. - Eine Abfrage läuft ins Timeout. Bitte Muse, nach Buchungskreis, Periode oder Werk zu filtern und in SQL zu aggregieren; erhöhe
statementTimeoutnur, wenn die Abfrage wirklich groß ist.
FAQ
Kann Muse über diesen Connector Daten in SAP ändern?
Nein. Die HANA-Session ist schreibgeschützt, es läuft nur ein einzelnes SELECT, Schreibzugriffe und sperrende Lesezugriffe werden abgelehnt. Leg den Datenbankbenutzer nur mit SELECT-Grants an, dann setzt HANA dieselbe Regel durch.
Werden SAP-Berechtigungen beachtet? Nein. SQL umgeht SAPs Anwendungsberechtigungen, die Datenbank-Grants entscheiden also, was Muse lesen kann. Wenn SAPs Berechtigungsprüfungen greifen sollen, nimm den OData-Weg, oder gib nur Tabellen und Views frei, die gelesen werden dürfen.
Erlaubt meine SAP-Lizenz direkten SQL-Zugriff auf S/4HANA? Das hängt von deiner HANA-Lizenz ab. Eine mit S/4HANA gebündelte Runtime-Lizenz deckt SQL-Zugriff von Drittanwendungen auf das ABAP-Schema meist nicht ab, eine Full-Use-Lizenz schon. Prüf deinen Vertrag, bevor du ein Produktivsystem anbindest.
Funktioniert es mit S/4HANA Private Cloud (RISE)? Ja, wenn SAP einen Datenbankbenutzer und einen Netzwerkweg zum HANA-SQL-Port bereitstellt und AnythingMCP dort läuft, wo es diesen Port erreicht. Beides beantragst du bei SAP.
Kann ich statt self-hosted die AnythingMCP Cloud nutzen? Nur wenn der HANA-SQL-Port aus dem Internet erreichbar ist, was selten der Fall und selten ratsam ist. Betreibe AnythingMCP self-hosted neben SAP.
Funktioniert es auch mit ChatGPT und Copilot? Ja. Derselbe MCP-Server funktioniert in ChatGPT (Developer Mode, bezahlte Pläne), GitHub Copilot, Cursor, Claude und Claude Code, mit denselben Tools und denselben Lesebeschränkungen.
Brauche ich dafür SAP BTP oder SAP Joule? Nein. Der Connector spricht direkt mit der HANA-Datenbank, braucht also weder BTP noch Joule noch das SAP Gateway. Er läuft auch neben Joule, wenn du beides nutzt.
Ist das ein SAP HANA MCP Server, den ich selbst betreiben kann? Ja. AnythingMCP ist Open Source (AGPL-3.0) und läuft mit Docker Compose neben SAP. Das Repository sap-hana-mcp-server enthält diesen Connector für sich, und SAP HANA MCP Server erklärt ihn aus Entwicklersicht.
Wo ist Muse verfügbar? Meta bietet Muse derzeit in den USA und in Kanada an, im Web, in den Apps für iOS und Android und in WhatsApp.
Prüft Meta diesen Connector? Nein. Meta prüft Custom Connectors nicht. Muse sieht nur die Tools, die du in AnythingMCP für diesen MCP-Server eingeschaltet hast, und du kannst den Connector jederzeit unter Settings → Connectors trennen.
Siehe auch
- SAP HANA MCP Server: derselbe Connector aus Entwicklersicht
- OData zu MCP: der andere Weg zu S/4HANA On-Premise, mit SAPs Berechtigungsprüfungen
- SAP mit Meta Muse verbinden: alle SAP-Connectors im Überblick
- Datenbank zu MCP: SAP HANA als einfacher Datenbank-Connector, neben SQL Server, PostgreSQL und Oracle
- SAP HANA auf GitHub: Optionen des Connection-Strings und der native Treiber
- Verbinde mit Claude
- Verbinde mit Cursor
- Verbinde mit Gemini
War dieser Guide hilfreich?