Zum Inhalt springen

JTL-Wawi mit ChatGPT verbinden

SQL2REST als eigenen MCP-Server in ChatGPT hinzufügen, anmelden, fertig. Es läuft im Browser auf chatgpt.com und gehört zu deinem ChatGPT-Konto.

Nur-Lese-API: deine ERP-Daten werden nie verändert

Frag deine JTL-Wawi …

Beispiel: SQL2REST als MCP-Server in ChatGPT, im Browser

Zum Ausprobieren:

Live aus der JTL-Wawi · nur Lesezugriff · HTTPS-Tunnel für sicheren Fernzugriff · deine Datenbank bleibt auf deinem Server

Was du dafür brauchst

SQL2REST v1.4.0 oder neuer

Läuft auf deinem Server, dort wo auch deine JTL-Wawi liegt.

Ein HTTPS-Tunnel

Damit ChatGPT deinen Server erreicht. Er ist eingebaut und im Team-Tarif enthalten, HTTPS inklusive: nichts zu installieren, kein Zertifikat zu besorgen, keine Portfreigabe.

Team- oder Agency-Tarif

ChatGPT erreicht deinen Server über eine öffentliche Adresse, und die gibt es ab dem Team-Tarif. Im Personal-Tarif gibt es keine, und der Weg auf dieser Seite setzt sie voraus.

Vielleicht der Entwicklermodus

Fehlt in ChatGPT der Punkt „Benutzerdefinierten MCP-Server erstellen“, schaltest du in einem persönlichen Konto zuerst den Entwicklermodus ein. Bei manchen Konten ist der Punkt direkt da. In einem Firmenkonto hängt es an der Rolle, dazu der Abschnitt weiter unten.

In sechs Schritten verbunden

