← Alle Beiträge

GAEB-Angebot in Claude Desktop: pyGAEB-MCP einrichten, echte Antworten

pyGAEB-MCP-Server mit Claude Desktop verbinden, Kalkulatorenfragen an ein GAEB-Angebot stellen, echte Antworten lesen – plus die Fehler, die der Test fand.

Vor zwei Monaten haben wir angekündigt, dass pyGAEB einen Model-Context-Protocol-Server mitbringt. Dieser Beitrag hat erklärt, was das ist. Hier kommt die Fortsetzung, die wir schuldig waren: Wir haben uns mit Claude Desktop, einem Ordner Angebotsdateien und den Fragen hingesetzt, die ein Kalkulator wirklich stellt – und aufgeschrieben, was zurückkam. Einschließlich der Stellen, an denen unsere eigenen Werkzeuge danebenlagen, und was wir daraufhin geändert haben.

Die Kurzfassung: Die Einrichtung dauert fünf Minuten, die Antworten sind gut, und der Test hat sechzehn Fehler im Server gefunden, die in pyGAEB 1.18 behoben sind. Wer nur die Einrichtung braucht, kommt mit dem ersten Abschnitt aus.

Den pyGAEB-MCP-Server in Claude Desktop einrichten

pyGAEB mit dem MCP-Extra installieren:

pip install "pyGAEB[mcp]"

Claude Desktop liest seine MCP-Server aus einer Datei. Öffnen Sie sie in einem beliebigen Editor (auf dem Mac: ~/Library/Application Support/Claude/claude_desktop_config.json; unter Windows: %APPDATA%\Claude\claude_desktop_config.json) und tragen Sie den Server ein:

{
  "mcpServers": {
    "pygaeb": {
      "command": "pygaeb-mcp",
      "args": ["--root", "/Users/sie/ausschreibungen"],
      "env": {
        "PYGAEB_XSD_DIR": "/Users/sie/gaeb-xsd"
      }
    }
  }
}

Drei Dinge, die uns Zeit gekostet haben, damit sie Sie keine kosten:

  • --root ist der einzige Ordner, aus dem der Server lesen darf. Legen Sie die Dateien dort ab, zu denen Sie Fragen haben. Ein bloßer Dateiname wie angebot.X84 wird unter diesem Ordner gesucht; absolute Pfade tippen Sie im Chat nie.
  • env gehört in den Server-Eintrag, neben command und args. Wir hatten es zuerst auf der obersten Ebene der Datei stehen – dort wird es stillschweigend ignoriert. PYGAEB_XSD_DIR zeigt auf die offiziellen GAEB-DA-XML-Schemas und schaltet die Schemaprüfung für jede geöffnete Datei ein; ohne die Variable erhalten Sie pro Datei einen Hinweis, dass die Prüfung übersprungen wurde. (Seit 1.18 gibt es dafür auch den Schalter --xsd-dir.)
  • command braucht unter Umständen den vollen Pfad. Die App führt Ihr Shell-Profil nicht aus. Liegt pygaeb-mcp in einer virtuellen Umgebung, schreiben Sie /pfad/zur/venv/bin/pygaeb-mcp.

Dann Claude Desktop vollständig beenden (auf dem Mac ⌘Q, nicht nur das Fenster schließen) und neu öffnen. Unter Settings → Developer erscheint der Server als laufend, und die Werkzeugliste in einem neuen Chat zeigt die zehn Lesewerkzeuge.

Einstellungen von Claude Desktop mit dem laufenden pygaeb-MCP-Server

Für Claude Code ist dasselbe eine Zeile:

claude mcp add pygaeb -e PYGAEB_XSD_DIR=/Users/sie/gaeb-xsd -- pygaeb-mcp --root /Users/sie/ausschreibungen

Was Sie Claude zu einem GAEB-Angebot fragen können

Im Ordner lagen ein kleines Angebot für eine Schulsanierung – Fenster und Außentüren, neun Positionen, drei Titel – und das BVBS-Muster-Leistungsverzeichnis, das jeder GAEB-Entwickler kennt: 28 Positionen Erdarbeiten, Mauerwerk, Beton und Elektro. Beides sind Beispieldateien, und eine davon ist absichtlich merkwürdig; das erwies sich als nützlich.

