Verbinde dein OpenXE ERP mit jedem KI-Assistenten -- per MCP (Model Context Protocol).
69 Tools | 19 Resources | 5 Berichte | 11 Dashboard-KPIs | Verifiziert gegen OpenXE v1.12
Dieser Server verbindet dein OpenXE ERP-System mit lokalen KI-Assistenten wie LM Studio, Ollama, OpenWebUI und anderen MCP-faehigen Clients. Du stellst Fragen auf Deutsch, und der Assistent liest und schreibt automatisch in deinem ERP -- alles lokal, keine Cloud noetig.
Beispiele:
- "Zeig mir alle offenen Auftraege"
- "Erstelle einen neuen Kunden: Firma Muster GmbH, Musterstr. 1, 12345 Berlin"
- "Wie hoch ist der Umsatz diesen Monat?"
- "Welche Rechnungen sind ueberfaellig?"
- "Erstelle eine Bestellung bei Lieferant Mueller fuer 100 Schrauben"
- Node.js Version 20 oder neuer (Download)
- OpenXE mit aktiviertem API-Zugang
- Ein KI-Assistent der MCP unterstuetzt (LM Studio, OpenWebUI, Ollama, etc.)
- Melde dich als Admin in OpenXE an
- Gehe zu Administration > Einstellungen > Benutzer
- Erstelle einen neuen Benutzer (oder verwende einen bestehenden)
- Setze unter API > REST-API ein Passwort
- Merke dir Benutzername und Passwort
Der Server wird automatisch heruntergeladen und gestartet -- du musst nichts installieren. Du brauchst nur drei Angaben:
| Angabe | Beispiel | Beschreibung |
|---|---|---|
OPENXE_URL |
http://192.168.0.100 |
Die Adresse deines OpenXE-Servers |
OPENXE_USERNAME |
api-user |
Der API-Benutzername aus Schritt 1 |
OPENXE_PASSWORD |
mein-passwort |
Das API-Passwort aus Schritt 1 |
Ab Version 0.3+. Oeffne Settings > MCP und fuege folgendes ein:
Minimale Konfiguration (LAN-Betrieb, schneller Einstieg):
{
"openxe": {
"command": "npx",
"args": ["-y", "github:Avatarsia/openxe-mcp-server"],
"env": {
"OPENXE_URL": "http://192.168.0.100",
"OPENXE_USERNAME": "api-user",
"OPENXE_PASSWORD": "mein-passwort",
"OPENXE_ALLOW_HTTP": "1"
}
}
}Vollstaendige Konfiguration (mit allen Optionen):
{
"openxe": {
"command": "npx",
"args": ["-y", "github:Avatarsia/openxe-mcp-server"],
"env": {
"OPENXE_URL": "http://192.168.0.100",
"OPENXE_USERNAME": "api-user",
"OPENXE_PASSWORD": "mein-passwort",
"OPENXE_ALLOW_HTTP": "1",
"OPENXE_MODE": "router",
"OPENXE_TIMEOUT": "30000",
"OPENXE_AUDIT_LOG": "1"
}
}
}Was bedeuten die einzelnen Einstellungen?
| Variable | Wert im Beispiel | Was macht das? |
|---|---|---|
OPENXE_URL |
http://192.168.0.100 |
Die IP-Adresse oder URL deines OpenXE-Servers im Netzwerk. |
OPENXE_USERNAME |
api-user |
Der Benutzername, den du in OpenXE unter API angelegt hast. |
OPENXE_PASSWORD |
mein-passwort |
Das dazugehoerige Passwort. |
OPENXE_ALLOW_HTTP |
1 |
Unterdrueckt die Sicherheitswarnung bei HTTP-Verbindungen. Im lokalen Netzwerk (LAN) ist HTTP in Ordnung -- die Warnung ist fuer Internetverbindungen gedacht, wo HTTPS Pflicht waere. |
OPENXE_MODE |
router |
Steuert, wie viele Tools das LLM sieht. router (Standard) zeigt nur 2 kompakte Tools -- ideal fuer lokale Modelle mit begrenztem Kontextfenster. full zeigt alle 69 Tools einzeln. readonly erlaubt nur Lesen (kein Erstellen/Bearbeiten/Loeschen). |
OPENXE_TIMEOUT |
30000 |
Wie lange der Server maximal auf eine Antwort von OpenXE wartet (in Millisekunden). 30000 = 30 Sekunden. Bei langsamen Servern oder grossen Abfragen auf 60000 erhoehen. |
OPENXE_AUDIT_LOG |
1 |
Protokolliert jeden einzelnen Tool-Aufruf (welches Tool, welche Parameter, wann). Nuetzlich zum Nachvollziehen, was das LLM gemacht hat. Sensible Daten (IBAN, PayPal, Passwoerter) werden dabei automatisch maskiert. Das Protokoll erscheint in der Konsole (stderr). |
Tipp fuer lokale Modelle: Verwende den
router-Modus (Standard). Er reduziert den Token-Verbrauch von ~10.000 auf ~1.500 Tokens fuer die Tool-Definitionen -- das laesst mehr Platz fuer deine eigentliche Frage und die Antwort.
Ab OpenWebUI 0.6+. Unter Admin > Tools > MCP Servers eintragen:
- Command:
npx - Args:
-y github:Avatarsia/openxe-mcp-server - Umgebungsvariablen:
OPENXE_URL,OPENXE_USERNAME,OPENXE_PASSWORD
Jeder Client mit stdio-Transport funktioniert:
OPENXE_URL=http://dein-openxe-server \
OPENXE_USERNAME=dein-api-user \
OPENXE_PASSWORD=dein-api-passwort \
npx -y github:Avatarsia/openxe-mcp-serverStarte deinen KI-Assistenten und frage: "Zeig mir alle Artikel". Wenn Daten kommen, funktioniert alles.
| Bereich | Lesen | Schreiben | Berichte |
|---|---|---|---|
| Kunden & Lieferanten | Auflisten, Suchen, Details | Anlegen, Bearbeiten (60+ Felder inkl. Bank, PayPal, SEPA, Dokumentversand) | -- |
| Artikel | Auflisten, Details, Preise, Lagerbestand | -- | Lagerwert, Nachbestellbedarf |
| Auftraege | Auflisten, Details, Positionen | Anlegen, Bearbeiten, Freigeben | Auftragseingang |
| Rechnungen | Auflisten, Details, Positionen | Anlegen, Bearbeiten, Freigeben, Bezahlt markieren | Umsatz, Offene Posten, Altersstruktur |
| Angebote | Auflisten, Details | Anlegen, Bearbeiten, In Auftrag wandeln | -- |
| Lieferscheine | Auflisten, Details | Anlegen, Bearbeiten | -- |
| Gutschriften | Auflisten, Details | Anlegen, Bearbeiten | -- |
| Bestellungen (Einkauf) | Auflisten, Details, Positionen | Anlegen, Bearbeiten, Freigeben | Einkaufsvolumen je Lieferant |
| Einkaufspreise | Staffelpreise je Lieferant | -- | -- |
| Abonnements | Auflisten, Details | Anlegen, Bearbeiten, Loeschen | -- |
| CRM | -- | Notizen, Telefonate, E-Mails erfassen | -- |
| Zeiterfassung | Status, Wochenuebersicht, Eintraege | Ein-/Ausstempeln, Eintraege CRUD | -- |
| Tracking | -- | Sendungsnummern anlegen | -- |
| Dateien | Auflisten | Hochladen (base64) | -- |
| Dashboard | 11 KPIs (Umsatz, Auftraege, Kunden, Lager, Einkauf) | -- | -- |
| Berichte | 5 Reports (Umsatz, Offene Posten, Lager, Beschaffung, Periodenvergleich) | -- | -- |
| Einzeln oder bis zu 20 auf einmal | -- | -- |
Alle Listen-Abfragen unterstuetzen clientseitige Filter:
- where:
{plz: {startsWith: "2"}},{gesamtsumme: {gt: 100}},{land: {equals: "DE"}} - sort/limit: Ergebnisse sortieren und begrenzen
- zeitraum:
dieser-monat,letzter-monat,letzte-30-tage,Q1-2026,2025 - status_preset:
offene-rechnungen,nicht-versendet,ueberfaellige-rechnungen, etc. - aggregate:
count,sum_feld,avg_feld,groupBy_feld - format:
table,csv,ids
| Bericht | Beschreibung |
|---|---|
| Umsatzbericht | Nach Kunde, Artikel, Monat, Quartal, Jahr oder Projekt -- mit optionaler Margenberechnung |
| Offene Posten | Liste, Altersstruktur (0-30/31-60/61-90/90+ Tage), Kreditlimit-Auslastung |
| Lagerbestand | Uebersicht, Nachbestellbedarf, Lagerwert (VK) |
| Beschaffung | Einkaufsvolumen je Lieferant, offene Bestellungen mit Ueberfaellig-Warnung |
| Periodenvergleich | Aktuell vs. Vorperiode (Monat/Quartal/Jahr) fuer Umsatz, Auftraege, Neukunden, Rechnungen |
| Variable | Beschreibung |
|---|---|
OPENXE_URL |
Basis-URL deiner OpenXE-Instanz (z.B. http://192.168.0.100) |
OPENXE_USERNAME |
API-Benutzername |
OPENXE_PASSWORD |
API-Passwort |
| Variable | Default | Beschreibung |
|---|---|---|
OPENXE_API_PATH |
/api/index.php |
API-Endpunkt-Pfad (nur aendern wenn noetig) |
OPENXE_TIMEOUT |
30000 |
Request-Timeout in Millisekunden |
OPENXE_MODE |
router |
router (2 Tools, wenig Tokens), full (alle einzeln), readonly (nur Lesen) |
OPENXE_ALLOW_HTTP |
- | Auf 1 setzen um die HTTP-Warnung im LAN zu unterdruecken |
OPENXE_AUDIT_LOG |
- | Auf 1 setzen fuer Audit-Logging aller Tool-Aufrufe |
| Variable | Default | Beschreibung |
|---|---|---|
MCP_AUTH_TOKEN |
- | Bearer-Token fuer HTTP-Zugriff |
MCP_HTTP_HOST |
127.0.0.1 |
Bind-Adresse (0.0.0.0 fuer Netzwerk, nur mit Reverse-Proxy!) |
MCP_ALLOWED_ORIGINS |
- | Erlaubte Origins (kommagetrennt, DNS-Rebinding-Schutz) |
- Pruefe ob die OpenXE-URL erreichbar ist:
curl http://dein-openxe-server/api/index.php - Pruefe ob Benutzername und Passwort stimmen
- Pruefe ob die Umgebungsvariablen korrekt gesetzt sind
- OpenXE nutzt HTTP Digest Auth -- der Benutzer braucht ein Passwort unter API > REST-API
- Sonderzeichen im Passwort koennen Probleme mit Umgebungsvariablen verursachen
- Erhoehe
OPENXE_TIMEOUT(z.B. auf60000fuer 60 Sekunden) - Verwende spezifischere Abfragen statt "zeig mir alles"
- Bestellungen (Einkauf) sind nicht ueber die REST v1 API verfuegbar -- der MCP-Server nutzt automatisch die Legacy API als Fallback
- Wenn trotzdem leer: pruefe ob Bestellungen in OpenXE existieren
Im Normalfall laeuft der Server als Subprocess deines KI-Assistenten (stdio-Transport). Dabei werden keine Netzwerkports geoeffnet -- die Kommunikation laeuft ueber Pipes. Fuer den Betrieb im lokalen Netzwerk sind keine zusaetzlichen Einstellungen noetig.
Wenn du nur Daten lesen moechtest (kein Erstellen/Bearbeiten/Loeschen):
OPENXE_MODE=readonlyNur wenn du den Server als eigenstaendigen Netzwerkdienst betreiben willst:
MCP_AUTH_TOKEN=dein-token npx -y github:Avatarsia/openxe-mcp-server -- --http- Bindet standardmaessig nur auf
127.0.0.1(nicht von aussen erreichbar) - Mit
MCP_HTTP_HOST=0.0.0.0von aussen erreichbar -- nur hinter einem Reverse-Proxy mit HTTPS verwenden!
Alle Tools tragen MCP-Annotations (readOnlyHint, destructiveHint, idempotentHint). Dein KI-Client kann damit automatisch vor kritischen Aktionen warnen.
Der Server unterstuetzt eine .env-Datei im Projektverzeichnis. Kopiere .env.example und passe die Werte an:
cp .env.example .envDie .env-Datei wird nicht nach Git committed (steht in .gitignore). Umgebungsvariablen die direkt gesetzt werden (z.B. ueber die MCP-Client-Konfiguration) haben Vorrang vor .env.
src/
index.ts # MCP-Server Einstiegspunkt (laedt dotenv)
config.ts # Umgebungsvariablen (Zod-validiert)
client/ # HTTP Digest Auth Client fuer OpenXE
tools/ # Tool Handler (Schreiben via Legacy API)
report-tools.ts # 5 Berichts-Tools
procurement-tools.ts # Beschaffung (Bestellungen)
document-tools.ts # Belege CRUD + Konvertierung
address-tools.ts # Adressen mit Feld-Normalisierung
...
resources/ # Resource Handler (Lesen via REST v1)
schemas/ # Zod-Schemas fuer Eingabe-Validierung
utils/ # Smart Filters, Pagination, Aggregation
tests/ # 369 Unit-Tests (Vitest)
docs/
api-reference/ # Verifizierte OpenXE API-Dokumentation
llm/ # LLM-optimierte Kurzreferenz
git clone https://github.com/Avatarsia/openxe-mcp-server.git
cd openxe-mcp-server
npm install
cp .env.example .env # Dann Werte anpassen
npm run build
npm test
npm startDer Server laedt automatisch eine .env-Datei aus dem Projektverzeichnis (via dotenv). Alternativ koennen die Variablen weiterhin direkt als Umgebungsvariablen oder ueber die MCP-Client-Konfiguration gesetzt werden — .env hat die niedrigste Prioritaet.
Verifizierte Dokumentation im Verzeichnis docs/api-reference/:
- AUTH.md -- HTTP Digest Authentifizierung, 96 Permissions
- LEGACY-API.md -- 120+ Legacy API Endpoints (Schreiben)
- REST-V1-STAMMDATEN.md -- Artikel, Adressen, Kategorien, etc.
- REST-V1-BELEGE.md -- Auftraege, Rechnungen, Lieferscheine, etc.
- REST-V1-SONSTIGE.md -- Abos, CRM, Tracking, Dateien, etc.
- SPEZIAL-APIS.md -- Shop-Import, OpenTRANS, Mobile API
| Problem | Ursache | Workaround |
|---|---|---|
BelegEdit (alle Typen) crasht mit 500 |
Server-Bug in OpenXE v1.12 | Edit-Tools angelegt, funktionieren auf neueren Versionen |
| Lieferadressen REST v1 komplett 500 | PHP 8.x Signatur-Bug (#249) | Legacy-API-Fallback fuer Create/Edit |
| Bestellungen nicht via REST v1 | Kein Endpoint registriert | Automatischer Legacy-API-Fallback |
| Einkaufspreise nicht via REST v1 | Include nicht registriert (#252) | Legacy ArtikelGet als Fallback |
| Gruppen nicht via API nutzbar | REST v1 404, Legacy XML-Bug | Issue geplant |
| Mobile Dashboard API (16 KPIs) | Permission fehlt in UI (#254) | Eigene Dashboard-KPIs als Ersatz |
| Report-Templates nicht via API erstellbar | Kein POST /v1/reports Endpoint (#254) | JSON-Template lokal generieren, in UI importieren |
| Protokoll fehlt bei API-Weiterfuehren | #244 | -- |
| Datei-Upload ignoriert stichwoerter | #245, PR #246 | -- |
| Tracking in falscher Tabelle | #247, PR #248 | -- |
| Gemma 4 schein Inkompatibel zu sein | -- |
MIT -- siehe LICENSE.