Skip to content

Releases: cyanheads/arxiv-mcp-server

v1.2.15: mcp-ts-core 0.10.7–0.10.9 maintenance

20 Jun 10:37
v1.2.15
a1128a1

Choose a tag to compare

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: new check-dependency-specifiers devcheck step (rejects floating specifiers in package.json + bun.lock workspaces), lint:packaging plugin-manifest checks, ctx.content media collector, DuckDB SQL-gate invalid_sql classification + ambiguous-column describe() fix, and fresh-scaffold devcheck guards.
  • Enable devcheck.config.json packaging.pluginManifests; add scripts/check-dependency-specifiers.ts; re-sync 6 framework scripts and 14 skills.

Dependencies:

  • @cyanheads/mcp-ts-core ^0.10.6 → ^0.10.9
  • fast-xml-parser ^5.9.0 → ^5.9.3
  • node-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

15 Jun 20:35
v1.2.14
efc14d8

Choose a tag to compare

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_search discloses truncation via ctx.enrich.truncated()truncated/shown/cap fields plus a next-start notice when matches exceed the page (#197)

Changed:

  • createApp() sets name/title to arxiv-mcp-server so initialize and /.well-known/mcp.json report the unscoped name (#213)
  • bundle runs scripts/clean-mcpb.ts after pack — prunes dev deps, strips node_modules/** agent docs (#230)
  • .mcpbignore dev-dir patterns re-anchored to root (#207); plugin displayName de-scoped
  • Skills re-synced from framework; new techniques skill

Fixed:

  • Mirror config booleans (mirrorEnabled, mirrorFallbackLive) switched z.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.6
  • better-sqlite3 ^12.10.0 → ^12.11.1
  • fast-xml-parser ^5.8.0 → ^5.9.0
  • @biomejs/biome (dev) ^2.4.16 → ^2.5.0
  • vitest (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

02 Jun 13:59
v1.2.13
c790b8b

Choose a tag to compare

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.21
  • vitest ^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

02 Jun 04:37
v1.2.12
e33b362

Choose a tag to compare

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

31 May 04:34
v1.2.11
87fdad0

Choose a tag to compare

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

30 May 09:28
v1.2.10
d671a97

Choose a tag to compare

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

29 May 07:08
v1.2.9
583283f

Choose a tag to compare

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 rawToRow before 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_VERSION 1→2. MirrorStore.open runs 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

29 May 04:50
v1.2.8
a542821

Choose a tag to compare

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

27 May 02:28
v1.2.7
a313a8d

Choose a tag to compare

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

23 May 12:28
v1.2.6
e01025e

Choose a tag to compare

Maintenance release: framework bump, MCPB bundle scaffolding, error factory adoption in the harvester.

Changed:

  • @cyanheads/mcp-ts-core ^0.9.1 → ^0.9.6
  • fast-xml-parser unpinned from ^5.x pin

Added:

  • MCPB bundle support — manifest.json + .mcpbignore scaffolded; bun run bundle produces dist/arxiv-mcp-server.mcpb

  • Error factory adoption in harvester — raw McpErrorvalidationError/notFound factories

  • Install badges, action-first tool descriptions, skills synced

bun run devcheck clean.