A source is two things: the file, and the claim about where it came from. Most tools deliver one of them. Measured on four addresses of increasing difficulty — including one where finding nothing is the correct answer.
Eine Quelle ist zweierlei: die Datei und die Angabe, woher sie stammt. Die meisten Werkzeuge liefern eines davon. Gemessen an vier Adressen steigender Schwierigkeit — darunter eine, bei der nichts zu finden die richtige Antwort ist.
An MCP server that takes an address and returns a source: the file the
publisher actually serves, the citation metadata of the page describing it, a
RIS record, and the full text in a searchable index. Four cases, each carrying
a different difficulty. For every case the expected file was established
independently beforehand — byte size taken with curl, not from the
server under test.
| Case | Difficulty | Result | Time |
|---|---|---|---|
| PDF inside an iframe zenodo.org/records/22539062 |
The preview URL ends in .pdf and returns HTML, 7 kB |
495,073 B · 25 pages 1 author, year, DOI | 1,090 ms |
| Address without extension arxiv.org/abs/1706.03762 |
citation_pdf_url points at /pdf/… with no extension |
2,215,244 B · 15 pages 8 authors, year | 704 ms |
| Bare PDF address arxiv.org/pdf/2303.08774 |
No HTML page exists — nothing to read metadata from | 5,245,564 B · 100 pages 281 authors, year | 1,259 ms |
| A page named PDF wikipedia.org/wiki/PDF |
Named PDF, is not one — must return nothing | correctly refused | 590 ms |
23 of 23 checks passed · 7.6 MB in 3.6 s · every file byte-identical to its reference
Zenodo shows its documents in an iframe pointing at
…/preview/Title.pdf. The extension is right; the content is not.
What comes back is the pdf.js viewer as an HTML page, 7 kB. A file named
.pdf containing viewer markup had already been filed as a source
before this was caught.
A size threshold does not fix it. The first attempt rejected anything under
5 kB — a guessed number, and the 7 kB viewer page passed straight
through. What does fix it is the first five bytes: %PDF- is
unambiguous. A range request fetches 512 bytes and settles it before anything
is downloaded.
Where a page carries citation_pdf_url, that address beats the
iframe. On Zenodo the iframe points at /preview/ and the citation
tag at /files/ — the same document, one of them real. Preferring
the publisher's own statement turned a 7 kB viewer page into a
4.8 MB document.
Zenodo publishes no citation_publication_date. The publication
year appears only in the schema.org block. Reading citation_* tags alone
produced a file called Andres_oJ_… — oJ, no year — about a
work from 2026. Modern repositories increasingly put their metadata in JSON-LD;
a reader that ignores it degrades quietly rather than failing.
The fourth case exists because of a failure mode that no accuracy figure
catches: a tool that finds something everywhere finds nothing reliably.
wikipedia.org/wiki/PDF is an article about the format. An
early pattern treated /pdf at the end of a path as a file — and
the encyclopedia article became a document. The rule now requires a path
segment with something after it.
{ "mcpServers": {
"quellen": { "command": "python3",
"args": ["/path/to/quellen-mcp/server.py"],
"env": { "QUELLEN_ORDNER": "/path/to/sources" } } } }
Five tools: quelle_pruefen (does this address serve a PDF,
without downloading), quelle_zitation (citation metadata only),
quelle_holen (fetch, store, index), bestand_suchen
(full-text search), bestand_stand (collection size). The step-by-step
sheet for agents is at
run-a-source-capture-server.md.
pdftotext and pdfinfo make the full text
searchable. Without them a source is stored but not indexed — the reply says so
with seiten_durchsuchbar: 0 rather than failing silently.
Four cases are four cases. They were chosen because each carries a distinct
difficulty, not because they are representative of the web. Reference sizes
were established with curl before the run, independently of the
server. Timings come from a single run on a domestic connection and say more
about the network than about the code.
What is not measured here: licensed content behind a publisher login, and how the patterns hold against the several hundred site translators that Zotero maintains. On breadth of site coverage, Zotero is ahead and will stay ahead.
Run by the developer of Full Page PDF Snap, the browser extension this server shares its logic with. The extension appears in several measurements on this site; this is disclosed wherever relevant. Found an error in these figures? Corrections are welcome — the raw data is linked above so the run can be repeated.
Ein MCP-Server, der aus einer Adresse eine Quelle macht: die Datei, die der
Anbieter tatsächlich ausliefert, die Zitationsangaben der Seite, die sie
beschreibt, einen RIS-Satz und den Volltext in einem durchsuchbaren Index.
Vier Fälle, jeder mit einer eigenen Schwierigkeit. Für jeden stand die
erwartete Datei vorher fest — die Byte-Größe mit curl ermittelt,
nicht vom geprüften Server.
| Fall | Schwierigkeit | Ergebnis | Zeit |
|---|---|---|---|
| PDF im Rahmen zenodo.org/records/22539062 |
Die Vorschauadresse endet auf .pdf und liefert HTML, 7 kB |
495.073 B · 25 Seiten 1 Verfasser, Jahr, DOI | 1.090 ms |
| Adresse ohne Endung arxiv.org/abs/1706.03762 |
citation_pdf_url zeigt auf /pdf/… ohne Endung |
2.215.244 B · 15 Seiten 8 Verfasser, Jahr | 704 ms |
| Blanke PDF-Adresse arxiv.org/pdf/2303.08774 |
Es gibt keine HTML-Seite — nichts, woraus Angaben zu lesen wären | 5.245.564 B · 100 Seiten 281 Verfasser, Jahr | 1.259 ms |
| Eine Seite namens PDF wikipedia.org/wiki/PDF |
Heißt PDF, ist keines — muss nichts liefern | korrekt verweigert | 590 ms |
23 von 23 Prüfungen erfüllt · 7,6 MB in 3,6 s · jede Datei byteweise gleich ihrer Referenz
Zenodo zeigt seine Dokumente in einem Rahmen, der auf
…/preview/Titel.pdf zeigt. Die Endung stimmt, der Inhalt nicht.
Zurück kommt der pdf.js-Betrachter als HTML-Seite, 7 kB. Eine Datei mit
.pdf im Namen und Betrachter-Markup darin lag bereits als Quelle
im Bestand, bevor das auffiel.
Eine Größenschwelle behebt es nicht. Der erste Versuch wies alles unter
5 kB ab — eine geratene Zahl, und die 7 kB große Betrachterseite ging
glatt hindurch. Was es behebt, sind die ersten fünf Bytes: %PDF-
ist eindeutig. Ein Bereichsabruf holt 512 Bytes und entscheidet, bevor
irgendetwas geladen wird.
Trägt eine Seite citation_pdf_url, schlägt diese Adresse den
Rahmen. Bei Zenodo zeigt der Rahmen auf /preview/ und die
Zitationsangabe auf /files/ — dasselbe Dokument, eines davon echt.
Der Angabe des Anbieters den Vorrang zu geben machte aus einer 7 kB großen
Betrachterseite ein Dokument von 4,8 MB.
Zenodo veröffentlicht kein citation_publication_date. Das
Erscheinungsjahr steht nur im schema.org-Block. Wer allein die
citation_*-Tags liest, bekommt eine Datei namens Andres_oJ_… —
oJ, ohne Jahr — über ein Werk von 2026. Moderne Repositorien legen
ihre Angaben zunehmend in JSON-LD ab; ein Leser, der das übergeht, verschlechtert
sich still, statt zu scheitern.
Den vierten Fall gibt es wegen eines Fehlers, den keine Trefferquote
aufdeckt: Ein Werkzeug, das überall etwas findet, findet nichts Verlässliches.
wikipedia.org/wiki/PDF ist ein Artikel über das Format.
Ein früheres Muster hielt /pdf am Ende eines Pfades für eine Datei
— und aus dem Lexikonartikel wurde ein Dokument. Die Regel verlangt jetzt ein
Pfadsegment mit etwas dahinter.
{ "mcpServers": {
"quellen": { "command": "python3",
"args": ["/pfad/zu/quellen-mcp/server.py"],
"env": { "QUELLEN_ORDNER": "/pfad/zu/quellen" } } } }
Fünf Werkzeuge: quelle_pruefen (liefert diese Adresse ein PDF,
ohne es zu laden), quelle_zitation (nur die Angaben),
quelle_holen (holen, ablegen, indizieren),
bestand_suchen (Volltextsuche), bestand_stand
(Umfang). Das Schritt-für-Schritt-Blatt für Agenten liegt unter
run-a-source-capture-server.md.
pdftotext und pdfinfo machen den Volltext
durchsuchbar. Ohne sie wird eine Quelle abgelegt, aber nicht indiziert — die
Antwort sagt das mit seiten_durchsuchbar: 0, statt still zu
scheitern.
Vier Fälle sind vier Fälle. Sie wurden gewählt, weil jeder eine eigene
Schwierigkeit trägt, nicht weil sie für das Netz repräsentativ wären. Die
Referenzgrößen wurden vor dem Lauf mit curl ermittelt, unabhängig
vom Server. Die Zeiten stammen aus einem einzigen Durchgang an einem
Hausanschluss und sagen mehr über das Netz als über den Code.
Was hier nicht gemessen ist: lizenzpflichtige Inhalte hinter einer Verlagsanmeldung, und wie sich die Muster gegen die mehreren hundert Seiten-Übersetzer halten, die Zotero pflegt. In der Breite der Seitenabdeckung liegt Zotero vorn und wird vorn bleiben.
Betrieben vom Entwickler von Full Page PDF Snap, der Browser-Erweiterung, mit der dieser Server seine Logik teilt. Die Erweiterung kommt in mehreren Messungen auf dieser Seite vor; das wird überall dort angegeben, wo es sachdienlich ist. Ein Fehler in diesen Zahlen? Korrekturen sind willkommen — die Rohdaten sind oben verlinkt, der Lauf lässt sich wiederholen.