This site runs an MCP server. Measured: it is smaller than the file it competes with

Since 2 August 2026 there is an endpoint at /mcp that hands the measurement datasets and the published methods to an AI client on request — and, since then, turns any URL into a citation with an RIS record. Before recommending that anyone else build one, here is what it actually returns, the number that decides whether it was worth it, and the one job that justified it after all.

2 August 2026, workflow section added 3 August · Protocol MCP 2025-06-18 · transport streamable HTTP · server card

What it can do

Four tools, no authentication, no state:

ToolInputReturns
list_measurementsnone every measurement with its dataset URL and the page documenting the method
get_measurement_datadataset one dataset as JSON — measured values, control run, conditions
get_methodname (optional) a reproducible method, or the list of them
extract_citationurl the citation a page declares about itself — authors, title, journal, year, DOI, licence — plus a ready-to-import RIS record and BibTeX entry, or a named refusal where the page is a wall rather than a work

The number that matters

Everything the first three tools can return, added together, is about 1,300 tokens. The llms.txt file on the same domain — a plain text summary any model can read in one request — is about 1,988 tokens.

So a model that simply reads one text file ends up with more context than one that calls all three. For the published measurements, the protocol solves a size problem this site does not have. That is worth saying plainly, because the opposite is usually implied: an MCP server sounds like capability, and for reading out this site it mostly is not.

The fourth tool is the exception, and it is the reason the endpoint still exists. extract_citation does not read this site at all — it reads whichever page it is pointed at. A text file cannot do that at any size, because the answer does not exist until the question is asked.

Where it earns its place anyway

One thing it does that a text file cannot: it makes a number checkable at the moment of use. Asked how much text survives OCR on a screenshot, a model can either recall something approximate or call get_measurement_data and read 92.6 % out of the dataset, along with the control run that makes the figure meaningful. The second answer can be verified; the first cannot.

Two smaller advantages follow from the same property. The data is structured — JSON rather than prose, so it can go straight into a calculation. And it is current: llms.txt is maintained by hand and drifts, the endpoint reads the same files the site serves.

The workflow it was actually built for

Someone with a reading list — twelve tabs, a bibliography to assemble, a set of links pasted into a chat — wants each one turned into a reference that can be filed. That is a loop: for every URL, ask the page what it says about itself, and write down the answer or the reason there is none.

for url in $(cat reading-list.txt); do
  curl -sX POST https://provinglab.dev/mcp \
    -H 'content-type: application/json' \
    -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",
         \"params\":{\"name\":\"extract_citation\",\"arguments\":{\"url\":\"$url\"}}}"
done

Ten scholarly URLs through that loop on 3 August 2026: seven came back complete — authors, year, DOI, journal, with an RIS record and a BibTeX entry ready to import — and three came back refused, marked complete: false with a warning naming the wall that stopped them. Total 4.8 seconds, median 0.45 s per source. A longer run is measured in the triage note; the accuracy against Wikimedia's Citoid is measured separately.

Read the warning, not the title. A refused record still carries a title, and it will be something like Checking your browser. Anything that consumes this endpoint has to test complete before it files the result — that mistake was made while writing this paragraph, which is the reason for the sentence.

What it hands over, and what it does not

The endpoint returns the reference, never the document. It reads the page from a server, so it sees what any anonymous visitor sees: no library licence, no session, no paywall, and no page that only assembles itself in a browser. The three refusals above are exactly those cases.

The other half of the job is done in the browser instead. Full Page PDF Snap captures the page as a PDF and writes the same fields into it — authors, DOI, licence, time of retrieval — with the RIS record saved alongside. It reaches what the server cannot, because it runs where the reader is already logged in; it costs one click per page, where the endpoint costs none.

So the division is not a compromise, it is the design: the endpoint for volume, the extension for the ones it refuses — and the refusal list is what tells you which is which. Both write the same RIS format, so the results land in one Citavi or Zotero library regardless of which route produced them.

What it does not solve

How to connect it

The endpoint speaks JSON-RPC 2.0 over HTTP POST. Authentication is offered but not required; anonymous requests get identical answers.

curl -X POST https://provinglab.dev/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

In a client that supports remote MCP servers, add https://provinglab.dev/mcp as a streamable-HTTP connector. A GET on the endpoint answers 405: the server is stateless and opens no server-initiated stream, which the specification permits.

Questions

Why build it if the numbers say it barely helps?

Because the cost was one file and the failure mode is bounded: if the worker breaks, it falls back to serving the site unchanged. And because the claim "measurements you can verify" should survive contact with an agent that wants to verify them. What would not have been defensible is publishing the endpoint and implying it does more than it does.

Is anything protected behind it?

No. Every resource on this domain is public. An OAuth flow exists because some clients refuse to connect without one — it grants no access beyond anonymous, and auth.md says so in its first paragraph.

Disclosure: this site is run by the developer of Full Page PDF Snap, the extension named on this page. The browser's own print-to-PDF is measured against it, including where print wins. Corrections: GitHub issues · Disclaimer