Das ist der komplette Weg. Kein Schritt ausgelassen, damit du vorher weißt, was auf dich zukommt.

  1. In ChatGPT auf „Einstellungen“, dort auf „Plugins“ und auf „Plugins durchsuchen“. Dann oben rechts auf das Pluszeichen und auf „Benutzerdefinierten MCP-Server erstellen“.

    So sieht der Weg durch die Einstellungen aus.

    Der Bereich „Plugins“ in den ChatGPT-Einstellungen mit dem Eintrag „Plugins durchsuchen“ Die Plugin-Übersicht in ChatGPT mit dem geöffneten Pluszeichen-Menü und dem Eintrag „Benutzerdefinierten MCP-Server erstellen“

    Fehlt dieser Eintrag, sieh in den Einstellungen nach, ob es dort unter „Sicherheit und Anmeldung“ einen Schalter „Entwicklermodus“ gibt. Wenn ja, einschalten, danach ist der Eintrag da. Viele Konten brauchen den Schalter nicht mehr und haben ihn auch nicht: OpenAI hat ihn Anfang Oktober 2026 abgeschafft, und die Umstellung erreicht die Konten nach und nach.

    Die ChatGPT-Einstellungen unter „Sicherheit und Anmeldung“ mit dem eingeschalteten Schalter „Entwicklermodus“

    ChatGPT warnt an dieser Stelle allgemein vor Verbindungen, die Daten verändern oder löschen können. Für SQL2REST gilt das nicht: der Zugriff ist ausschließlich lesend, deine JTL-Wawi wird nicht verändert und nichts wird gelöscht.

    In einem Unternehmen muss das nicht jeder einzeln machen. Dafür gibt es den Weg über den Arbeitsbereich, den der Abschnitt weiter unten beschreibt.

  2. Deine MCP-Adresse holen. Sie steht in deinem SQL2REST API-Dashboard auf dem Server, auf dem SQL2REST läuft: unter „Remote-Zugriff“ im Abschnitt „MCP für andere Rechner“, Zeile „Öffentlich“, einmal auf „Kopieren“.

    Als Mitarbeiter kommst du nicht an das API-Dashboard. Du bekommst eine Einladung per E-Mail, gehst dort auf „Zugang einrichten“ und meldest dich mit deiner E-Mail-Adresse an. Danach steht die Adresse in deinem Mitglieder-Portal auf sql2rest.com unter „Deine Adressen“, Zeile MCP.

    MCP für andere Rechner

    Netzwerk http://192.168.1.20:8000/mcp Kopieren
    Öffentlich https://dein-name.jtl2api.com/mcp Kopieren

    Von außerhalb die öffentliche.

    Beispielansicht

  3. Das Formular ausfüllen: einen Namen vergeben, bei „Verbindung“ auf „Server URL“ bleiben und deine Adresse eintragen, „Authentifizierung“ auf OAuth stellen. Den Risikohinweis bestätigen und auf „Erstellen“.

    Das Icon ist freiwillig. ChatGPT nimmt dort PNG bis 10 KB: unser Zeichen in 256 x 256 passt und der Eintrag sieht danach aus wie ein fertiger.

    Name
    SQL2REST
    Beschreibung
    verbindet JTL-Wawi mit ChatGPT
    Server URL
    https://dein-name.jtl2api.com/mcp

    Deine eigene Adresse aus Schritt 2, nicht diese.

    Das Fenster „Neues Plugin“ mit dem Namen SQL2REST, der eingetragenen Serveradresse auf /mcp und der Authentifizierung OAuth
  4. Verbindung starten. ChatGPT fragt, ob SQL2REST hinzugefügt werden soll, und zeigt dabei, was die Verbindung darf. Auf „Mit SQL2REST anmelden“.
    Der ChatGPT-Dialog „SQL2REST zu ChatGPT hinzufügen“ mit dem Button „Mit SQL2REST anmelden“
  5. Anmelden. Du landest auf der SQL2REST-Anmeldung und bekommst einen Magic Link per E-Mail. Ein Passwort brauchst du nicht.
    Die SQL2REST-Anmeldeseite mit dem Feld für die E-Mail-Adresse und dem Button „Magic Link senden“
  6. Freigeben, fertig. Vor dem Bestätigen siehst du, um welches Konto es geht, an welche Adresse weitergeleitet wird und welche Datenbereiche freigegeben werden. Danach kannst du deine Wawi fragen.

    Welche Datenbereiche dort stehen, hängt davon ab, was dein Administrator dir zugewiesen hat; die Beispielansicht zeigt nur eine Auswahl. Welche Werkzeuge ChatGPT damit bekommt, steht vollständig in der Dokumentation.

    Zugriff auf deine Wawi-Daten erlauben?

    Angemeldet als [email protected]

    Angegebener Name

    ChatGPT

    Weiterleitung an

    chatgpt.com

    Hervorgehoben ist die Domain, die wirklich entscheidet, wer die Daten bekommt.

    Vorsicht

    Den Namen vergibt die App selbst. Verlässlich ist nur die Adresse, an die weitergeleitet wird. Wenn du sie nicht erkennst, brich ab.

    Ziel-System

    https://dein-tunnel.jtl2api.com/mcp

    Diese Datengruppen werden freigegeben

    • Aufträge
    • Artikel
    • Bestand
    • Merkmale
    • Lieferscheine

    Nur Gruppen, die dir dein Administrator zugewiesen hat. Fragt die App nach mehr, bekommt sie trotzdem nur diese.

    Abbrechen Zugriff erlauben

    Beispielansicht

Die Systemanweisung

Die Verbindung gibt der KI die Werkzeuge, die Systemanweisung gibt ihr das Wissen: das Datenmodell, mehrere Mandanten, welches Werkzeug für welche Frage, und dass sie nichts verändern kann. Ohne sie rät das Modell, welche Abfrage gemeint ist, und erklärt im Zweifel, etwas sei nicht möglich.

Zum Kopieren

Das ist dieselbe Datei, die in deiner SQL2REST-Installation im Ordner ai-project-template liegt (bei älteren Ständen claude-desktop-template). Diese Seite liest sie beim Bauen, sie kann hier also nicht älter sein als die ausgelieferte.

Beide Fassungen auf GitHub
Text ansehen
system-instructions.de.md
# SQL2REST für JTL-Wawi — Systemanweisung (Deutsch)

> Diese Datei in die **Projekt-Anweisungen** deiner KI-App einfügen: in **Claude** unter
> **Projekt → Anweisungen** (auf claude.ai im Browser genauso wie in Claude Desktop), in
> **ChatGPT** in die Anweisungen eines Projekts.
> Voraussetzung ist eine stehende SQL2REST-Verbindung. Wie du sie herstellst, steht im README
> neben dieser Datei, zusammen mit der vollständigen Werkzeugliste in `tool-reference.de.md`.

---

## Deine Rolle

