Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Das Format orientiert sich an Keep a Changelog, und dieses Projekt folgt Semantic Versioning.
-
Die Origin-Prüfung gilt jetzt für alle Pfade. Sie stand hinter
/healthund hinter der Pfadprüfung und war damit für/healthwirkungslos: Eine beliebige Webseite konnte per JavaScript erfahren, dass auf einem lokalen Port dieser Server läuft, und seinen Zustand samt Störungsgrund auslesen. Die Spezifikation verlangt die Prüfung für alle eingehenden Verbindungen. Aufrufe ohneOrigin-Kopf sind unverändert, betroffen ist alleinfetch()aus fremder Seite. -
/mcpund/healthnehmen nur noch die Methoden an, die sie brauchen. Auf/mcpantwortet alles ausserPOSTundOPTIONSmit 405 undAllow: POST, OPTIONS; auf/healthgilt dasselbe für alles ausserGET,HEADundOPTIONS. Vorher meldete derselbe Pfad dreierlei:GETbekamAllow: POST, OPTIONS,HEAD,PUTundPATCHbekamen aus dem SDKAllow: GET, POST, DELETE, undDELETEbekam 200.DELETE /mcpliefert deshalb 405 statt 200; ein zustandsloser Server hat keine Sitzung zu beenden, und die Spezifikation erlaubt die Antwort ausdrücklich. -
access-control-allow-methodswird je Pfad gesetzt statt global, und aus derselben Konstante wie dieAllow-Kopfzeile, damit beide nicht auseinanderlaufen können. Die Vorabanfrage steht jetzt hinter der Pfadprüfung: Auf einen unbekannten Pfad antwortet sie mit 404 statt mit 204 und einer Methodenliste.access-control-allow-origin: *ist unverändert.
bun run test:http(tests/test-http.ts), 47 Zusicherungen über den HTTP-Transport: Statuscodes je Methode, die Werte derAllow-Kopfzeilen, Origin in beiden Richtungen, Vorabanfrage, Zustandsauskunft, unbekannte Pfade. Braucht keine Datenbank, anders alsbun run test.
-
GET /mcpantwortet mit 405 statt 200 und trägtAllow: POST, OPTIONS. Die 200 mit leerem Rumpf war keine der beiden Antworten, die die Spezifikation an dieser Stelle zulässt, und der SDK-Client konnte sie nur als eröffneten Strom lesen: Er übergab an den Stream-Handler, der Rumpf endete sofort, und die Wiederverbindung lief mit ihrem Grundwert von 1000 ms endlos weiter.maxRetries: 2griff nicht, weil der Zähler gescheiterten Verbindungen gilt und eine 200 als geglückt zählt.Gemessen am laufenden Endpunkt: 41 430 GET gegen 389 POST binnen 24 Stunden, 0,93 Anfragen je Sekunde durchgehend, rund 40 000 Anfragen am Tag ohne jede Nutzlast. Die mittlere Antwort war mit 797 Byte kleiner als ein einzelner Vers, es wurde also nichts abgerufen.
Für Clients ändert sich nichts an den Werkzeugen. Der GET-Kanal ist laut Spezifikation eine Kann-Bestimmung; dieser Server sendet ohnehin keine server-initiierten Nachrichten, und der SDK-Client behandelt 405 ausdrücklich als erwarteten Fall und arbeitet mit POST weiter. Betroffen ist allein der HTTP-Modus, stdio ist unberührt.
-
Alle Codekommentare sind auf Deutsch umgestellt, in allen 21
.ts-Dateien und in einem Zug. Gemessen danach: 1147 Kommentarzeilen eindeutig deutsch gegen 24 eindeutig englisch, wo es vorher 1190 englische gegen 69 deutsche waren. Die 24 verbliebenen sind wörtliche Zitate fremder Meldungen und der Spezifikation; ein übersetztes Zitat wäre keines mehr.Kein Verhalten ändert sich. Mechanisch nachgewiesen: Beide Stände durch denselben Transpiler ergeben denselben Code, Datei für Datei. Kein Bezeichner, keine Zeichenkette, keine Tool-
descriptionund keine Fehlermeldung ist angefasst; die deutschen Ausgabetexte sind zeichengleich. Typecheck grün, Golden-Tests bei 313 von 313.Beim Umstellen wurde redigiert, nicht nur übersetzt: Kommentare, die nur den Code nacherzählten, sind kürzer, und Codekommentare fallen jetzt unter die Em-Dash-Regel dieses Repositories (kein
—mehr in einem Kommentar). Zwei Zahlen sind dabei richtiggestellt worden, die von „sechs Werkzeugen" sprachen, wo es sieben sind. Wergit blamebenutzt, setzt einmaliggit config blame.ignoreRevsFile .git-blame-ignore-revs, sieheCONTRIBUTING.md.
-
Der Preis der Fehlercode-Umstellung aus 0.5.11 ist gemessen und festgehalten. Claude Code deutet
-32602beiresources/readals „nicht gefunden" und ersetzt den Meldungstext des Servers durch eine eigene Zeile samt dem Rat, die Ressourcenliste neu zu laden. Unter-32603kam der Servertext wörtlich an. Gemessen am 02.08.2026 gegen den ausgerollten Endpunkt vor und nach dem Ausrollen, an zwei Fehlerarten, bei zeichengleichem Servertext.Betroffen sind allein die Ressourcen und allein dieser Client: Prompts geben ihre Meldung weiterhin im Wortlaut aus, Werkzeuge liefern ihre Fehler ohnehin als Ergebnis mit
isError. Wer den vollen Text braucht, stellt dieselbe Frage überbible_lookup. Für Claude Desktop und claude.ai ist es nicht gemessen. Am Code ändert sich nichts, der Fehlercode bleibt-32602; die drei Auswege stehen indocs/ENTSCHEIDUNGEN.md, die Nutzersicht indocs/FEHLERBEHEBUNG.md.
-
Fehler des Aufrufers melden
-32602(Invalid params) statt-32603(Internal error). Betroffen sind 19 Stellen: unbekanntes Werkzeug, unbekannter Prompt, fehlendes oder zu langes Prompt-Argument und jede fehlerhafte Ressourcen-URI. Die Spezifikation nennt-32602für Prompts ausdrücklich; ein interner Fehler lag in keinem der Fälle vor.Kein Meldungstext ändert sich. Wer auf den Wortlaut prüft, merkt nichts; wer auf
-32603prüft, muss umstellen. Die Werkzeuge bleiben ebenfalls unverändert: Ein unbekanntes Buch ist weiter ein Ergebnis mitisErrorund Prosa.-32603bleibt der Instanz ohne Bibeldatenbank vorbehalten, das ist ein Zustand des Servers und kein Fehler der Anfrage. Der Golden-Test prüft 313 statt 291 Zusicherungen.
docs/TYPESCRIPT.md: sieben Konventionen für Codekommentare, darunter Sprache (Deutsch, außer Bezeichnern und den englischen Tool-Beschreibungen), Länge und Abgrenzung zudocs/ENTSCHEIDUNGEN.md. Der Bestand ist noch überwiegend englisch, die Umstellung steht aus.docs/ENTSCHEIDUNGEN.md: Begründung der Fehlercodes samt Messung, warum dafür nichtMcpErrorverwendet wird, und warumDELETEweiter mit 200 antwortet.
- Die drei Prompts tragen einen deutschen Anzeigenamen im Feld
title: „Wortstudie", „Textvarianten prüfen", „Übersetzungen vergleichen". Ein Client zeigt ihn im Auswahlmenü, das der Nutzer liest; angesprochen werden die Prompts weiterhin über ihre unveränderten Bezeichner.prompts/listwächst dadurch von 972 auf 1060 Zeichen. Die Prompt-Argumente bekommen keinen Titel, das Protokoll sieht dort keinen vor.
docs/FEHLERBEHEBUNG.mderklärt, warum sich eine Ressource nicht anhängen lässt. Enthält der Servername Leerzeichen, setzt die Vervollständigung in Claude Code ein Anführungszeichen, das die dokumentierte Form nicht kennt, und der Inhalt kommt nicht an; ein lokaler Eintrag desselben Endpunkts unter kurzem Namen behebt es. Die URI-Vorlagen sind über@gar nicht erreichbar, wohl aber überresources/read. Beides gemessen am 02.08.2026 in Claude Code, für Claude Desktop und claude.ai nicht.
-
Ressourcen als dritte MCP-Primitive. Vier feste Einträge (
bible://buecher,bible://uebersetzungen,bible://editionen,bible://quellen) und drei URI-Vorlagen für Kapitel, Verse und Grundtext. Werkzeuge und Prompts wählt das Modell, eine Ressource hängt der Nutzer selbst an.Der Bibeltext liegt in den Vorlagen, nicht in der Liste:
resources/listkostet 939 Zeichen,resources/templates/list947, gegen 15 171 fürtools/list. Allein die 66 Bücher aufzuzählen wären rund 13 000 Zeichen mehr, und ein ganzes Buch wäre nicht auslieferbar (größtes: 260 990 Zeichen). Grundtext deshalb je Vers, nicht je Kapitel.Text-Ressourcen tragen
verse_einzelnstatt eines zusammengesetztentext: eine angehängte Ressource wird zitiert, und eingebettete Versnummern wurden nachweislich mit abgeschnitten. Beide Felder kosteten das 2,57-Fache,verse_einzelnallein das 1,58-Fache (Psalm 119, Luther). Jede Ressource mit Text trägt ihrequellen.Ohne Datenbank sind beide Listen leer und ein Abruf wird abgewiesen, über HTTP mit anderem Wortlaut als über stdio.
bible_lookupundbible_originalantworten unverändert; der Golden-Test prüft jetzt 284 statt 199 Zusicherungen. -
bible_server_infonennt die Ressourcen und Vorlagen. Ob ein Clientresources/templates/listüberhaupt abruft, ist nicht belegt; diese Auskunft ist der Kanal, der das Modell nachweislich erreicht. Kosten: 359 Zeichen in der Antwort, 202 intools/list. Aus denselben Konstanten wie die Listen, deshalb können beide nicht auseinanderlaufen.
-
Die sieben Lesewerkzeuge deklarieren ein
outputSchemaund liefern ihr Ergebnis zusätzlich alsstructuredContent(MCP-Revision 2025-06-18). Ein Konsument findet damit ein Feld, statt Text zu zerlegen; wenige Felder tragen eine Beschreibung, und zwar genau die, bei denen Konsumenten nachweislich danebengegriffen haben (treffergegenvorkommen_gesamt,warnung,verse_einzeln, die Quellentreue vonwort). Der Textblock bleibt zeichengleich, ein Client ohne Kenntnis der Neuerung sieht dasselbe wie zuvor. Fehlerantworten bleiben reiner Text und tragen keinstructuredContent.Preis:
tools/listwächst von 7201 auf 14969 Zeichen, eine Antwort um 63 bis 80 Prozent, weil die Nutzlast zweimal übertragen wird.bible_setupbleibt bewusst ohne Schema.requirednennt je Werkzeug nur Felder, die in jedem Erfolgsfall dastehen; für jedes bedingte Feld gibt es einen Testfall. Der Golden-Test prüft jetzt jede Antwort gegen ihr Schema und den Validator gegen fünf bekannt kaputte Antworten.
- Die Werkzeugtabelle in
README.mdführtebible_server_infonicht auf, und zwei Stellen sprachen weiter von „sechs Werkzeugen".
- Die drei Prompts nennen den geladenen Bestand statt einer festen Liste.
translation-compareführte „LUT, SCH, ELB, MB" wörtlich,variant-checkdrei Editionen und die TAGNT-Bezeugung; eine Instanz, der davon etwas fehlt, wurde damit zu Aufrufen aufgefordert, die fehlschlagen müssen. Übersetzungen und Editionen erscheinen jetzt mit Namen, nicht als bloße Kürzel. - Die Prompts benennen die Felder, die die Antworten wirklich tragen.
word-studyverwies auf „Gloss, Definition, Abbott-Smith", während die Antwortkurzbedeutung,bedeutungundlexikonführt, und trennt jetztgesamt(Vorkommen) vonverse(Verse).variant-checknenntwarnung,quellenkonflikteundin_dieser_dbausdrücklich: die Vorbehalte, die sonst tief in der Antwort stehen bleiben.
- Ein fehlendes Pflichtargument erzeugte einen Prompt mit einer Lücke im Text und meldete Erfolg.
prompts/getweist ihn jetzt unter Nennung des Feldes zurück, begrenzt Argumente auf 100 Zeichen und faltet Zeilenumbrüche. - Das MCPB-Manifest nannte die Prompt-Argumente
wortundstelle; sie heißenwordundreference.
- Der HTTP-Modus vermerkt auf stderr, in welcher Protokollfassung ein Aufrufer spricht: eine Zeile je Fassung, nicht je Anfrage, höchstens 20 Fassungen. Ein Zugriffsprotokoll ist das ausdrücklich nicht. Es ist die Vorwarnung für die MCP-Revision 2026-07-28, die
initializeund die Sitzung abschafft und die dieser Server nicht bedient: Ein Client, der sie spricht, bekommt hier sonst still eine Antwort nach altem Verfahren. Die Fassung wird gegen das FormatJJJJ-MM-TTgeprüft, bevor sie ins Protokoll gelangt; alles andere erscheint als fester Platzhalter, und die Bezeichnung der Client-Software wird nicht erfasst.
- Das MCPB-Manifest führte
bible_server_infonicht auf, obwohl der Server es seit 0.5.2 registriert. Die Liste dort ist handgepflegt; jetzt stimmen beide mit acht Einträgen überein. - Die Lizenzangabe zu Schlachter 1951 sprach von entferntem HTML-Fußnoten-Markup. Die Quelle enthält keines, geprüft am 28.07.2026 zeichengenau über alle 31 101 Verse gegen den statischen Export.
README.mdnannte zwei Unterschiede zwischen HTTP- und stdio-Betrieb, es sind drei.
- Neu:
docs/ENTSCHEIDUNGEN.mdfür Begründungen und Messungen, die an keiner einzelnen Codestelle stehen. Erste Einträge: das Protokoll-Log und der Befund, dass dieser Server Clients beider Ären als alten Server erkennbar bleibt, weil das 1.x-SDK mit dem Fehlercode -32000 antwortet und nicht mit dem modernen -32022.
bible_lookupkürzt Verslisten nicht mehr stillschweigend. Mehr als 30 kommagetrennte Segmente wurden abgeschnitten und die zu kurze Antwort ohne Hinweis ausgegeben ("1,2,…,35"in Psalm 119 kam als 119,1-30 zurück). Jetzt wird abgewiesen und die Grenze benannt.- Die Versgrenze gilt in beiden Nachschlagepfaden:
"1-500"lief bisher wie gültige Eingabe durch,"1-500,2"lieferte Vers 2 allein. - Die Zeichengrenze für
verseswird aus Segment- und Versgrenze gerechnet und liegt damit bei 239 statt 200. Die alte Zahl wies gültige Eingabe ab, etwa 30 Segmente100-176. - Fehlermeldungen nennen die verletzte Bedingung. Ein zu langer Buchname bekam „'book' is required", obwohl er gesetzt war;
verseshat statt einer Sammelmeldung vier: Typ, Länge, Segmentzahl, Wertebereich. bible_searchsagt jetzt, wenn oberhalb von 1000 Treffern nicht ausgezählt wurde.vorkommen_gesamtundverteilungentfielen dort kommentarlos; derhinweisnennt Grenze, Grund und Ausweg.
AGENTS.mdist entfallen; die Verweise inREADME.mdunddocs/TYPESCRIPT.mdsind ersetzt, das Beispiel für den stdio-Aufruf steht jetzt im README.- Neu:
docs/UEBERSETZUNGEN.mdmit der geprüften Lizenzlage möglicher weiterer Übersetzungen. Der Server führt weiter dieselben vier.
bible_server_infoliefert die Urtext-Editionen in derselben Form wie die Übersetzungen, also mit Namen statt nur mit Kürzel ({"code": "byzantine", "name": "Byzantinischer Mehrheitstext (Robinson-Pierpont 2005)"}). Die Namen stammen ausEDITION_META, nicht aus einer zweiten Liste. Die Antwort wächst dadurch von 624 auf 995 Zeichen,tools/listbleibt unverändert.- Zwei Kommentare in
server.tszuminstructions-Feld widersprachen einander und halten jetzt den gemessenen Stand fest. Ohne Verhaltensänderung.
docs/TYPESCRIPT.mdsprach von einer fehlenden Testsuite, gemeint war „kein Test-Framework":tests/test-golden.tsist dort jetzt genannt. Ebenfalls nachgezogen: der HTTP-Modus überMCP_HTTP_PORT.
Die Zeichenzahlen dieser Fassung sind über einen stdio-Client an JSON.stringify(result) der tools/list gemessen: 7201 Zeichen für alle sieben Werkzeuge, davon 361 für bible_server_info. Die abweichenden Zahlen im Abschnitt zu 0.5.2 ließen sich nicht mehr nachvollziehen und bleiben dort unverändert stehen.
-
Releases entstehen aus einem
release.yml-Workflow: Einv*-Tag baut beide Bundles (linux-x64,darwin-arm64) aus einem sauberen Checkout, legt die GitHub-Release als Entwurf mit dem passenden Changelog-Abschnitt an und prüft, dass genau zwei Assets hochgeladen sind. Anlass war 0.5.2: Der Tag lag auf GitHub, die Release samt Bundles fehlte.Drei Abbruchbedingungen: Tag und
versioninpackage.jsonmüssen übereinstimmen, ein fehlender Changelog-Abschnitt bricht ab, und der Typecheck läuft auf dem getaggten Stand, denlint.ymlbisher nicht berührte.Diese Fassung ist inhaltlich identisch mit 0.5.2.
-
bible_server_info(siebtes Werkzeug): meldetversion, die geladenenuebersetzungen, dieurtext_editionen, fünf Flags unterzusatzdaten(Strong-Lexikon, dessen STEPBible-Vollständigkeit, Editionsbezeugung, Querverweise, Volltextsuche) sowiedaten_standaus derprovenance-Tabelle.Warum ein Werkzeug und nicht das billigere
instructions-Feld: Am 26.07.2026 gemessen sahen zwei Sitzungen in Claude Desktop ausschließlich die Inhalte vontools/list; dasinitialize-Result reicht dieser Client dem Modell nicht durch. Ein Tool-Result ist der einzige sichere Kanal. Kosten:tools/listwächst um 379 Zeichen (+5,3 %) je Sitzung.Bewusst nicht gemeldet: Hostname, Pfade, Prozess, Laufzeit (der HTTP-Endpunkt ist öffentlich und authlos), eine Gesamtzahl der Verse und die Quell-URLs. Der Handler liegt vor der
dataMissing-Sperre der sechs Daten-Werkzeuge, weil die Frage nach Fassung und Bestand ohne Datenbank besonders naheliegt. -
Das
instructions-Feld bleibt trotz des Messergebnisses gesetzt: Es kostet nichts, andere Clients zeigen es, und sein Satz „Quote scripture only from the bible_* tools, never from memory" ist unabhängig von der Versionsfrage sinnvoll.
- Die Menge-Übersetzung heißt „Menge 1939", damit alle vier Übersetzungen ihre Ausgabe im Namen tragen. Code
MBund alle Aliase bleiben,menge1939kommt hinzu.
-
Der Em-Dash (
—) ist aus allen deutschen Texten verschwunden, betroffen sind die Dokumentation und die deutschen Ausgabetexte inserver.ts(hinweis,warnung,lesehinweis, Fehlermeldungen, Prompts). Gesetzt ist jetzt, was der Satzbau verlangt.Nicht angetastet: englische Kommentare und Tool-
descriptions, der Platzhalter"—"für „kein Wert", ältere Einträge in dieser Datei, die Servermeldungen wörtlich zitieren.Reine Interpunktion, kein Feld geändert, die 61 Zusicherungen laufen durch. Nicht gemessen ist, ob die veränderte Interpunktion das Modellverhalten berührt.
-
Die H1 der README lautet Bibelstudium MCP statt
bibelstudium-mcp. Der Paketname bleibt.
-
bible_searchliefertverteilung: je Buch bei einer Suche über die ganze Bibel, je Kapitel bei einer auf ein Buch eingegrenzten, mit Vers- (treffer) und Vorkommenszahl (vorkommen). Ausgezählt über alle Treffer, nicht über die gelisteten Verse; entfällt bei nur einem Eintrag. -
bible_comparebeziffert Wortzahlen je Edition inwoerterund hinter jedem mehrwortigen Unterschied die Länge des Laufs.Hintergrund: Über sechs von Hand nachgerechnete Läufe waren die Zahlen, die ein Werkzeug nennt, 10/10 richtig, während abgeleitete Summen in etwa der Hälfte der Fälle falsch waren, und zwar so, dass die Gesamtsumme aufgeht (das Comma Johanneum als „16 zusätzliche Wörter", wo es 17 sind).
Additiv, kein bestehendes Feld geändert.
- Der Regressionstest liegt in
tests/statt inscripts/, dennscripts/ist der Datenaufbau. Aufgerufen unverändert überbun run test.
-
Jede Antwort nennt die Quellen, aus denen sie stammt (Feld
quellenmitwerk,lizenz,nennung). Das ist Lizenzpflicht, die durch das Hosten einschlägig wird: Vier der Quellen stehen unter CC BY, zwei unter CC BY-SA, und wer den Server nur über MCP benutzt, siehtTHIRD_PARTY_LICENSES.mdnie.Genannt wird nur, was die Antwort tatsächlich benutzt hat;
nennung: nullheißt „Lizenz verlangt keine". Über stdio in acht Fällen geprüft, keine fehlende und keine überschüssige Nennung. -
Das Freitextfeld
quelleinbible_crossrefsentfällt.
bible_setupgibt es im HTTP-Modus nicht. Es lädt rund 145 MB von acht fremden Quellen und ersetzt die Datenbankdatei; über stdio gehört das dem, der den Prozess gestartet hat, an einem erreichbaren Endpunkt Fremden. Bei gesetztemMCP_HTTP_PORTfehlt es intools/listund der Handler lehnt es ab: Eine ungelistete Werkzeugbezeichnung lässt sich weiterhin schicken. Gemessen am 25.07.2026 in drei Fällen.- Ohne Datenbank verwiesen alle Werkzeuge darauf,
bible_setupaufzurufen. Im HTTP-Modus sagt die Meldung jetzt, dass sich das nur serverseitig beheben lässt.
server.ts --setupbaut die Datenbank und beendet sich, das Gegenstück zubible_setupfür die Betreiberseite. Ohne diese Flagge bräuchte ein Endpunkt Bun und ein Checkout auf dem Zielrechner.- Ein CI-Guard für den HTTP-Modus (503 auf
/health,bible_setupweder gelistet noch ausführbar). Gegengeprüft: mit ausgehebelter Sperre schlägt er fehl. /healthfragt die Datenbank ab, statt den Startzustand zu wiederholen: Antwortet sie nicht, kommt 503 mit Grund im Rumpf. Gemessen an einer im laufenden Betrieb zerstörten Datei.
- Ein
GET /mcpblieb zwei Minuten als leerer Stream offen. Der Server ist zustandslos und schiebt keine Nachrichten, hielt die Verbindung aber trotzdem: 30 parallele Aufrufe banden 30 Dateideskriptoren. Jetzt 1,2 ms statt 120 s. Der Status bleibt 200 statt 405, weil der einzige nachweislich funktionierende authlose Custom Connector so antwortet. DATASET_QUELLENwar alsRecord<string, Quelle>typisiert, ein Klammerzugriff mit Tippfehler hätte eine lizenzpflichtige Nennung stillschweigend unterdrückt. Die Schlüssel sind jetzt konkret typisiert.- Härtung des HTTP-Servers:
maxRequestBodySize1 MB statt 128 MB (413 oberhalb, gemessen),development: falsegegen Stacktraces in Antworten. server.ts --setupsagt jetzt, dass es eine vorhandene Datenbank ersetzt.- Der Server meldete
0.2.2, während Paket und Release auf0.3.0standen. Die Version kommt jetzt per JSON-Import auspackage.json, geprüft unterbun runund im kompilierten Binary.
-
bible_setup: der Server baut seine Datenbank selbst. Wer über das MCPB-Bundle installiert, hat kein Terminal im Spiel. Der Server startet jetzt auch ohne Datenbank, meldet was fehlt und sperrt die sechs Datenwerkzeuge mit einem Hinweis, statt sie „Buch nicht gefunden" antworten zu lassen.Der Download startet nur auf ausdrückliche Bestätigung. Ohne
bestaetigung=trueliefert das Werkzeug nur den Plan. Am 25.07.2026 im installierten Bundle durchgemessen: Das Modell fragte zurück, statt den Download sofort auszulösen, alle acht Schritte liefen durch, der Neustart-Hinweis kam beim Nutzer an.Ein Teilausfall bricht nicht den ganzen Aufbau ab. Jeder Schritt arbeitet auf einer privaten Kopie und tauscht sie atomar ein; nur der erste ist zwingend. Der Bericht nennt Fehler, fehlende Funktion und den Befehl zum Nachholen. Gemessen: acht von acht Schritten in 26 Sekunden, gleicher SHA-256 wie eine über die Skripte gebaute Datenbank.
-
bun run setupführt dieselben acht Schritte auf der Kommandozeile aus. -
db-path.ts: eine gemeinsame Pfadauflösung für Server und Skripte. Vorher hätte der ServerBIBLE_DB_PATHbeachtet und die von ihm aufgerufenen Skripte neben ihren eigenen Quelltext geschrieben. Ein installiertes Bundle legt die Datenbank im Benutzerordner ab, nicht neben dem Programm: Dessen Verzeichnis wird beim Update ersetzt. -
Die Angabe der Datenbank ist im Bundle damit optional.
- Ein leer gelassenes Feld im Installationsdialog machte den Aufbau unmöglich. Claude Desktop reicht
${user_config.db_path}wörtlich alsBIBLE_DB_PATHdurch. Der Download lief vollständig durch und scheiterte erst beim Schreiben, mit einer SQLite-Meldung, die wie ein Netzwerkfehler klingt.db-path.tsverwirft jetzt jeden Wert mit unaufgelöstem${…}. - Das Bundle enthielt eine 63 MB große Blindkopie des Servers.
bun build --compilelegt eine temporäre Kopie im Arbeitsverzeichnis ab; lief der Compiler im Staging-Ordner, wurde sie mitgepackt (121 MB statt 61 MB entpackt). Der Compiler arbeitet jetzt in einem eigenen Verzeichnis.
-
bun run downloadlädt jede Übersetzung als einen statischen Export statt Kapitel für Kapitel. Genau davon rät die API-Dokumentation von bolls.life ausdrücklich ab. Aus 4760 Anfragen wurden acht, aus rund 20 Minuten 3,2 Sekunden, bei identischem SHA-256 über alle 124 441 Verse und überbooks.Der Provenance-Digest hasht jetzt die empfangenen Bytes statt einer Neuserialisierung. Bestehende Datenbanken müssen nicht neu gebaut werden.
-
MCPB-Bundle (
.mcpb) für Claude Desktop mit eigenständigem Binary ausbun build --compile, also ohne installiertes Bun. Damit entfallen zwei Stolperstellen: GUI-Anwendungen erben unter macOS die Shell-PATHnicht, und Claude Desktop überschreibt beim Beenden seine Konfigurationsdatei.Das Bundle enthält nicht die Datenbank (rund 145 MB, und STEPBible bittet darum, ihre Dateien nicht weiterzuverbreiten). Ein Bundle trägt genau ein Binary und läuft auf genau einer Plattform;
compatibility.platformswird aus dem Compile-Target abgeleitet. Geprüft ist bisherbun-darwin-arm64. -
BIBLE_DB_PATHüberschreibt den Datenbankpfad; ein gesetzter, aber leerer Wert zählt als nicht gesetzt. Nötig wurde die Variable durch das Bundle: Im kompilierten Binary zeigtimport.meta.pathin Buns virtuelles Dateisystem, sodass der Server dort nicht startete. Kompilierte Läufe suchen jetzt neben dem Binary, erkannt am nicht existierenden Verzeichnis statt an einem fest verdrahteten Bun-Pfad.
- Alle sechs Werkzeuge tragen
annotations: { readOnlyHint: true, openWorldHint: false }. Beide weichen vom Vorgabewert der Spezifikation ab, der hier falsch wäre.destructiveHint/idempotentHintbleiben weg: Das Schema definiert sie als nur bedeutsam, wennreadOnlyHintfalseist. - HTTP-Transport (Streamable HTTP), optional über
MCP_HTTP_PORT. Ohne die Variable bleibt es bei stdio; gesetzt lauscht der Server auf/mcpund beantwortet/health. Gebunden wird ohneMCP_HTTP_HOSTan127.0.0.1. Der Modus ist zustandslos: je Anfrage eine eigene Serverinstanz, Datenbank und Statements geteilt; über 1200 Anfragen gemessen bleibt der Speicher stabil. CORS-Kopfzeilen sind gesetzt, die Origin-Prüfung weist fremde Herkunft weiterhin mit 403 ab. TLS und Zugriffsschutz bringt der Server nicht mit. docs/anweisungen/claude-desktop.txt: fertiger Text für die Client-Anweisungen in Claude Desktop. Ob ein Werkzeug aufgerufen und wie sein Ergebnis wiedergegeben wird, entscheidet der Client. Zugeschnitten auf die Datenlage dieses Repos.bun run test: Regressionstest über stdio gegen einen frischen Serverprozess, 58 Zusicherungen. Braucht eine gebaute Datenbank und läuft deshalb nicht in der CI.bible_lookup,bible_crossrefsundbible_searchweisen auf Wörter in eckigen Klammern hin. Menge setzt erklärende Einschübe so (137 Verse); ohne die Klammern liest sich ein Einschub der Ausgabe wie gewöhnlicher Text. Der Hinweis nennt bewusst kein Beispielwort.
bible_original,bible_crossrefsundbible_comparewiesen Werte außerhalb des gültigen Bereichs mit „'verse' must be a positive integer" zurück, einer Bedingung, die die Eingabe erfüllt; verletzt war die Obergrenze. Sechs Meldungen in drei Handlern nennen jetzt die tatsächliche Grenze. Grenzen und Meldungstexte liegen dafür in gemeinsamen Konstanten (MAX_CHAPTER,MAX_VERSE,chapterOutOfRange,verseOutOfRange).
- Repository-Wurzel aufgeräumt: Die neun Datenaufbau-Skripte und ihre Helfer liegen unter
scripts/, im Root bleibenserver.tsundtranslations.ts. Der Schnitt folgt der Laufzeitgrenze. An den Kommandos ändert sich nichts. - Dokumentation und Fehlermeldungen nennen die
package.json-Aliase statt der Dateipfade; der Pfad ist damit nicht mehr Teil der Schnittstelle.
bible_comparegleicht die TAGNT-Variantennotizen gegen die geladenen Editionstexte ab. Neu inbezeugung:in_dieser_db,abgleichundlesehinweis. TAGNTs „Byz" ist nicht deckungsgleich mit Robinson-Pierpont 2005; über 400 zufällige NT-Verse gemessen weichen beide in rund 11 % voneinander ab. Additiv.- Widersprüche zwischen Notiz und Editionstext erscheinen zusätzlich als
warnungundquellenkonflikteoben in der Antwort. Vier Ebenen tief wurden sie übersehen (beobachtet an Mk 14,46). bible_crossrefsliefertverse_einzelnfür mehrversige Verweise, ein Eintrag je Vers ohne eingebettete Versnummern. Beobachtet: Joh 11,25-26 beim Zitieren vorn und hinten angeschnitten.bible_searchnenntvorkommen_gesamtnebentreffer:trefferzählt Verse, ein Vers kann den Begriff mehrfach enthalten. Wird ab 1000 Treffern übersprungen.- Der
hinweisvonbible_originalbeschreibt die Schreibweise des Feldeswortje Edition. Ohne diese Angabe ergänzen Modelle beim Zitieren Akzente oder glätten Zeichen weg.
- Die Beschreibung von
bible_lookupnennt Existenz- und Kanonfragen ausdrücklich. Bisher warb sie nur mit „für alle Bibelzitate", worunter die Frage nach einem nicht existierenden Buch nicht fiel: Sie wurde ohne Werkzeugaufruf beantwortet. - Fehlermeldungen zu unbekannten Büchern beginnen mit dem Sachverhalt statt mit
Error:; dasisError-Flag bleibt. Rein redaktionell: Die ursprüngliche Begründung hielt der Nachprüfung nicht stand. - Alle fünf Werkzeuge melden unbekannte Buchnamen einheitlich über
bookNotFound. Die Meldung nennt das nächstliegende bekannte Buch und weist apokryphe Titel ausdrücklich als nicht enthalten aus, statt ein ähnlich klingendes Buch des Kanons vorzuschlagen. - Der
hinweisvonbible_comparenennt kein Beispiel für eine Variantenart mehr. Das frühere „(z. B. bewegliches Ny)" wurde als Etikett aufgegriffen und auf einen unpassenden Fall geklebt. - Die Einträge in
quellenkonfliktenennen zuerst, was die Edition liest, und erst danach die widersprechende Notiz. Umgekehrt las es sich wie eine Randbemerkung und entfiel beim Wiedergeben. bible_searchmarkiert Fundstellen mit⟦…⟧statt«…». Die alten Marker kollidierten mit den Anführungszeichen der Übersetzungen selbst (Menge 8339 Verse, Schlachter 887). Wer die Marker auswertet, muss das Zeichen anpassen.server.tsneu gegliedert, ohne jede Verhaltensänderung: 22 Abschnittsbanner statt 7, acht Deklarationen an ihren fachlichen Ort verschoben, überlange Morphologie-Tabellen umbrochen. Belegt gegen einen Golden-Snapshot aus 79 stdio-Aufrufen: byteweise identisch.
download.tsnormalisiert Buchnamen ohne Leerzeichen vor der Klammer (2. Mose(Exodus)). Buchnamen erscheinen in jeder Konkordanz-, Such- und Querverweisausgabe.- Griechische Formen wurden samt Koronis
᾽verglichen, sodassἀλλ᾽nie auf das gespeicherteαλλtraf. Reine Elisionsunterschiede lösen jetzt keine Widerspruchsmeldung mehr aus.
- Sechs MCP-Werkzeuge:
bible_lookup,bible_original,bible_concordance,bible_crossrefs,bible_search,bible_compare - Vier frei lizenzierte deutsche Übersetzungen (Luther 1912 als Voreinstellung, Schlachter 1951, Elberfelder 1871, Menge) mit Übersetzungswahl je Werkzeug
- Grundtext Wort für Wort über vier Editionen (hebräisch WLC; griechisch Byzantinisch/SBLGNT/TR) mit drei nativ dekodierten Morphologie-Schemata (Robinson, MorphGNT, OSHB)
- Bezeugung jedes Wortes über acht griechische Editionen (STEPBible TAGNT) in
bible_compare - Lexikondaten: Strong 1890 + STEPBible-Tyndale-Glossen + vollständige Abbott-Smith-Einträge (griechisch)
- Querverweise (OpenBible.info TSK, nach Stimmen gewichtet) mit deutschem Zieltext
- FTS5-Volltextsuche mit Umlautfaltung, Phrasen- und Präfixunterstützung
- Drei geführte MCP-Prompts:
word-study,variant-check,translation-compare - Herkunftsnachweis (Quell-URL, Anzahl Anfragen, SHA-256) für jeden Download
- Atomarer Datenbankaufbau (temporäre Kopie + Umbenennen), sicher bei parallelen Lesern
- Strikter Typecheck und GitHub-Actions-CI, die ihn zusammen mit den Startprüfungen und yamllint ausführt