@cyanheads/openlibrary-mcp-server 0.1.16 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** openlibrary-mcp-server
4
- **Version:** 0.1.16
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.9`
4
+ **Version:** 0.1.17
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.14`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
8
8
  **Zod:** ^4.4.3
@@ -167,12 +167,14 @@ Handlers receive a unified `ctx` object. Key properties:
167
167
  | Property | Description |
168
168
  |:---------|:------------|
169
169
  | `ctx.log` | Request-scoped logger — `.debug()`, `.info()`, `.notice()`, `.warning()`, `.error()`. Auto-correlates requestId, traceId, tenantId. |
170
- | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.list(prefix, { cursor, limit })`. Accepts any serializable value. |
170
+ | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.getMany(keys)`, `.list(prefix, { cursor, limit })`. Accepts any serializable value. |
171
171
  | `ctx.elicit` | Ask user for structured input — form call `(message, schema)` or `.url(message, url)` for an external link. **Check for presence first:** `if (ctx.elicit) { ... }` |
172
+ | `ctx.enrich` | Success-path agent context (empty-result notices, query echo, pagination totals) — `ctx.enrich(...)` or `.notice()` / `.total()` / `.echo()` / `.truncated()`. Reaches `structuredContent` and `content[]`; lands only when the definition declares an `enrichment` block (no-op otherwise). |
173
+ | `ctx.content` | Non-text content blocks — `.image(data, mimeType)`, `.audio(data, mimeType)`, or `ctx.content(block)` for a raw block. Prepended to `content[]` after `format()`; never enters `structuredContent`. |
172
174
  | `ctx.signal` | `AbortSignal` for cancellation. |
173
175
  | `ctx.progress` | Task progress (present when `task: true`) — `.setTotal(n)`, `.increment()`, `.update(message)`. |
174
176
  | `ctx.requestId` | Unique request ID. |
175
- | `ctx.tenantId` | Tenant ID from JWT or `'default'` for stdio. |
177
+ | `ctx.tenantId` | Tenant ID from JWT; `'default'` for stdio or HTTP with auth off. |
176
178
 
177
179
  ---
178
180
 
@@ -180,7 +182,7 @@ Handlers receive a unified `ctx` object. Key properties:
180
182
 
181
183
  Handlers throw — the framework catches, classifies, and formats.
182
184
 
183
- **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required descriptive metadata for the agent's next move ( 5 words, lint-validated); for the wire `data.recovery.hint` (mirrored into `content[]` text), pass explicitly at the throw site when dynamic context matters: `ctx.fail('reason', msg, { recovery: { hint: '...' } })`. Baseline codes (`InternalError`, `ServiceUnavailable`, `Timeout`, `ValidationError`, `SerializationError`) bubble freely and don't need declaring.
185
+ **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required (≥ 5 words, lint-validated) — the single source of truth for the agent's next move. Pass `ctx.recoveryFor('reason')` as the throw's data to put it on the wire (`data.recovery.hint`, mirrored into `content[]` text); override with an explicit `{ recovery: { hint: '...' } }` when dynamic runtime context matters. Baseline codes (`InternalError`, `ServiceUnavailable`, `Timeout`, `ValidationError`, `SerializationError`) bubble freely and don't need declaring.
184
186
 
185
187
  ```ts
186
188
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
@@ -192,7 +194,7 @@ errors: [
192
194
  ],
193
195
  async handler(input, ctx) {
194
196
  const item = await db.find(input.id);
195
- if (!item) throw ctx.fail('no_match', `No item ${input.id}`);
197
+ if (!item) throw ctx.fail('no_match', `No item ${input.id}`, ctx.recoveryFor('no_match'));
196
198
  return item;
197
199
  }
198
200
  ```
@@ -275,7 +277,6 @@ Available skills:
275
277
  | `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
276
278
  | `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
277
279
  | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
278
- | `devcheck` | Lint, format, typecheck, audit |
279
280
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
280
281
  | `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
281
282
  | `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
@@ -303,25 +304,28 @@ When you complete a skill's checklist, check the boxes and add a completion time
303
304
 
304
305
  ## Commands
305
306
 
306
- **Runtime:** Scripts use `tsx`both `npm run <cmd>` and `bun run <cmd>` work. `bun` is slightly faster for script invocation but not required.
307
+ **Runtime:** Scripts use Bun's native TypeScript execution — `bun run <cmd>` is the standard invocation. `npm run <cmd>` also works (npm delegates to bun).
307
308
 
