biorxiv-mcp-server
Server Details
Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.
- Status
- Healthy
- 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 targets a clearly distinct operation: metadata retrieval, full-text extraction, published-version crosswalk, category listing, recent listing, and keyword/author search. Cross-tool references (e.g., fulltext unavailable routes to biorxiv_get_preprint) further clarify boundaries.
All six tools share the biorxiv_ prefix and follow a consistent verb_noun snake_case pattern: get_fulltext, get_preprint, get_published_version, list_categories, list_recent, search_preprints. No style mixing or vague verbs.
Six tools is well-scoped for a preprint server: search, browse, category listing, metadata, full-text, and journal crosswalk are each represented without redundancy or bloat. The count feels intentional and complete for the domain.
The set covers the full read-side workflow: discovering preprints via search or recent lists, filtering by category, retrieving metadata/revisions, extracting full text, and resolving the published journal version. Cross-tool error routing and hints (e.g., checking publishedJournalDoi before calling get_published_version) create a cohesive surface with no obvious dead ends.
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. Resolves the latest version 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). 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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit (max characters) applied to this chunk. |
| doi | No | The resolved preprint DOI. |
| 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 latest revision). |
| 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 as reported by the extractor (not just the returned chunk). Absent when the extractor reported none. |
| 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?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses best-effort Markdown quality, approximate section structure, per-version caching for an hour, parallel server resolution, error behavior, and fallback conditions. This is rich behavioral context that an agent cannot infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries distinct information: extraction method, server resolution, quality caveat, paging/caching, error fallback, and journal alternative. It is front-loaded with the core retrieval purpose and progresses logically through operational details.
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 a tool with this complexity, the description covers the key operational facts: DOI resolution, paging through long articles, likely error modes and their fallback, and the approximate nature of the extracted structure. Since an output schema exists, detailed return-value documentation is not needed.
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?
With 100% schema description coverage, the baseline is 3, and the description adds value by explaining the paging protocol (offset = prior_offset + prior_length), the caching implications for later chunks, and how server resolution works. It complements the schema rather than merely restating it.
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 first sentence states a specific verb+resource: 'Retrieve a preprint's full text as best-effort Markdown, extracted from its rendered HTML article page,' and then names the concrete content extracted (abstract, sections, references). It differentiates itself from siblings by explicitly contrasting with biorxiv_get_preprint and the journal-published version, and by stating this is not structured JATS.
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 routing guidance: when a fulltext_unavailable error occurs, use biorxiv_get_preprint for metadata; when a preprint has a journal version, richer full text may live elsewhere. It also specifies when to use offset and limit for paging rather than one call, making the selection and invocation conditions clear.
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/…
| 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?
With readOnlyHint, openWorldHint, and idempotentHint already set, the description goes well beyond them by disclosing batch behavior, per-DOI failure reporting with reasons, retryable flags, rate-limit wait times, and the fact that all revisions are returned in one response. This is rich, non-obvious behavioral context that annotations alone do not 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 the core purpose and every subsequent sentence adds necessary behavioral or constraint information. It is dense but not bloated; each sentence earns its place.
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 a batch lookup tool with an output schema, the description covers the essential operational details: what is fetched, how revisions are returned, server selection, failure semantics, retryability, and DOI format requirements. Nothing critical is missing for an agent to select and invoke this tool 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 coverage is 100%, so the baseline is 3. The description adds value by specifying the DOI pattern (10.NNNN/…), the default behavior of server='both', and how failures are handled per DOI. These details go beyond the schema's parameter descriptions without duplicating them.
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 names a specific action ('Fetch full metadata, abstract, all revision history, JATS XML full-text links, and published-journal DOI') and a specific resource (preprints by DOI). It is clear and detailed, but it does not explicitly differentiate itself from siblings like biorxiv_get_fulltext or biorxiv_get_published_version, which could have overlapping responsibilities.
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 clear context for when to use the tool: given one or more preprint DOIs, it returns metadata and revisions. It also explains the server='both' default behavior. However, it does not explicitly state when NOT to use it or which sibling to choose instead, so it lacks explicit exclusion guidance.
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 the 10.1101/ DOI prefix, so server="both" (the default) checks both in parallel and the response reports which server answered. Returns a not-found error when no attempted server holds a published record — check biorxiv_get_preprint if you need to confirm the preprint is published 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). | |
| 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. |
| server | No | The server that returned this published record — never "both". |
| preprintDoi | No | The preprint DOI that was resolved. |
| 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). |
| preprintAuthors | No | Preprint author list. |
| preprintAbstract | No | Preprint abstract. |
| preprintCategory | No | Subject category. |
| publishedJournal | No | Name of the publishing journal. |
| 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 mark the tool as read-only, idempotent, and open-world, but the description adds meaningful behavior beyond that: the shared 10.1101/ prefix rationale, parallel checking when server='both', the server-reported-in-response behavior, and the not-found error condition. 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 well-structured: purpose first, then when-to-use, then parameter behavior, then error handling. Every sentence contributes necessary operational information, and nothing is redundant with the schema.
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?
The description is complete for a two-parameter tool with a rich output schema. It covers the target input, default behavior, error case, and relationship to the sibling tool. Given the annotations and output schema, nothing an agent needs to call this correctly 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?
The input schema already documents both parameters fully, so the baseline is 3. The description adds extra meaning for the `server` parameter by explaining why 'both' is the default, how parallel checking works, and how the shared DOI prefix makes server selection ambiguous. This raises it above 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 names a specific action and resource: 'Resolve a preprint DOI to its full journal publication record' and lists the returned fields. It clearly differentiates itself from biorxiv_get_preprint by focusing on the published journal crosswalk rather than the preprint record.
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 gives an explicit trigger condition: use when `publishedJournalDoi` from biorxiv_get_preprint is present and full crosswalk metadata is needed. It also tells the agent when not to use it and what to call instead: check biorxiv_get_preprint if confirmation of publication is the goal. Server selection guidance is also included.
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. 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.
| 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 cover readOnlyHint, idempotentHint, and openWorldHint, so the base safety profile is established. The description adds useful behavioral context beyond those annotations: the returned values are 'current valid values' and should be fetched before filtering, indicating the category list may change over time. This is valuable guidance without contradicting any 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?
Three sentences, each earning its place: the tool's purpose, how to use the output, and when to run it. The most important information is front-loaded, with no redundant or decorative language. This is an example of efficient, well-structured documentation.
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 a zero-parameter read-only tool with an output schema present, the description covers everything an agent needs: what values are returned, how to consume them, and when to call it. The existence of an output schema means return-value details are already structured, so no further explanation is required.
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 takes zero parameters, so there is nothing for the description to clarify about parameters. Per the baseline for zero-parameter tools, this dimension is trivially satisfied and needs no compensation. The description appropriately focuses on the output semantics instead.
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 resource: 'List valid subject category strings for bioRxiv and medRxiv.' It clearly distinguishes this tool from its siblings by identifying categories as its domain, not fulltext, preprints, or search. The purpose is unambiguous and tied to a concrete use case.
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 agent when to use this tool: before filtering with biorxiv_list_recent, and how to apply the result (as the `category` filter value). It names the sibling tool directly and gives an actionable sequence, leaving no ambiguity about its role in the workflow.
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Integer page offset (0, 30, 60, …). Defaults to 0 (first page). | |
| server | No | Server to query. "both" fans out to bioRxiv and medRxiv in parallel. | both |
| category | No | Subject category 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). |
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 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?
Goes far beyond the readOnlyHint/openWorldHint annotations: discloses fixed 30-per-page pagination, integer-offset cursor semantics, per-server cursor state under server="both", partial-failure semantics (one server failing yields a partial result with failed[]), and full-failure semantics (abort with retryable upstream_unavailable/rate_limited). Even explains the rationale (empty-page ambiguity), which materially helps an agent interpret results and decide retries. Consistent with annotations — no contradiction.
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?
Six sentences, each earning its place: purpose first, then pagination mechanics, then dual-server pagination, then partial and full failure modes, then category routing. It is front-loaded and logically ordered. The length is fully justified by the genuinely complex behavioral semantics (partial results, per-server cursors, retryable errors) that an agent must understand to use the tool correctly.
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 an output schema exists (return shape need not be described) and annotations cover the safety profile, the description covers every operationally critical aspect: page size, cursor stepping, dual-server pagination, partial vs. aborted failure, retryable error types, and where to obtain valid category strings. Nothing an agent needs to invoke or interpret this tool correctly 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 coverage is 100%, so baseline is 3; the description adds genuine value on top. For `cursor` it explains the fixed page size and offset stepping (0, 30, 60…); for `server` it details the 'both' fan-out consequences, per-server pagination, and failure behavior; for `category` it routes to the authoritative source. Only start_date/end_date add nothing beyond the schema, which is fine since the schema already specifies YYYY-MM-DD.
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+resource+scope: '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: search_preprints (query-based), get_preprint/get_fulltext/get_published_version (single-item retrieval), and list_categories (categories, not preprints).
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 intended use context is clear — browsing preprints by date interval with optional server/category scoping — and it explicitly routes to biorxiv_list_categories for valid category values. However, it never contrasts itself with biorxiv_search_preprints or states when NOT to use this tool, leaving the list-vs-search decision to inference.
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. 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Recovery hint when zero results are returned — echoes query and suggests how to broaden. |
| 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?
Annotations already signal read-only and open-world behavior, but the description adds substantial value: EuropePMC indexing delay of 1–2 days, rate-limit failure semantics with retryable errors, and enrichment failure handling via enrichment_error: "rate_limited". 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?
Every sentence earns its place: core behavior, parameter combination rule, recency caveat with alternative, and error behavior. The most important functional information is front-loaded, and the content is dense without fluff.
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?
The description is complete for a search tool with a rich output schema and annotations. It covers behavior, default scope, timing caveats, error handling, and the key alternative, leaving nothing necessary 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 coverage is 100%, so the baseline is 3. The description does not meaningfully add beyond the schema: the AUTH mapping and ANDing of author is already in the author parameter description, and the server default is already in the server parameter description. The description reinforces usage constraints but does not introduce new parameter semantics.
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 states a specific verb and resource: search preprints by keyword and/or author, with EuropePMC relevance ranking and bioRxiv/medRxiv metadata enrichment. It is clearly differentiated from siblings like biorxiv_get_preprint and biorxiv_get_fulltext by framing this as a search/enumerate operation, and it even names biorxiv_list_recent as the alternative for very recent preprints.
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 usage context: supply a keyword, an author, or both; author is ANDed with the keyword. It also gives a concrete when-not-to-use rule by directing users to biorxiv_list_recent for preprints posted within the last day, and it notes the default server coverage.
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.
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
bioRxiv + medRxiv preprint server API
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.
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 gradedqualityCmaintenanceEnables querying bioRxiv and medRxiv preprints, including metadata, publication status, and submission counts, through natural language or direct tool calls.5 npmMIT
- FlicenseNot gradedqualityFmaintenance🔍 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.