# io.github.cyanheads/biorxiv-mcp-server (npm · @cyanheads/biorxiv-mcp-server)

Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.

- Trust score: 63/100 (medium)
- Change this week: +56
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-07

## Components

- npm · `@cyanheads/biorxiv-mcp-server`: 63/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@cyanheads/biorxiv-mcp-server`
- Version: `0.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-07.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Known CVEs were checked across the 152 of 159 dependencies we could resolve, so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 152 of 159 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 26 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1356 tokens (~226/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add cyanheads-biorxiv-mcp-server -- npx -y @cyanheads/biorxiv-mcp-server
```

### Codex

```bash
codex mcp add cyanheads-biorxiv-mcp-server -- npx -y @cyanheads/biorxiv-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-biorxiv-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@cyanheads/biorxiv-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-biorxiv-mcp-server --command npx --arg -y --arg @cyanheads/biorxiv-mcp-server
```

### Hermes

```yaml
mcp_servers:
  cyanheads-biorxiv-mcp-server:
    command: "npx"
    args: ["-y", "@cyanheads/biorxiv-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-biorxiv-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/biorxiv-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 63, +28)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail

### 2026-08-02 (score 35, +15)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: our sandbox run of this package did not complete, so we have no schema to compare.
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Capabilities: Protocol version not yet verified: our sandbox run of this package did not complete, so we never saw its MCP handshake.
- [functional] Tool coverage: Tool coverage not yet verified: our sandbox run of this package did not complete, so we have no tool definitions to assess.
- [functional] Schema quality: Schema quality not yet verified: our sandbox run of this package did not complete, so we have no schema to assess.
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 20, +13)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 7, −17)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-29 (score 24, 0)

- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (6)

### `biorxiv_list_categories` (~60 tokens)

List bioRxiv/medRxiv Categories

List valid subject category strings for bioRxiv and medRxiv. Use these strings as the `category` filter in biorxiv_list_recent to narrow results to a specific field. Run this tool before filtering to get the current valid values.

Output parameters:

- `biorxiv` (array): bioRxiv subject categories
- `medrxiv` (array): medRxiv subject categories

### `biorxiv_list_recent` (~217 tokens)

List Recent Preprints

List preprints posted or revised within a date interval, optionally scoped to one server or a subject category. Returns 30 preprints per page (fixed by the API); pass `cursor` as an integer offset (0, 30, 60, …) to step through additional pages. When server="both" (default), per-server pagination state is returned separately — use each server's `cursor` field for independent advancement. Call biorxiv_list_categories for valid category strings.

Input parameters:

- `category` (string): Subject category filter. Use biorxiv_list_categories for valid values.
- `cursor` (integer): Integer page offset (0, 30, 60, …). Defaults to 0 (first page).
- `end_date` (string, required): End of the date interval (YYYY-MM-DD).
- `server` (string): Server to query. "both" fans out to bioRxiv and medRxiv in parallel.
- `start_date` (string, required): Start of the date interval (YYYY-MM-DD).

Output parameters:

- `categoryNote` (string): Present when server="both" and the category exists in only one server's taxonomy. Explains which server was queried and why the other was excluded.
- `notice` (string): Recovery hint when zero results are returned — echoes applied filters and suggests how to broaden.
- `pagination` (object): Per-server pagination state. Advance each server independently.
- `preprints` (array): Preprints in the requested date interval.

### `biorxiv_get_preprint` (~163 tokens)

Get Preprint by DOI

Fetch full metadata, 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. 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 rather than aborting the batch. DOIs must match the pattern 10.NNNN/…

Input parameters:

- `dois` (array, required): One or more preprint DOIs to look up (max 10).
- `server` (string): Server to query. "both" checks bioRxiv and medRxiv in parallel for each DOI.

Output parameters:

- `failed` (array): DOIs that could not be resolved, with per-DOI error details.
- `preprints` (array): Successfully resolved preprints with their full revision history.

### `biorxiv_get_published_version` (~170 tokens)

Get Published Journal Version

Resolve a preprint DOI to its full journal publication record — journal DOI, journal name, published date, and corresponding author details. Use when the preprint's `publishedJournalDoi` field from biorxiv_get_preprint is present and you need the full crosswalk metadata. Returns a not-found error when the preprint is not yet published. Check biorxiv_get_preprint first to confirm the publishedJournalDoi field is populated.

Input parameters:

- `doi` (string, required): Preprint DOI to resolve (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463).
- `server` (string): Server the preprint was posted on. Defaults to biorxiv.

Output parameters:

- `preprintAbstract` (string): Preprint abstract.
- `preprintAuthorCorresponding` (string): Corresponding author name.
- `preprintAuthorCorrespondingInstitution` (string): Corresponding author institution.
- `preprintAuthors` (string): Preprint author list.
- `preprintCategory` (string): Subject category.
- `preprintDate` (string): Date the preprint was first posted.
- `preprintDoi` (string): The preprint DOI that was resolved.
- `preprintTitle` (string): Title of the preprint.
- `publishedDate` (string): Journal publication date (YYYY-MM-DD).
- `publishedDoi` (string): The journal publication DOI.
- `publishedJournal` (string): Name of the publishing journal.

### `biorxiv_search_preprints` (~312 tokens)

Search Preprints by Keyword

