MCP 서버

biorxiv-mcp-server

io.github.cyanheads/biorxiv-mcp-server
과학 및 엔지니어링 검색 및 리서치 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches and retrieves metadata, full text, revisions, and publication links for bioRxiv and medRxiv preprints.

biorxiv_get_fulltext
Get Preprint Full Text
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.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['doi'], 'properties': {'doi': {'type': 'string', 'description': '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 (â\x80¦596311v2) requests that version. Without one, the latest version is resolved automatically.'}, 'limit': {'type': 'integer', 'default': 20000, 'maximum': 50000, 'minimum': 1, 'description': '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': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': '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': {'enum': ['biorxiv', 'medrxiv', 'both'], 'type': 'string', 'default': 'both', 'description': 'Server the preprint was posted on. "both" (default) checks bioRxiv and medRxiv in parallel to resolve the DOI â\x80\x94 the full-text fetch itself only ever targets whichever server resolved, and the output server field names it.'}, 'version': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Preprint version to read (1, 2, â\x80¦) â\x80\x94 the revision numbers biorxiv_get_preprint lists. Omit for the latest version. Must match a vN suffix on the DOI when both are given.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['doi', 'server', 'version', 'content', 'contentFormat', 'wordCount', 'sourceUrl', 'offset', 'length', 'totalChars', 'remainingChars', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The limit (max characters) applied to this chunk.'}, 'doi': {'type': 'string', 'description': 'The resolved preprint DOI, in bare form.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_doi_format', 'version_conflict', 'version_not_found', 'doi_not_found', 'upstream_unavailable', 'rate_limited', 'fulltext_unavailable', 'offset_out_of_range'], 'description': '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 â\x80\x94 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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Characters returned in this chunk.'}, 'title': {'type': 'string', 'description': 'Article title detected during extraction. Absent when the page exposed none.'}, 'length': {'type': 'number', 'description': 'Number of characters returned in this chunk.'}, 'notice': {'type': 'string', 'description': 'Paging guidance when the content was truncated â\x80\x94 how to fetch the next chunk.'}, 'offset': {'type': 'number', 'description': 'Character offset into the full extracted text where this chunk begins.'}, 'server': {'enum': ['biorxiv', 'medrxiv'], 'type': 'string', 'description': 'Server the preprint was resolved on.'}, 'content': {'type': 'string', 'description': 'The requested chunk of full text as best-effort Markdown extracted from the rendered HTML page. Section structure is approximate â\x80\x94 this is not JATS.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more text follows this chunk. When true, call again with offset = offset + length.'}, 'version': {'type': 'string', 'description': 'Preprint version whose full text was retrieved â\x80\x94 the requested one, or the latest revision when none was requested. Pass it back as version when paging.'}, 'sourceUrl': {'type': 'string', 'description': 'The full-text HTML page the content was extracted from.'}, 'truncated': {'type': 'boolean', 'description': 'True when this chunk was capped by limit and more text remains.'}, 'wordCount': {'type': 'number', 'description': 'Approximate word count of the FULL extracted article, not just the returned chunk â\x80\x94 whitespace-delimited tokens of the same Markdown text that totalChars measures, so Markdown markers such as # and - count too.'}, 'totalChars': {'type': 'number', 'description': 'Total characters in the full extracted text. Use with offset and length to page through long articles.'}, 'contentFormat': {'type': 'string', 'const': 'html-markdown', 'description': 'How content was produced: Markdown extracted from the rendered HTML article page (constant).'}, 'remainingChars': {'type': 'number', 'description': 'Characters remaining after this chunk (totalChars - offset - length). 0 means this chunk reaches the end.'}}, 'additionalProperties': False}
biorxiv_get_preprint
Get Preprint by DOI
Fetch full metadata, abstract, all revision history, JATS XML full-text links, and published-journal DOI for one or more preprints by DOI. Each DOI returns all revisions in one response. When server="both" (default), each DOI is checked against both bioRxiv and medRxiv; the response includes which server the preprint was found on. Failed lookups are reported per-DOI 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.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dois'], 'properties': {'dois': {'type': 'array', 'items': {'type': 'string', 'description': '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.'}, 'maxItems': 10, 'minItems': 1, 'description': 'One or more preprint DOIs to look up (max 10).'}, 'server': {'enum': ['biorxiv', 'medrxiv', 'both'], 'type': 'string', 'default': 'both', 'description': 'Server to query. "both" checks bioRxiv and medRxiv in parallel for each DOI.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['preprints', 'failed']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['doi_not_found', 'invalid_doi_format', 'upstream_unavailable', 'rate_limited'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'failed': {'type': 'array', 'items': {'type': 'object', 'required': ['doi', 'error', 'reason', 'retryable'], 'properties': {'doi': {'type': 'string', 'description': 'DOI that failed to resolve â\x80\x94 in bare form, or exactly as sent for invalid_doi_format.'}, 'error': {'type': 'string', 'description': 'Error description.'}, 'reason': {'enum': ['not_found', 'invalid_doi_format', 'upstream_unavailable', 'rate_limited'], 'type': 'string', 'description': 'Why this DOI failed: not_found (every attempted server answered with an empty collection), invalid_doi_format (the DOI does not match 10.NNNN/â\x80¦), upstream_unavailable (a server never answered, so absence could not be established), or rate_limited (api.biorxiv.org returned HTTP 429 â\x80\x94 the same as upstream_unavailable except that the origin named a wait).'}, 'retryable': {'type': 'boolean', 'description': 'True when retrying this DOI may succeed â\x80\x94 set for upstream_unavailable and rate_limited. A not_found or invalid_doi_format entry will not change on retry.'}, 'retryAfter': {'type': 'number', 'description': 'Seconds api.biorxiv.org asked the caller to wait before the next request. Present only on a rate_limited entry whose response carried a usable Retry-After header.'}}, 'description': 'A DOI that failed to resolve.', 'additionalProperties': False}, 'description': 'DOIs that could not be resolved, with per-DOI error details.'}, 'preprints': {'type': 'array', 'items': {'type': 'object', 'required': ['doi', 'revisions'], 'properties': {'doi': {'type': 'string', 'description': 'The requested DOI in bare form (any URL, doi: prefix, or suffix removed).'}, 'revisions': {'type': 'array', 'items': {'type': 'object', 'required': ['doi'], 'properties': {'doi': {'type': 'string', 'description': 'Preprint DOI.'}, 'date': {'type': 'string', 'description': 'Revision date (YYYY-MM-DD).'}, 'type': {'type': 'string', 'description': 'Preprint type.'}, 'title': {'type': 'string', 'description': 'Title.'}, 'awards': {'type': 'array', 'items': {'type': 'string', 'description': 'One award value as upstream records it.'}, 'description': 'Grant award numbers from the funding statement, verbatim and deduplicated â\x80\x94 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.'}, 'server': {'type': 'string', 'description': 'Source server (biorxiv or medrxiv).'}, 'authors': {'type': 'string', 'description': 'Author list.'}, 'license': {'type': 'string', 'description': 'License identifier.'}, 'version': {'type': 'string', 'description': 'Revision version number.'}, 'abstract': {'type': 'string', 'description': 'Abstract text.'}, 'category': {'type': 'string', 'description': 'Subject category.'}, 'jatsxmlUrl': {'type': 'string', 'description': 'URL to the JATS XML full-text.'}, 'authorCorresponding': {'type': 'string', 'description': 'Corresponding author name.'}, 'publishedJournalDoi': {'type': 'string', 'description': 'Published journal DOI when accepted.'}, 'authorCorrespondingInstitution': {'type': 'string', 'description': 'Corresponding author institution.'}}, 'description': 'A single preprint revision.', 'additionalProperties': False}, 'description': 'All revisions for this preprint, earliest first.'}}, 'description': 'A preprint and all its revisions.', 'additionalProperties': False}, 'description': 'Successfully resolved preprints with their full revision history.'}}, 'additionalProperties': False}
biorxiv_get_published_version
Get Published Journal Version
Resolve a preprint DOI to its full journal publication record — journal DOI, journal name, published date, and corresponding author details. Use when the preprint's `publishedJournalDoi` field from biorxiv_get_preprint is present and you need the full crosswalk metadata. 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.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['doi'], 'properties': {'doi': {'type': 'string', 'description': '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': {'enum': ['biorxiv', 'medrxiv', 'both'], 'type': 'string', 'default': 'both', 'description': 'Server the preprint was posted on. "both" (default) checks bioRxiv and medRxiv in parallel â\x80\x94 use it when the DOI alone does not tell you which server holds the preprint.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['preprintDoi', 'server']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['doi_not_found', 'invalid_doi_format', 'upstream_unavailable', 'rate_limited'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': "Present when publishedDoi came from the preprint's own record because the crosswalk had none: says why publishedJournal and publishedDate are absent."}, 'server': {'enum': ['biorxiv', 'medrxiv'], 'type': 'string', 'description': 'The server that returned this published record â\x80\x94 never "both".'}, 'preprintDoi': {'type': 'string', 'description': 'The preprint DOI that was resolved, in bare form.'}, 'preprintDate': {'type': 'string', 'description': 'Date the preprint was first posted.'}, 'publishedDoi': {'type': 'string', 'description': 'The journal publication DOI.'}, 'preprintTitle': {'type': 'string', 'description': 'Title of the preprint.'}, 'publishedDate': {'type': 'string', 'description': 'Journal publication date (YYYY-MM-DD). Absent when the crosswalk holds no record for this preprint â\x80\x94 see notice.'}, 'preprintAuthors': {'type': 'string', 'description': 'Preprint author list.'}, 'preprintAbstract': {'type': 'string', 'description': 'Preprint abstract.'}, 'preprintCategory': {'type': 'string', 'description': 'Subject category.'}, 'publishedJournal': {'type': 'string', 'description': 'Name of the publishing journal. Absent when the crosswalk holds no record for this preprint â\x80\x94 see notice.'}, 'preprintAuthorCorresponding': {'type': 'string', 'description': 'Corresponding author name.'}, 'preprintAuthorCorrespondingInstitution': {'type': 'string', 'description': 'Corresponding author institution.'}}, 'additionalProperties': False}
biorxiv_list_categories
List bioRxiv/medRxiv Categories
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.
읽기 전용 멱등성
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['biorxiv', 'medrxiv']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'biorxiv': {'type': 'array', 'items': {'type': 'string', 'description': 'Subject category name'}, 'description': 'bioRxiv subject categories'}, 'medrxiv': {'type': 'array', 'items': {'type': 'string', 'description': 'Subject category name'}, 'description': 'medRxiv subject categories'}}, 'additionalProperties': False}
biorxiv_list_recent
List Recent Preprints
List preprints posted or revised within a date interval, optionally scoped to one server or a subject category. Returns 30 preprints per page (fixed by the API); pass `cursor` as an integer offset (0, 30, 60, …) to step through additional pages. 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.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['start_date', 'end_date'], 'properties': {'cursor': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Integer page offset (0, 30, 60, â\x80¦). Defaults to 0 (first page).'}, 'funder': {'type': 'string', '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 â\x80\x94 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': {'enum': ['biorxiv', 'medrxiv', 'both'], 'type': 'string', 'default': 'both', 'description': 'Server to query. "both" fans out to bioRxiv and medRxiv in parallel.'}, 'category': {'type': 'string', 'description': 'Subject category filter, matched case-insensitively with "_" and "-" read as a space â\x80\x94 "Cell Biology", "cell biology", "cell_biology", and "cell-biology" are the same filter. Use biorxiv_list_categories for valid values.'}, 'end_date': {'type': 'string', 'description': 'End of the date interval (YYYY-MM-DD).'}, 'start_date': {'type': 'string', 'description': 'Start of the date interval (YYYY-MM-DD).'}, 'include_abstract': {'type': 'boolean', '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."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['preprints', 'pagination', 'failed']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_date_range', 'invalid_category', 'invalid_funder', 'upstream_unavailable', 'rate_limited'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'failed': {'type': 'array', 'items': {'type': 'object', 'required': ['server', 'error'], 'properties': {'error': {'type': 'string', 'description': 'What went wrong on that server.'}, 'server': {'enum': ['biorxiv', 'medrxiv'], 'type': 'string', 'description': 'Server whose listing request failed.'}}, 'description': 'A server that did not answer.', 'additionalProperties': False}, 'description': '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 â\x80\x94 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': {'type': 'string', 'description': '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 â\x80\x94 when nothing came back â\x80\x94 the applied filters and how to broaden them. All applicable qualifications are composed into one string.'}, 'preprints': {'type': 'array', 'items': {'type': 'object', 'required': ['doi'], 'properties': {'doi': {'type': 'string', 'description': 'Preprint DOI.'}, 'date': {'type': 'string', 'description': 'Posting or revision date (YYYY-MM-DD).'}, 'type': {'type': 'string', 'description': 'Preprint type.'}, 'title': {'type': 'string', 'description': 'Title of the preprint.'}, 'awards': {'type': 'array', 'items': {'type': 'string', 'description': 'One award value as upstream records it.'}, 'description': 'Grant award numbers from the funding statement, verbatim and deduplicated â\x80\x94 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.'}, 'server': {'type': 'string', 'description': 'Source server (biorxiv or medrxiv).'}, 'authors': {'type': 'string', 'description': 'Author list.'}, 'license': {'type': 'string', 'description': 'License identifier.'}, 'version': {'type': 'string', 'description': 'Revision version number.'}, 'abstract': {'type': 'string', 'description': 'Abstract text. Present only when include_abstract is true.'}, 'category': {'type': 'string', 'description': 'Subject category.'}, 'jatsxmlUrl': {'type': 'string', 'description': 'URL to the JATS XML full-text.'}, 'authorCorresponding': {'type': 'string', 'description': 'Corresponding author name.'}, 'publishedJournalDoi': {'type': 'string', 'description': 'Published journal DOI when this preprint has been accepted.'}, 'authorCorrespondingInstitution': {'type': 'string', 'description': 'Corresponding author institution.'}}, 'description': 'A single preprint entry.', 'additionalProperties': False}, 'description': 'Preprints in the requested date interval.'}, 'pagination': {'type': 'object', 'properties': {'biorxiv': {'type': 'object', 'required': ['cursor', 'total'], 'properties': {'total': {'type': 'number', 'description': 'Total preprints available on bioRxiv for these filters.'}, 'cursor': {'type': 'number', 'description': 'Current cursor (offset used for this page).'}, 'exhausted': {'type': 'boolean', 'description': 'True when this cursor is past bioRxiv\'s last page: no records came back at a non-zero cursor. The API reports total 0 for an out-of-range cursor, so "total" is not the interval total here â\x80\x94 step back to a lower cursor to read it.'}, 'nextCursor': {'type': 'number', 'description': 'Cursor value for the next page, if any.'}}, 'description': 'bioRxiv pagination state. Present when server is "biorxiv" or "both".', 'additionalProperties': False}, 'medrxiv': {'type': 'object', 'required': ['cursor', 'total'], 'properties': {'total': {'type': 'number', 'description': 'Total preprints available on medRxiv for these filters.'}, 'cursor': {'type': 'number', 'description': 'Current cursor (offset used for this page).'}, 'exhausted': {'type': 'boolean', 'description': 'True when this cursor is past medRxiv\'s last page: no records came back at a non-zero cursor. The API reports total 0 for an out-of-range cursor, so "total" is not the interval total here â\x80\x94 step back to a lower cursor to read it.'}, 'nextCursor': {'type': 'number', 'description': 'Cursor value for the next page, if any.'}}, 'description': 'medRxiv pagination state. Present when server is "medrxiv" or "both", except under a funder filter, which queries bioRxiv only.', 'additionalProperties': False}}, 'description': 'Per-server pagination state. Advance each server independently.', 'additionalProperties': False}, 'categoryNote': {'type': 'string', 'description': '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.'}}, 'additionalProperties': False}
biorxiv_search_preprints
Search Preprints by Keyword
Search preprints by keyword and/or author using EuropePMC for relevance ranking, then enrich matching DOIs with full bioRxiv/medRxiv metadata. Provide a keyword query, an author name, or both — author maps to an EuropePMC AUTH: field query and is ANDed with the keyword query. Covers both servers by default. EuropePMC indexes new preprints within 1–2 days of posting; for preprints posted within the last day, prefer biorxiv_list_recent. 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".
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Maximum results to return (1â\x80\x93100). Defaults to 25.'}, 'query': {'type': 'string', 'description': 'Keyword search query. Optional when author is provided â\x80\x94 supply at least one of query or author.'}, 'author': {'type': 'string', 'description': 'Author name to filter by, mapped to an EuropePMC AUTH:"â\x80¦" field query and ANDed with the keyword query. Optional when query is provided (e.g. "Jennifer Doudna").'}, 'server': {'enum': ['biorxiv', 'medrxiv', 'both'], 'type': 'string', 'default': 'both', 'description': 'Server scope for enrichment. "both" checks all matching DOIs on both servers.'}, 'date_to': {'type': 'string', 'description': 'Latest first-publication date filter (YYYY-MM-DD).'}, 'date_from': {'type': 'string', 'description': 'Earliest first-publication date filter (YYYY-MM-DD).'}, 'cursor_mark': {'type': 'string', 'description': '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': {'type': 'boolean', '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."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['preprints', 'partial_results', 'totalCount', 'queryEcho']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_date_range', 'search_unavailable', 'invalid_cursor_mark', 'rate_limited'], 'description': '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 â\x80\x94 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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': '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': {'type': 'array', 'items': {'type': 'object', 'required': ['doi', 'enriched'], 'properties': {'doi': {'type': 'string', 'description': 'Preprint DOI.'}, 'date': {'type': 'string', 'description': 'Posting or revision date.'}, 'type': {'type': 'string', 'description': 'Preprint type.'}, 'title': {'type': 'string', 'description': 'Preprint title.'}, 'awards': {'type': 'array', 'items': {'type': 'string', 'description': 'One award value as upstream records it.'}, 'description': 'Grant award numbers from the funding statement, verbatim and deduplicated â\x80\x94 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.'}, 'server': {'type': 'string', 'description': 'Source server (biorxiv or medrxiv).'}, 'authors': {'type': 'string', 'description': 'Author list.'}, 'license': {'type': 'string', 'description': 'License identifier.'}, 'version': {'type': 'string', 'description': 'Latest revision version.'}, 'abstract': {'type': 'string', 'description': 'Abstract text. Omitted when include_abstract is false. On a EuropePMC-fallback record, absent when EuropePMC holds none or the abstract lookup failed â\x80\x94 the notice says when it failed.'}, 'category': {'type': 'string', 'description': 'Subject category.'}, 'enriched': {'type': 'boolean', 'description': 'True when full bioRxiv metadata was available; false for EuropePMC-only fallback.'}, 'jatsxmlUrl': {'type': 'string', 'description': 'URL to the JATS XML full-text.'}, 'revisionCount': {'type': 'number', 'description': 'Total revision count when enriched from bioRxiv.'}, 'enrichment_error': {'enum': ['service_error', 'not_found', 'rate_limited'], 'type': 'string', 'description': 'Reason enrichment was unavailable: "service_error" (transient â\x80\x94 retry may help), "rate_limited" (api.biorxiv.org returned HTTP 429 â\x80\x94 wait before retrying, and expect the other preprint metadata tools to be limited too), or "not_found" (DOI not indexed on target server â\x80\x94 EuropePMC fallback is authoritative). Only present when enriched is false.'}, 'authorCorresponding': {'type': 'string', 'description': 'Corresponding author.'}, 'publishedJournalDoi': {'type': 'string', 'description': 'Published journal DOI when accepted.'}, 'authorCorrespondingInstitution': {'type': 'string', 'description': 'Corresponding author institution.'}}, 'description': 'A single search result.', 'additionalProperties': False}, 'description': 'Search results, ranked by EuropePMC relevance.'}, 'queryEcho': {'type': 'object', 'required': ['server', 'limit'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum results requested.'}, 'query': {'type': 'string', 'description': 'The keyword query sent to EuropePMC, if any.'}, 'author': {'type': 'string', 'description': 'The author filter applied as an AUTH: clause, if any.'}, 'server': {'type': 'string', 'description': 'Server scope used for enrichment.'}, 'date_to': {'type': 'string', 'description': 'date_to filter applied, if any.'}, 'date_from': {'type': 'string', 'description': 'date_from filter applied, if any.'}, 'cursor_mark': {'type': 'string', 'description': 'cursor_mark page token applied, if any.'}}, 'description': 'Echo of the parameters used to produce this result set â\x80\x94 lets callers verify what was sent.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total preprints matching the query in EuropePMC (hitCount) â\x80\x94 the true upstream grand total, not the number of results returned.'}, 'nextCursorMark': {'type': 'string', 'description': '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': {'type': 'boolean', 'description': 'True when one or more DOIs failed bioRxiv enrichment and fell back to EuropePMC metadata.'}}, 'additionalProperties': False}
변경됨
biorxiv_get_fulltext
2026년 9월 24일 2:40 AM
변경됨
biorxiv_search_preprints
2026년 9월 24일 2:40 AM
변경됨
biorxiv_get_published_version
2026년 9월 24일 2:40 AM
변경됨
biorxiv_get_preprint
2026년 9월 24일 2:40 AM
변경됨
biorxiv_list_recent
2026년 9월 24일 2:40 AM
변경됨
biorxiv_list_categories
2026년 9월 24일 2:40 AM
추가됨
biorxiv_get_fulltext
2026년 9월 20일 2:40 AM
추가됨
biorxiv_search_preprints
2026년 9월 20일 2:40 AM
추가됨
biorxiv_get_published_version
2026년 9월 20일 2:40 AM
추가됨
biorxiv_get_preprint
2026년 9월 20일 2:40 AM
추가됨
biorxiv_list_recent
2026년 9월 20일 2:40 AM
추가됨
biorxiv_list_categories
2026년 9월 20일 2:40 AM