Releases: cyanheads/arxiv-mcp-server
v1.2.15: mcp-ts-core 0.10.7–0.10.9 maintenance
mcp-ts-core 0.10.7–0.10.9 maintenance
Dependency refresh and framework adoption — no server source changes.
Changed:
- Adopt
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9: newcheck-dependency-specifiersdevcheck step (rejects floating specifiers in package.json + bun.lock workspaces),lint:packagingplugin-manifest checks,ctx.contentmedia collector, DuckDB SQL-gateinvalid_sqlclassification + ambiguous-columndescribe()fix, and fresh-scaffold devcheck guards. - Enable
devcheck.config.jsonpackaging.pluginManifests; addscripts/check-dependency-specifiers.ts; re-sync 6 framework scripts and 14 skills.
Dependencies:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9fast-xml-parser^5.9.0 → ^5.9.3node-cron^4.2.1 → ^4.4.1@types/node(dev) ^25.9.3 → ^26.0.0
358 tests pass; bun run devcheck clean.
v1.2.14: mcp-ts-core 0.10.6 adoption
mcp-ts-core 0.10.6 adoption
Adopts @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6 and the framework capabilities it brings: server identity fields, capped-list truncation disclosure, fail-closed env-boolean parsing, and the MCPB bundle cleaner.
Added:
arxiv_searchdiscloses truncation viactx.enrich.truncated()—truncated/shown/capfields plus a next-startnotice when matches exceed the page (#197)
Changed:
createApp()setsname/titletoarxiv-mcp-serversoinitializeand/.well-known/mcp.jsonreport the unscoped name (#213)bundlerunsscripts/clean-mcpb.tsafter pack — prunes dev deps, stripsnode_modules/**agent docs (#230).mcpbignoredev-dir patterns re-anchored to root (#207); plugindisplayNamede-scoped- Skills re-synced from framework; new
techniquesskill
Fixed:
- Mirror config booleans (
mirrorEnabled,mirrorFallbackLive) switchedz.coerce.boolean()→z.stringbool()so the env vars are toggleable and reject bad values (#201)
Dependencies:
@cyanheads/mcp-ts-core^0.9.21 → ^0.10.6better-sqlite3^12.10.0 → ^12.11.1fast-xml-parser^5.8.0 → ^5.9.0@biomejs/biome(dev) ^2.4.16 → ^2.5.0vitest(dev) ^4.1.8 → ^4.1.9@types/node(dev) ^25.9.1 → ^25.9.3
358 tests pass; bun run devcheck clean.
v1.2.13: mcp-ts-core 0.9.21 framework adoption
mcp-ts-core 0.9.21 framework adoption
Adopts @cyanheads/mcp-ts-core ^0.9.21. Notable framework changes since 0.9.16:
Changed:
- HTTP transport per-request log context fix — per-request logs and traces 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.
- Plugin manifests: client-config key renamed to full package name; args simplified.
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21vitest^4.1.7 → ^4.1.8
356 tests pass; bun run devcheck clean.
v1.2.12: Mirror refresh runs in a child process, keeping search responsive
Mirror refresh runs in a child process, keeping search responsive
The scheduled HTTP-mode OAI-PMH refresh now spawns a child process for its
SQLite writes. The harvest's synchronous applyBatch transactions and the
closing SELECT COUNT(*) execute off the request event loop, so arxiv_search
and arxiv_get_metadata stay responsive throughout the harvest window. (#22)
Fixed:
- runRefreshSubprocess() replaces the in-process runHarvest() call in the
HTTP cron — harvest writes no longer block request serving (#22)
Added:
- ARXIV_MIRROR_REFRESH_TIMEOUT_MS (default 7200000, 2h) caps a single
refresh; SIGTERM then SIGKILL on overrun
356 tests pass; bun run devcheck clean.
v1.2.11: Keep search serving during incremental mirror refresh
Keep search serving during incremental mirror refresh
An in-progress or failed nightly refresh on top of a complete mirror no longer takes search offline. Readiness now keys off the durable completed_at marker — the mirror keeps serving its existing complete dataset throughout the refresh window rather than dropping arxiv_search and arxiv_get_metadata to the throttled live API.
Fixed:
- arxiv_search / arxiv_get_metadata keep serving from the mirror during an in-progress or failed incremental refresh (#21)
- writeHarvestState() uses COALESCE to preserve completed_at and total_records across in_progress and error writes — only the success path advances them
348 tests pass; bun run devcheck clean.
v1.2.10: enrichment on arxiv_search and arxiv_list_categories
enrichment on arxiv_search and arxiv_list_categories
Query echoes, true result totals, and empty-result guidance surface in a
typed enrichment block reaching both structuredContent and content[].
Changed:
- arxiv_search structuredContent: total_results -> enrichment.totalFound, start -> enrichment.pageStart
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.13 -> ^0.9.16
260 tests pass; bun run devcheck clean.
v1.2.9: Mirror schema v2: chronological date sort and index-backed category filter
Mirror schema v2: chronological date sort and index-backed category filter
Two coordinated fixes to the OAI-PMH mirror (both gated on the schema v1→v2 version bump). Existing mirror databases are upgraded in-place on first open — no re-harvest required.
Fixed:
-
sort_by submitted/updated returning wrong order (#18) — OAI version dates (RFC 2822) and YYYY-MM-DD datestamp fallbacks now normalized to ISO 8601 in
rawToRowbefore persisting. ORDER BY is now chronological, not lexicographic over the weekday prefix. -
category-only queries taking ~2 minutes (#19) —
paper_categories(category, paper_id, updated)junction table with composite index on(category, updated)replaces unindexable LIKE queries on the space-joined categories column. COUNT and membership lookups are now index-backed; ordered single-category browse pages off the composite index with no papers scan.
Changed:
MIRROR_SCHEMA_VERSION1→2.MirrorStore.openruns batched, resumable backfill when storedVersion < 2 (5 000-row batches, per-batch commits, schema_version written only after full completion).
256 tests pass; bun run devcheck clean.
v1.2.8: mcp-ts-core ^0.9.6 → ^0.9.13: HTTP hardening, quieter client-error logging, GET /mcp keywords
mcp-ts-core ^0.9.6 → ^0.9.13: HTTP hardening, quieter client-error logging, GET /mcp keywords
Framework adoption picks up six releases of mcp-ts-core with HTTP transport hardening,
improved error observability, and package keyword surfacing.
Changed:
- HTTP session-init gate — stateful HTTP mode now rejects non-initialize requests without Mcp-Session-Id with 400, preventing uninitialized session minting.
- MCP_HTTP_MAX_BODY_BYTES — oversized HTTP requests rejected with 413 before SDK body parse (default 1 MiB).
- httpErrorHandler — 401/403/400/404 responses now log at warning instead of running the full error-handler pipeline with stack traces, reducing noise.
- GET /mcp keywords — package.json keywords surfaced in the HTTP status response alongside name, version, and description.
- landing.requireAuth: false — explicitly set in createApp() to restore full landing page inventory for public-catalog deployments.
Added:
- npm keywords: bun, stdio, streamable-http added for discovery.
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.6 → ^0.9.13@biomejs/biome^2.4.15 → ^2.4.16
235 tests pass; bun run devcheck clean.
v1.2.7: Mirror fallback when live API fails
Mirror fallback when live API fails
Both recency-bypass search and readContent metadata now recover gracefully
when the arXiv live API is unavailable.
Fixed:
- search() recency bypass: live API failure falls back to searchMirror
instead of surfacing the error (#16) - readContent() metadata: fetchLivePapers failure falls back to
getPapersByIds + rowToMetadata from mirror (#16)
235 tests pass; bun run devcheck clean (TypeScript, lint, audit).
v1.2.6: mcp-ts-core ^0.9.1 → ^0.9.6, error factories (harvester), MCPB bundle support
Maintenance release: framework bump, MCPB bundle scaffolding, error factory adoption in the harvester.
Changed:
@cyanheads/mcp-ts-core^0.9.1 → ^0.9.6fast-xml-parserunpinned from ^5.x pin
Added:
-
MCPB bundle support —
manifest.json+.mcpbignorescaffolded;bun run bundleproducesdist/arxiv-mcp-server.mcpb -
Error factory adoption in harvester — raw
McpError→validationError/notFoundfactories -
Install badges, action-first tool descriptions, skills synced
bun run devcheck clean.