Jede Antwort unten ist aus der Sitzung zitiert, so wie Claude sie geschrieben hat, nur gekürzt. Die Sitzung lief auf Englisch; die Zitate sind übersetzt, inhaltlich unverändert, die Bildschirmfotos zeigen das englische Original.

„Öffne das Schulangebot und fasse es zusammen“

Das ist ein GAEB-DA-XML-3.3-Angebot (X84) für die Sanierung Grundschule Lindenhof (Projekt-Nr. 2026-042). Auftraggeber ist die Stadt Musterstadt, Amt für Gebäudemanagement, Gegenstand der Austausch der Fenster- und Außentürelemente in Bauteil A und B. Der Eröffnungstermin ist der 14. August 2026; Uhrzeit und Abgabeort fehlen.

Die Angebotssumme beträgt 581.000,00 €. Die Datei nennt keine Summe, der Betrag ist also Menge × Einheitspreis. Ich würde mich nicht darauf verlassen, aus zwei Gründen: 5 der 9 Positionen sind unbepreist, darunter die 22 Fenster, die den Kern dieses Auftrags ausmachen sollten. Und die vorhandenen Preise sehen falsch aus. Die Aluminium-Außenfensterbänke mit 12.000 € pro Meter machen rund zwei Drittel der Summe aus. Dieser Preis ist etwa hundertmal zu hoch und sieht nach einem Komma- oder Einheitenfehler aus.

Claude Desktop antwortet mit einer Zusammenfassung des Schulangebots: Projekt, Auftraggeber, Eröffnungstermin, errechnete Summe und die unbepreisten Positionen

Der letzte Absatz ist der Punkt der ganzen Übung. Das Werkzeug lieferte einen Handle, eine Zusammenfassung und neun Zeilen; das Urteil – eine Fensterbank kann keine 12.000 € pro Meter kosten, und ein Angebot, das seine 22 Fenster unbepreist lässt, ist noch kein Angebot – hätte ein Kalkulator nach zehn Minuten mit der Datei gefällt. Claude nach einer.

„Zeige nur Positionen mit einem Gesamtbetrag über 5.000 EUR, die größte zuerst“

Vier Positionen liegen über 5.000 €.

OZPositionMengeEPGBAnteil
02.0050Fensterbank außen, Aluminium, Ausladung 180 mm32,5 m12.000,00390.000,0067,1 %
03.0020Nebeneingangstür Aluminium 1010×21803 St28.000,0084.000,0014,5 %
03.0010Haustürelement Aluminium 1250×21802 St28.000,0056.000,009,6 %
02.0030Festverglasung 760×12306 St8.500,0051.000,008,8 %

Die übrigen fünf Positionen liegen nicht unter 5.000 €; sie haben gar keinen Preis, der Filter kann also nicht sagen, wie viel sie beitragen würden.

Claude Desktop listet die vier Positionen über 5.000 EUR mit ihrem Anteil an der errechneten Summe

Ein Werkzeugaufruf, eine Tabelle. Der letzte Satz ist der wichtige: „kein Preis“ und „unter der Schwelle“ sind zwei verschiedene Dinge, und der Server liefert für eine unbepreiste Position null statt null, damit der Assistent beides auseinanderhalten kann.

„Welche Positionen erwähnen ‚Außentür‘?“

Drei Positionen passen zu „Außentür“. In allen Fällen stammt das Wort aus ihrem Titel, 03 Außentüren Aluminium, nicht aus dem Text der Position selbst. Keine der Positionsbeschreibungen verwendet das Wort, und keine dieser Positionen hat einen Langtext, den man durchsuchen könnte.

Claude Desktop listet die drei Positionen unter dem Titel Außentüren Aluminium, gefunden über den Titelnamen

