Skip to main content
Glama

Get Preprint by DOI

biorxiv_get_preprint
Read-onlyIdempotent

Fetch full metadata, the abstract, all revision history, JATS XML full-text links, and published-journal DOI for one or more preprints by DOI. Each DOI returns all revisions in one response, with the abstract on the latest revision only — the API keeps one abstract per preprint. Each call looks up the first 10 distinct DOIs and returns the rest, never looked up, in unprocessed[] — pass that list as dois in another call to continue; a repeated DOI is looked up once and an unparseable entry is reported in failed[], so neither counts toward the 10. When server="both" (default), each DOI is checked against both bioRxiv and medRxiv; the response includes which server the preprint was found on. Failed lookups are reported per-DOI in failed[] rather than aborting the batch, each carrying a reason (not_found, invalid_doi_format, upstream_unavailable, rate_limited) and a retryable flag; a rate_limited entry also carries the wait in seconds the origin asked for. preprints[], failed[], and unprocessed[] follow input order. DOIs must match the pattern 10.NNNN/…; a doi.org or article URL, a doi: label, and a trailing vN / .full suffix are stripped first, and results report the bare DOI.

Input Schema

NameRequiredDescriptionDefault
doisYesPreprint DOIs to look up, up to 200 entries. The first 10 distinct DOIs are looked up; the rest are returned in unprocessed.
serverNoServer to query. "both" checks bioRxiv and medRxiv in parallel for each DOI.both

Output Schema

