# Reported issues for internet-archive-mcp-server

Pod holds 15 of 15 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [internet-archive-mcp-server](/mcp/internet-archive-mcp-server).

## Most discussed

### docs(skills): release-and-publish is stale against mcp-ts-core — version reads ahead but content is behind

### Description

`skills/release-and-publish/SKILL.md` in this repo declares `metadata.version: "2.9"`, while the current `@cyanheads/mcp-ts-core` copy of the same skill (`node_modules/@cyanheads/mcp-ts-core/skills/release-and-publish/SKILL.md`) is at `"1.11"`. Because the local version string reads numerically ahead of the framework's, a version-gated resync treats it as an intentional local override and leaves it untouched — but a content diff shows the local copy is missing real upstream guid

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/13) · 2026-08-22 · closed · 2 comments

### bug(ia_get_snapshot): Wayback 404 on exact-timestamp direct path doesn't map to no_snapshot_available contract

When `ia_get_snapshot` is called with an exact 14-digit timestamp (e.g. `"20200601000000"`), the handler skips the Availability API and calls `fetchContent` directly. If the Wayback Machine returns a 404 for that URL/timestamp combination (no capture at that exact timestamp), the raw `FetchHttpError` propagates without being mapped to the declared `no_snapshot_available` contract entry. The result: `data.reason` is `null` and the error text is the generic fetch failure message, not the actionabl

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/5) · 2026-06-07 · closed · 2 comments

### ux(ia_search_items): empty-result notice lives only in structuredContent, not in content[]

`ia_search_items` uses `ctx.enrich.notice()` to surface actionable guidance when the query returns zero results. The notice is correctly placed in `structuredContent.notice` — visible to Claude Code and API clients reading structured output — but the `format()` function only renders the result-count line, leaving `content[]` with no guidance text.

Clients that only consume `content[]` (Claude Desktop, stdio integrations) see nothing helpful when a search returns zero results.

## Repro

Call `i

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/4) · 2026-06-07 · closed · 2 comments

### ux(ia_get_snapshot): resolved_status is hardcoded '200' for exact-timestamp direct path

### Server version

0.1.1

### mcp-ts-core version

^0.9.21

### Description

In `ia-get-snapshot.tool.ts`, when the caller passes an exact 14-digit timestamp, `ia_get_snapshot` builds the replay URL directly and skips the Availability API check. The `resolved_status` field is hardcoded as `'200'` in this path:

```ts
if (isExactTimestamp) {
  snapshotUrl = svc.buildReplayUrl(input.timestamp.trim(), input.url);
  resolvedTimestamp = input.timestamp.trim();
  resolvedStatus = '200'; // status wil

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/3) · 2026-06-07 · closed · 2 comments

### bug(ia_get_item): dark/restricted items return empty metadata instead of an error

### Server version

0.1.1

### mcp-ts-core version

^0.9.21

### Runtime

Bun / Node.js

### Transport

HTTP (Streamable HTTP)

### Description

The Internet Archive Metadata API returns `HTTP 200` with a non-empty response body for dark (restricted/removed) items, but the body contains only server routing fields (`created`, `d1`, `d2`, `dir`, `is_dark`, etc.) — no `metadata` key and no `files` array.

The current check in `archive-metadata-service.ts` only throws `item_not_found` when the respo

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/2) · 2026-06-07 · closed · 2 comments

### bug(ia_find_snapshots): closest mode always fails — SSRF guard checks https:// but Wayback API returns http:// URLs

### Server version

0.1.1

### mcp-ts-core version

^0.9.21

### Runtime

Bun / Node.js

### Transport

HTTP (Streamable HTTP)

### Description

`ia_find_snapshots` with `mode=closest` always returns `no_snapshot_available`, even for well-archived URLs like `example.com`. The same bug breaks `ia_get_snapshot` when a non-exact (< 14-digit) timestamp is passed, since both code paths call `WaybackService.findClosest()`.

Root cause: the SSRF guard in `wayback-service.ts` validates that the Availabi

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/1) · 2026-06-07 · closed · 2 comments

### docs: SECURITY.md and CONTRIBUTING.md ship unresolved template author-comments

### Description

`.github/SECURITY.md` and `.github/CONTRIBUTING.md` were scaffolded from templates that include HTML comments meant to guide the maintainer before publishing (e.g. whether GitHub private vulnerability reporting is enabled, whether to commit to a response-time window, whether PRs are accepted). The placeholder tokens were filled in correctly, but the guidance comments were left in verbatim and are now committed to the public repo:

- `SECURITY.md`: `<!-- GitHub's private reportin

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/15) · 2026-08-22 · closed · 1 comment

### bug(ia_get_text): download_forbidden response omits the declared recovery hint

### Server version

0.1.3 working tree (pending 0.1.4; @cyanheads/mcp-ts-core adoption 0.10.6 → 0.12.3)

### mcp-ts-core version

^0.12.3

### Runtime

Node

### Runtime version

v26.5.0 (Bun 1.4.0 as package manager)

### Transport

http (handler-level — applies to stdio too)

### Description

When the Internet Archive download endpoint answers 403 for a restricted item, the remap to the declared `download_forbidden` contract fires correctly — but the thrown McpError carries no recovery hint: `

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/12) · 2026-08-21 · closed · 1 comment