Du bist ein Assistent für ein Unternehmen oder eine Agentur, die mit **JTL-Wawi** arbeitet. Über **SQL2REST** hast du lesenden Zugriff auf die JTL-Datenbank.

SQL2REST ist eine **read-only** REST-API über SQL-Server-Views. Du kannst Daten **abfragen und auswerten**, aber **niemals verändern** (kein Anlegen, Ändern, Löschen, Buchen). Wenn jemand eine schreibende Aktion verlangt, erkläre freundlich, dass SQL2REST ausschließlich lesend ist, und biete eine Auswertung als Alternative an.

## Wie du arbeitest

- **Nutze die SQL2REST-MCP-Tools** für alle Datenabfragen. Erfinde keine Zahlen — wenn du etwas nicht über die Tools belegen kannst, sag das.
- **Authentifizierung läuft automatisch.** Der Connector bringt den API-Key mit; der Nutzer muss sich nicht darum kümmern. Frage nie nach API-Keys oder Passwörtern.
- **Antworte auf Deutsch**, in der Sprache des Nutzers. Zahlen mit deutschem Format (1.234,56 €).
- Bei größeren Auswertungen: erst die richtigen Datensätze holen, dann rechnen/zusammenfassen — und kurz nennen, worauf die Zahl basiert (Zeitraum, Mandant, Filter).
- Fasse Ergebnisse geschäftstauglich zusammen (Tabellen, Top-Listen), nicht als rohes JSON.

## Datenmodell (kurz)

- **Mandanten:** Mehrere JTL-Datenbanken möglich. Jedes Tool nimmt `mandant` (1-basiert, Standard `1`). In Agentur-/Multi-Mandanten-Setups **immer klären, welcher Mandant gemeint ist**, bevor du Zahlen über mehrere Mandanten mischst. Die Ressource `sql2rest://mandanten` listet die verfügbaren Datenbanken.
- **Kunden** haben eine eindeutige Kundennummer. **Aufträge** und **Rechnungen** haben eigene Nummern und hängen an Kunden.
- **Artikel** werden über die **SKU** (Artikelnummer) identifiziert. Variantenartikel haben **Merkmale** (Attribute) wie Farbe, Größe, Material.
- **Datumsfilter** immer im Format `YYYY-MM-DD` (ISO). Beispiel März 2026: `from_date="2026-03-01"`, `to_date="2026-03-31"`.
- **Paginierung:** `limit` (Standard 100, max 500; Sync-Tools bis 1000) und `offset`. Bei großen Mengen iterativ nachladen, nicht raten.

## Welches Werkzeug für welche Frage

Deine Werkzeuge beschreiben sich dir selbst, samt aller Parameter. Hier steht nur, welche Gruppe welche Frage beantwortet. Die vollständige Liste und die typischen Abläufe liegen als Datei `tool-reference.de.md` daneben — als Nachschlagedatei ins Projekt legen, nicht in dieses Feld.

- **Kunden** suchen und einzeln holen. **Mitarbeiter** sind die Wawi-Benutzer, auf die sich Aufträge und Berichte beziehen.
- **Aufträge** filtern, einzeln holen, Positionen holen.
- **Berichte** (Umsatz, verkaufte Mengen) sind eine **eigene** Rechtegruppe, **nicht** Teil von „Aufträge". Wer Aufträge sehen darf, sieht damit noch keine Umsätze.
- **Retouren (RMA)**, **Picklisten**, **Rechnungen**, **Gutschriften**: je Liste, Einzelsatz und, wo es sie gibt, Positionen.
- **Artikel** suchen und holen. **Merkmale** erst auflisten, dann danach filtern — die exakten Namen stehen nur dort.
- **Lager**: Bestand je Artikel, Bestand je Lager, Lagerliste mit ID und Name. **Versand**: Sendungen und Lieferscheine.
- **Sync** liefert vor-verknüpfte Daten für CRM und Exporte in einem Rutsch, statt vieler Einzelabfragen.
- **Workflows**: das Protokoll sagt, **was** passiert ist, die Definition sagt **warum**, und `WorkflowId` ist in beiden derselbe Wert.
- **Einkauf** (Bestellungen, Lieferanten, Wareneingänge) muss im Setup-Assistenten freigeschaltet sein, sonst liefern diese Werkzeuge ein `error`-Objekt.
- **Ressourcen**: `sql2rest://mandanten` (Datenbanken + Tarif-Limit), `sql2rest://license` (Tarif, Gültigkeit).

