biorxiv-mcp-server
Server Details
Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.
- Status
- Healthy
- Uptime
- 99.8% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/biorxiv-mcp-server
- GitHub Stars
- 4
- Server Listing
- @cyanheads/biorxiv-mcp-server
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: fulltext extraction, metadata retrieval, published version resolution, category listing, recent listing, and search. No two tools overlap; even get_preprint and get_published_version are well differentiated by descriptions.
All tools follow the consistent biorxiv_verb_noun pattern: get_fulltext, get_preprint, get_published_version, list_categories, list_recent, search_preprints. The naming is uniform and predictable.
Six tools is well within the ideal 3-15 range and each tool earns its place, covering the core read-only operations for the preprint domain without redundancy.
The tool surface covers all major access patterns: search, list, metadata, fulltext, published version, and category validation. No obvious gaps exist for a read-only preprint access server; missing operations like creation/deletion are not applicable.
Available Tools
6 toolsbiorxiv_get_fulltextGet Preprint Full TextARead-onlyInspect
Retrieve a preprint's full text as best-effort Markdown, extracted from its rendered HTML article page. Reads the latest version unless one is requested (the version input, or a vN suffix on the DOI), confirms it via the details API, then fetches and extracts the body — abstract, sections, and references. bioRxiv and medRxiv share the 10.1101/ DOI prefix, so server="both" (the default) resolves the DOI against both in parallel and the response reports which server answered. 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); paging is cheap because the extracted article is cached per version for an hour after the first read, so only the first chunk pays for a fetch. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | Preprint DOI (e.g. 10.1101/2024.05.28.596311 or 10.64898/2026.05.07.723463). A doi.org or biorxiv.org/medrxiv.org article URL, a doi: prefix, or a .full suffix is accepted and stripped; a trailing vN (…596311v2) requests that version. Without one, the latest version is resolved automatically. | |
| limit | No | 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 | No | 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 response). | |
| server | No | Server the preprint was posted on. "both" (default) checks bioRxiv and medRxiv in parallel to resolve the DOI — the full-text fetch itself only ever targets whichever server resolved, and the output server field names it. | both |
| version | No | Preprint version to read (1, 2, …) — the revision numbers biorxiv_get_preprint lists. Omit for the latest version. Must match a vN suffix on the DOI when both are given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit (max characters) applied to this chunk. |
| doi | No | The resolved preprint DOI, in bare form. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Characters returned in this chunk. |
| title | No | Article title detected during extraction. Absent when the page exposed none. |
| length | No | Number of characters returned in this chunk. |
| notice | No | Paging guidance when the content was truncated — how to fetch the next chunk. |
| offset | No | Character offset into the full extracted text where this chunk begins. |
| server | No | Server the preprint was resolved on. |
| content | No | The requested chunk of full text as best-effort Markdown extracted from the rendered HTML page. Section structure is approximate — this is not JATS. |
| hasMore | No | True when more text follows this chunk. When true, call again with offset = offset + length. |
| version | No | Preprint version whose full text was retrieved — the requested one, or the latest revision when none was requested. Pass it back as version when paging. |
| sourceUrl | No | The full-text HTML page the content was extracted from. |
| truncated | No | True when this chunk was capped by limit and more text remains. |
| wordCount | No | Approximate word count of the FULL extracted article, not just the returned chunk — whitespace-delimited tokens of the same Markdown text that totalChars measures, so Markdown markers such as # and - count too. |
| totalChars | No | Total characters in the full extracted text. Use with offset and length to page through long articles. |
| contentFormat | No | How content was produced: Markdown extracted from the rendered HTML article page (constant). |
| remainingChars | No | Characters remaining after this chunk (totalChars - offset - length). 0 means this chunk reaches the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true and openWorldHint=true; the description carries the full behavioral burden and does so richly. It discloses that extraction is best-effort HTML-to-Markdown with approximate section structure, explains caching for an hour per version, details paging semantics via totalChars/remainingChars/hasMore, and describes server resolution behavior for 'both'. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: version resolution, server ambiguity, extraction caveats, paging/caching, failure modes, and alternatives. It is front-loaded with the core purpose and organized logically from retrieval to error handling, making it appropriately sized for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations cover safety, the description completes the picture: it names the response fields used for paging (totalChars, remainingChars, hasMore), explains the error case and its routing, and notes version selection behavior. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already documents each parameter's purpose, defaults, and constraints (e.g., offset = prior_offset + prior_length, version matching vN suffix). The description reinforces paging/caching behavior but does not add significant meaning beyond the schema details, so it stays at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Retrieve a preprint's full text as best-effort Markdown, extracted from its rendered HTML article page.' It distinguishes itself from structured JATS and names the fallback sibling biorxiv_get_preprint, so an agent can clearly tell what this tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (when full text is needed) and provides a fallback path: 'a fulltext_unavailable error routes you to biorxiv_get_preprint for the title, abstract, and metadata.' It also mentions that PDF-only articles and blocked origins prevent use, and points to journal versions as a potentially richer alternative elsewhere. This gives clear when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biorxiv_get_preprintGet Preprint by DOIARead-onlyIdempotentInspect
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 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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| dois | Yes | One or more preprint DOIs to look up (max 10). | |
| server | No | Server to query. "both" checks bioRxiv and medRxiv in parallel for each DOI. | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| failed | No | DOIs that could not be resolved, with per-DOI error details. |
| preprints | No | Successfully resolved preprints with their full revision history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: it discloses that each DOI returns all revisions in one response, that server='both' checks both bioRxiv and medRxiv, that failed lookups are reported per-DOI in failed[] with specific reason codes and a retryable flag, and that rate_limited entries carry the wait time. It also explains input normalization (stripping doi.org URLs, doi: labels, vN/.full suffixes). This is rich, non-obvious behavior that an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the core purpose, then covers the multi-revision behavior, the server default, error handling, and input normalization in a logical order. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batch lookup, multi-revision responses, error handling, input normalization) and the presence of an output schema, the description covers all the behavioral context an agent needs: what is returned, how failures are reported, how inputs are normalized, and what the server parameter does. The output schema presumably documents the response shape, so the description doesn't need to repeat return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds value by explaining the normalization behavior for the dois parameter (stripping URL prefixes, doi: labels, version suffixes) and the meaning of server='both' (parallel check of both repositories). It doesn't add much beyond the schema for the server enum, but the DOI normalization detail is genuinely useful and not fully captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Fetch') and a precise resource ('full metadata, abstract, all revision history, JATS XML full-text links, and published-journal DOI for one or more preprints by DOI'). It clearly distinguishes this tool from siblings like biorxiv_get_fulltext (which presumably fetches full text) and biorxiv_get_published_version (which focuses on the published-journal DOI). The scope and output are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: to fetch metadata and revision history by DOI, and it contrasts with the sibling biorxiv_get_fulltext by mentioning JATS XML full-text links are included but the tool is not the full-text fetcher. It also explains the server='both' default behavior and how failed lookups are handled, giving an agent clear context for choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biorxiv_get_published_versionGet Published Journal VersionARead-onlyIdempotentInspect
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. bioRxiv and medRxiv share their DOI prefixes, so server="both" (the default) checks both in parallel and the response reports which server answered. Works for 10.1101/ and 10.64898/ DOIs alike; when the crosswalk holds no record for a published preprint, the journal DOI still comes back from the preprint's own record, without journal name or date, and a notice says so. Returns a not-found error only when no server holds the preprint or it lists no journal version at all.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | Preprint DOI to resolve (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. | |
| server | No | Server the preprint was posted on. "both" (default) checks bioRxiv and medRxiv in parallel — use it when the DOI alone does not tell you which server holds the preprint. | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Present when publishedDoi came from the preprint's own record because the crosswalk had none: says why publishedJournal and publishedDate are absent. |
| server | No | The server that returned this published record — never "both". |
| preprintDoi | No | The preprint DOI that was resolved, in bare form. |
| preprintDate | No | Date the preprint was first posted. |
| publishedDoi | No | The journal publication DOI. |
| preprintTitle | No | Title of the preprint. |
| publishedDate | No | Journal publication date (YYYY-MM-DD). Absent when the crosswalk holds no record for this preprint — see notice. |
| preprintAuthors | No | Preprint author list. |
| preprintAbstract | No | Preprint abstract. |
| preprintCategory | No | Subject category. |
| publishedJournal | No | Name of the publishing journal. Absent when the crosswalk holds no record for this preprint — see notice. |
| preprintAuthorCorresponding | No | Corresponding author name. |
| preprintAuthorCorrespondingInstitution | No | Corresponding author institution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and open-world hints. The description adds valuable behavioral detail: parallel server checking, DOI prefix compatibility, the fallback behavior when the crosswalk has no record, and the precise error condition. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then usage, then edge cases. Every sentence contributes new information without redundancy. It's longer than minimal but efficient for the complexity covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be detailed. The description covers all operational aspects: what it resolves, when to use it, how server selection works, edge cases, and error conditions. Complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already documents both parameters with examples. The description adds normalization rules for the DOI (accepting URLs, doi: prefix, vN/.full suffixes) and explains the 'both' server behavior (parallel check and response reporting). This is meaningful added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Resolve', a specific resource 'preprint DOI', and the output fields (journal DOI, journal name, published date, corresponding author details). Clearly distinguishes from siblings like biorxiv_get_preprint by focusing on the published journal version rather than the preprint itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit trigger condition: use when the preprint's `publishedJournalDoi` field is present and you need the full crosswalk metadata. Does not explicitly name alternative tools or state when-not-to-use, but the condition is specific enough to guide selection. Could be improved by naming a sibling for the opposite case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biorxiv_list_categoriesList bioRxiv/medRxiv CategoriesARead-onlyIdempotentInspect
List valid subject category strings for bioRxiv and medRxiv — the categories the listing API actually filters on. Use these strings as the category filter in biorxiv_list_recent to narrow results to a specific field; case, and "_" or "-" in place of a space, do not matter there. Run this tool before filtering to get the current valid values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| biorxiv | No | bioRxiv subject categories |
| medrxiv | No | medRxiv subject categories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and idempotentHint=true, covering safety and idempotency. The description adds valuable context: these are the actual filter values the API uses, and they represent 'current valid values,' implying they may change over time. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core purpose and then provides usage guidance. It avoids redundancy and every clause adds value, though it could be slightly more compact by splitting into two sentences. It earns a 4 for efficiency without being overly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema (which likely describes the list format), the description fully covers what the tool does, how to use it, and its role relative to siblings. It includes the important nuance that these are the authoritative filter values and that they are current, making it complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to explain parameter semantics. Per the rubric, a baseline of 4 is appropriate when there are no parameters; the description correctly omits any parameter discussion, and the schema coverage is 100% (trivially, since there are none).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists valid subject category strings for bioRxiv and medRxiv, and explicitly identifies these as the categories the listing API filters on. It distinguishes itself from sibling tools that fetch or search content, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to use the returned strings as the `category` filter in biorxiv_list_recent, notes that case and separators are irrelevant, and advises running this tool before filtering. This gives clear when-to-use and how-to-use guidance, and implicitly tells the agent when not to use it (i.e., when needing content rather than categories).
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 PreprintsARead-onlyInspect
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. Abstracts are omitted by default to keep the page small — pass include_abstract: true for the whole page, or call biorxiv_get_preprint (up to 10 DOIs per call) for a few. When server="both" (default), per-server pagination state is returned separately — use each server's cursor field for independent advancement. One server failing under server="both" does not abort the call: the other server's page is still returned and the failed one is named in failed[], marking the result set as partial rather than complete. Every attempted server failing is a different case and does abort the call, with a retryable upstream_unavailable (or rate_limited) error — an empty page would otherwise be indistinguishable from an interval that genuinely holds nothing. Call biorxiv_list_categories for valid category strings; a server that answers a category filter with its unfiltered listing is left out with a notice, and invalid_category is raised when no server applied it. funder limits the listing to bioRxiv preprints funded by that organization, given its ROR ID; an ID api.biorxiv.org has no funder record for raises invalid_funder rather than returning an empty page.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Integer page offset (0, 30, 60, …). Defaults to 0 (first page). | |
| funder | No | Funder filter: the funder's ROR ID, bare ("021nxhr62" for the US National Science Foundation) or as a URL ("https://ror.org/021nxhr62"). bioRxiv only — medRxiv records carry no funder data, so server="both" queries bioRxiv alone and server="medrxiv" is rejected. Combines with category. Look the ID up by name at ror.org. | |
| server | No | Server to query. "both" fans out to bioRxiv and medRxiv in parallel. | both |
| category | No | Subject category filter, matched case-insensitively with "_" and "-" read as a space — "Cell Biology", "cell biology", "cell_biology", and "cell-biology" are the same filter. Use biorxiv_list_categories for valid values. | |
| end_date | Yes | End of the date interval (YYYY-MM-DD). | |
| start_date | Yes | Start of the date interval (YYYY-MM-DD). | |
| include_abstract | No | Include each preprint's abstract. Defaults to false: abstracts make up about three quarters of a page, and every other field is returned either way. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| failed | No | Servers that did not answer, so their records are missing from "preprints" and they have no "pagination" entry. Non-empty means this result set is partial — retry to include them. Only populated when server="both", and never holding every attempted server: when none answered, the call fails with upstream_unavailable or rate_limited instead of returning a page. A single-server failure likewise surfaces as a tool error. Distinct from an exhausted pagination entry, where the server answered. |
| notice | No | Guidance on how to read this result set: which servers did not answer, which ignored the category filter (their unfiltered records are left out), that a funder filter limited server="both" to bioRxiv, which cursors are past the end, and — when nothing came back — the applied filters and how to broaden them. All applicable qualifications are composed into one string. |
| preprints | No | Preprints in the requested date interval. |
| pagination | No | Per-server pagination state. Advance each server independently. |
| categoryNote | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true and openWorldHint=true, the description goes far beyond those annotations. It discloses pagination behavior (30 per page, integer cursor), the partial-failure semantics under server="both" (one server failing returns partial results with failed[] and a partial marker), and the all-fail case (aborts with an upstream_unavailable or rate_limited error). It explains why abstracts are omitted by default and why invalid_funder is raised. This is rich behavioral disclosure beyond any structured annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries unique, actionable information. It front-loads the primary purpose before diving into edge cases. The structure moves from general scope to pagination, to abstract handling, to server-specific behavior, to category and funder specifics. No redundancy; all content is necessary for correct invocation. The length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, pagination, dual-server behavior, error semantics), the description leaves nothing essential ambiguous. It covers error conditions, partial results, alternatives, and parameter interactions. The presence of an output schema covers return value specifics. An agent has everything needed to invoke this tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes all parameters (100% coverage), the description adds substantial semantic nuance: cursor stepping, the exact category matching rule (case-insensitive, underscores/hyphens as spaces), the funder ROR ID format and its restriction to bioRxiv only (rejection of server='medrxiv'), and the interaction between funder and category. It clarifies how per-server cursors work under server='both'. This goes well beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise, specific verb and resource: 'List preprints posted or revised within a date interval, optionally scoped to one server or a subject category.' This clearly distinguishes it from sibling tools like biorxiv_get_preprint (which fetches individual preprints) and biorxiv_list_categories (which lists categories). The primary function is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the reader when to use this tool versus alternatives: it recommends biorxiv_get_preprint for fetching a few preprints with abstracts (up to 10 DOIs), and directs to biorxiv_list_categories for valid category strings. It also explains when to pass include_abstract: true versus relying on the default. This gives clear routing and excludes misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biorxiv_search_preprintsSearch Preprints by KeywordARead-onlyInspect
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. Abstracts are included by default; include_abstract: false omits them from every result for a response about a third the size, and biorxiv_get_preprint returns the abstract for up to 10 DOIs per call. A EuropePMC rate limit (HTTP 429) fails the call with a retryable rate_limited error carrying the wait in seconds — a rate-limited metadata enrichment does not, and instead marks the affected record enrichment_error: "rate_limited".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (1–100). Defaults to 25. | |
| query | No | Keyword search query. Optional when author is provided — supply at least one of query or author. | |
| author | No | 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"). | |
| server | No | Server scope for enrichment. "both" checks all matching DOIs on both servers. | both |
| date_to | No | Latest first-publication date filter (YYYY-MM-DD). | |
| date_from | No | Earliest first-publication date filter (YYYY-MM-DD). | |
| cursor_mark | No | 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 raising limit. A token EuropePMC does not recognize fails with invalid_cursor_mark. | |
| include_abstract | No | Include each result's abstract. Defaults to true. false omits the abstract from every result, enriched and EuropePMC-fallback alike, and keeps every other field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Present when zero results are returned: on a cursor_mark page past the last match, says the list is exhausted; otherwise echoes the query and suggests how to broaden it. Also present when abstracts for results shown with EuropePMC metadata only could not be retrieved, which leaves those results without one. |
| preprints | No | Search results, ranked by EuropePMC relevance. |
| queryEcho | No | Echo of the parameters used to produce this result set — lets callers verify what was sent. |
| totalCount | No | Total preprints matching the query in EuropePMC (hitCount) — the true upstream grand total, not the number of results returned. |
| nextCursorMark | No | 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. |
| partial_results | No | True when one or more DOIs failed bioRxiv enrichment and fell back to EuropePMC metadata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnlyHint and openWorldHint annotations, including EuropePMC indexing lag, rate-limit failure semantics with a retryable rate_limited error, and how rate-limited enrichment differs by marking records with enrichment_error. It also explains default server coverage and abstract-size tradeoffs. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, query composition, server scope, recency caveat, abstract tradeoff, and error semantics. It is front-loaded with the core action and spends no words on filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with an output schema, the description covers selection criteria, paging context, server defaults, latency caveats, error handling, and sibling alternatives. The schema covers parameter formatting, so nothing critical is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all parameters with descriptions, giving a baseline of 3. The tool description adds meaningful semantics by explaining how author maps to an AUTH: field query and is ANDed with the keyword query, and how include_abstract affects response size and the resulting enrichment behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: searching preprints by keyword and/or author, then enriching DOIs with full metadata. It also distinguishes itself from biorxiv_list_recent, so an agent can tell it apart from a sibling without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool vs. biorxiv_list_recent (for preprints posted within the last day), and explains the alternative path of biorxiv_get_preprint for retrieving abstracts after omitting them. It also specifies that query, author, or both are valid inputs.
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.
3 tool updates
- Changed
biorxiv_get_preprint2 fields changed- added
Output schema / properties / preprints / items / properties / revisions / items / properties / awardsAdded 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" +} - removed
Output schema / properties / preprints / items / properties / revisions / items / properties / funderRemoved value: -{ - "description": "Funder information.", - "type": "string" -}
- Changed
biorxiv_list_recent9 fields changed- added
Input schema / properties / funderAdded value: +{ + "description": "Funder filter: the funder's ROR ID, bare (\"021nxhr62\" for the US National Science Foundation) or as a URL (\"https://ror.org/021nxhr62\"). bioRxiv only — medRxiv records carry no funder data, so server=\"both\" queries bioRxiv alone and server=\"medrxiv\" is rejected. Combines with category. Look the ID up by name at ror.org.", + "type": "string" +} - added
Input schema / properties / include_abstractAdded value: +{ + "default": false, + "description": "Include each preprint's abstract. Defaults to false: abstracts make up about three quarters of a page, and every other field is returned either way.", + "type": "boolean" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: end_date is before start_date, or either date is malformed. `invalid_category`: The category is not in the requested server's taxonomy, or api.biorxiv.org ignored it and returned the unfiltered listing on every server that answered. `upstream_unavailable`: Every attempted server failed against api.biorxiv.org, so no page was retrieved and an empty interval could not be established. `rate_limited`: Every attempted server failed and at least one 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: `invalid_date_range`: end_date is before start_date, or either date is malformed. `invalid_category`: The category is not in the requested server's taxonomy, or api.biorxiv.org ignored it and returned the unfiltered listing on every server that answered. `invalid_funder`: funder is not a well-formed ROR ID (pattern or checksum), is combined with server=\"medrxiv\", or is a ROR ID api.biorxiv.org has no funder record for. `upstream_unavailable`: Every attempted server failed against api.biorxiv.org, so no page was retrieved and an empty interval could not be established. `rate_limited`: Every attempted server failed and at least one was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_date_range", - "invalid_category", - "upstream_unavailable", - "rate_limited" -]New value: +[ + "invalid_date_range", + "invalid_category", + "invalid_funder", + "upstream_unavailable", + "rate_limited" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance on how to read this result set: which servers did not answer, which ignored the category filter (their unfiltered records are left out), which cursors are past the end, and — when nothing came back — the applied filters and how to broaden them. All applicable qualifications are composed into one string."New value: +"Guidance on how to read this result set: which servers did not answer, which ignored the category filter (their unfiltered records are left out), that a funder filter limited server=\"both\" to bioRxiv, which cursors are past the end, and — when nothing came back — the applied filters and how to broaden them. All applicable qualifications are composed into one string." - changed
Output schema / properties / pagination / properties / medrxiv / descriptionPrevious value: -"medRxiv pagination state. Present when server is \"medrxiv\" or \"both\"."New value: +"medRxiv pagination state. Present when server is \"medrxiv\" or \"both\", except under a funder filter, which queries bioRxiv only." - changed
Output schema / properties / preprints / items / properties / abstract / descriptionPrevious value: -"Abstract text."New value: +"Abstract text. Present only when include_abstract is true." - added
Output schema / properties / preprints / items / properties / awardsAdded 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" +} - removed
Output schema / properties / preprints / items / properties / funderRemoved value: -{ - "description": "Funder information.", - "type": "string" -}
- Changed
biorxiv_search_preprints5 fields changed- added
Input schema / properties / include_abstractAdded value: +{ + "default": true, + "description": "Include each result's abstract. Defaults to true. false omits the abstract from every result, enriched and EuropePMC-fallback alike, and keeps every other field.", + "type": "boolean" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Present when zero results are returned. On a cursor_mark page past the last match, says the list is exhausted; otherwise echoes the query and suggests how to broaden it."New value: +"Present when zero results are returned: on a cursor_mark page past the last match, says the list is exhausted; otherwise echoes the query and suggests how to broaden it. Also present when abstracts for results shown with EuropePMC metadata only could not be retrieved, which leaves those results without one." - changed
Output schema / properties / preprints / items / properties / abstract / descriptionPrevious value: -"Abstract text."New value: +"Abstract text. Omitted when include_abstract is false. On a EuropePMC-fallback record, absent when EuropePMC holds none or the abstract lookup failed — the notice says when it failed." - added
Output schema / properties / preprints / items / properties / awardsAdded 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, and on EuropePMC-only fallback records. 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" +} - removed
Output schema / properties / preprints / items / properties / funderRemoved value: -{ - "description": "Funder information.", - "type": "string" -}
5 tool updates
- Changed
biorxiv_get_fulltext8 fields changed- changed
Input schema / properties / doi / descriptionPrevious value: -"Preprint DOI (e.g. 10.1101/2024.05.28.596311 or 10.64898/2026.05.07.723463). The latest version is resolved automatically."New value: +"Preprint DOI (e.g. 10.1101/2024.05.28.596311 or 10.64898/2026.05.07.723463). A doi.org or biorxiv.org/medrxiv.org article URL, a doi: prefix, or a .full suffix is accepted and stripped; a trailing vN (…596311v2) requests that version. Without one, the latest version is resolved automatically." - added
Input schema / properties / versionAdded value: +{ + "description": "Preprint version to read (1, 2, …) — the revision numbers biorxiv_get_preprint lists. Omit for the latest version. Must match a vN suffix on the DOI when both are given.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "doi", - "server", - "version", - "content", - "contentFormat", - "sourceUrl", - "offset", - "length", - "totalChars", - "remainingChars", - "hasMore" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "doi", + "server", + "version", + "content", + "contentFormat", + "wordCount", + "sourceUrl", + "offset", + "length", + "totalChars", + "remainingChars", + "hasMore" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / doi / descriptionPrevious value: -"The resolved preprint DOI."New value: +"The resolved preprint DOI, in bare form." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_doi_format`: The input DOI does not match the 10.NNNN/ pattern. `doi_not_found`: The DOI resolves to an empty collection on every attempted server. `upstream_unavailable`: No attempted server resolved the DOI and at least one lookup failed against api.biorxiv.org. `rate_limited`: Either origin returned HTTP 429 for this host — the article page (www.biorxiv.org / www.medrxiv.org) during the full-text fetch, or api.biorxiv.org during version resolution. `fulltext_unavailable`: The preprint exists but its full-text HTML page is blocked, missing, or yields no extractable text (PDF-only). `offset_out_of_range`: offset is greater than or equal to the total character length of the extracted text. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_doi_format`: The input DOI does not match the 10.NNNN/ pattern, even after URL, doi:, and suffix stripping. `version_conflict`: The DOI carries a vN suffix and the version input names a different version. `version_not_found`: The preprint exists but has no revision with the requested version number. `doi_not_found`: The DOI resolves to an empty collection on every attempted server. `upstream_unavailable`: No attempted server resolved the DOI and at least one lookup failed against api.biorxiv.org. `rate_limited`: Either origin returned HTTP 429 for this host — the article page (www.biorxiv.org / www.medrxiv.org) during the full-text fetch, or api.biorxiv.org during version resolution. `fulltext_unavailable`: The preprint exists but its full-text HTML page is blocked, missing, or yields no extractable text (PDF-only). `offset_out_of_range`: offset is greater than or equal to the total character length of the extracted text. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_doi_format", - "doi_not_found", - "upstream_unavailable", - "rate_limited", - "fulltext_unavailable", - "offset_out_of_range" -]New value: +[ + "invalid_doi_format", + "version_conflict", + "version_not_found", + "doi_not_found", + "upstream_unavailable", + "rate_limited", + "fulltext_unavailable", + "offset_out_of_range" +] - changed
Output schema / properties / version / descriptionPrevious value: -"Preprint version whose full text was retrieved (the latest revision)."New value: +"Preprint version whose full text was retrieved — the requested one, or the latest revision when none was requested. Pass it back as version when paging." - changed
Output schema / properties / wordCount / descriptionPrevious value: -"Approximate word count of the FULL extracted article as reported by the extractor (not just the returned chunk). Absent when the extractor reported none."New value: +"Approximate word count of the FULL extracted article, not just the returned chunk — whitespace-delimited tokens of the same Markdown text that totalChars measures, so Markdown markers such as # and - count too."
- Changed
biorxiv_get_preprint4 fields changed- changed
Input schema / properties / dois / items / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / failed / items / properties / doi / descriptionPrevious value: -"DOI that failed to resolve."New value: +"DOI that failed to resolve — in bare form, or exactly as sent for invalid_doi_format." - changed
Output schema / properties / preprints / items / properties / doi / descriptionPrevious value: -"The requested DOI."New value: +"The requested DOI in bare form (any URL, doi: prefix, or suffix removed)."
- Changed
biorxiv_get_published_version6 fields changed- changed
Input schema / properties / doi / descriptionPrevious value: -"Preprint DOI to resolve (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463)."New value: +"Preprint DOI to resolve (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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `doi_not_found`: Crosswalk endpoint returns an empty collection on every attempted server. `invalid_doi_format`: The input DOI does not match the 10.NNNN/ pattern. `upstream_unavailable`: No attempted server returned a record and at least one lookup failed against api.biorxiv.org. `rate_limited`: No attempted server returned a record 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`: No attempted server holds the preprint, or neither the crosswalk nor its preprint record lists a journal version. `invalid_doi_format`: The input DOI does not match the 10.NNNN/ pattern, even after URL, doi:, and suffix stripping. `upstream_unavailable`: No published record was established and at least one crosswalk or preprint lookup failed against api.biorxiv.org. `rate_limited`: No published record was established and at least one crosswalk or preprint lookup was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler." - added
Output schema / properties / noticeAdded value: +{ + "description": "Present when publishedDoi came from the preprint's own record because the crosswalk had none: says why publishedJournal and publishedDate are absent.", + "type": "string" +} - changed
Output schema / properties / preprintDoi / descriptionPrevious value: -"The preprint DOI that was resolved."New value: +"The preprint DOI that was resolved, in bare form." - changed
Output schema / properties / publishedDate / descriptionPrevious value: -"Journal publication date (YYYY-MM-DD)."New value: +"Journal publication date (YYYY-MM-DD). Absent when the crosswalk holds no record for this preprint — see notice." - changed
Output schema / properties / publishedJournal / descriptionPrevious value: -"Name of the publishing journal."New value: +"Name of the publishing journal. Absent when the crosswalk holds no record for this preprint — see notice."
- Changed
biorxiv_list_recent3 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Subject category filter. Use biorxiv_list_categories for valid values."New value: +"Subject category filter, matched case-insensitively with \"_\" and \"-\" read as a space — \"Cell Biology\", \"cell biology\", \"cell_biology\", and \"cell-biology\" are the same filter. Use biorxiv_list_categories for valid values." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: end_date is before start_date, or either date is malformed. `invalid_category`: The supplied category string is not in the taxonomy. `upstream_unavailable`: Every attempted server failed against api.biorxiv.org, so no page was retrieved and an empty interval could not be established. `rate_limited`: Every attempted server failed and at least one 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: `invalid_date_range`: end_date is before start_date, or either date is malformed. `invalid_category`: The category is not in the requested server's taxonomy, or api.biorxiv.org ignored it and returned the unfiltered listing on every server that answered. `upstream_unavailable`: Every attempted server failed against api.biorxiv.org, so no page was retrieved and an empty interval could not be established. `rate_limited`: Every attempted server failed and at least one was rejected with HTTP 429 by api.biorxiv.org. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance on how to read this result set: which servers did not answer, which cursors are past the end, and — when nothing came back — the applied filters and how to broaden them. All applicable qualifications are composed into one string."New value: +"Guidance on how to read this result set: which servers did not answer, which ignored the category filter (their unfiltered records are left out), which cursors are past the end, and — when nothing came back — the applied filters and how to broaden them. All applicable qualifications are composed into one string."
- Changed
biorxiv_search_preprints4 fields changed- changed
Input schema / properties / cursor_mark / descriptionPrevious value: -"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 raising limit."New value: +"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 raising limit. A token EuropePMC does not recognize fails with invalid_cursor_mark." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_from or date_to is malformed, or date_from is after date_to. `search_unavailable`: EuropePMC search endpoint is unreachable or returns a server error. `rate_limited`: The EuropePMC search endpoint rejected the keyword search with HTTP 429. Distinct from a rate-limited enrichment call, which degrades to EuropePMC-only metadata instead of failing. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_from or date_to is malformed, or date_from is after date_to. `search_unavailable`: EuropePMC search endpoint is unreachable, returns a server error, or answers a first-page search without a result list on every retry. `invalid_cursor_mark`: EuropePMC answers a cursor_mark page request without a result list on every retry — the token is malformed or not one EuropePMC issued. `rate_limited`: The EuropePMC search endpoint rejected the keyword search with HTTP 429. Distinct from a rate-limited enrichment call, which degrades to EuropePMC-only metadata instead of failing. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_date_range", - "search_unavailable", - "rate_limited" -]New value: +[ + "invalid_date_range", + "search_unavailable", + "invalid_cursor_mark", + "rate_limited" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Recovery hint when zero results are returned — echoes query and suggests how to broaden."New value: +"Present when zero results are returned. On a cursor_mark page past the last match, says the list is exhausted; otherwise echoes the query and suggests how to broaden it."
6 tool updates
- First observed
biorxiv_get_fulltext - First observed
biorxiv_get_preprint - First observed
biorxiv_get_published_version - First observed
biorxiv_list_categories - First observed
biorxiv_list_recent - First observed
biorxiv_search_preprints
Related MCP Connectors
Crossref MCP — wraps the Crossref REST API (academic papers, free, no auth)
PubMed MCP — wraps the NCBI E-utilities API (biomedical literature, free, no auth)
Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms.
Search 150M+ academic works, journals, and funders via Crossref API.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that turns a medRxiv DOI into clean markdown full text and provides free, relevance-ranked preprint search via Europe PMC.21Apache 2.0
- FlicenseAqualityDmaintenanceProvides access to bioRxiv and medRxiv preprints via a unified tool with seven methods, including keyword search, metadata retrieval, and statistics.1-
- AlicenseNot gradedqualityBmaintenanceEnables querying bioRxiv and medRxiv preprints, including metadata, publication status, and submission counts, through natural language or direct tool calls.26 npmMIT
- FlicenseNot gradedqualityDmaintenance🔍 Enable AI assistants to search and access bioRxiv papers through a simple MCP interface. The bioRxiv MCP Server provides a bridge between AI assistants and bioRxiv's preprint repository through the Model Context Protocol (MCP). It allows AI models to search for biology preprints and access their25-
Glama MCP Gateway
Add one secure layer between your agents and this server.