[1.2.0] - 2026-08-02
Dieser Abschnitt wurde am 20.07.2026 geschrieben, aber nie veröffentlicht:
auf PyPI stand weiterhin 1.1.0. Er trägt jetzt das Datum, an dem er
tatsächlich ausgeliefert wird, und die seither hinzugekommene
SDK-Migration.
Diese Auslieferung ist überfällig, weil das veröffentlichte 1.1.0 sich
nicht mehr installieren lässt. Es deklariert mcp ohne Obergrenze, und
mcp 2.0.0 hat mcp.server.fastmcp entfernt — pip install swiss-academic-libraries-mcp löst auf 2.0.0 auf, und das Konsolen-Skript
stirbt beim Start mit ImportError: cannot import name 'McpError' from 'mcp'.
Gemessen am echten Artefakt in einem leeren Venv, in kaltem wie warmem
Interpreter.
Behoben war das im Repository seit der 2.x-Migration; veröffentlicht wurde es
nie.
Geändert (breaking)
- Migration auf das
mcpPython SDK 2.x. Die Server-API ist von
mcp.server.fastmcpnachmcp.server.mcpserverumgezogen, ohne
Kompatibilitätsschicht; die Abhängigkeit lautet jetztmcp[cli]>=2.0.0,<3.
Die Tool-Oberfläche bleibt unverändert — was bricht, ist das Einbetten der
Python-API und die Abhängigkeitsuntergrenze. Wer aufmcp1.x bleiben muss,
bleibt auf 1.1.0 und setzt dort eine eigene Obergrenze, denn das
veröffentlichte 1.1.0 hat keine.
Neue internationale Metadatenebene: DOI-Auflösung und internationale
Forschungsliteratur (Crossref) sowie Preprints (arXiv). Damit beantwortet der
Server «gibt es das in der Schweiz?» und «was ist das überhaupt und wo steht es
sonst?» in derselben Konversation. Tool-Extension, kein neuer Server — gleiches
Domänenfeld, gemeinsamer HTTP-Client, gemeinsamer Provenance-Envelope. Das
bestehende Katalog- und OA-Recht-Verhalten bleibt unverändert.
Added
- Drei neue Tools (alle
readOnlyHint=True):resolve_doi(DOI → volle
Metadaten via Crossref),search_publications(Crossref-Suche mit
Jahresfilter) undsearch_preprints(arXiv, mit automatischer
Phrasen-Quotierung + Throttle). Damit 16 Tools. - Modul
intl_metadata.pymit Crossref- und arXiv-Adaptern, Pydantic-v2-
ModellenCrossrefWorkundPreprint(nur Metadaten, kein Volltext,license
nie leer) und einer Code-Layer-Egress-Allow-List (api.crossref.org,
export.arxiv.org). Retry/Backoff überhttp_get_with_retrywiederverwendet. - Portfolio-Verkettung national ↔ international: jede aufgelöste DOI liefert
Titel, ISSN, ISBN und Autor:innen als saubere Top-Level-Felder; die Docstrings
führen das Modell explizit zur Weitersuche inswisscovery_search. Neuer Prompt
doi-to-swiss-shelfund neue Resourcelibrary://intl-metadata-sources. - Crossref polite pool via
CROSSREF_MAILTO(mailto in User-Agent + Query);
fehlt die Variable, läuft die Abfrage funktionsfähig im anonymen Pool weiter. - arXiv-Throttle (
ARXIV_MIN_INTERVAL_SECONDS, Default 3 s) und
Atom-XML-Parser viadefusedxml(bestehende Dependency, keine neue). - Attribution pro Quelle (nicht gesammelt): jede Response trägt die
Attribution genau ihrer Quelle — Crossref (Metadaten CC0 1.0) bzw. arXiv
(Metadaten CC0 1.0 + erbetene Danksagung). - 20 neue Tests (
tests/test_intl_metadata.py,respx-gemockt): Happy Path
je Tool, Retry bei 503, Timeout, Atom-XML-Parser, Phrasen-Quotierung,
polite-pool-mailto, Egress-Allow-List, Attribution pro Quelle; plus 2
Live-Smoke-Tests.
Fixed
- Versions-Drift behoben:
__init__.pystand auf0.1.0, während
pyproject.toml1.1.0führte. Beide sind jetzt synchron auf1.2.0.
Known findings (Live-Probe 2026-07-20)
- Crossref schwach bei deutschsprachiger CH-Bildungsliteratur:
query.bibliographic=Lehrplan 21liefert als Top-Treffer ein Buchkapitel von
1881. Crossref ist stark bei DOI-Auflösung und internationaler Forschung,
nicht bei CH-Bildungspublikationen → dortswisscovery_search/oa_law_search.
Crossref kennt die Weltliteratur, aber nicht den Zürcher Lehrplan — wie ein
Weltatlas ohne die Quartierpläne. - arXiv-Phrasen-Falle:
all:model context protocol= ~1'296'686 Treffer
(OR),all:"model context protocol"= 462 (Phrase).search_preprints
quotiert automatisch, damit Nutzende keine arXiv-Syntax lernen müssen. - arXiv
http→https-Redirect (301): Der geteilte httpx-Client folgt
Redirects bewusst nicht; derhttps://-Endpoint wird direkt angesprochen. - SHARE (share.osf.io) — geprüft, nicht gebaut: Endpoint antwortet (≈58,9
Mio. Records), aber Harvesting seit 2020 heruntergefahren, DB in CurateND
archiviert, keine Wartungszusage. Für ein auf Verlässlichkeit positioniertes
Portfolio kein tragbarer Abhängigkeitskandidat. - Open Library — Entscheidungs-Gate durchgefallen: 10 reale CH-Lehrmittel-
ISBNs (aus swisscovery geharvestet) → 0/10 = 0 % (Schwelle 60 %).
Kontrollen (EN + Trade-DE) lösen auf → echte Abdeckungslücke, kein Netzfehler.
swisscovery deckt CH-Lehrmittel bereits ab; für den Buchhandel wäre GVI oder
ein Verlagsverzeichnis passender.lookup_isbndaher nicht gebaut.