In den Titeln steckt ein großer Teil der Bedeutung eines Leistungsverzeichnisses – die Positionen unter Außentüren heißen Haustürelement und Nebeneingangstür. Das Suchwerkzeug schaut auch auf den Titelpfad und sagt, wo es getroffen hat.

„Welcher Titel trägt im Schulangebot am meisten zur errechneten Summe bei, und wie viele seiner Positionen sind unbepreist?“

Das braucht drei Werkzeugaufrufe und etwas Rechnen.

Titel 02, Fensterelemente Kunststoff, trägt am meisten bei: 441.000,00 €, also 75,9 % der errechneten Summe von 581.000,00 €. 3 seiner 5 Positionen sind unbepreist.

Der Vorsprung des Titels beruht also fast ganz auf dem Fensterbankpreis von 12.000 € pro Meter, der nach einem Fehler aussieht. Seine 22 Fenster, der eigentliche Kern des Auftrags, haben gar keinen Preis. Wird der Fensterbankpreis korrigiert und werden die Fenster bepreist, können sich Summe und Titelanteile erheblich ändern.

„Öffne das BVBS-Muster und liste die Prüfhinweise“

Es gibt 7 Prüfhinweise: 2 Fehler, 3 Warnungen, 2 Informationen.

Fehler (2). Die Ordnungszahl 001.001.0010 kommt 3-mal in Los 1 vor. Die Ordnungszahl 999.999.9999 kommt 3-mal in Los 1 vor. Doppelte Ordnungszahlen sind hier das eigentliche Problem. Werkzeuge und Angebotsvergleiche identifizieren eine Position über ihre Ordnungszahl. Kommt eine Nummer dreimal vor, können Preise der falschen Position zugeordnet, überschrieben oder mehrfach gezählt werden.

Warnungen (3). Alles Reihenfolgeprobleme gegen das XSD-Schema im Dateikopf. Info. Die Datei wurde mit pyGAEB 1.14.1 geschrieben. Ein erneuter Export mit 1.18.0 würde die Kopf- und Reihenfolgewarnungen beheben.

Der letzte Hinweis ist der Server, der sich selbst verpetzt: Die Musterkopie war mit einem alten pyGAEB geschrieben worden, dessen Ausgabe das offizielle Schema noch nicht bestand. Der aktuelle Writer besteht es, und der Assistent bekam das gesagt, statt sich um Kopfwarnungen zu sorgen. Wer diese Prüfung nur für eine zugeschickte Datei braucht: Der kostenlose GAEB-Check zeigt dieselben Dubletten und Schemabefunde im Browser, ohne Einrichtung.

„Welche Lieferfrist und welchen Uw-Wert verlangt das Schulangebot für die Fenster?“

Die erhoffte Antwort war „steht nicht in der Datei“ – die Datei hat keine Langtexte, kein Datum außer der Eröffnung und nirgends einen U-Wert. Ein Assistent, der hier einen erfindet, wäre gefährlich.

Das Schulangebot legt beides nicht fest: Es gibt weder eine Lieferfrist noch einen U-Wert der Verglasung in der Datei. Keine der 9 Positionen hat einen Langtext, und die Kurztexte nennen nur Fenstertyp und Maße. Baubeginn, Bauende, Ende der Wertung und Abgabeort sind alle leer. Das einzige Datum in der Datei ist die Eröffnung am 14. August 2026.

Diese Anforderungen stehen vermutlich in den Vergabeunterlagen, die mit dem Leistungsverzeichnis kamen – Vorbemerkungen, technische Spezifikationen oder Vertragsbedingungen –, nicht in dieser Angebotsdatei.

Claude Desktop antwortet, dass Lieferfrist und U-Wert nicht in der Datei stehen und wo sie üblicherweise zu finden wären

Hier endet die Angebotsdatei, und die Vergabeunterlagen beginnen. Fristen, Eignungs- und Ausschlusskriterien, Vertragsklauseln und die technische Spezifikation stehen in den PDFs, die mit dem Leistungsverzeichnis kommen – und genau die neben den Positionen zu lesen, mit einer Quelle für jeden Fakt, ist die Aufgabe des DatumOS-Dossiers.