308
309
  | Command | Purpose |
309
310
  |:--------|:--------|
310
- | `npm run build` | Compile TypeScript |
311
- | `npm run rebuild` | Clean + build |
312
- | `npm run clean` | Remove build artifacts |
313
- | `npm run devcheck` | Lint + format + typecheck + security + changelog sync |
311
+ | `bun run build` | Compile TypeScript |
312
+ | `bun run rebuild` | Clean + build |
313
+ | `bun run clean` | Remove build artifacts |
314
+ | `bun run devcheck` | Lint + format + typecheck + security + changelog sync |
314
315
  | `bun run audit:refresh` | Delete `bun.lock`, reinstall, and re-run `bun audit`. Use when `devcheck` flags a transitive advisory — Bun's `update` is sticky on transitive resolutions, so the advisory may be a stale-lockfile false positive. If it survives the refresh, it's real. |
315
- | `npm run tree` | Generate directory structure doc |
316
- | `npm run format` | Auto-fix formatting (safe fixes only) |
317
- | `npm run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
318
- | `npm test` | Run tests |
319
- | `npm run start:stdio` | Production mode (stdio) |
320
- | `npm run start:http` | Production mode (HTTP) |
321
- | `npm run release:github` | Create GitHub Release from the current tag (title + notes-from-tag) |
322
- | `npm run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
323
- | `npm run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
324
- | `npm run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
316
+ | `bun run lint:mcp` | Run the MCP definition linter standalone (rule catalog: `api-linter` skill) |
317
+ | `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity (run by devcheck) |
318
+ | `bun run list-skills` | Print the skill registry |
319
+ | `bun run tree` | Generate directory structure doc |
320
+ | `bun run format` | Auto-fix formatting (safe fixes only) |
321
+ | `bun run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
322
+ | `bun run test` | Run tests (Vitest use `bun run test`, not `bun test`) |
323
+ | `bun run start:stdio` | Production mode (stdio) |
324
+ | `bun run start:http` | Production mode (HTTP) |
325
+ | `bun run release:github` | Create GitHub Release from the current tag (title + notes-from-tag) |
326
+ | `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
327
+ | `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
328
+ | `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
325
329
 
326
330
  ---
327
331
 
@@ -345,14 +349,14 @@ Each per-version file opens with YAML frontmatter:
345
349
  ---
346
350
  summary: "One-line headline, ≤350 chars" # required — powers the rollup index
347
351
  breaking: false # optional — true flags breaking changes
348
- security: false # optional — true flags security fixes
352
+ security: false # optional — true ONLY for a source-code security fix, never a dependency CVE bump
349
353
  ---
350
354
 
351
355
  # 0.1.0 — YYYY-MM-DD
352
356
  ...
353
357
  ```
354
358
 
355
- `breaking: true` renders a `· ⚠️ Breaking` badge — use it when consumers must update code on upgrade (signature changes, removed APIs, config renames). `security: true` renders a `· 🛡️ Security` badge and pairs with a `## Security` body section. When both are set, badges render `· ⚠️ Breaking · 🛡️ Security`.
359
+ `breaking: true` renders a `· ⚠️ Breaking` badge — use it when consumers must update code on upgrade (signature changes, removed APIs, config renames). `security: true` renders a `· 🛡️ Security` badge and pairs with a `## Security` body section — set it only for a security fix in this server's *own source code*, never for a routine dependency or transitive CVE bump (record those under `## Dependencies`). When both are set, badges render `· ⚠️ Breaking · 🛡️ Security`.
356
360
 
357
361
  `agent-notes` is an optional free-form field for maintenance agents processing the release downstream. Content here won't appear in the rendered CHANGELOG — it's consumed by agents running the `maintenance` skill. Use it for adoption instructions that don't fit the human-facing sections: new files to create, fields to populate, one-time migration steps. Omit entirely when there's nothing to say.
358
362
 
package/Dockerfile CHANGED
@@ -4,15 +4,17 @@
4
4
  # This stage installs all dependencies (including dev), builds the TypeScript
5
5
  # source code into JavaScript, and prepares the production assets.
6
6
  # ==============================================================================
7
- FROM oven/bun:1.3 AS build
7
+ FROM oven/bun:1.3.14 AS build
8
8
 
9
9
  WORKDIR /usr/src/app
