Releases: cyanheads/crossref-mcp-server
Release list
v0.1.16: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Dependency refresh and framework adoption; re-syncs skills and devcheck tooling. No tool-surface change.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@types/node^25.9.3 → ^26.0.0
Changed:
- devcheck gains a dependency-specifier guard (rejects floating
latest/*/dist-tag specifiers) and plugin-manifest packaging checks (descriptions, unscoped display identity, scoped install arg) devcheck.config.jsonenablespackaging.pluginManifests- re-synced 14 skill files and 6 devcheck scripts to their upstream framework versions
- runtime polite-pool User-Agent now reports crossref-mcp-server/0.1.16
110 tests pass; bun run devcheck clean.
v0.1.15: Server instructions, unscoped plugin identity
Server instructions, unscoped plugin identity
Adds server-level instructions to createApp() and unscopes the agent-facing plugin display identity to the bare crossref-mcp-server machine name.
Added:
- createApp() instructions — tool overview, CROSSREF_MAILTO polite-pool hint, DOI/ISSN/funder identifier keys, search-then-fetch flow, and the no-incoming-citations and cursor deep-paging caveats, sent to clients on initialize.
Changed:
- Plugin display identity unscoped to crossref-mcp-server (name, mcpServers key, Codex displayName and mcp.json server key); install args stay @cyanheads/crossref-mcp-server.
- CrossrefService.request reads this.userAgent / this.timeoutMs directly to satisfy Biome 2.5.0.
Dependency bumps:
- @biomejs/biome ^2.4.16 → ^2.5.0
- vitest ^4.1.8 → ^4.1.9
110 tests pass; bun run devcheck clean.
v0.1.14: Adopt mcp-ts-core ^0.10.6
Adopt mcp-ts-core ^0.10.6
Maintenance release tracking @cyanheads/mcp-ts-core ^0.10.6. No tool surface or behavior change — this server uses no ctx.sample (removed in 0.10.3) and no boolean env config, so the framework's breaking removals and stringbool parsing carry no migration here.
Added:
- Explicit name/title identity pair in createApp() — both crossref-mcp-server, so served serverInfo and /.well-known/mcp.json show the machine name (mcp-ts-core #231)
- scripts/clean-mcpb.ts post-pack bundle cleaner, wired into the bundle script (mcp-ts-core #230)
- Dockerfile HEALTHCHECK (/healthz) and org.opencontainers.image.version from APP_VERSION (mcp-ts-core #217, #202)
- lint-packaging.ts checks 5-9 and the coerce-boolean-env-flag antipattern rule (mcp-ts-core #201, #207, #230, #231)
- techniques skill
Changed:
- .mcpbignore dev-dir patterns root-anchored (mcp-ts-core #207)
- bundle script runs under bun and appends the clean-mcpb step
- Project skills re-synced; devcheck skillVersions.ignore for seven body-synced skills
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @types/node ^25.9.1 → ^25.9.3
- packageManager bun@1.3.2 → bun@1.3.11
110 tests pass; bun run devcheck clean.
v0.1.13: Structured empty references, input validation, timeout enforcement
Structured empty references, input validation, timeout enforcement
Three bugs resolved in this patch.
Fixed:
-
crossref_get_references: no longer throws NotFound when a DOI resolves but has no indexed
reference list (#22). Returns { doi, referenceCount: 0, references: [] } and surfaces a
coverage notice via ctx.enrich.notice(). -
crossref_search_journals issn, crossref_search_funders funder_doi: Zod regex validators
added — malformed inputs fail at the tool boundary with ValidationError before any upstream
call; patterns surface in JSON Schema (#25). -
CrossrefService.request(): CROSSREF_TIMEOUT_MS now enforced on every upstream fetch via
AbortSignal.any([ctx.signal, AbortSignal.timeout(timeoutMs)]) (#23).
110 tests pass; bun run devcheck clean.
v0.1.12: mcp-ts-core ^0.9.21 framework adoption
mcp-ts-core ^0.9.21 framework adoption
Adopts @cyanheads/mcp-ts-core ^0.9.21. Three framework fixes land with this upgrade:
per-request log context (HTTP transport emits fresh request/trace/span IDs per request, not frozen boot context); fetchWithTimeout strips query-string secrets from error messages and logs; withRetry fails fast on non-retryable errors, ctx.fail auto-populates the retryable flag.
Changed:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21release:githubscript added (scripts/release-github.ts)scripts/check-skill-versions.tsadded- Skills synced to framework ^0.9.21: add-tool, add-service, api-canvas, api-context, api-linter, api-utils, design-mcp-server, release-and-publish; api-mirror and orchestrations skills added
- Plugin manifest args simplified: .claude-plugin and .codex-plugin no longer include
run start:stdioargs - README client-config keys renamed from
crossreftocrossref-mcp-server
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21vitest^4.1.7 → ^4.1.8
105 tests pass; bun run devcheck clean.
v0.1.11: Remove DataCanvas integration from crossref_search_works
Remove DataCanvas integration from crossref_search_works
Dead output removed: the canvas_id input, canvas output block, spillover
logic, and canvas-accessor service never had a consumer tool (no
dataframe_query/dataframe_describe was added). Crossref works are
bibliographic metadata — the workflow is search-then-resolve-a-DOI,
not aggregate-over-rows.
Removed:
- canvas_id input and canvas output block from crossref_search_works (#26)
- src/services/canvas-accessor.ts
- CANVAS_PROVIDER_TYPE config documentation from README and docs/design.md
Changed:
- devcheck.config.json: @cyanheads/mcp-ts-core added to outdated.allowlist (framework adoption deferred)
- Test coverage expanded across all 5 tools and service utilities
105 tests pass; bun run devcheck clean.
v0.1.10: Enrichment adoption on search tools
Enrichment adoption on search tools
search-works, search-journals, and search-funders now call ctx.enrich() to surface result totals, query counts, and empty-result guidance in a typed enrichment block reaching both structuredContent JSON and content[] markdown trailer.
Added:
- Typed enrichment block on crossref_search_works: totalResults, returned, notice
- Typed enrichment block on crossref_search_journals: journalCount, worksTotal, notice
- Typed enrichment block on crossref_search_funders: funderCount, fundedWorksTotal, notice
- Empty-result notice on all three search tools with concrete guidance
Changed:
- totalResults, returned moved from output to enrichment on crossref_search_works
- worksTotal moved from output to enrichment on crossref_search_journals
- fundedWorksTotal moved from output to enrichment on crossref_search_funders
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.13 → ^0.9.16
29 tests pass; bun run devcheck clean.
v0.1.9: mcp-ts-core ^0.9.9 → ^0.9.13: HTTP hardening, quieter logs, GET /mcp keywords
mcp-ts-core ^0.9.9 → ^0.9.13: HTTP hardening, quieter logs, GET /mcp keywords
Adopts four framework releases covering HTTP transport hardening and
polish. Server-level source changes: MCPB placeholder fix for optional
email config and explicit public-catalog landing page opt-in.
Added:
MCP_HTTP_MAX_BODY_BYTES— 413 body cap (default 1 MiB) before SDK parsingGET /mcpnow surfacespackage.jsonkeywords in the status JSON.claude-plugin/and.codex-plugin/— plugin metadata for Claude Code and Codex discovery
Changed:
- HTTP session-init gate: non-
initializerequests withoutMcp-Session-Idrejected with 400 - 4xx log level: expected client errors (400, 401, 403, 404) logged at warning, no stack traces
CROSSREF_MAILTOconfig:z.preprocessstrips MCPB ${user_config.X} placeholders toundefined;manifest.jsongains"default": ""landing.requireAuth: false— explicit opt-in to serve full tool inventory unauthenticated
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.9 → ^0.9.13@biomejs/biome^2.4.15 → ^2.4.16
27 tests pass; bun run devcheck clean.
v0.1.8: shared date/funder helpers, mcp-ts-core ^0.9.9, skills sync
shared date/funder helpers, mcp-ts-core ^0.9.9, skills sync
Code simplification: four copies of date-parts parsing → shared parseDateParts/formatDateParts in crossref-service.ts; two copies of funder ID stripping → normalizeFunderId. Net −20 lines across tool definitions.
Changed:
- ambiguous_journal error code corrected: InvalidParams → ValidationError
- parseDateParts, formatDateParts, normalizeFunderId extracted to crossref-service.ts (shared)
- CLAUDE.md/AGENTS.md: ctx.fail, notifyPromptListChanged, notifyToolListChanged in Context table; Close the loop on issues rule added
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.6 → ^0.9.9
27 tests pass; bun run devcheck clean.
v0.1.7: Two field-test bug fixes
Two field-test bug fixes
crossref_search_funders: worksCount always null due to wrong field key (works → work-count).
crossref_search_journals: ambiguity error used InternalError (-32603) instead of typed ctx.fail (InvalidParams, reason=ambiguous_journal).
Fixed:
- crossref_search_funders: worksCount mapped from f['work-count'] (closes #18)
- crossref_search_journals: ambiguity path uses ctx.fail('ambiguous_journal') (closes #19)
27 tests pass; bun run devcheck clean (outdated dep advisory: mcp-ts-core 0.9.6 → 0.9.9, separate maintenance pass).