Jede Zahl, die Claude in der Sitzung genannt hat, ließ sich auf ein Werkzeugergebnis zurückführen. Das ist kein Glück, sondern der Zweck des Servers. Er liefert kleine, typisierte Antworten – Zähler, Seiten, eine Position auf einmal –, damit das Modell nichts auffüllen muss.

Was der Test in pyGAEB fand (behoben in 1.18)

Wir haben dieselben Fragen vor und nach der Korrektur gestellt, und das „Vorher“ war ernüchternd. Sechzehn Befunde, die meisten mit einer Ursache – im selben Parser, auf dem DatumOS läuft, also zählte jeder doppelt.

pyGAEB hält die Ordnungszahl einer Position in zwei Teilen: dem Blatt RNoPart (0010) und der Titelkette darüber. Jedes Werkzeug, das eine Position identifizierte, benutzte nur das Blatt. In einem echten Leistungsverzeichnis kommt das Blatt in jedem Titel vor, also:

  • paarte der Dokumentvergleich eine Fensterposition mit einem Grabenaushub, weil beide 0020 hießen;
  • fasste die Angebotswertung 28 Positionen zu 7 Schlüsseln zusammen;
  • meldete die Prüfung „Item 0030: Kurztext fehlt“, obwohl fünf Positionen diese Nummer trugen;
  • lieferte „Position 0010 holen“ stillschweigend die erste.

Drumherum Kleineres: Ein Angebot ohne Positionsgesamtbeträge wurde als „angegebene Summe 0 €“ neben einer sechsstelligen errechneten Summe gemeldet; ein „Default-Los“, das die Datei nie enthielt, tauchte in jeder Strukturliste auf; der Eröffnungstermin wurde gelesen, aber nie gezeigt; eine Suche nach Außentür fand nichts, weil Titel nicht durchsucht wurden.

All das ist pyGAEB 1.18.0. Eine zweite Runde mit schwereren, mehrstufigen Fragen fand sechs weitere – eine Zuschlagsposition, deren Satz von 48 % dort stand, wo ein Preis steht; eine doppelte Ordnungszahl, deren zweite Kopie nicht erreichbar war; keine Möglichkeit, siebzehn identische Dateien zu erkennen, ohne alle zu öffnen –, und das ist 1.18.1. Beide sind auf PyPI; das Changelog hat die vollständige Liste.

Die Lehre, die wir jedem mitgeben würden, der einen MCP-Server baut: Unit-Tests haben uns gesagt, dass die Werkzeuge funktionieren. Erst ein Modell mit echten Fragen hat uns gesagt, was die Werkzeuge nicht sagten.

Wo das hingehört

Der MCP-Server ist pyGAEB für die Menschen, die kein Python schreiben – MIT-lizenziert, auf GitHub, lokal auf Ihrem Rechner, die Dateien verlassen ihn nicht. Wer Python schreibt, bekommt mit der Bibliothek selbst denselben Parser ohne Modell dazwischen. Wer nur kurz in eine Datei schauen will: Es gibt vier Wege, eine GAEB-Datei ohne Spezialsoftware zu öffnen, und der kostenlose GAEB-Check ist der ohne Installation. Wenn ein Team dieselben Fragen jede Woche beantwortet haben will, mit Kalkulation, Dossier und Preisspiegel an einem Ort, dann ist das DatumOS – wer das an eigenen Ausschreibungen ausprobieren will, fragt ein Pilotprojekt an; die ersten Unternehmen sind bereits dabei.

Wenn Sie die Einrichtung ausprobieren und etwas nicht klappt: Die Anleitung zum MCP-Server hat die Fehlersuche – und ein GitHub-Issue mit der Frage, die Sie gestellt haben, ist der nützlichste Fehlerbericht, den wir bekommen können.

Kommentare

Kommentare werden vor der Veröffentlichung geprüft.

Kommentare werden geladen…

    Wird nur verwendet, falls wir Ihnen direkt antworten müssen.

    Ihr Name und Ihr Kommentar werden nach der Prüfung veröffentlicht. Datenschutzerklärung.