Search preprints by keyword and/or author using EuropePMC for relevance ranking, then enrich matching DOIs with full bioRxiv/medRxiv metadata. Provide a keyword query, an author name, or both — author maps to an EuropePMC AUTH: field query and is ANDed with the keyword query. Covers both servers by default. EuropePMC indexes new preprints within 1–2 days of posting; for preprints posted within the last day, prefer biorxiv_list_recent.

Input parameters:

- `author` (string): Author name to filter by, mapped to an EuropePMC AUTH:"…" field query and ANDed with the keyword query. Optional when query is provided (e.g. "Jennifer Doudna").
- `cursor_mark` (string): Opaque page token for ranked EuropePMC results. Omit for the first page; pass the nextCursorMark returned by a prior call to fetch the next page. Pages through the same ranked list rather than raisin…
- `date_from` (string): Earliest first-publication date filter (YYYY-MM-DD).
- `date_to` (string): Latest first-publication date filter (YYYY-MM-DD).
- `limit` (integer): Maximum results to return (1–100). Defaults to 25.
- `query` (string): Keyword search query. Optional when author is provided — supply at least one of query or author.
- `server` (string): Server scope for enrichment. "both" checks all matching DOIs on both servers.

Output parameters:

- `nextCursorMark` (string): Opaque token for the next page of ranked results. Present only when more results exist beyond this page; pass it back as cursor_mark. Absent on the last page.
- `notice` (string): Recovery hint when zero results are returned — echoes query and suggests how to broaden.
- `partial_results` (boolean): True when one or more DOIs failed bioRxiv enrichment and fell back to EuropePMC metadata.
- `preprints` (array): Search results, ranked by EuropePMC relevance.
- `queryEcho` (object): Echo of the parameters used to produce this result set — lets callers verify what was sent.
- `totalCount` (number): Total preprints matching the query in EuropePMC (hitCount) — the true upstream grand total, not the number of results returned.

### `biorxiv_get_fulltext` (~345 tokens)

Get Preprint Full Text

Retrieve a preprint's full text as best-effort Markdown, extracted from its rendered HTML article page. Resolves the latest version via the details API, then fetches and extracts the body — abstract, sections, and references. This is HTML-to-Markdown extraction, not structured JATS: section structure is approximate and not guaranteed. Long articles exceed a single response, so use offset and limit to page through them (the response reports totalChars, remainingChars, and hasMore). Not every preprint has an extractable HTML page — some are PDF-only and some origins block programmatic access — in which case a fulltext_unavailable error routes you to biorxiv_get_preprint for the title, abstract, and metadata. For a preprint that has been published in a journal, the journal's version may have richer full text elsewhere.

Input parameters:

- `doi` (string, required): Preprint DOI (e.g. 10.1101/2024.05.28.596311 or 10.64898/2026.05.07.723463). The latest version is resolved automatically.
- `limit` (integer): Maximum number of characters to return in this chunk. Default 20,000; increase toward 50,000 for large context windows. Check the length field for the actual count returned.
- `offset` (integer): Character offset into the full extracted text at which to start reading. 0 returns the beginning. To read the next chunk, use offset = prior_offset + prior_length (the length field from the previous…
- `server` (string): Server the preprint was posted on. Defaults to biorxiv.

Output parameters:

- `cap` (number): The limit (max characters) applied to this chunk.
- `content` (string): The requested chunk of full text as best-effort Markdown extracted from the rendered HTML page. Section structure is approximate — this is not JATS.
- `contentFormat` (string): How content was produced: Markdown extracted from the rendered HTML article page (constant).
- `doi` (string): The resolved preprint DOI.
- `hasMore` (boolean): True when more text follows this chunk. When true, call again with offset = offset + length.
- `length` (number): Number of characters returned in this chunk.
- `notice` (string): Paging guidance when the content was truncated — how to fetch the next chunk.
- `offset` (number): Character offset into the full extracted text where this chunk begins.
- `remainingChars` (number): Characters remaining after this chunk (totalChars - offset - length). 0 means this chunk reaches the end.
- `server` (string): Server the preprint was resolved on.
- `shown` (number): Characters returned in this chunk.
- `sourceUrl` (string): The full-text HTML page the content was extracted from.
- `title` (string): Article title detected during extraction. Absent when the page exposed none.
- `totalChars` (number): Total characters in the full extracted text. Use with offset and length to page through long articles.
- `truncated` (boolean): True when this chunk was capped by limit and more text remains.
- `version` (string): Preprint version whose full text was retrieved (the latest revision).
- `wordCount` (number): Approximate word count of the FULL extracted article as reported by the extractor (not just the returned chunk). Absent when the extractor reported none.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server#diagnostics

## Score history

- 2026-08-07: 63
- 2026-08-06: 63
- 2026-08-05: 35
- 2026-08-04: 35
- 2026-08-03: 35
- 2026-08-02: 35
- 2026-08-01: 20
- 2026-07-31: 7
- 2026-07-29: 24
- 2026-07-28: 24
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/@cyanheads/biorxiv-mcp-server
- Socket report: https://socket.dev/npm/package/@cyanheads/biorxiv-mcp-server
- Repository: https://github.com/cyanheads/biorxiv-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-biorxiv-mcp-server/cyanheads-biorxiv-mcp-server