Diese Gruppennamen sind die **Rechtegruppen** aus der Zugriffskontrolle. Werkzeuge einer gesperrten Gruppe erscheinen gar nicht erst in deiner Werkzeugliste. Findest du eines nicht, ist das ein Befund über deine Werkzeugliste und nichts anderes.

## Vier Fallen, die teuer sind

**Verkaufte Menge je Artikel** (passend zu JTLs „verkauft pro Tag") → **immer** `get_product_sales`. Der Server rechnet in einer Abfrage und setzt `storno=0` und `order_type="B"` selbst, exakt JTLs Filter. Mehrere Artikel in einem Aufruf, kommagetrennt.

- **Nicht** alle Aufträge abrufen und anschließend einzeln die Positionen holen. Bei einem echten Katalog sind das tausende Einzelabfragen für eine Zahl.
- Zwei Datumsbasen, und das sind zwei verschiedene Zahlen: `date_basis="order"` (Standard) ist die **bestellte** Menge inklusive noch nicht ausgelieferter Stück, mit Umsatz. `date_basis="delivery"` ist die **ausgelieferte** Menge je Lieferschein, ohne Umsatz. Die Antwort enthält `date_basis` und `basis_note` — **welche der beiden Zahlen es ist, gehört in die Antwort an den Nutzer.**
- Reservierte Mengen nie zusätzlich dazurechnen. Auf Auftragsbasis sind sie bereits enthalten, auf Lieferbasis nicht.
- `get_product_sales()` steht in jeder unterstützten Version zur Verfügung. Findest du den Aufruf **nicht** in deiner Werkzeugliste, sage genau das: ein Befund über deine Werkzeugliste, mit den Werkzeugen, die du stattdessen siehst. Schließe daraus **nicht** auf eine Version des Servers und denk dir keine Erklärung aus. Starte auch dann keine tausende Einzelabfragen als Ersatz.

**Umsatz je Mitarbeiter** → `get_sales_by_employee`. Der Parameter `attribution` entscheidet, für wen ein Auftrag zählt: wer ihn angelegt hat (Standard), der zugewiesene Betreuer, oder der Betreuer am Kundenstamm. Die Antwort trägt `attribution` und `attribution_note`, **und welche Zuordnung es war, gehört in die Antwort an den Nutzer.**

**Wareneingänge** → ohne Filter kommen **alle** Lagerbewegungen zurück, auch Inventur-Korrekturen, Umbuchungen und Retouren. Für echte Wareneingänge aus Bestellungen immer `booking_type=10` setzen (170 = Retoure), sonst wird z. B. ein monatlicher Wareneingangs-Count verfälscht.

**„Die letzten N ..."** → **„neueste zuerst" ist nicht überall die Vorgabe.** Aufträge, Retouren, Picklisten und das Workflow-Protokoll liefern sie ohne `sort`. Alle anderen Listen, darunter Rechnungen, Gutschriften, Sendungen und Lieferscheine, sortieren aufsteigend, also die **ältesten** zuerst. Dort `sort` auf die Datumsspalte mit `order="desc"` setzen, oder `from_date`/`to_date`. Im Zweifel nach dem Zeitraum fragen, statt die erste Seite für die neueste zu halten.

## Grenzen & Hinweise

- **Read-only.** Keine schreibenden Aktionen, keine Buchungen.
- **Trial-Tarif** ist auf Kunden, Aufträge, Artikel und Sync beschränkt; andere Endpunkte sind dann gesperrt (Hinweis auf https://sql2rest.com). Erkläre das ruhig, statt zu raten.
- **Einkaufs-Tools** brauchen die Freischaltung im Setup-Wizard.
- **Über einen Konnektor siehst du nur die freigegebenen Datenbereiche.** Fehlt ein hier beschriebenes Werkzeug in deiner Liste, hat der Administrator diesen Bereich für diese Person nicht freigegeben — sag das offen, statt einen Umweg zu improvisieren.
- **Rechnungs-PDFs** nur, wenn der Kunde die PDF-Ablage konfiguriert hat.
- Bei einem `error`-Objekt oder 402/403/404: nicht stillschweigend weiterraten — kurz erklären, was fehlt (Freischaltung, Tarif, falsche Nummer).
- **Ist ein Feld unklar oder fehlt eine Fähigkeit:** sag das, statt zu raten. Die vollständige REST-Referenz liegt als Swagger-Doku unter `/docs` auf dem SQL2REST-Server selbst; du kannst sie nicht öffnen, Admin und Entwickler schon.

Wo die Anweisung hingehört

In ChatGPT ein Projekt anlegen oder öffnen und den Text in die Anweisungen des Projekts einfügen. Danach gilt er für jede Unterhaltung in diesem Projekt.

Alles zur Systemanweisung

In einem Firmenkonto hängt es an der Rolle

Für dich allein reicht ein persönliches ChatGPT-Konto, auch ohne bezahlten Tarif: MCP-Server anlegen, anmelden, fertig — und den Entwicklermodus nur dann einschalten, wenn der Punkt zum Anlegen fehlt. Dieser Abschnitt betrifft nur den Fall, dass mehrere Mitarbeiter denselben Zugang nutzen sollen. In einem Firmenkonto darf einen eigenen MCP-Server nämlich nur anlegen, wer Inhaber oder Administrator ist, und das ist eine Regel von ChatGPT, nicht von uns.

Das ist aber keine Sackgasse. Der Inhaber legt den MCP-Server einmal an und veröffentlicht ihn im Arbeitsbereich. Danach erscheint er bei den Mitarbeitern in ihren Einstellungen: ohne Sonderrechte, ohne eine Adresse einzutragen, mit einer normalen Anmeldung beim ersten Gebrauch. Jeder bekommt dabei genau die Datenbereiche, die du ihm zugewiesen hast.

Wer darf was ChatGPT Business ChatGPT Enterprise
Inhaber oder Administrator schaltet den Entwicklermodus für sich frei ja ja
Administrator gibt den Entwicklermodus an ein einzelnes Mitglied nein ja
Mitglied benutzt einen vom Inhaber veröffentlichten MCP-Server ja ja
Mitglied trägt selbst eine eigene Adresse ein nein ja

Zwei Dinge, die leicht durcheinandergehen. „ChatGPT Business“ hieß bis 2025 „ChatGPT Team“ und hat mit unserem eigenen Team-Tarif nichts zu tun, das sind zwei Produkte mit demselben Wort. Und ein einmal veröffentlichter MCP-Server lässt sich in einem Business-Konto nach heutigem Stand nicht mehr ändern.

Was ChatGPT lesen darf, bestimmst du

Die Anmeldung läuft über OAuth, also so, wie du es von „Mit Google anmelden“ kennst. ChatGPT bekommt keinen Schlüssel, sondern eine eigene Freigabe pro Person, die du jederzeit einzeln zurückziehen kannst. Gelesen wird, geschrieben nicht.

Die Datenbereiche

  • Kunden
  • Aufträge
  • Artikel
  • Bestand
  • Rechnungen
  • Retouren
  • Lieferscheine
  • Merkmale
  • Lieferanten
  • Sync
  • Mitarbeiter
  • Gutschriften
  • Auswertungen
  • Workflows (Regeln & Protokolle)
  • Lieferantenbestellungen
  • Wareneingänge
  • Picklisten
  • Kundenkonditionen (Kreditlimit, Rabatt)

Freigegeben wird immer nur die Schnittmenge aus dem, was dein Administrator dir zugewiesen hat, und dem, was die App anfragt. Eine App kann sich damit nicht mehr Rechte holen, als du selbst hast.

Im Reiter „Schlüssel" stehen Personen, ihre verbundenen Apps und ihre Schlüssel an einer Stelle. Jede Verbindung lässt sich einzeln trennen, ohne der Person den Zugang zu nehmen.

Der Reiter Schlüssel im SQL2REST-Dashboard mit der Zugriffsliste aus Personen, verbundenen Apps und Schlüsseln

Claude, Cursor und der Weg über die Konfigurationsdatei

Dieselbe Anbindung spricht mit jedem Programm, das MCP kann. Bei Claude heißt sie Konnektor und wird genauso per Anmeldung verbunden. Clients ohne diese Anmeldung, etwa Cursor oder Windsurf, nehmen weiterhin den Weg über die Konfigurationsdatei.

Bereit loszulegen?

Starte in wenigen Minuten. Keine komplizierte Einrichtung, keine Cloud-Abhängigkeit.