Zum Inhalt springen

JTL-Wawi mit Claude verbinden

SQL2REST als eigenen Konnektor in Claude hinzufügen, anmelden, fertig. Es läuft im Browser auf claude.ai und in den Claude-Apps am Handy und Tablet.

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

Frag deine JTL-Wawi …

Beispiel: SQL2REST als Konnektor in claude.ai, 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 Claude 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

Der Konnektor braucht eine öffentliche Adresse, und die gibt es ab dem Team-Tarif. Im Personal-Tarif gibt es keine und damit auch keinen Konnektor: dort verbindest du SQL2REST über die Konfigurationsdatei am Server selbst.

In fünf Schritten verbunden

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

  1. In Claude auf Einstellungen gehen, dort auf „Anpassen“ und dann auf „Konnektoren“. Oben rechts über „Hinzufügen“ den Punkt „Benutzerdefinierten Connector hinzufügen“ wählen.
    Der Konnektoren-Bereich in den Claude-Einstellungen mit dem Button zum Hinzufügen eines eigenen Konnektors
  2. Die Adresse deines Systems eintragen: deine öffentliche Adresse mit /mcp am Ende, ohne Schrägstrich dahinter.

    Die Adresse 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“.

    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

    Der Dialog zum Hinzufügen eines Konnektors mit eingetragener SQL2REST-Adresse, die auf /mcp endet

    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.

    Das SQL2REST-Mitglieder-Portal mit der REST-API- und der MCP-Adresse und je einem Kopieren-Button
  3. Verbindung starten. 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“
  4. Freigeben. Vor dem Bestätigen siehst du, um welches Konto es geht, welches System angebunden wird und welche Datenbereiche freigegeben werden.
    Die SQL2REST-Freigabeseite mit dem angemeldeten Konto, dem Zielsystem und der Liste der freigegebenen Datenbereiche
  5. Fertig. Der Konnektor steht in deiner Liste. Er gehört zu deinem Claude-Konto, gilt also auch im Browser und am Handy. In Claude Desktop erscheint er nach einem Neustart.
    Die Konnektoren-Liste in Claude mit SQL2REST als verbundenem Konnektor

Was Claude lesen darf, bestimmst du

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

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

Erweiterst du die Datenbereiche einer Person, während sie bereits verbunden ist, greift das erst nach einer neuen Verbindung. Die betroffene Verbindung sagt das selbst: Neu verbinden nötig.

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

Auf claude.ai ein Projekt anlegen oder öffnen und den Text bei „Anweisungen“ einfügen.

Alles zur Systemanweisung

Cursor, Windsurf und der Weg über die Konfigurationsdatei

Der Weg über die Konfigurationsdatei bleibt unverändert bestehen. Für Claude brauchst du ihn nicht mehr, weder im Browser noch in Claude Desktop: beide verbinden sich über den Konnektor. Für Clients, die noch keine Konnektor-Anmeldung können, etwa Cursor oder Windsurf, bleibt er der richtige Weg.

Im Personal-Tarif und in der Testphase bleibt der Weg über die Konfigurationsdatei am Server selbst: Claude Desktop, Cursor oder Windsurf laufen auf dem Server mit SQL2REST und starten sql2rest.exe --mcp selbst. MCP von anderen Rechnern, im eigenen Netzwerk und aus dem Internet, und damit auch der Konnektor, gehören zum Team-Tarif.

Ein Punkt, der viele überrascht: Die Konfigurationsdatei startet den MCP-Server in einer lokalen Sitzung auf dem Rechner, auf dem Claude läuft. Auf gehosteten Windows-Servern, und genau dort liegt die JTL-Wawi meistens, lässt sich diese Sitzung oft gar nicht starten. Der Konnektor braucht sie nicht, weil auf deinem Rechner kein zusätzlicher Prozess läuft.

Bereit loszulegen?

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