Skip to main content
Glama

rxiv-mcp

A Model Context Protocol server that lets Claude (or any MCP client) search and read preprints on arXiv, bioRxiv, and medRxiv.

No API keys. No native dependencies. Runs over stdio with Node 20+.

Tools

Tool

What it does

arxiv_search

Search arXiv by plain text or raw arXiv query syntax (ti:, au:, abs:, cat:, booleans), with category and date filters.

arxiv_get_paper

Metadata and abstract for one or more arXiv IDs or URLs.

arxiv_get_full_text

Full text of a paper, from arXiv's HTML rendering (LaTeX math preserved) or the PDF. Paged.

biorxiv_search

Keyword search across bioRxiv and medRxiv, with server, date, and sort (relevance / date / citations) filters.

biorxiv_get_preprint

Official bioRxiv/medRxiv record for a DOI: all versions, license, category, and the published journal version if any.

biorxiv_list_recent

Browse what was posted in a date window, optionally by subject category.

biorxiv_get_full_text

Full text of a bioRxiv/medRxiv preprint (JATS XML or PDF). Paged.

Full-text tools return up to max_chars characters (default 40,000) and report truncated and next_offset so the client can page through long papers.

Related MCP server: preprint-fulltext

Install

Claude Code

# from a local clone
git clone https://github.com/sakzgupzzz/rxiv-mcp.git
cd rxiv-mcp && npm install          # builds dist/ via the prepare script
claude mcp add --scope user rxiv -- node /absolute/path/to/rxiv-mcp/dist/index.js

# or straight from GitHub, no clone
claude mcp add --scope user rxiv -- npx -y github:sakzgupzzz/rxiv-mcp

Claude Desktop / other MCP clients

Add to claude_desktop_config.json (or the equivalent for your client):

{
  "mcpServers": {
    "rxiv": {
      "command": "npx",
      "args": ["-y", "github:sakzgupzzz/rxiv-mcp"]
    }
  }
}

Examples of what to ask

  • "Find the five most-cited bioRxiv preprints on CRISPR base editing from 2025."

  • "What was posted to medRxiv in epidemiology in the last three days?"

  • "Read arXiv 2410.12345 and summarise the method section."

  • "Has bioRxiv 10.1101/2025.05.19.654892 been published in a journal?"

How it works

  • arXiv uses the official arXiv API (Atom feed). Requests are spaced at least 3 seconds apart per arXiv's rate-limit guidance. Full text comes from arxiv.org/html/<id> when the paper has an HTML rendering, otherwise the PDF is parsed with unpdf.

  • bioRxiv / medRxiv metadata, version history, and published-version lookups use the official bioRxiv API. That API has no keyword search and only lists by DOI or date range, so:

    • Search goes through Europe PMC, which indexes every bioRxiv and medRxiv preprint with abstracts and citation counts. You can use Europe PMC query syntax directly (TITLE:"...", AUTH:"...", ABSTRACT:"...").

    • Full text also comes from Europe PMC (JATS XML, then PDF), because biorxiv.org rate-limits scripted downloads. Full text typically appears there a few days after a preprint is posted.

  • Every outbound request carries a descriptive User-Agent, is throttled per host, and retries on 429/5xx.

Development

npm install
npm run build        # tsc -> dist/
npm test             # starts the server, checks the tool list (offline)
npm run smoke        # exercises every tool against the live APIs

Source layout:

src/index.ts     server entry (stdio)
src/tools.ts     tool definitions and input schemas
src/arxiv.ts     arXiv API client + full text
src/biorxiv.ts   bioRxiv API + Europe PMC clients
src/text.ts      HTML / JATS to text, paging
src/pdf.ts       PDF text extraction
src/http.ts      fetch wrapper: throttling, retries, User-Agent

License

MIT

Available Tools

7 tools
arxiv_get_full_textRead arXiv paper full textA
Read-onlyIdempotent