NameRequiredDescriptionDefault
capNoThe most distinct DOIs one call looks up.
errorNoPresent when the call failed. Absent on success.
shownNoDistinct DOIs looked up in this call.
failedNoDOIs that could not be resolved, with per-DOI error details.
noticeNoHow to look up the DOIs left in unprocessed, and how many failed[] entries are retryable alongside them.
preprintsNoSuccessfully resolved preprints with their full revision history.
truncatedNoTrue when DOIs past the first 10 were left in unprocessed.
unprocessedNoValid, distinct DOIs past the first 10, in input order — not looked up, so neither found nor failed. Pass this list as dois in another call to continue. Empty when every DOI was looked up.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / preprints / items / properties / revisions / items / properties / abstract / description
      Previous value: -"Abstract text."New value: +"The preprint's current abstract, present on the latest revision only: api.biorxiv.org keeps one abstract per preprint and repeats it on every revision. For an earlier revision's own abstract, read that revision with biorxiv_get_fulltext and its version input; medRxiv blocks its article pages to some hosts, and there that request fails as fulltext_unavailable."
    • changedOutput schema / properties / preprints / items / properties / revisions / items / properties / server / description
      Previous value: -"Source server (biorxiv or medrxiv)."New value: +"Server the revision was found on — accepted as the server input of every tool."
    • addedOutput schema / properties / preprints / items / properties / revisions / items / properties / server / enum
      Added value: +[
      +  "biorxiv",
      +  "medrxiv"
      +]
    • changedOutput schema / properties / preprints / items / properties / revisions / items / required
      Previous value: -[
      -  "doi"
      -]New value: +[
      +  "doi",
      +  "server"
      +]
  2. Changed9 schema fields changed
    • changedInput schema / properties / dois / description
      Previous value: -"One or more preprint DOIs to look up (max 10)."New value: +"Preprint DOIs to look up, up to 200 entries. The first 10 distinct DOIs are looked up; the rest are returned in unprocessed."
    • changedInput schema / properties / dois / maxItems
      Previous value: -10New value: +200
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "preprints",
      -      "failed"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "preprints",
      +      "failed",
      +      "unprocessed"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The most distinct DOIs one call looks up.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `doi_not_found`: ALL requested DOIs resolve to empty collections on all requested servers, with every server answering. `invalid_doi_format`: Every input DOI fails to match the 10.NNNN/ pattern, even after URL, doi:, and suffix stripping. `upstream_unavailable`: No DOI resolved and at least one lookup failed against api.biorxiv.org, so absence could not be established for any requested DOI. `rate_limited`: No DOI resolved and at least one lookup was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `doi_not_found`: Every DOI looked up resolves to empty collections on all requested servers, with every server answering, and no DOI was left in unprocessed. `invalid_doi_format`: Every input entry fails to match the 10.NNNN/ pattern, even after URL, doi:, and suffix stripping. `upstream_unavailable`: No DOI resolved, none was left in unprocessed, and at least one lookup failed against api.biorxiv.org, so absence could not be established for any requested DOI. `rate_limited`: No DOI resolved, none was left in unprocessed, and at least one lookup was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "How to look up the DOIs left in unprocessed, and how many failed[] entries are retryable alongside them.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Distinct DOIs looked up in this call.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when DOIs past the first 10 were left in unprocessed.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / unprocessed
      Added value: +{
      +  "description": "Valid, distinct DOIs past the first 10, in input order — not looked up, so neither found nor failed. Pass this list as dois in another call to continue. Empty when every DOI was looked up.",
      +  "items": {
      +    "description": "A bare DOI that was not looked up.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / preprints / items / properties / revisions / items / properties / awards
      Added value: +{
      +  "description": "Grant award numbers from the funding statement, verbatim and deduplicated — one value can hold several grants run together without a separator. Absent when none. Funder names are not included: api.biorxiv.org attributes them to unrelated organizations.",
      +  "items": {
      +    "description": "One award value as upstream records it.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / preprints / items / properties / revisions / items / properties / funder
      Removed value: -{
      -  "description": "Funder information.",
      -  "type": "string"
      -}
  4. Changed4 schema fields changed
    • changedInput schema / properties / dois / items / description
      Previous value: -"Preprint DOI (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463)."New value: +"Preprint DOI (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463). A doi.org or biorxiv.org/medrxiv.org article URL, a doi: prefix, or a vN / .full suffix is accepted and stripped to the bare DOI; every revision is returned either way."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `doi_not_found`: ALL requested DOIs resolve to empty collections on all requested servers, with every server answering. `invalid_doi_format`: One or more input DOIs do not match the 10.NNNN/ pattern. `upstream_unavailable`: No DOI resolved and at least one lookup failed against api.biorxiv.org, so absence could not be established for any requested DOI. `rate_limited`: No DOI resolved and at least one lookup was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `doi_not_found`: ALL requested DOIs resolve to empty collections on all requested servers, with every server answering. `invalid_doi_format`: Every input DOI fails to match the 10.NNNN/ pattern, even after URL, doi:, and suffix stripping. `upstream_unavailable`: No DOI resolved and at least one lookup failed against api.biorxiv.org, so absence could not be established for any requested DOI. `rate_limited`: No DOI resolved and at least one lookup was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / failed / items / properties / doi / description
      Previous value: -"DOI that failed to resolve."New value: +"DOI that failed to resolve — in bare form, or exactly as sent for invalid_doi_format."
    • changedOutput schema / properties / preprints / items / properties / doi / description
      Previous value: -"The requested DOI."New value: +"The requested DOI in bare form (any URL, doi: prefix, or suffix removed)."
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnly/idempotent/openWorld annotations: documents the 10-distinct-DOI lookup cap, dedup and unparseable handling, per-DOI failure reasons (not_found, invalid_doi_format, upstream_unavailable, rate_limited) with retryable flags, and rate-limit wait seconds. It also discloses abstract-on-latest-revision-only and result ordering — behavioral facts an agent cannot infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what is returned, then batch semantics, then failure modes — a sensible order with no filler. Sentences are long and heavily packed with clauses, which slightly taxes scanning but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value detail is not required, and the description still covers batching limits, continuation flow, error surface, and server resolution. Nothing an agent needs to invoke this correctly — including how to page through >10 DOIs — is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns above that by adding semantics not in the schema fields: a repeated DOI is looked up once, unparseable entries land in failed[], and neither counts toward the 10. DOI normalization rules and server parallel lookup largely duplicate schema text, capping the score at 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (fetch) plus a precise resource enumeration (metadata, abstract, revision history, JATS links, published DOI) scoped to one or more DOIs. The inclusion of 'published-journal DOI' alongside the sibling biorxiv_get_published_version and 'JATS XML full-text links' next to biorxiv_get_fulltext signals what this tool consolidates rather than merely restating the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains operational usage: pass unprocessed[] back as dois to continue, and server="both" checks both repositories by default. It does not explicitly state when to prefer this over biorxiv_get_fulltext or biorxiv_get_published_version, so no explicit exclusions/alternatives routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.