MCP Server

  • Okay, das neue Projekt meinerseits ein MCP Server, der entsprechend eingebunden werden kann und Abfragen bzw. Erstellungen innerhalb von OpenXE via API Schnittstelle ermöglicht.

    https://github.com/Avatarsia/openxe-mcp-server

    Wichtig anzumerken, ist es zwar möglich, Angebote, Aufträge, Rechnungen, Oliverscheine und so weiter erstellen zu lassen, allerdings aufgrund eines Bugs innerhalb von OpenXE gibt es keinerlei Verlinkungen zwischen den entsprechenden Aufträgenrechnungen lieferschein, auch trotz der Tatsache, dass die Datenbankenträge vorhanden sind.
    Auch noch anzumerken ist, dass die Rechnungen als in Bearbeitung markiert werden und nicht abgesendet werden oder sonstiges.

    Getestet habe ich das Ganze gegen eine Beispielinstanz mit Cloud Code, aber noch nicht an einer tatsächlich produktiven Instanz.

    Verifizierte Funktionen zur Zeit


    Lesen & Suchen


    - Kunden/Lieferanten suchen und filtern

    - Artikel mit Preisen und Lagerbeständen abrufen

    - Aufträge, Angebote, Rechnungen, Lieferscheine auflisten

    - Beleg-Positionen und Protokoll-Historie einsehen

    - Artikelkategorien und Versandarten durchsuchen

    - Dateien/Anhänge auflisten

    - Zeiteinträge auflisten (Mitarbeiter, Projekt, Zeitraum)

    - Stechuhr-Status abfragen

    - Wochen-Zeitübersicht (Soll/Ist, Überstunden, Urlaub)


    Anlegen & Bearbeiten


    - Kunden anlegen und bearbeiten

    - Lieferadressen verwalten

    - Aufträge mit Artikelliste erstellen

    - Artikelkategorien anlegen

    - CRM-Notizen und Wiedervorlagen anlegen

    - Zeiteinträge erstellen, bearbeiten, löschen

    - Ein-/Ausstempeln, Pause starten/stoppen


    Belege


    - Auftrag → Rechnung weiterführen

    - Aufträge und Rechnungen freigeben

    - Rechnungen als bezahlt markieren

    - Beleg-PDFs abrufen


    Unter der Haube


    - HTTP Digest Auth (realm=Xentral-API)

    - Slim Mode: Listen liefern nur Schlüsselfelder (~3K statt ~150K Tokens)

    - Gelöschte Datensätze (DEL) werden automatisch ausgeblendet (optional einblendbar)

    - Auto-Pagination bei großen Datenmengen

    - Router-Modus: nur 2 Tools statt 47 (spart ~8K Tokens Kontext)

    - Getestet gegen Live-Instanz mit 200 Kunden, 500 Aufträgen, 314 Artikeln


    Bekannte Einschränkungen (OpenXE-Core-Bugs, Issues eingereicht)


    - Weiterführen (Auftrag→Rechnung) erzeugt keinen Protokoll-Eintrag über die API (https://github.com/OpenXE-org/OpenXE/issues/244)

    - Datei-Upload: Objekt-Zuordnung wird serverseitig ignoriert (https://github.com/OpenXE-org/OpenXE/issues/245, https://github.com/OpenXE-org/OpenXE/pull/246)

    - Trackingnummern über API erstellt erscheinen nicht im UI Pakete-Tab (https://github.com/OpenXE-org/OpenXE/issues/247, https://github.com/OpenXE-org/OpenXE/pull/248)

    - Lieferadressen REST v1 crasht unter PHP 8.x — Legacy-Fallback eingebaut (https://github.com/OpenXE-org/OpenXE/issues/249)

  • Interessant ist natürlich da die Frage bezüglich Datenschutz, da die LLMs dann auf die Kundendaten zugreifen können.

    Primär fände ich interessanter, eher man ein LLM als Agent in OpenXe für den normalen Workflow hat, ob man nicht eine KI lokal auf OpenXE loslassen kann mit dem Ziel das System zu verbessern/reparieren und neue Funktionen implementieren. Also sowas wie Clawdbot mit Zugriff auf die Dateien um es umzuprogrammieren.

  • ich rede deswegen ja auch von lokalen llm's

    aber eine integrierte KI in openxe sehe ich definitiv nicht, das würde ja auch die server anforderungen immens in die höhe treiben, und die llm's die da helfen könnten hätten dann zugriff auf alle daten.

    aber so kann man mal eben einem lokalem llm sagen erstell in openxe einen neuen kontakt mit den adressdaten aus dieser email anstatt alles copy und paste zu übertragen, das funktoniert super

  • ich rede deswegen ja auch von lokalen llm's

    aber eine integrierte KI in openxe sehe ich definitiv nicht, das würde ja auch die server anforderungen immens in die höhe treiben, und die llm's die da helfen könnten hätten dann zugriff auf alle daten.

    aber so kann man mal eben einem lokalem llm sagen erstell in openxe einen neuen kontakt mit den adressdaten aus dieser email anstatt alles copy und paste zu übertragen, das funktoniert super

    Ahhh ok, das ergibt mehr Sinn und in Zusammenarbeit mit dem Wiki von OpenXE ist das sicher eine coole Sache.

  • Ich habe in der Richtung auch schon einige Experimente (mit Ollama) gemacht. Z.B. E-Mails erkennen und Aufträge erkennen. Leider waren die Ergebnisse durchwachsen und nicht verwendbar.


    Grundsätzlich würde ich davon abraten soetwas direkt auf die API loszulassen. Meine Vorstellung war eher, dass man Prozesse definieren kann an denen externe Schnittstellen (z.B. ein LLM) gerufen werden und die dann einen Vorschlag unterbreiten, z.B. diese Mail sieht aus wie ein Auftrag, diese Daten hier habe ich erkannt. Der Nutzer kann das dann sichten, evtl. korrigieren und per Knopf übernehmen.


    Externe LLMs fallen für mich komplett aus, da die Daten unkontrolliert abgegriffen werden und überhaupt kein Verlass darauf ist, dass die Modelle in 2-3 Jahren überhaupt noch funktionieren oder angeboten werden.

  • Ich habe in der Richtung auch schon einige Experimente (mit Ollama) gemacht. Z.B. E-Mails erkennen und Aufträge erkennen. Leider waren die Ergebnisse durchwachsen und nicht verwendbar.


    Grundsätzlich würde ich davon abraten soetwas direkt auf die API loszulassen. Meine Vorstellung war eher, dass man Prozesse definieren kann an denen externe Schnittstellen (z.B. ein LLM) gerufen werden und die dann einen Vorschlag unterbreiten, z.B. diese Mail sieht aus wie ein Auftrag, diese Daten hier habe ich erkannt. Der Nutzer kann das dann sichten, evtl. korrigieren und per Knopf übernehmen.


    Externe LLMs fallen für mich komplett aus, da die Daten unkontrolliert abgegriffen werden und überhaupt kein Verlass darauf ist, dass die Modelle in 2-3 Jahren überhaupt noch funktionieren oder angeboten werden.

    Ja, ich habe gestern mal ein bisschen damit rumexperimentiert und mit Quen 3.5 ein bisschen versucht, Daten auszulesen und Daten zu schreiben. Und das hat den Kontext der lokalen Maschine extrem überlastet. Und deswegen ist die Optimierung, die jetzt im Nachhinein passiert ist, die letzten zwölf Stunden, dass Filter dazwischen geschaltet werden, sodass man immer nur die Daten zurückbekommt an die LLM, die die LLM lokal auch wirklich braucht. So kann man die Daten, wenn man sie aus dem System haben will und analysieren möchte, lokal anonymisieren und dann mit einer großen LLM arbeiten, wenn man es denn möchte.

  • Stand jetzt was geht


    Stammdaten

    - Kunden und Lieferanten anlegen, bearbeiten, durchsuchen (mit USt-ID, Lieferantennummer, Rolle)

    - Lieferadressen verwalten (CRUD)

    - Artikel mit Verkaufspreisen, Lagerbeständen und Einkaufspreisen (Staffelpreise je Lieferant) abrufen

    - Kategorien und Versandarten auflisten


    Belege — Erstellen

    - Aufträge, Rechnungen, Angebote, Lieferscheine, Gutschriften erstellen

    - Erweiterte Felder: Währung, Versandart, Lieferdatum, Zahlungsweise, interne Notizen, Lieferbedingung


    Belege — Bearbeiten

    - Aufträge, Rechnungen, Angebote, Lieferscheine, Gutschriften nachträglich ändern (Header-Felder)


    Belege — Workflow

    - Aufträge und Rechnungen freigeben

    - Angebot → Auftrag → Rechnung konvertieren (Weiterführen)

    - Rechnungen als bezahlt markieren

    - Entwurfs-Rechnungen löschen

    - PDF-Download für alle Belegtypen


    Beschaffung (Einkauf)

    - Bestellungen anlegen, bearbeiten, freigeben, auflisten

    - Einkaufspreise/Staffelpreise pro Artikel und Lieferant abrufen

    - Lieferanten mit Nummer, USt-ID und Rolle anlegen


    Smart Filters (clientseitig)

    - where: 11 Operatoren (equals, contains, startsWith, gt, lt, range, empty, ...)

    - sort, limit, fields: Ergebnisse sortieren, begrenzen, Felder auswählen

    - zeitraum: heute, diese-woche, dieser-monat, letzter-monat, letzte-N-tage, Quartal, Jahr

    - status_preset: vorgefertigte Statusfilter (offen, aktiv, überfällig, ...)

    - aggregate: count, sum, avg, min, max, groupBy

    - format: JSON, Tabelle, CSV, IDs


    Dashboard-KPIs (11 Stück)

    - Umsatz Monat/Jahr, offene Aufträge, offene/überfällige Rechnungen

    - Top-Kunde, Auftragseingang Woche, Artikel-/Kundenanzahl

    - Offene Bestellungen, Bestellvolumen Monat


    Business-Presets

    - Nicht versendete Aufträge, Lieferscheine ohne Tracking

    - Offene/überfällige Rechnungen, Entwürfe

    - Offene Bestellungen, überfällige Lieferungen


    Zeiterfassung

    - Stechuhr: Ein-/Ausstempeln, Pause starten/stoppen

    - Wochenübersicht mit Soll/Ist

    - Zeiteinträge erstellen, bearbeiten, löschen


    Sonstiges

    - CRM-Dokumente erstellen (E-Mail, Telefon, Notiz, Brief)

    - Sendungsverfolgung anlegen

    - Datei-Upload mit Objektbindung

    - Wiedervorlagen erstellen

    - Abo-Artikel anlegen


    Technik

    - 47+ Tools, 19 Resources

    - HTTP Digest Auth, TypeScript, Zod-Validierung

    - Router-Modus für kleine Kontextfenster (~1.5K statt ~10K Tokens)

    - Slim Mode: Listen liefern nur Schlüsselfelder (~3K statt ~150K Tokens)

    - 386 Tests, verifiziert gegen live OpenXE v1.12


    Installation (ein Befehl):

    npx -y github:Avatarsia/openxe-mcp-server

  • das kann dann zb, so aussehen. Anfrage war "Suchen mir alle Kunden, dessen Postleitzahl mit Nummer zwei anfängt."



    hat ~ 2500 tokens gebraucht.

    Und ja das sind alles Fake daten, ich hab claude auf der Testinstanz 500 Kunden und 200 Aufträge erstellen lassen damit ich was habe das ich auch lokal zum testen verifizieren kann

    Und ich bin mir tausend prozentig sicher, dass ich mir den Berichtsfunktionen deutlich länger gebraucht hätte. Alleine schon für die Erstellung.

  • Beispiel 2
    Erstelle mir eine zufällige Lieferantenfirmenadresse in OpenXE.Diese sollte vollständig sein mit Telefonnummer, Website, Straße, Lieferanschrift, Ansprechspersonen etc.


    Perfekt! Der Lieferant wurde erfolgreich erstellt und alle Details wurden hinzugefügt. Hier ist die vollständige Übersicht:


    📋 Neuer Lieferant - Erfolgreich angelegt

    Grunddaten:

    • Name: Müller & Partner Logistik GmbH
    • Typ: Lieferant
    • Kundennummer: 10066
    • ID: 294

    Anschrift:

    • Straße: Industriestraße 42
    • PLZ/Ort: 20357 Hamburg
    • Land: DE (Deutschland)

    Kontaktinformationen:

    Bankdaten:

    • Bank: Hamburger Sparkasse AG
    • IBAN: DE89 2005 0550 1234 5678 90
    • SWIFT/BIC: HYVEDEMM
    • Kontoinhaber: Müller & Partner Logistik GmbH

    Rechnungsdetails:

    • USt-ID: DE123456789
    • Zahlungszieltage: 30 Tage
    • Zahlungsweise: Rechnung

    Resultat ohne etwas anzufassen, das braucht man dann am ende nur noch einmal Kontrollieren:

  • .....

    Grundsätzlich würde ich davon abraten soetwas direkt auf die API loszulassen. Meine Vorstellung war eher, dass man Prozesse definieren kann an denen externe Schnittstellen (z.B. ein LLM) gerufen werden und die dann einen Vorschlag unterbreiten, z.B. diese Mail sieht aus wie ein Auftrag, diese Daten hier habe ich erkannt. Der Nutzer kann das dann sichten, evtl. korrigieren und per Knopf übernehmen.


    ..

    Ich habe mir einen KI assistent geschribenm den ich auch auf die API zulasse. Was sind deine Bedenken ?

  • Ich habe gesehen, dass du schon mit Gemma 4 herumexperimentiert , hast du schon Ergebnisse ? Würde mich interessieren

  • Ich habe gesehen, dass du schon mit Gemma 4 herumexperimentiert , hast du schon Ergebnisse ? Würde mich interessieren

    gemma 4 habe ich mit dem mcp absolut nicht zum laufen bekommen, (26b und 31), das hat mal eben 300k tokens in anfragen verballert ohne was auf die kette zu kriegen. qwen 3.5 35b A3B Q4_K_M läuft dafür total sauber durch mit meinen anfragen

  • wie sieht es mit n8n als "Vermittler" aus?

    Wir testen gerade die API von Amazon im Zusammenhang mit n8n.
    Für uns war immer sehr nervig Lagerbestandsauffüllung jeden Tag oder regelmäßig zu kontrollieren.
    Jetzt haben wir einen Workflow gebaut, der halt per API den Lagerbestandsreport abruft, ihn auswertet, formatiert, als Excel Datei in unserer Cloud speichert Als letzter Schritt soll jetzt noch dazu, dass wir entweder eine Nachricht (Telegram) oder eine E-Mail bekommen.

    Ich muss dazu sagen, bin kein Programmierer, aber technisch interessiert. 8)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!