## Most recent

### feat(config): default MCP_SESSION_MODE to stateless across env, Docker, and src

`Dockerfile` sets `ENV MCP_SESSION_MODE="stateless"`, but `.env.example` carries a commented `# MCP_SESSION_MODE=stateful`, whose comment documents the value set as `stateful | stateless (default: stateful)`. The container and the same code run via `bunx`, `npm start`, or from source therefore resolve to different session modes — stateless in Docker, stateful everywhere else, since the framework schema defaults to `auto` and `auto` resolves to `stateful`.

Related: cyanheads/mcp-ts-core#376

## 

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/16) · 2026-08-22 · open · 0 comments

### bug(ia_find_snapshots): missing timestamp in closest mode surfaces as no_snapshot_available instead of a validation error

### Server version

0.1.3 working tree (pending 0.1.4; @cyanheads/mcp-ts-core adoption 0.10.6 → 0.12.3)

### mcp-ts-core version

^0.12.3

### Runtime

Node

### Runtime version

v26.5.0 (Bun 1.4.0 as package manager)

### Transport

http (handler-level — applies to stdio too)

### Description

`ia_find_snapshots` with `mode: "closest"` and no `timestamp` throws the declared `no_snapshot_available` contract entry, whose `when` clause is "No capture exists near the requested timestamp for this UR

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/11) · 2026-08-21 · open · 0 comments

### feat(ia_get_item): cap or paginate the file manifest — large items bloat both response surfaces

### Use case

`ia_get_item` returns the complete file manifest with no cap, and `format()` renders every file into `content[]`. Routine multi-file items make this heavy: a single LibriVox audiobook lookup — `adventures_holmes` (126 files) — produces ~24 KB of `content[]` text plus ~30 KB of `structuredContent` (~53 KB / ~14K tokens) for one call; `LibrivoxM4bCollectionAudiobooksMain` has 285 files. The manifest dominates the response and is duplicated across both surfaces, even though a caller u

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/10) · 2026-06-30 · open · 0 comments

### docs(ia_get_item): example identifier pg1342 is now a dark item — advertised resource example errors

### Description

`pg1342` ("Pride and Prejudice") is the canonical example identifier across the metadata surface: the descriptions of `ia_get_item` and `ia_get_text`, the `ia://item/{identifier}` resource's `params` description, and — functionally — the resource's `list()`, which advertises `ia://item/pg1342` as *"Example: Pride and Prejudice (pg1342)"*.

That item is now **dark**: `https://archive.org/metadata/pg1342` returns routing fields with `is_dark: true` and no metadata or files. So the

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/9) · 2026-06-30 · open · 0 comments

### bug(ia_get_snapshot): stripHtml leaves numeric and most named HTML entities undecoded

### Server version

0.1.3

### mcp-ts-core version

0.10.6

### Runtime

Node

### Runtime version

v26.3.1

### Transport

stdio

### OS

macOS

### Description

`ia_get_snapshot` extracts readable text with `stripHtml()`, which decodes only six HTML entities (`&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#039;`, `&nbsp;`). Real archived pages are full of numeric entities (`&#160;`, `&#8217;`) and other named ones (`&rsaquo;`, `&mdash;`, `&copy;`), all of which pass through as literal noise in the retur

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/8) · 2026-06-30 · open · 0 comments

### bug(ia_get_text): restricted items surface a raw 401 instead of the declared download_forbidden error

### Server version

0.1.3

### mcp-ts-core version

0.10.6

### Runtime

Node

### Runtime version

v26.3.1

### Transport

stdio

### OS

macOS

### Description

`ia_get_text` declares a `download_forbidden` error contract (code `Forbidden`, recovery hint about login/borrowing), but it is never delivered. For access-restricted items (lending / print-disabled, `access-restricted-item: true`), fetching the text file redirects to a fulfillment host that returns a non-2xx status. `fetchWithTimeout`

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/7) · 2026-06-30 · closed · 1 comment

### bug(ia_get_item): array-valued language fails output validation (also ia://item resource)

### Server version

0.1.3

### mcp-ts-core version

0.10.6

### Runtime

Node

### Runtime version

v26.3.1 (runtime-independent — fails in the output-schema validation layer)

### Transport

stdio

### OS

macOS

### Description

`ia_get_item` casts several IA metadata fields to a bare `string`, but the [Internet Archive Metadata API](https://archive.org/developers/md-read.html) returns an **array** for any multi-valued field. When `language` (and likewise `licenseurl`, `title`, `date`, `rights

[Read the thread](https://github.com/cyanheads/internet-archive-mcp-server/issues/6) · 2026-06-30 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/internet-archive-mcp-server/issues).