Return the full text of an arXiv paper as plain text (from arXiv's HTML rendering when available, otherwise extracted from the PDF). Long papers are paged: check truncated and pass next_offset as offset to continue.

NameRequiredDescriptionDefault
idYesarXiv identifier or URL, optionally with version (e.g. 2410.12345v1)
offsetNoCharacter offset to start from (for paging through long papers)
max_charsNoMaximum characters to return in this call

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the description doesn't need to cover safety. It adds genuinely new behavior: the HTML-first/PDF-fallback extraction path and the paged-truncation model. It stops short of noting rate limits or extraction quality caveats.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and followed by the one operational caveat an agent must know. Nothing is wasted and nothing important is buried.

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

Completeness4/5

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

With no output schema, the description usefully names the `truncated` and `next_offset` fields an agent will see in the response, which is otherwise undocumented. Complete enough to call correctly, though the unexplained field names could cause brief confusion on first response.

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 the baseline is 3, but the description adds paging workflow semantics the schema lacks: how truncation connects to continuing via offset. Minor friction from naming `truncated` and `next_offset`, fields not present in the input schema, though it explains mapping next_offset to offset.

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?

States a specific verb and resource ("Return the full text of an arXiv paper") plus the output format ("as plain text") and the source fallback (HTML rendering, otherwise PDF). This clearly separates it from sibling arxiv_get_paper, which an agent can infer serves paper metadata.

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

Usage Guidelines3/5

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

Usage guidance is limited to the paging case: check `truncated` and pass `next_offset` as `offset`. There is no explicit when-to-use/when-not guidance relative to arxiv_get_paper or biorxiv_get_full_text, so the agent must infer that full text is for deep reading rather than metadata lookup.

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

arxiv_get_paperGet arXiv paper metadataA
Read-onlyIdempotent

Fetch metadata and abstract for one or more arXiv papers by ID. Accepts 2410.12345, 2410.12345v2, arXiv:2410.12345, old-style hep-th/9901001, or any arxiv.org abs/pdf/html URL.

NameRequiredDescriptionDefault
idsYesOne or more arXiv identifiers or URLs

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. Beyond that the description adds little behaviorally: nothing about what happens with an invalid ID in a batch, whether partial results are returned, rate limits, or whether the abstract can be absent for withdrawn papers.

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

Conciseness5/5

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

Two sentences, purpose front-loaded, followed by the input formats that actually matter. No filler and nothing buried at the end.

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

Completeness4/5

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

For a single-parameter read tool with no output schema and strong annotations, the description covers what is needed to call it correctly, and the format enumeration removes the main failure mode. It would be complete at 5 with a short note on batch error/partial-result behavior and roughly what metadata is returned.

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, but the description earns an upgrade by enumerating concrete accepted identifier forms (new-style, versioned, arXiv:-prefixed, old-style hep-th/9901001, and abs/pdf/html URLs) that the schema's generic 'identifiers or URLs' does not spell out. Only the batch cap is left to the schema's maxItems.

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

Purpose4/5

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

The description states a specific verb and resource ('Fetch metadata and abstract for ... arXiv papers by ID') and supports batch retrieval ('one or more'), which implicitly separates it from arxiv_get_full_text and arxiv_search. It does not name a sibling outright, so differentiation is inferable rather than explicit.

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

Usage Guidelines3/5

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

Usage is implied: this is the lookup path when you already hold identifiers, as opposed to search-based discovery. There is no explicit when-to-use/when-not guidance and no alternative named, so an agent must infer that arxiv_search precedes this for unknown papers.

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

biorxiv_get_full_textRead bioRxiv/medRxiv preprint full textA
Read-onlyIdempotent

Return the full text of a bioRxiv or medRxiv preprint as plain text, using the copy held by Europe PMC (JATS XML, falling back to PDF). Accepts a DOI, a preprint URL, or a Europe PMC PPR id. Full text usually appears a few days after posting; if it is not available yet the error says so. Long papers are paged: check truncated and pass next_offset as offset to continue.

NameRequiredDescriptionDefault
idYesPreprint DOI, URL, or Europe PMC PPR id (e.g. PPR1023352)
offsetNoCharacter offset to start from (for paging through long papers)
max_charsNoMaximum characters to return in this call
include_referencesNoAppend the reference list

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, and the description adds real value on top: the text is sourced from Europe PMC as JATS XML with PDF fallback, availability is delayed, and the failure mode is a descriptive error. It also discloses paging behavior via `truncated` and `next_offset`, fields that no output schema documents. It does not mention rate limits or typical response size beyond max_chars.

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

Conciseness5/5

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

Four sentences, each carrying distinct information: what is returned, accepted inputs, availability timing and failure mode, then paging. The most decision-relevant facts (output format and accepted identifiers) are front-loaded with no filler.

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 no output schema, the description must cover return values, and it does: plain text, source format, paging markers, and truncation handling. Combined with 100% parameter coverage and annotations covering safety, an agent has everything needed to call it correctly and to resume a truncated read.

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 the baseline is 3; the description earns above that by explaining the paging loop — inspect `truncated`, then feed `next_offset` back into `offset` — a relationship the schema alone cannot express. The three accepted id forms are restated from the schema rather than adding new meaning.

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

Purpose4/5

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

States a precise verb and resource ("Return the full text of a bioRxiv or medRxiv preprint as plain text") and names the underlying source, so an agent knows exactly what comes back. It distinguishes itself from the metadata-oriented sibling biorxiv_get_preprint only implicitly via "full text"; no sibling is named explicitly, which keeps it just short of a 5.

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?

Gives concrete usage conditions: full text usually appears a few days after posting, and an error is raised if it is not yet available. Also explains how to continue reading long papers. It stops short of directing the agent to biorxiv_get_preprint for abstract/metadata or arxiv_get_full_text for arXiv items, so routing to alternatives is left to inference.

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

biorxiv_get_preprintGet bioRxiv/medRxiv preprint detailsA
Read-onlyIdempotent

Fetch a preprint by DOI from the official bioRxiv/medRxiv API: title, authors, category, license, abstract, every posted version with dates, and the published journal version if one exists. Accepts a bare DOI (10.1101/2024.01.01.573711), a doi.org link, or a biorxiv.org/medrxiv.org content URL (version suffix like v2 is honoured). Auto-detects the server unless server is given.

NameRequiredDescriptionDefault
doiYesPreprint DOI or URL
serverNoWhich server to query; omit to auto-detect

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety bar is low; the description still adds real value by naming the authoritative upstream API and disclosing version-suffix handling and server auto-detection. Gaps remain on rate limits, not-found behavior for an invalid DOI, and error shape, which matter for an open-world network call.

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

Conciseness5/5

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

Two dense sentences with zero filler: the payload contents lead, and input-format and auto-detection rules follow. Nothing is repeated and nothing is buried.

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

Completeness4/5

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

With only two parameters and no output schema, the definition covers what an agent needs: accepted inputs, server resolution, and the shape of the returned record. The only omissions are failure modes for an unresolvable or malformed DOI, which are minor for a simple read tool.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented and the baseline is 3. The description adds concrete format examples for `doi` and notes that a trailing version suffix is honoured, which is genuine semantics beyond "Preprint DOI or URL", but the `server` behavior is simply a restatement of the schema.

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

Purpose4/5

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

States a specific verb and resource ("Fetch a preprint by DOI from the official bioRxiv/medRxiv API") and enumerates exactly what comes back: title, authors, category, license, abstract, versions, published journal version. It never names a sibling, though, so an agent must infer that this is the metadata lookup rather than the full-text (biorxiv_get_full_text), search, or listing tool.

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

Usage Guidelines3/5

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

The description spells out accepted input forms (bare DOI, doi.org link, content URL with v2 suffix) and the auto-detect-unless-`server`-given rule, which is useful orientation. It gives no explicit when-to-use guidance relative to biorxiv_search or biorxiv_get_full_text, leaving the selection to inference from the name.

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

biorxiv_list_recentList recent bioRxiv/medRxiv preprintsA
Read-onlyIdempotent

List preprints posted to bioRxiv or medRxiv in a date window, optionally filtered by subject category (e.g. neuroscience, bioinformatics, genomics, cell biology, immunology; medRxiv: epidemiology, oncology, infectious diseases). Defaults to today. Pages hold 30 records; pass next_cursor as cursor to continue. Use this for browsing what is new; use biorxiv_search for keyword queries.

NameRequiredDescriptionDefault
daysNoAlternative to date_from: the last N days
cursorNo
serverNobiorxiv
date_toNoWindow end (YYYY-MM-DD), defaults to today
categoryNoSubject category as shown on the server, e.g. 'cell biology'
date_fromNoWindow start (YYYY-MM-DD)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: default window of today, fixed page size of 30 records, and the cursor-continuation pattern, including the implied `next_cursor` value returned in results despite there being no output schema. It stops short of noting any result ordering or whether an empty window returns an empty page, which keeps it from a 5.

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

Conciseness5/5

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

Four compact sentences: purpose and filter first, then defaults, then pagination, then sibling routing. Every sentence carries information an agent needs, and nothing is repeated from annotations or the schema.

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?

For a zero-required-parameter listing tool with no output schema, the description covers the things an agent would otherwise have to guess: the time window default, page size, how to continue paging, and when to prefer search. Annotations plus schema plus this text leave no material gap for correct invocation.

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 description coverage is 67%, so some compensation is required, and the description supplies it: concrete category values for both servers, the 'defaults to today' behavior for the date window, and the mechanics of passing the cursor back in. It does not explain the `days`-versus-`date_from` alternative or the `server` switch, but both are documented in the schema itself.

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?

Brevity is not the issue here: the description states a specific verb ('List preprints'), the two resources (bioRxiv/medRxiv), the scoping dimension (a date window) and the optional category filter. It also explicitly distinguishes itself from biorxiv_search, so an agent can choose between browsing and querying without inspecting either schema.

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

Usage Guidelines5/5

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

The final sentence gives an explicit when-to-use ('browsing what is new') and a named alternative with its selecting condition ('use biorxiv_search for keyword queries'). The default (today) and the alternative date parameters are also flagged, leaving little to inference for the primary routing decision.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedarxiv_get_full_text
    • First observedarxiv_get_paper
    • First observedarxiv_search
    • First observedbiorxiv_get_full_text
    • First observedbiorxiv_get_preprint
    • First observedbiorxiv_list_recent
    • First observedbiorxiv_search

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

The arxiv_/biorxiv_ prefixes cleanly partition the tool set into two families, and within each family search / metadata / full-text are clearly different actions. The only mild overlaps are biorxiv_search vs biorxiv_list_recent (browsing vs keyword) and the two metadata fetchers, but the descriptions explicitly disambiguate them.

Naming Consistency4/5

Names consistently follow prefix_verb_noun (arxiv_get_paper, biorxiv_get_full_text, biorxiv_list_recent), so the pattern is predictable. The one asymmetry is the metadata-fetch verb: get_paper for arXiv vs get_preprint for bioRxiv, which is a minor, defensible deviation given the different resource types.

Tool Count5/5

Seven tools is well-scoped for a two-repository preprint server: three arXiv operations and four bioRxiv/medRxiv operations, each earning its place with no redundancy.

Completeness4/5

Search, metadata retrieval, full-text retrieval, and pagination are covered for both sources, plus a recent-listings feed for bioRxiv/medRxiv. The main gap is the absence of an equivalent 'list recent' or date-browse tool for arXiv (and no citation/reference traversal), though agents can approximate arXiv browsing with search date filters.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying bioRxiv and medRxiv preprints, including metadata, publication status, and submission counts, through natural language or direct tool calls.
    406 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables coding agents to retrieve full text, metadata, and search preprints from bioRxiv, medRxiv, and arXiv via four stdio tools: search_preprints, get_fulltext, get_metadata, and resolve.
    4
    3
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude and other MCP-compatible clients to search for academic papers and fetch detailed metadata, abstracts, and available full text from Semantic Scholar and Crossref.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude and other MCP-compatible clients to search and retrieve academic paper information from Semantic Scholar and Crossref, including metadata, abstracts, and full text when available. It exposes tools for paper search, topic/date-range search, and fetching details by DOI or Semantic Scholar ID.
    -