Releases: cyanheads/biorxiv-mcp-server
Release list
v0.1.15: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Adopts the framework patch line and re-syncs the bundled skills and devcheck scripts.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9 — adds thectx.contentimage/audio collector (bytes ride content[] only), classifies SELECT-shaped Canvas SQL prepare failures asinvalid_sqlwith DuckDB binder detail, fixesDuckdbProvider.describe({ tableName })ambiguous-column errors, corrects OTEL_SERVICE_NAME seeding docs@biomejs/biome^2.4.16 → ^2.5.0@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
Added:
scripts/check-dependency-specifiers.tsdevcheck step — fails on floating specifiers (latest,*, dist-tags) in package.json and bun.lock's workspaces map
Changed:
scripts/lint-packaging.ts— validates plugin manifests (descriptions, unscoped machine name, full package name in the npx install arg)devcheck.config.json— addedpackaging.pluginManifestsflag gating the plugin-manifest checks- Bundled skills + devcheck scripts re-synced — fresh-scaffold git-dependent check guards, check-skill-versions worktree-deletion guard, seven upstream SKILL.md version bumps
144 tests pass; bun run devcheck clean.
v0.1.14: mcp-ts-core ^0.10.6 adoption
mcp-ts-core ^0.10.6 adoption
Framework adoption maintenance pass: explicit server identity, the new ctx.enrich.total() API in search, Dockerfile hardening, and bundle/lint guards.
Changed:
- createApp() sets name and title explicitly to biorxiv-mcp-server (unscoped machine identity on every surface)
- biorxiv_search_preprints writes the EuropePMC grand total via ctx.enrich.total() (field totalFound → totalCount)
- lint:packaging gains bundle-content, post-bundle, and identity guards; antipattern check flags z.coerce.boolean() on env flags
Added:
- Dockerfile HEALTHCHECK (bun-native fetch to /healthz) and APP_VERSION OCI label
- scripts/clean-mcpb.ts strips dependency-shipped agent docs from the .mcpb bundle
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @types/node ^25.9.1 → ^25.9.3
144 tests pass; bun run devcheck clean.
v0.1.13: Fix field references and surface enrichment failure reason
Fix field references and surface enrichment failure reason
biorxiv_get_published_version description referenced a non-existent field ('published')
instead of the normalized output field ('publishedJournalDoi'); recovery hint told agents
to look for 'NA' that normalization already strips. biorxiv_search_preprints now exposes
enrichment_error ('service_error' | 'not_found') so agents can decide whether to retry or
accept the EuropePMC fallback as authoritative.
Fixed:
- biorxiv_get_published_version description and doi_not_found recovery hint corrected (#23)
- biorxiv_search_preprints enriched=false cases now distinguishable via enrichment_error (#21)
Added:
- enrichment_error field on biorxiv_search_preprints output (#21)
- format() renders human-readable failure reason per result (#21)
- 6 new tests for enrichment_error values and format rendering
144 tests pass; bun run devcheck clean.
v0.1.12: adopt @cyanheads/mcp-ts-core ^0.9.21
adopt @cyanheads/mcp-ts-core ^0.9.21
Adopts three framework fixes and re-syncs skills to the new framework version.
Changed:
- Per-request log context — per-request logs and traces now carry fresh request + trace/span IDs instead of the frozen boot context
- fetchWithTimeout strips query-string secrets (e.g. ?api_key=) from error messages and logs
- withRetry fails fast on non-retryable errors; ctx.fail auto-populates the retryable flag
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21vitest^4.1.7 → ^4.1.8
139 tests pass; bun run devcheck clean.
v0.1.11: remove dead DataCanvas integration from biorxiv_list_recent
remove dead DataCanvas integration from biorxiv_list_recent
The biorxiv_list_recent tool carried a DataCanvas spillover handler (canvas_id
output field, spillover import, format() canvas line) that was never wired —
CANVAS_PROVIDER_TYPE was never set in index.ts, no consumer existed.
Removed:
- canvas_id output field, spillover handler, and spillover import from biorxiv_list_recent (#24)
- CANVAS_PROVIDER_TYPE references from README.md, .env.example, and docs/design.md
139 tests pass; bun run devcheck clean.
v0.1.10: enrichment on search/list tools, true EuropePMC hitCount
enrichment on search/list tools, true EuropePMC hitCount
biorxiv_search_preprints and biorxiv_list_recent now surface query/filter echoes,
true result totals, and empty-result guidance in a typed enrichment block reaching
both structuredContent and content[] clients.
Changed:
- biorxiv_search_preprints enrichment.totalFound now carries raw EuropePMC hitCount (true upstream total, not result count) (#22)
- biorxiv_search_preprints enrichment.queryEcho echoes query, server, date range, and limit (#22)
- biorxiv_search_preprints enrichment.notice for empty-result recovery hints
- biorxiv_list_recent enrichment.notice for empty-result and cursor-overshoot hints
- biorxiv_list_recent enrichment.categoryNote for per-server routing notes
- output schema: total_from_search, message (search), message, category_note (list_recent) removed — replaced by enrichment block
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.13 → ^0.9.16
38 tests pass; bun run devcheck clean.
v0.1.9: mcp-ts-core ^0.9.13, MCPB placeholder fix, landing inventory
mcp-ts-core ^0.9.13, MCPB placeholder fix, landing inventory
Adopts @cyanheads/mcp-ts-core ^0.9.9 → ^0.9.13 and applies two
targeted server fixes surfaced during the framework adoption pass.
Changed:
MCP_HTTP_MAX_BODY_BYTES— configurable inbound body cap (default 1 MiB); oversized requests rejected with 413 before body parsing- HTTP session-init gate — non-
initializerequests withoutMcp-Session-Idnow rejected with 400 - Expected client errors (401/403/400/404) now log at warning, not full error pipeline with stack traces
GET /mcpsurfacespackage.jsonkeywordson the status endpointlanding.requireAuth: false— hosted server serves full tool/resource inventory to unauthenticated callersBIORXIV_MAILTOpreprocessed to strip MCPB placeholder strings beforez.email()validates (prevents crash when optional field left blank in Claude Desktop)biorxiv_search_preprints— EuropePMC failure raised viactx.fail('search_unavailable')instead of bareserviceUnavailable()factory
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.9 → ^0.9.13@biomejs/biome^2.4.15 → ^2.4.16
35 tests pass; bun run devcheck clean.
v0.1.8: services/shared.ts extraction, search-preprints format() simplification, mcp-ts-core ^0.9.9
services/shared.ts extraction, search-preprints format() simplification, mcp-ts-core ^0.9.9
Code simplification: shared helper utilities (asRc, detectHtmlError, SERVER_VERSION) extracted from biorxiv-service.ts and europe-pmc-service.ts into a single services/shared.ts module. search-preprints format() refactored from ~40 lines to 3 by hoisting EnrichedPreprint to module scope. biorxiv-list-recent drops the now-unused PreprintForFormat mapped type. Skills synced from framework.
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.6 → ^0.9.9@hono/node-server^2.0.3 → ^2.0.4 (transitive, via mcp-ts-core)
Changed:
services/shared.tsextracted —asRc,detectHtmlError,SERVER_VERSIONshared across both service filesSERVER_VERSIONcorrected from stale'0.1.0'to current versionbiorxiv-search-preprintsformat()simplified;EnrichedPreprinttype hoisted to module scopebiorxiv-list-recentPreprintForFormatmapped type removedskills/git-wrapupadded (v1.0, synced from mcp-ts-core ^0.9.8)skills/release-and-publishv2.5 → v2.6 (artifact verification step, structured push guidance)CLAUDE.md/AGENTS.md— Close-the-loop rule added, framework version updated
35 tests pass; bun run devcheck clean.
v0.1.7: server=both category routing, medRxiv DOI enrichment
server=both category routing, medRxiv DOI enrichment
Two routing bugs fixed in biorxiv_list_recent and biorxiv_search_preprints.
Fixed:
- biorxiv_list_recent: server="both" with a server-specific category now routes the filter only to the server whose taxonomy includes it; category_note output field added to explain which server the filter applied to (#17)
- biorxiv_search_preprints: enrichment with server="medrxiv" no longer routes through bioRxiv; routing based on input.server, not DOI prefix — 10.1101/ is shared by both servers (#18)
- biorxiv-service: per-server isValidCategory now uses pre-built Set instances
35 tests pass; bun run devcheck clean.
v0.1.6: Field-test bug fixes
Field-test bug fixes
Fixed error contracts, search enrichment, validation, and formatting across bioRxiv tools.
Fixed:
- biorxiv_get_preprint / biorxiv_get_published_version: recovery hints updated to include 10.64898/ prefix
- biorxiv_search_preprints: date validation errors now use ctx.fail() with recovery hint
- biorxiv_search_preprints: server="both" query scoped to bioRxiv/medRxiv publishers
- biorxiv-service: funder "NA" string normalized to absent
- biorxiv_get_preprint: format-invalid DOIs in batch route to failed[] instead of aborting
- biorxiv_list_recent: category validation scoped to target server taxonomy
- biorxiv_search_preprints: whitespace-only query rejected via trim refine
- biorxiv_list_recent: cursor-past-total message distinguished from empty filter results
- biorxiv_list_recent: category input trimmed before taxonomy validation
35 tests; bun run devcheck clean.