Skip to content
AI Primer
release

Science Made Readable adds MCP access to OpenAlex literature search

Maxime Rivest added an MCP server to Science Made Readable, an open-source semantic search service built on OpenAlex and DenseOn embeddings. Casual access is limited to 10 requests per minute.

5 min read
Science Made Readable adds MCP access to OpenAlex literature search
Science Made Readable adds MCP access to OpenAlex literature search

TL;DR

The MCP implementation returns Markdown rather than structured JSON to avoid duplicating results for the model. Its citation walk finds papers a starting paper “should also have cited.”

Four MCP tools

Maxime Rivest added MCP to an HTTP API that agents could already use from a plain-language prompt. The MCP endpoint exposes a refreshingly small surface: four read-only tools over Streamable HTTP, with no authentication or sign-up.

  • search_papers: semantic or keyword search, with publication-year, publication-type and open-access filters.
  • get_papers: retrieve records for up to 20 identifiers at once, including DOIs, OpenAlex IDs and PMCIDs.
  • find_similar_papers: retrieve semantically related papers from a seed paper.
  • citation_walk: find neighbours that share references, then surface works those neighbours cite that the seed does not.

The server also supplies literature_review and check_claim prompts. Its documented CLI registrations are:

OpenAlex coverage

The launch graphic counts embedded papers from their titles and abstracts:

Actual searchable coverage differs by operation. The October 11 release inventory reports:

  • Semantic search: 124,950,164 records.
  • Keyword search and paper lookup: 203,543,614 records, across all years.
  • Semantic search within the readable collection: 3,901,819 records. This collection restricts results to PubMed Central research articles with CC BY licensing that Science Made Readable can open and rewrite.

Search covers English titles and abstracts, rather than full texts; papers without an English abstract are excluded. Similarity lookup returns a 404 when a paper exists in the broader corpus but is absent from the semantic index.

Junk ranking

Rivest acknowledged OpenAlex’s cleanliness problems in a reply about coverage. The search implementation ranks semantic results using:

The default penalty is 0.3 for the general corpus and 0 for the readable collection. Keyword results do not receive this reranking.

On the project’s 60 judged test questions, junk among the top 10 results fell from 27% to 1%, while useful nDCG@10 rose from 0.57 to 0.78. The API guide warns that genuine papers with thin records can also be penalized, while crank papers can score clean.

CPU retrieval

Search serving uses no GPU per query, according to the technical walkthrough. That walkthrough describes the 125-million-record index as five stages:

  1. Encode the question: DenseOn produces a 768-dimensional vector on CPU, taking about 40-60 ms.
  2. Select clusters: a FAISS IVF index has 32,768 lists; each query opens the closest 128.
  3. Scan compressed vectors: 1-bit RaBitQ codes use about 96 bytes per paper, with an approximately 14 GB index resident in RAM.
  4. Rescore candidates: the top 300 are checked against the original float16 vectors.
  5. Fetch metadata: titles, authors and links come from local SQLite.

Rivest reported roughly 65-90 ms server-side searches on the warm home server. His reported 92% agreement with exhaustive vector-search top-10 results belongs to an earlier 72.5-million-paper index; evaluation of the 125-million-paper index was unfinished.

Embedding the corpus took about a week on one RTX 3090, Rivest said in a reply about hardware.

MCP payloads

The backend carries an Apache 2.0 license in the repository he shared. Its MCP implementation notes describe several model-facing trade-offs:

  • Markdown answers: no structured output. The author estimates that duplicating facts as structured JSON and JSON text would cost roughly three times the tokens.
  • Short abstracts by default: first sentences keep a 30-result response around 6,000 tokens; full abstracts remain available.
  • Fewer controls: MCP omits nprobe, depth, junk_penalty, license, pmc_open_access and map positions. The HTTP API exposes the broader parameter surface.
  • Stateless responses: no session state or progress messages during a call. Citation walks can take about five seconds.
  • Request logging: the MCP gateway records method, tool and app name, but never tool arguments.

Rate limits

The public quota in the current documentation is 30 tool calls per minute per address, compared with 10 requests per minute in the original announcement.

  • MCP handshakes, tool listings and guide reads do not consume the quota.
  • An over-limit MCP call returns a tool error stating how long to wait. The implementation avoids an HTTP 429 because it can break some apps’ connections.
  • Direct HTTP API calls instead receive a 429 with a Retry-After header and a retry_after field in the response body.

Daily additions

Asked about updates, Rivest suggested nightly OpenAlex refreshes. The published release inventory records daily fetches: 57,579 additions beyond the October 5 OpenAlex snapshot, with the latest fetch dated October 11.

Those newly fetched papers are not yet included in citation walks. Nightly data updates can also make the HTTP API unavailable for approximately one to three minutes, returning 502 or 503 errors.

Further reading

Discussion across the web

Where this story is being discussed, in original context.

On X· 7 threads
TL;DR2 posts
Four MCP tools2 posts
OpenAlex coverage1 post
Junk ranking1 post
CPU retrieval2 posts
MCP payloads1 post
Daily additions1 post
Share on X