Skip to content

Releases: cyanheads/openlibrary-mcp-server

v0.1.18: queryEcho leak fix, capped-list disclosure in text output

Choose a tag to compare

@cyanheads cyanheads released this 13 Jul 18:35
v0.1.18
c3f254b

queryEcho leak fix, capped-list disclosure in text output

Added:

  • openlibrary_get_work gains an optional notice output field (enrichment block) disclosing when text output caps a long subject list.

Fixed:

  • openlibrary_search_books rendered a literal **queryEcho:** undefined in the text trailer for a bare or single-filter query — both ctx.enrich({ queryEcho }) call sites now guard on queryEcho !== undefined. (#10)
  • openlibrary_search_books rendered 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; structuredContent is unchanged. (#11)
  • openlibrary_get_work and openlibrary_search_authors silently truncated subjects/top_subjects in text output (caps of 10 and 5) with no disclosure — both now emit an enrichment notice naming the omitted count; structuredContent already carried the complete arrays. (#13)

210 tests pass; bun run devcheck clean.

CHANGELOG v0.1.18

v0.1.17: Cover-URL path-traversal fix, 404 normalization, mcp-ts-core ^0.10.14 adoption

Choose a tag to compare

@cyanheads cyanheads released this 13 Jul 17:15
v0.1.17
d3190d4

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-scanner new, ^1.1.2
  • @biomejs/biome ^2.5.0 → 2.5.2
  • js-yaml (transitive) 3.14.2 → 3.15.0 — clears GHSA-h67p-54hq-rp68

204 tests pass; bun run devcheck clean.

CHANGELOG v0.1.17

v0.1.16: mcp-ts-core ^0.10.9 maintenance

Choose a tag to compare

@cyanheads cyanheads released this 20 Jun 17:39
v0.1.16
0afa2b4

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-specifiers devcheck 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

Choose a tag to compare

@cyanheads cyanheads released this 16 Jun 01:59
v0.1.15
a033719

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:github runs scripts/release-github.ts via bun run instead of tsx.

193 tests pass; bun run devcheck clean.

v0.1.14: server instructions + unscoped plugin display identity

Choose a tag to compare

@cyanheads cyanheads released this 16 Jun 00:55
v0.1.14
ad1f6ed

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

Choose a tag to compare

@cyanheads cyanheads released this 13 Jun 03:49
v0.1.13
de7c77e

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

Choose a tag to compare

@cyanheads cyanheads released this 04 Jun 08:16
v0.1.12
1c027e8

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

Choose a tag to compare

@cyanheads cyanheads released this 02 Jun 14:48
v0.1.11
2c702f3

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.
  • 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.
  • README.md client-config server key renamed from openlibrary to openlibrary-mcp-server.

Dependencies:

  • @cyanheads/mcp-ts-core ^0.9.16 → ^0.9.21
  • vitest ^4.1.7 → ^4.1.8

190 tests pass; bun run devcheck clean.

v0.1.10: Enrichment on search tools, dead contract removal

Choose a tag to compare

@cyanheads cyanheads released this 30 May 09:13
v0.1.10
70f5d67

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

Choose a tag to compare

@cyanheads cyanheads released this 29 May 05:25
v0.1.9
2f7414c

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-initialize requests without Mcp-Session-Id now rejected with HTTP 400
  • httpErrorHandler log split — 401/403/400/404 downgraded from full error pipeline to logger.warning, reducing log noise
  • GET /mcppackage.json keywords now 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.