{"name":"io.github.cyanheads/biorxiv-mcp-server","slug":"cyanheads-biorxiv-mcp-server","title":null,"description":"Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.","url":"https://mcp.market/server/cyanheads-biorxiv-mcp-server","rating":null,"grade":"A","score":93,"certified":false,"status":"active","category":"seo","tags":["seo","search"],"presence":{"score":27,"stars":4,"forks":1,"downloads_week":null,"last_push_at":"2026-09-19T12:34:39.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/cyanheads/biorxiv-mcp-server","website":null,"version":"0.2.7","remotes":[{"type":"streamable-http","url":"https://biorxiv.caseyjhand.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/biorxiv-mcp-server","version":"0.2.7","runtimeHint":"bun","transport":{"type":"stdio"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:stdio","type":"positional"}],"environmentVariables":[{"description":"Contact email for User-Agent header — optional, for polite API access.","format":"string","name":"BIORXIV_MAILTO"},{"description":"bioRxiv website base URL — source of rendered full-text HTML pages for biorxiv_get_fulltext.","format":"string","default":"https://www.biorxiv.org","name":"BIORXIV_WEB_BASE_URL"},{"description":"medRxiv website base URL — source of rendered full-text HTML pages for biorxiv_get_fulltext.","format":"string","default":"https://www.medrxiv.org","name":"MEDRXIV_WEB_BASE_URL"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]},{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/biorxiv-mcp-server","version":"0.2.7","runtimeHint":"bun","transport":{"type":"streamable-http","url":"http://localhost:3010/mcp"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:http","type":"positional"}],"environmentVariables":[{"description":"Contact email for User-Agent header — optional, for polite API access.","format":"string","name":"BIORXIV_MAILTO"},{"description":"bioRxiv website base URL — source of rendered full-text HTML pages for biorxiv_get_fulltext.","format":"string","default":"https://www.biorxiv.org","name":"BIORXIV_WEB_BASE_URL"},{"description":"medRxiv website base URL — source of rendered full-text HTML pages for biorxiv_get_fulltext.","format":"string","default":"https://www.medrxiv.org","name":"MEDRXIV_WEB_BASE_URL"},{"description":"The hostname for the HTTP server.","format":"string","default":"127.0.0.1","name":"MCP_HTTP_HOST"},{"description":"The port to run the HTTP server on.","format":"string","default":"3010","name":"MCP_HTTP_PORT"},{"description":"The endpoint path for the MCP server.","format":"string","default":"/mcp","name":"MCP_HTTP_ENDPOINT_PATH"},{"description":"Authentication mode to use: 'none', 'jwt', or 'oauth'.","format":"string","default":"none","name":"MCP_AUTH_MODE"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]}],"tools":[{"name":"biorxiv_get_fulltext","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"doi":{"type":"string","description":"Preprint DOI (e.g. 10.1101/2024.05.28.596311 or 10.64898/2026.05.07.723463). The latest version is resolved automatically."},"server":{"default":"both","description":"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.","type":"string","enum":["biorxiv","medrxiv","both"]},"offset":{"default":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).","type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"default":20000,"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.","type":"integer","minimum":1,"maximum":50000}},"required":["doi"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"biorxiv_get_preprint","description":"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/…","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dois":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","description":"Preprint DOI (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463)."},"description":"One or more preprint DOIs to look up (max 10)."},"server":{"default":"both","description":"Server to query. \"both\" checks bioRxiv and medRxiv in parallel for each DOI.","type":"string","enum":["biorxiv","medrxiv","both"]}},"required":["dois"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"biorxiv_get_published_version","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"doi":{"type":"string","description":"Preprint DOI to resolve (e.g. 10.1101/2024.01.15.575123 or 10.64898/2026.05.07.723463)."},"server":{"default":"both","description":"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.","type":"string","enum":["biorxiv","medrxiv","both"]}},"required":["doi"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"biorxiv_list_categories","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"biorxiv_list_recent","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start of the date interval (YYYY-MM-DD)."},"end_date":{"type":"string","description":"End of the date interval (YYYY-MM-DD)."},"server":{"default":"both","description":"Server to query. \"both\" fans out to bioRxiv and medRxiv in parallel.","type":"string","enum":["biorxiv","medrxiv","both"]},"category":{"description":"Subject category filter. Use biorxiv_list_categories for valid values.","type":"string"},"cursor":{"default":0,"description":"Integer page offset (0, 30, 60, …). Defaults to 0 (first page).","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start_date","end_date"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"biorxiv_search_preprints","description":"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\".","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Keyword search query. Optional when author is provided — supply at least one of query or author.","type":"string"},"author":{"description":"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\").","type":"string"},"server":{"default":"both","description":"Server scope for enrichment. \"both\" checks all matching DOIs on both servers.","type":"string","enum":["biorxiv","medrxiv","both"]},"date_from":{"description":"Earliest first-publication date filter (YYYY-MM-DD).","type":"string"},"date_to":{"description":"Latest first-publication date filter (YYYY-MM-DD).","type":"string"},"limit":{"default":25,"description":"Maximum results to return (1–100). Defaults to 25.","type":"integer","minimum":1,"maximum":100},"cursor_mark":{"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.","type":"string"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}}],"scan":{"score":93,"grade":"A","scanned_at":"2026-09-19T15:56:44.157Z","report":{"scannerVersion":"0.1.3","scannedAt":"2026-09-19T15:56:44.304Z","components":{"code":{"score":25,"max":25,"notes":["32 source files scanned","32 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 460ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://biorxiv.caseyjhand.com/mcp","reachable":true,"authRequired":false,"latencyMs":460,"serverInfo":{"name":"biorxiv-mcp-server","version":"0.2.7"}}],"packages":[{"registryType":"npm","identifier":"@cyanheads/biorxiv-mcp-server","version":"0.2.7","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-19T12:29:18.352Z","repositoryUrl":"git+https://github.com/cyanheads/biorxiv-mcp-server.git"},{"registryType":"npm","identifier":"@cyanheads/biorxiv-mcp-server","version":"0.2.7","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-19T12:29:18.352Z","repositoryUrl":"git+https://github.com/cyanheads/biorxiv-mcp-server.git"}],"repo":{"found":true,"owner":"cyanheads","repo":"biorxiv-mcp-server","archived":false,"pushedAt":"2026-09-19T12:34:39Z","stars":4,"forks":1,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10339515?v=4","ownerCreatedAt":"2014-12-29T13:01:12Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/10339515?v=4&s=128","source":"github"},"presence":{"stars":4,"forks":1,"downloadsWeek":null,"license":"NOASSERTION","lastPushAt":"2026-09-19T12:34:39.000Z","score":27}}}},"grade_history":[],"reviews":[]}