Zusammenfassung
Mach jeden OData-V2- oder -V4-Service, auch SAP Gateway, zu MCP-Tools für Claude, ChatGPT und Copilot. Liest $metadata: Bezeichnungen, Schlüssel, Einheiten.
Kurzfassung: AnythingMCP hat einen Connector-Typ OData. Zeig ihn auf einen OData-V2- oder -V4-Service oder auf ein SAP Gateway, und Claude, ChatGPT und Copilot bekommen fünf Tools: Services finden, Entity-Sets und Felder mit ihren fachlichen Bezeichnungen lesen, Zeilen abfragen und eine Entität per Schlüssel holen. Abfragen werden vor dem Senden gegen $metadata geprüft, Server-Paging wird verfolgt, und Antworten aus V2 und V4 kommen als einfache Zeilen zurück. Du kannst außerdem das $metadata eines Service als benannte Tools importieren, ein List- und ein Get-Tool pro Entity-Set.
| Auf einen Blick | |
|---|---|
| Protokolle | OData V2 und V4, erkannt aus $metadata |
| SAP | Gateway-Servicekatalog (V2 und V4), sap-client, sap-language, CSRF-Token für Schreibzugriffe |
| Eingebaute Tools | 5, nur lesend: Services auflisten, Service beschreiben, Entität beschreiben, abfragen, Entität holen |
| Import | $metadata → <set>_list- und <set>_get-Tools pro Entity-Set |
| Auth | Jede REST-Methode: Basic, OAuth 2.0, API-Key, Zertifikate, Login-Token |
| Getestet | Northwind V2 und V4 und TripPin V4 auf services.odata.org |
| Hosting | Self-hosted (Open Source, AGPL-3.0) oder AnythingMCP Cloud |
Warum OData mehr braucht als einen REST-Import
Ein OData-Service beschreibt sich selbst. Sein $metadata-Dokument listet jedes Entity-Set, seine Schlüssel, den Typ jedes Felds und, bei SAP, die Bezeichnung, die ein Benutzer auf dem Bildschirm sieht, die Währung oder Einheit, die zu jedem Betrag gehört, und welche Felder Dimensionen und welche Kennzahlen sind. Ein generischer REST-Import wirft das meiste davon weg, und das Modell muss raten, dass NetAmount in TransactionCurrency steht oder dass ein analytischer Service über einen Parameter gefiltert werden muss.
Der OData-Connector liest $metadata und gibt es an das Modell weiter. Claude sieht, dass NetAmount die Bezeichnung Net Amount trägt und seine Währung in TransactionCurrency hat, und wenn es einen Feldnamen falsch schreibt, antwortet der Connector mit „Unknown field … Did you mean …“, statt den Fehler an den Server weiterzugeben.
Zwei Wege dahin
- Der Connector-Typ OData. Wähle OData, wenn du einen Connector anlegst. Aktiviere SAP Gateway (S/4HANA, ECC, BW) für ein SAP-System: Die Basis-URL ist der Host, z. B.
https://s4.example.com:44300, und die Services kommen aus SAPs Katalog. Lass es für einen einzelnen OData-Service aus: Die Basis-URL ist dann die Service-Root, z. B.https://services.example.com/odata/v4/Sales. - Ein REST-Connector mit OData-Einstellungen. Ein REST-Connector, dessen Einstellungen einen
odata-Block haben, bekommt dieselben eingebauten Tools; seine eigenen Tools bleiben normale REST-Aufrufe. Der Adapter für SAP S/4HANA Cloud funktioniert so.
Beide laufen auf der REST-Engine, also gilt jede REST-Authentifizierung, ebenso Retries, der ausgehende SSRF-Schutz und der Proxy.
Die eingebauten Tools
Jeder OData-Connector bekommt fünf Tools mit dem Namen <prefix>_…. Der Präfix ist der Connector-Name plus _odata, oder einer, den du festlegst.
| Tool | Was es tut |
|---|---|
<prefix>_list_services | SAP: durchsucht den Gateway-Servicekatalog, V2 und V4, eine Stunde gecacht. Sonst die in den Einstellungen gelisteten Services oder die einzelne Service-Root. |
<prefix>_describe_service | Entity-Sets mit Bezeichnungen, Schlüsseln und Anzahl der Felder, gekennzeichnet als analytical (der Server aggregiert), parameters (parametrisierte View), requiredInFilter oder readOnly. $metadata wird 24 Stunden gecacht. |
<prefix>_describe_entity | Jedes Feld mit Bezeichnung, Typ, Schlüssel, seinem Währungs- oder Einheitenfeld, seinem Textfeld, ob es filter- und sortierbar ist, und seiner Rolle als Dimension oder Kennzahl; Navigation Properties; Hinweise für analytische und parametrisierte Sets. |
<prefix>_query | select, filter, orderby, top (bis 1.000), skip, expand, parameters, dazu bei V4 apply und search. Feldnamen werden zuerst geprüft, Pflichtfilter durchgesetzt, Server-Paging nur auf dem eigenen Host des Connectors verfolgt, und die Antwort wird flach gemacht: einfache Zeilen, ISO-Datumswerte, Dezimalzahlen als Strings, Gesamtzahl und nextSkip. |
<prefix>_get_entity | Eine Entität per Schlüssel, auch zusammengesetzte Schlüssel wie {"SalesOrder": "1", "SalesOrderItem": "10"}. |
Die eingebauten Tools lesen nur und sind für MCP-Clients als nur lesend markiert.
So richtest du es ein
Schritt 1: AnythingMCP starten
Für einen öffentlichen OData-Service reicht die AnythingMCP Cloud. Für ein SAP Gateway oder einen Service in deinem eigenen Netzwerk betreibst du AnythingMCP self-hosted dort, wo es den Service 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
Interne Hostnamen trägst du in SSRF_ALLOWED_HOSTS ein; private Adressen lehnt AnythingMCP standardmäßig ab.
Schritt 2: Einen OData-Connector anlegen
Leg einen neuen Connector an, wähle OData und gib die Basis-URL ein. Zum Ausprobieren ohne Konto irgendwo nimmst du den öffentlichen Northwind-Service: https://services.odata.org/V4/Northwind/Northwind.svc, SAP Gateway aus, keine Authentifizierung. Für SAP aktivierst du SAP Gateway und gibst den dreistelligen Mandanten und die Sprache an.
Schritt 3: Authentifizierung setzen und Services einschränken
Wähle die Authentifizierung, die dein Service erwartet: Basic Auth mit einem technischen Benutzer, OAuth 2.0 (Client Credentials oder Authorization Code), einen API-Key, ein Client-Zertifikat oder ein Login-Token. In den OData-Einstellungen des Connectors listest du unter Allowed services die Service-Pfade, die das Modell aufrufen darf (* als Platzhalter); andere Services werden abgelehnt.
Schritt 4: Testen und Tools importieren
Test connection liest den SAP-Katalog oder das $metadata des Service. Wenn du benannte Tools für die Entity-Sets willst, die das Modell am häufigsten braucht, öffne Import Tools → OData $metadata, gib den Service-Pfad an (SAP) oder lass ihn leer (einzelner Service) und wähle die Entity-Sets. Mehr dazu unten.
Schritt 5: Claude, ChatGPT oder Copilot verbinden
- Claude: Anpassen → Connectors → Eigenen Connector hinzufügen, die URL deines MCP-Servers einfügen. Schritt für Schritt: eigenen Connector zu Claude hinzufügen.
- ChatGPT: dieselbe öffentliche HTTPS-URL in den Einstellungen von ChatGPT als Connector (App) hinzufügen.
- Claude Code, Cursor, VS Code / Copilot: die URL mit einem
X-API-Key-Header hinzufügen.
Tools aus $metadata importieren
Import Tools → OData $metadata macht aus Entity-Sets benannte Tools: <set>_list mit filter, select, orderby, top, skip und expand, und <set>_get mit den Schlüsselparametern. Das Dokument wird mit den Zugangsdaten des Connectors geholt; du kannst auch ein $metadata-Dokument einfügen und den Import auf einige Entity-Sets beschränken. Ein erneuter Import eines Service aktualisiert seine Tools und entfernt nur die Tools dieses Service, die verschwunden sind, nie die eingebauten oder die Tools eines anderen Service.
Auf einem OData-Connector bekommen importierte und selbst geschriebene HTTP-Tools den SAP-Mandanten und die Sprache, das JSON-Format bei V2 und flache Antworten. Schreibzugriffe auf SAP (POST, PUT, PATCH, DELETE) holen zuerst ein CSRF-Token mit den Session-Cookies. Geschrieben wird nur über Tools, die du selbst importierst oder schreibst.
SAP Gateway: S/4HANA, ECC und BW
- Ein technischer Benutzer vom Typ System mit produktivem Passwort in dem Mandanten, den du lesen willst.
- Eine Rolle mit
S_SERVICEfür die Services, die das Modell aufrufen darf, und reinen Anzeigeberechtigungen. Zum Durchsuchen des Katalogs zusätzlich den V2-Katalogservice/IWFND/CATALOGSERVICEund den V4-Katalog. SAP prüft diese Berechtigungen bei jedem Aufruf; sie sind die eigentliche Grenze. - Aktive Services in
/IWFND/MAINT_SERVICE(V2) und/IWFND/V4_ADMIN(V4). - Netzwerk: Der Gateway-Port ist meist intern. Betreibe AnythingMCP self-hosted im Netzwerk oder erreiche ihn per VPN.
SAPs API-Richtlinie erwartet, dass Integrationen von Drittanbietern veröffentlichte APIs (die API_*-Services im SAP Business Accelerator Hub) oder selbst gebaute Services nutzen; schränke Allowed services entsprechend ein.
Für S/4HANA On-Premise und Private Cloud gibt es einen fertigen Adapter, SAP S/4HANA (OData). Er richtet all das mit dem Präfix s4 ein (s4_list_services, s4_describe_service, s4_describe_entity, s4_query, s4_get_entity) und bringt fertige Tools für Journalbuchungszeilen, Fakturen, Kundenaufträge, Geschäftspartner, Materialbestand und Produkte mit, dazu s4_guide, einen Leitfaden zu Filtern, analytischen Services und KPIs. Er wird mit Basic Auth installiert, und du kannst den Connector auf OAuth 2.0 umstellen. Der Adapter für SAP S/4HANA Cloud hat dieselben eingebauten Tools als s4_cloud_* über seine Communication-Arrangement-APIs.
Wenn du die Tabellen von S/4HANA lieber direkt liest, siehe SAP S/4HANA über HANA SQL.
Einstellungen
| Einstellung | Bedeutung |
|---|---|
| SAP Gateway | Katalogsuche und SAP-Parameter. Ergibt sich aus einem SAP-Mandanten. |
| SAP-Mandant | Dreistelliger Mandant, bei jeder Anfrage als sap-client gesendet. |
| Sprache | Als sap-language gesendet, z. B. DE. |
| Allowed services | Service-Pfade, die das Modell aufrufen darf, * als Platzhalter. |
| Version | v2 oder v4, um die Erkennung aus $metadata zu übersteuern. |
| Max rows | Zeilenlimit pro Abfrage, höchstens 1.000. |
| Tool-Präfix | Präfix der Namen der eingebauten Tools. |
Jede Einstellung kann {{VARIABLES}} aus den Umgebungsvariablen des Connectors enthalten.
Prompts zum Ausprobieren
- „Welche Services im Katalog haben mit Fakturen zu tun?“
- „Beschreib die Entität Kundenauftrag: Welche Felder sind Beträge, und in welcher Währung?“
- „Nettoumsatz pro Verkaufsorganisation im September, aus den Fakturen.“
- „Zeig Kundenauftrag 1 mit allen Positionen.“
- Auf Northwind: „Welche zehn Produkte haben den höchsten Stückpreis, und welcher Lieferant liefert sie?“
FAQ
Welche OData-Versionen werden unterstützt?
V2 und V4. Die Version wird aus $metadata erkannt; du kannst sie in den Einstellungen übersteuern.
Muss ich $metadata zuerst in OpenAPI umwandeln?
Nein. Der OData-Connector liest $metadata direkt, und Import Tools → OData $metadata erzeugt die Tools daraus.
Kann Claude über OData Daten ändern? Nicht über die fünf eingebauten Tools, die nur lesen. Schreibzugriffe brauchen Tools, die du selbst importierst oder schreibst, und eine Rolle des MCP-Servers kann sie weglassen; Schreibzugriffe auf SAP holen das CSRF-Token automatisch.
Funktioniert es mit SAP S/4HANA On-Premise und ECC? Ja, über SAP Gateway, mit einem self-hosted AnythingMCP, das es erreicht. Der Adapter SAP S/4HANA (OData) ist der schnellste Start für S/4HANA.
Wie werden große Ergebnisse behandelt?
Eine Abfrage liefert höchstens 1.000 Zeilen. Der Connector folgt dem Paging des Servers auf demselben Host und gibt nextSkip zurück, damit das Modell die nächste Seite anfragen kann.
Funktioniert es auch mit ChatGPT und Copilot? Ja. Derselbe MCP-Server funktioniert in Claude, ChatGPT, GitHub Copilot, Cursor und Claude Code.
Siehe auch
- SAP mit Claude verbinden: alle SAP-Connectors im Überblick
- SAP S/4HANA über HANA SQL: der Datenbank-Weg, mit SAPs Data Dictionary als Tools
- OpenAPI to MCP: REST-APIs mit OpenAPI- oder Swagger-Spezifikation
- SOAP zu MCP: WSDL-Services
- OData in der AnythingMCP-Doku
War dieser Guide hilfreich?