10
10
 
11
11
  # Copy dependency manifests for optimized layer caching
12
12
  COPY package.json bun.lock ./
13
13
 
14
- # Install all dependencies (including dev dependencies for building)
15
- RUN bun install --frozen-lockfile
14
+ # Install all dependencies (including dev dependencies for building).
15
+ # The BuildKit cache mount persists Bun's global package cache across builds.
16
+ RUN --mount=type=cache,target=/root/.bun/install/cache \
17
+ bun install --frozen-lockfile --ignore-scripts
16
18
 
17
19
  # Copy the rest of the source code
18
20
  COPY . .
@@ -28,7 +30,7 @@ RUN bun run build
28
30
  # application. It uses a slim base image and only includes production
29
31
  # dependencies and build artifacts.
30
32
  # ==============================================================================
31
- FROM oven/bun:1.3-slim AS production
33
+ FROM oven/bun:1.3.14-slim AS production
32
34
 
33
35
  WORKDIR /usr/src/app
34
36
 
@@ -49,13 +51,15 @@ COPY package.json bun.lock ./
49
51
 
50
52
  # Install only production dependencies, ignoring any lifecycle scripts (like 'prepare')
51
53
  # that are not needed in the final production image.
52
- RUN bun install --production --frozen-lockfile --ignore-scripts
54
+ RUN --mount=type=cache,target=/root/.bun/install/cache \
55
+ bun install --production --frozen-lockfile --ignore-scripts
53
56
 
54
57
  # Conditionally install OpenTelemetry optional peer dependencies (Tier 3).
55
58
  # These are not bundled by default to keep the base image lean. Enable at build time
56
59
  # with: docker build --build-arg OTEL_ENABLED=true
57
60
  ARG OTEL_ENABLED=true
58
- RUN if [ "$OTEL_ENABLED" = "true" ]; then \
61
+ RUN --mount=type=cache,target=/root/.bun/install/cache \
62
+ if [ "$OTEL_ENABLED" = "true" ]; then \
59
63
  bun add @hono/otel \
60
64
  @opentelemetry/instrumentation-http \
61
65
  @opentelemetry/exporter-metrics-otlp-http \
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.1.16-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openlibrary-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openlibrary-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openlibrary-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.1.17-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openlibrary-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openlibrary-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openlibrary-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -3,6 +3,7 @@
3
3
  * @module mcp-server/tools/definitions/openlibrary-get-cover-url.tool
4
4
  */
5
5
  import { z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
6
7
  export declare const openlibraryGetCoverUrl: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
8
  identifier: z.ZodString;
8
9
  id_type: z.ZodEnum<{
@@ -22,5 +23,15 @@ export declare const openlibraryGetCoverUrl: import("@cyanheads/mcp-ts-core").To
22
23
  }, z.core.$strip>, z.ZodObject<{
23
24
  url: z.ZodString;
24
25
  note: z.ZodString;
25
- }, z.core.$strip>, undefined, undefined>;
26
+ }, z.core.$strip>, readonly [{
27
+ readonly reason: "invalid_identifier";
28
+ readonly code: JsonRpcErrorCode.ValidationError;
29
+ readonly when: "The identifier contains path separators, \"..\", or control characters.";
30
+ readonly recovery: "Pass the bare cover ID, photo ID, ISBN, or OLID with no slashes or path segments.";
31
+ }, {
32
+ readonly reason: "invalid_target";
33
+ readonly code: JsonRpcErrorCode.ValidationError;
34
+ readonly when: "The id_type is not valid for the target — an author photo cannot be resolved by ISBN.";
35
+ readonly recovery: "For author photos use id_type \"id\" (photo_id) or \"olid\"; ISBN resolves book covers only.";
36
+ }], undefined>;
26
37
  //# sourceMappingURL=openlibrary-get-cover-url.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openlibrary-get-cover-url.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-cover-url.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGjD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;wCA+DjC,CAAC"}
