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.
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 · 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 · 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 · 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:
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 (`&`, `<`, `>`, `"`, `'`, ` `). Real archived pages are full of numeric entities (` `, `’`) and other named ones (`›`, `—`, `©`), 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).