Releases: cyanheads/openlibrary-mcp-server
Release list
v0.1.18: queryEcho leak fix, capped-list disclosure in text output
queryEcho leak fix, capped-list disclosure in text output
Added:
openlibrary_get_workgains an optionalnoticeoutput field (enrichment block) disclosing when text output caps a long subject list.
Fixed:
openlibrary_search_booksrendered a literal**queryEcho:** undefinedin the text trailer for a bare or single-filter query — bothctx.enrich({ queryEcho })call sites now guard onqueryEcho !== undefined. (#10)openlibrary_search_booksrendered every Internet Archive identifier per work in text output, undisclosed —format()now caps at 5 per work, with the omitted count disclosed via the enrichment trailer;structuredContentis unchanged. (#11)openlibrary_get_workandopenlibrary_search_authorssilently truncatedsubjects/top_subjectsin text output (caps of 10 and 5) with no disclosure — both now emit an enrichment notice naming the omitted count;structuredContentalready carried the complete arrays. (#13)
210 tests pass; bun run devcheck clean.
v0.1.17: Cover-URL path-traversal fix, 404 normalization, mcp-ts-core ^0.10.14 adoption
Cover-URL path-traversal fix, 404 normalization, mcp-ts-core ^0.10.14 adoption
Also adopts @cyanheads/mcp-ts-core ^0.10.14 with Bun supply-chain hardening (minimumReleaseAge guard, Socket install scanner).
Fixed:
- Upstream 404s now normalize to the declared not_found contract instead of leaking a raw FetchHttpError, via a new fetchOrNull() wrapper (#8)
- openlibrary_get_edition rejects non-numeric OCLC identifiers locally before the upstream call (#12)
Security:
- openlibrary_get_cover_url and getCoverUrl() reject identifiers containing path separators, .., or control characters, and reject target: author paired with id_type: isbn, before any URL is built (#9)
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.9 → ^0.10.14@socketsecurity/bun-security-scannernew, ^1.1.2@biomejs/biome^2.5.0 → 2.5.2js-yaml(transitive) 3.14.2 → 3.15.0 — clears GHSA-h67p-54hq-rp68
204 tests pass; bun run devcheck clean.
v0.1.16: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Framework-maintenance release — no server behavior changes.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@types/node(dev) ^25.9.3 → ^26.0.0
Added:
check-dependency-specifiersdevcheck step — fails floating specifiers in package.json + bun.lock workspaces (cyanheads/mcp-ts-core#246)- Plugin-manifest checks in
lint:packaging— non-empty descriptions, unscoped display identity, full-package install arg (cyanheads/mcp-ts-core#240)
Changed:
.codex-plugin/plugin.json— populated empty longDescription, set category research- Fresh-scaffold devcheck guards re-synced — git-dependent checks skip without .git, empty-changelog exit, deleted-SKILL.md guard (cyanheads/mcp-ts-core#237, #242, #243)
- Eight framework skills re-synced from ^0.10.9 (api-context documents
ctx.content)
193 tests pass; bun run devcheck clean.
v0.1.15: run release:github with bun
run release:github with bun
Fixes the release:github npm script, which invoked tsx — not a project dependency — and could not execute under Bun.
Fixed:
release:githubrunsscripts/release-github.tsviabun runinstead oftsx.
193 tests pass; bun run devcheck clean.
v0.1.14: server instructions + unscoped plugin display identity
server instructions + unscoped plugin display identity
Sends session-level orientation on initialize and unscopes the agent-facing identity fields in the Claude Code and Codex plugin manifests.
Added:
- createApp() instructions sent on every initialize: openlibrary_* toolset, keyless API, suffix-typed IDs (works OL…W, editions OL…M, authors OL…A; editions also by ISBN), the search → work → editions/edition flow, openlibrary_get_cover_url always-200 / 1×1-placeholder behavior
Changed:
- Plugin display identity unscoped to openlibrary-mcp-server: name + mcpServers key in .claude-plugin/plugin.json; server key in .codex-plugin/mcp.json and interface.displayName in .codex-plugin/plugin.json. npm install args stay scoped (@cyanheads/openlibrary-mcp-server)
Dependency bumps:
- vitest (dev) ^4.1.8 → ^4.1.9
193 tests pass; bun run devcheck clean.
v0.1.13: mcp-ts-core ^0.10.6 adoption
mcp-ts-core ^0.10.6 adoption
Adopts the framework's enrich.total() convention and refreshes packaging.
Added:
- totalCount enrichment on openlibrary_search_books, search_authors, get_subject, get_author_works, get_editions (ctx.enrich.total)
- createApp() name/title set to openlibrary-mcp-server
- Docker /healthz HEALTHCHECK + org.opencontainers.image.version label
- scripts/clean-mcpb.ts post-pack bundle cleaner
Changed:
- .mcpbignore skills/.claude/.agents patterns root-anchored
- check-framework-antipatterns.ts gains a z.coerce.boolean() env-flag rule
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6 (carries ext-apps 1.7.3 → 1.7.4, hono 4.12.23 → 4.12.25)
- @biomejs/biome ^2.4.16 → ^2.5.0
- @types/node ^25.9.1 → ^25.9.3
193 tests pass; bun run devcheck clean.
v0.1.12: not-found ctx.fail routing, getAuthorWorks 404 detection
not-found ctx.fail routing, getAuthorWorks 404 detection
Service methods (getWork, getAuthor, getEditions, getSubject, getAuthorWorks) now return null on not-found instead of throwing notFound() directly. Handlers route the null return through ctx.fail('not_found', ...) so data.reason is populated on the wire and the typed error contracts are exercised.
Fixed:
- getAuthorWorks: Open Library returns HTTP 404 + {} for non-existent author IDs; the empty-object response was silently treated as valid (total: undefined, works: []). Guard added to detect and return null. (#5)
- getWork, getAuthor, getEditions, getSubject: notFound() moved from service layer to handler ctx.fail so data.reason is set. (#6)
- openlibraryAuthorResource, openlibraryWorkResource: same null-guard + notFound() pattern.
- Tests updated and new edge-case tests added for all affected tools and resources.
193 tests pass; bun run devcheck clean.
v0.1.11: mcp-ts-core ^0.9.16 → ^0.9.21, skill sync, client-config key rename
mcp-ts-core ^0.9.16 → ^0.9.21, skill sync, client-config key rename
Adopts @cyanheads/mcp-ts-core 0.9.21 with three framework fixes.
Changed:
- HTTP transport per-request log context fix — logs and traces now carry fresh request + trace/span IDs instead of the frozen boot context.
fetchWithTimeoutstrips query-string secrets (e.g.?api_key=) from error messages and logs.withRetryfails fast on non-retryable errors;ctx.failauto-populates theretryableflag.- README.md client-config server key renamed from
openlibrarytoopenlibrary-mcp-server.
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21vitest^4.1.7 → ^4.1.8
190 tests pass; bun run devcheck clean.
v0.1.10: Enrichment on search tools, dead contract removal
Enrichment on search tools, dead contract removal
Query echo, result totals, and empty-result guidance now surface in a typed
enrichment block reaching both structuredContent JSON and content[] markdown
trailer across search_books, search_authors, and get_subject.
Changed:
- search_books, search_authors, get_subject: output.message replaced by enrichment.notice; search_books also adds enrichment.queryEcho for active field filters
- search_books, search_authors: removed unreachable no_results errors[] contract — empty results return success with enrichment.notice (#4)
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.13 → ^0.9.16
56 tests pass; bun run devcheck clean.
v0.1.9: mcp-ts-core ^0.9.9 → ^0.9.13: HTTP body cap, session-init gate, quieter client-error logging, GET /mcp keywords
mcp-ts-core ^0.9.9 → ^0.9.13: HTTP body cap, session-init gate, quieter client-error logging, GET /mcp keywords
Adopts four framework releases with HTTP transport hardening and observability improvements.
Changed:
MCP_HTTP_MAX_BODY_BYTES— configurable inbound body cap (default 1 MiB); oversized requests rejected with 413 before SDK body parsing- HTTP session-init gate — non-
initializerequests withoutMcp-Session-Idnow rejected with HTTP 400 httpErrorHandlerlog split — 401/403/400/404 downgraded from full error pipeline tologger.warning, reducing log noiseGET /mcp—package.jsonkeywordsnow surfaced on the HTTP status response
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.9 → ^0.9.13@biomejs/biome^2.4.15 → ^2.4.16
57 tests pass; bun run devcheck clean.