1
+ {"version":3,"file":"openlibrary-get-cover-url.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-cover-url.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6FjC,CAAC"}
@@ -3,10 +3,11 @@
3
3
  * @module mcp-server/tools/definitions/openlibrary-get-cover-url.tool
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
- import { getOpenLibraryService } from '../../../services/open-library/open-library-service.js';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { getOpenLibraryService, isUnsafeCoverIdentifier, } from '../../../services/open-library/open-library-service.js';
7
8
  export const openlibraryGetCoverUrl = tool('openlibrary_get_cover_url', {
8
9
  title: 'Get Cover URL',
9
- description: 'Resolve a cover image URL for a book or author photo. Returns a direct HTTPS URL in the requested size (S/M/L). The Covers API always returns HTTP 200 — missing covers return a 1×1 placeholder GIF, not a 404. URLs can be embedded in markdown as ![cover](url).',
10
+ description: 'Resolve a cover image URL for a book or author photo. Returns a direct HTTPS URL in the requested size (S/M/L). The Covers API always returns HTTP 200 — missing covers return a 1×1 placeholder GIF, not a 404. Identifiers with path separators or control characters, and author-by-ISBN lookups, are rejected locally before any request. URLs can be embedded in markdown as ![cover](url).',
10
11
  annotations: { readOnlyHint: true, idempotentHint: true },
11
12
  input: z.object({
12
13
  identifier: z
@@ -32,6 +33,20 @@ export const openlibraryGetCoverUrl = tool('openlibrary_get_cover_url', {
32
33
  .string()
33
34
  .describe('Reminder that the URL always returns HTTP 200; a placeholder GIF is served when no cover exists.'),
34
35
  }),
36
+ errors: [
37
+ {
38
+ reason: 'invalid_identifier',
39
+ code: JsonRpcErrorCode.ValidationError,
40
+ when: 'The identifier contains path separators, "..", or control characters.',
41
+ recovery: 'Pass the bare cover ID, photo ID, ISBN, or OLID with no slashes or path segments.',
42
+ },
43
+ {
44
+ reason: 'invalid_target',
45
+ code: JsonRpcErrorCode.ValidationError,
46
+ when: 'The id_type is not valid for the target — an author photo cannot be resolved by ISBN.',
47
+ recovery: 'For author photos use id_type "id" (photo_id) or "olid"; ISBN resolves book covers only.',
48
+ },
49
+ ],
35
50
  handler(input, ctx) {
36
51
  ctx.log.info('Resolving cover URL', {
37
52
  identifier: input.identifier,
@@ -39,6 +54,12 @@ export const openlibraryGetCoverUrl = tool('openlibrary_get_cover_url', {
39
54
  target: input.target,
40
55
  size: input.size,
41
56
  });
57
+ if (isUnsafeCoverIdentifier(input.identifier)) {
58
+ throw ctx.fail('invalid_identifier', `"${input.identifier}" contains path separators or control characters.`, ctx.recoveryFor('invalid_identifier'));
59
+ }
60
+ if (input.target === 'author' && input.id_type === 'isbn') {
61
+ throw ctx.fail('invalid_target', 'Author photos cannot be looked up by ISBN; use id_type "id" or "olid".', ctx.recoveryFor('invalid_target'));
62
+ }
42
63
  const svc = getOpenLibraryService();
43
64
  const url = svc.getCoverUrl(input.identifier, input.id_type, input.target, input.size);
44
65
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"openlibrary-get-cover-url.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-cover-url.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAExF,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;IACtE,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,qQAAqQ;IACvQ,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,CACP,wMAAwM,CACzM;QACH,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aAC5B,QAAQ,CACP,iIAAiI,CAClI;QACH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aACxB,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,yLAAyL,CAC1L;QACH,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrB,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CACP,wFAAwF,CACzF;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,CACP,oKAAoK,CACrK;QACH,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,kGAAkG,CACnG;KACJ,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,GAAG;QAChB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO;YACL,GAAG;YACH,IAAI,EAAE,4HAA4H;SACnI,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"openlibrary-get-cover-url.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-cover-url.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,iDAAiD,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE;IACtE,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,kYAAkY;IACpY,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,CACP,wMAAwM,CACzM;QACH,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aAC5B,QAAQ,CACP,iIAAiI,CAClI;QACH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aACxB,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,yLAAyL,CAC1L;QACH,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrB,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CACP,wFAAwF,CACzF;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,CACP,oKAAoK,CACrK;QACH,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,kGAAkG,CACnG;KACJ,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uEAAuE;YAC7E,QAAQ,EAAE,mFAAmF;SAC9F;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uFAAuF;YAC7F,QAAQ,EACN,0FAA0F;SAC7F;KACF;IAED,OAAO,CAAC,KAAK,EAAE,GAAG;QAChB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC;QACH,IAAI,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,CAAC,IAAI,CACZ,oBAAoB,EACpB,IAAI,KAAK,CAAC,UAAU,mDAAmD,EACvE,GAAG,CAAC,WAAW,CAAC,oBAAoB,CAAC,CACtC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC1D,MAAM,GAAG,CAAC,IAAI,CACZ,gBAAgB,EAChB,wEAAwE,EACxE,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAClC,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO;YACL,GAAG;YACH,IAAI,EAAE,4HAA4H;SACnI,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
@@ -40,6 +40,6 @@ export declare const openlibraryGetEdition: import("@cyanheads/mcp-ts-core").Too
40
40
  readonly reason: "invalid_identifier";
41
41
  readonly code: JsonRpcErrorCode.ValidationError;
42
42
  readonly when: "Identifier format is invalid for the specified id_type.";
43
- readonly recovery: "Check the identifier format: ISBNs are 10 or 13 digits; OLIDs end in M (e.g., OL7353617M).";
43
+ readonly recovery: "Check the identifier format: ISBNs are 10 or 13 digits; OCLC numbers are numeric; OLIDs end in M (e.g., OL7353617M).";
44
44
  }], undefined>;
45
45
  //# sourceMappingURL=openlibrary-get-edition.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openlibrary-get-edition.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-edition.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuIhC,CAAC"}
1
+ {"version":3,"file":"openlibrary-get-edition.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-edition.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgJhC,CAAC"}
@@ -67,7 +67,7 @@ export const openlibraryGetEdition = tool('openlibrary_get_edition', {
67
67
  reason: 'invalid_identifier',
68
68
  code: JsonRpcErrorCode.ValidationError,
69
69
  when: 'Identifier format is invalid for the specified id_type.',
70
- recovery: 'Check the identifier format: ISBNs are 10 or 13 digits; OLIDs end in M (e.g., OL7353617M).',
70
+ recovery: 'Check the identifier format: ISBNs are 10 or 13 digits; OCLC numbers are numeric; OLIDs end in M (e.g., OL7353617M).',
71
71
  },
72
72
  ],
73
73
  handler(input, ctx) {
@@ -84,6 +84,11 @@ export const openlibraryGetEdition = tool('openlibrary_get_edition', {
84
84
  return Promise.reject(ctx.fail('invalid_identifier', `"${input.identifier}" is not a valid Open Library Edition ID. Expected format: OL…M (e.g., OL7353617M).`));
85
85
  }
86
86
  }
87
+ else if (input.id_type === 'oclc') {
88
+ if (!/^\d+$/.test(input.identifier)) {
89
+ return Promise.reject(ctx.fail('invalid_identifier', `"${input.identifier}" is not a valid OCLC number (must be numeric).`));
90
+ }
91
+ }
87
92
  const svc = getOpenLibraryService();
88
93
  return svc.getEditionByIdentifier(input.identifier, input.id_type, ctx);
89
94
  },
@@ -1 +1 @@
1
- {"version":3,"file":"openlibrary-get-edition.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-edition.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openlibrary-get-edition.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/openlibrary-get-edition.tool.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,28 @@
5
5
  */
6
6
  import type { Context } from '@cyanheads/mcp-ts-core';
7
7
  import type { AuthorDetail, AuthorSearchResult, AuthorWork, EditionDetail, EditionIdType, EditionSummary, SearchWork, SubjectWork, WorkDetail } from './types.js';
8
+ /**
9
+ * True when a cover identifier contains characters that would let it escape its
10
+ * path segment in the Covers API URL — path separators (`/`, `\`), a
11
+ * parent-directory sequence (`..`), or any control character (0x00–0x1F, 0x7F).
12
+ * A cover must resolve to the exact identifier supplied, never a reinterpreted
13
+ * path. Control characters are scanned by code point rather than embedded in a
14
+ * regex (which `noControlCharactersInRegex` forbids).
15
+ */
16
+ export declare function isUnsafeCoverIdentifier(identifier: string): boolean;
8
17
  export declare class OpenLibraryService {
9
18
  private readonly userAgent;
10
19
  constructor(userAgent: string);
11
20
  private headers;
12
21
  private fetch;
22
+ /**
23
+ * Fetches JSON like {@link fetch}, but resolves to `null` when the upstream
24
+ * returns HTTP 404 instead of throwing. Open Library 404s on missing by-ID
25
+ * records, so mapping that to `null` revives each caller's own `not_found`
26
+ * path — their `ctx.fail('not_found', …)` / `notFound()` with tool-specific
27
+ * recovery — instead of leaking the raw status-mapped fetch error.
28
+ */
29
+ private fetchOrNull;
13
30
  searchBooks(params: {
14
31
  query?: string | undefined;
15
32
  title?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"open-library-service.d.ts","sourceRoot":"","sources":["../../../src/services/open-library/open-library-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open-library-service.d.ts","sourceRoot":"","sources":["../../../src/services/open-library/open-library-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EAEX,UAAU,EACX,MAAM,YAAY,CAAC;AAqCpB;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CASnE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,EAAE,MAAM;IAI7B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IA0Bb;;;;;;OAMG;YACW,WAAW;IAWnB,WAAW,CACf,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC5C,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IA4E5D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAuCjE,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAyC3E,sBAAsB,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,aAAa,CAAC;IAuInB,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,kBAAkB,EAAE,CAAA;KAAE,CAAC;IAmCtD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA8CvE,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAgCtE,UAAU,CACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,GAAG,IAAI,CAAC;IAyCT,WAAW,CACT,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC9B,MAAM,EAAE,MAAM,GAAG,QAAQ,EACzB,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GACpB,MAAM;CAmBV;AAMD,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAO1D"}
@@ -3,7 +3,7 @@
3
3
  * subjects, and cover URL construction with retry and timeout.
4
4
  * @module services/open-library/open-library-service
5
5
  */
6
- import { notFound } from '@cyanheads/mcp-ts-core/errors';
6
+ import { McpError, notFound, validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
8
8
  import { getServerConfig } from '../../config/server-config.js';
9
9
  const BASE_URL = 'https://openlibrary.org';
@@ -27,6 +27,35 @@ function extractDescription(raw) {
27
27
  }
28
28
  return;
29
29
  }
30
+ /**
31
+ * True when an error is the status-mapped `McpError` that `fetchWithTimeout`
32
+ * throws on an upstream HTTP 404. `withRetry` rethrows it unchanged (NotFound is
33
+ * not a transient code), so `data.statusCode` reaches here intact. Callers map
34
+ * this to an absent-record `null` so each tool's own `not_found` path fires
35
+ * instead of the raw fetch-layer error leaking to the client.
36
+ */
37
+ function isUpstreamNotFound(err) {
38
+ return err instanceof McpError && err.data?.statusCode === 404;
39
+ }
40
+ /**
41
+ * True when a cover identifier contains characters that would let it escape its
42
+ * path segment in the Covers API URL — path separators (`/`, `\`), a
43
+ * parent-directory sequence (`..`), or any control character (0x00–0x1F, 0x7F).
44
+ * A cover must resolve to the exact identifier supplied, never a reinterpreted
45
+ * path. Control characters are scanned by code point rather than embedded in a
46
+ * regex (which `noControlCharactersInRegex` forbids).
47
+ */
48
+ export function isUnsafeCoverIdentifier(identifier) {
49
+ if (identifier.includes('/') || identifier.includes('\\') || identifier.includes('..')) {
50
+ return true;
51
+ }
52
+ for (let i = 0; i < identifier.length; i++) {
53
+ const code = identifier.charCodeAt(i);
54
+ if (code <= 0x1f || code === 0x7f)
55
+ return true;
56
+ }
57
+ return false;
58
+ }
30
59
  export class OpenLibraryService {
31
60
  userAgent;
32
61
  constructor(userAgent) {
@@ -57,6 +86,23 @@ export class OpenLibraryService {
57
86
  signal: ctx.signal,
58
87
  });
59
88
  }
89
+ /**
90
+ * Fetches JSON like {@link fetch}, but resolves to `null` when the upstream
91
+ * returns HTTP 404 instead of throwing. Open Library 404s on missing by-ID
92
+ * records, so mapping that to `null` revives each caller's own `not_found`
93
+ * path — their `ctx.fail('not_found', …)` / `notFound()` with tool-specific
94
+ * recovery — instead of leaking the raw status-mapped fetch error.
95
+ */
96
+ async fetchOrNull(url, ctx) {
97
+ try {
98
+ return await this.fetch(url, ctx);
99
+ }
100
+ catch (err) {
101
+ if (isUpstreamNotFound(err))
102
+ return null;
103
+ throw err;
104
+ }
105
+ }
60
106
  // ─── Search ───────────────────────────────────────────────────────────────────
61
107
  async searchBooks(params, ctx) {
62
108
  const qs = new URLSearchParams();
@@ -117,8 +163,8 @@ export class OpenLibraryService {
117
163
  const id = stripPrefix(workId, '/works/');
118
164
  const url = `${BASE_URL}/works/${id}.json`;
119
165
  ctx.log.debug('Fetching work', { workId: id });
120
- const raw = await this.fetch(url, ctx);
121
- if (!raw.key)
166
+ const raw = await this.fetchOrNull(url, ctx);
167
+ if (!raw?.key)
122
168
  return null;
123
169
  const desc = extractDescription(raw.description);
124
170
  return {
@@ -140,8 +186,8 @@ export class OpenLibraryService {
140
186
  const id = stripPrefix(workId, '/works/');
141
187
  const url = `${BASE_URL}/works/${id}/editions.json?limit=${limit}&offset=${offset}`;
142
188
  ctx.log.debug('Fetching editions', { workId: id, limit, offset });
143
- const raw = await this.fetch(url, ctx);
144
- if (!raw.entries)
189
+ const raw = await this.fetchOrNull(url, ctx);
190
+ if (!raw?.entries)
145
191
  return null;
146
192
  const editions = raw.entries.map((e) => ({
147
193
  edition_id: stripPrefix(e.key ?? '', '/books/'),
@@ -163,9 +209,9 @@ export class OpenLibraryService {
163
209
  if (idType === 'isbn' || idType === 'olid') {
164
210
  const path = idType === 'isbn' ? `isbn/${identifier.replace(/-/g, '')}` : `books/${identifier}`;
165
211
  const url = `${BASE_URL}/${path}.json`;
166
- const raw = await this.fetch(url, ctx);
167
- if (raw.error === 'notfound' || !raw.key) {
168
- throw notFound(`Edition not found for ${idType.toUpperCase()} "${identifier}". Verify the identifier or try searching by title/author.`);
212
+ const raw = await this.fetchOrNull(url, ctx);
213
+ if (!raw || raw.error === 'notfound' || !raw.key) {
214
+ throw notFound(`Edition not found for ${idType.toUpperCase()} "${identifier}". Verify the identifier or try searching by title/author.`, { reason: 'not_found', ...ctx.recoveryFor('not_found') });
169
215
  }
170
216
  // Resolve author names via parallel secondary lookups
171
217
  const authors = await Promise.all((raw.authors ?? []).map(async (authorRef) => {
@@ -205,7 +251,7 @@ export class OpenLibraryService {
205
251
  const rawMap = await this.fetch(url, ctx);
206
252
  const entry = rawMap[bibkey];
207
253
  if (!entry?.details?.key) {
208
- throw notFound(`Edition not found for ${prefix} "${identifier}". Verify the identifier or try searching by title/author.`);
254
+ throw notFound(`Edition not found for ${prefix} "${identifier}". Verify the identifier or try searching by title/author.`, { reason: 'not_found', ...ctx.recoveryFor('not_found') });
209
255
  }
210
256
  const d = entry.details;
211
257
  const authors = (d.authors ?? []).map((a) => ({
@@ -255,8 +301,8 @@ export class OpenLibraryService {
255
301
  const id = stripPrefix(authorId, '/authors/');
256
302
  const url = `${BASE_URL}/authors/${id}.json`;
257
303
  ctx.log.debug('Fetching author', { authorId: id });
258
- const raw = await this.fetch(url, ctx);
259
- if (raw.error === 'notfound' || !raw.key)
304
+ const raw = await this.fetchOrNull(url, ctx);
305
+ if (!raw || raw.error === 'notfound' || !raw.key)
260
306
  return null;
261
307
  const bio = extractDescription(raw.bio);
262
308
  return {
@@ -281,9 +327,9 @@ export class OpenLibraryService {
281
327
  const id = stripPrefix(authorId, '/authors/');
282
328
  const url = `${BASE_URL}/authors/${id}/works.json?limit=${limit}&offset=${offset}`;
283
329
  ctx.log.debug('Fetching author works', { authorId: id, limit, offset });
284
- const raw = await this.fetch(url, ctx);
285
- // Open Library returns {} (HTTP 404) for non-existent author IDs.
286
- if (raw.size === undefined && raw.entries === undefined)
330
+ const raw = await this.fetchOrNull(url, ctx);
331
+ // A 404 maps to null via fetchOrNull; an empty {} 200 carries neither field.
332
+ if (!raw || (raw.size === undefined && raw.entries === undefined))
287
333
  return null;
288
334
  return {
289
335
  total: raw.size ?? 0,
@@ -323,6 +369,17 @@ export class OpenLibraryService {
323
369
  }
324
370
  // ─── Covers ───────────────────────────────────────────────────────────────────
325
371
  getCoverUrl(identifier, idType, target, size) {
372
+ // Enforcement seam: never interpolate an identifier that could escape its
373
+ // path segment, and never build a nonsensical author-by-ISBN lookup. The
374
+ // tool surfaces these as typed ctx.fail rejections; this guards direct calls.
375
+ if (isUnsafeCoverIdentifier(identifier)) {
376
+ throw validationError(`Cover identifier "${identifier}" contains path separators or control characters.`, { reason: 'invalid_identifier' });
377
+ }
378
+ if (target === 'author' && idType === 'isbn') {
379
+ throw validationError('Author photos cannot be looked up by ISBN.', {
380
+ reason: 'invalid_target',
381
+ });
382
+ }
326
383
  const prefix = target === 'author' ? 'a' : 'b';
327
384
  const clean = idType === 'isbn' ? identifier.replace(/-/g, '') : identifier;
328
385
  return `${COVERS_URL}/${prefix}/${idType}/${clean}-${size}.jpg`;
@@ -1 +1 @@
1
- {"version":3,"file":"open-library-service.js","sourceRoot":"","sources":["../../../src/services/open-library/open-library-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open-library-service.js","sourceRoot":"","sources":["../../../src/services/open-library/open-library-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/openlibrary-mcp-server",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "mcpName": "io.github.cyanheads/openlibrary-mcp-server",
5
5
  "description": "Search books and authors, fetch editions, browse subjects, and resolve cover images from Open Library via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
@@ -56,7 +56,7 @@
56
56
  "url": "https://github.com/cyanheads/openlibrary-mcp-server/issues"
57
57
  },
58
58
  "homepage": "https://github.com/cyanheads/openlibrary-mcp-server#readme",
59
- "author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/openlibrary-mcp-server#readme)",
59
+ "author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
60
60
  "funding": [
61
61
  {
62
62
  "type": "github",
@@ -68,7 +68,7 @@
68
68
  }
69
69
  ],
70
70
  "license": "Apache-2.0",
71
- "packageManager": "bun@1.3.11",
71
+ "packageManager": "bun@1.3.14",
72
72
  "engines": {
73
73
  "bun": ">=1.3.0",
74
74
  "node": ">=24.0.0"
@@ -76,13 +76,15 @@
76
76
  "publishConfig": {
77
77
  "access": "public"
78
78
  },
79
+ "trustedDependencies": ["@socketsecurity/bun-security-scanner"],
79
80
  "dependencies": {
80
- "@cyanheads/mcp-ts-core": "^0.10.9",
81
+ "@cyanheads/mcp-ts-core": "^0.10.14",
81
82
  "pino-pretty": "^13.1.3",
82
83
  "zod": "^4.4.3"
83
84
  },
84
85
  "devDependencies": {
85
- "@biomejs/biome": "^2.5.0",
86
+ "@biomejs/biome": "2.5.2",
87
+ "@socketsecurity/bun-security-scanner": "^1.1.2",
86
88
  "@types/node": "^26.0.0",
87
89
  "depcheck": "^1.4.7",
88
90
  "ignore": "^7.0.5",
package/server.json CHANGED
@@ -12,14 +12,14 @@
12
12
  "url": "https://openlibrary.caseyjhand.com/mcp"
13
13
  }
14
14
  ],
15
- "version": "0.1.16",
15
+ "version": "0.1.17",
16
16
  "packages": [
17
17
  {
18
18
  "registryType": "npm",
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/openlibrary-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.1.16",
22
+ "version": "0.1.17",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -48,7 +48,7 @@
48
48
  "registryBaseUrl": "https://registry.npmjs.org",
49
49
  "identifier": "@cyanheads/openlibrary-mcp-server",
50
50
  "runtimeHint": "bun",
51
- "version": "0.1.16",
51
+ "version": "0.1.17",
52
52
  "packageArguments": [
53
53
  {
54
54
  "type": "positional",