# io.github.cyanheads/internet-archive-mcp-server (npm · @cyanheads/internet-archive-mcp-server)

Search the Wayback Machine and IA library (40M+ items), fetch snapshots, item metadata, and text.

- Trust score: 66/100 (medium)
- Change this week: +60
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-07

## Components

- npm · `@cyanheads/internet-archive-mcp-server`: 66/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@cyanheads/internet-archive-mcp-server`
- Version: `0.1.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-07.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 40 of 127 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 55 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1368 tokens (~273/item across 5 items; 5 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add cyanheads-internet-archive-mcp-server -- npx -y @cyanheads/internet-archive-mcp-server
```

### Codex

```bash
codex mcp add cyanheads-internet-archive-mcp-server -- npx -y @cyanheads/internet-archive-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-internet-archive-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@cyanheads/internet-archive-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-internet-archive-mcp-server --command npx --arg -y --arg @cyanheads/internet-archive-mcp-server
```

### Hermes

```yaml
mcp_servers:
  cyanheads-internet-archive-mcp-server:
    command: "npx"
    args: ["-y", "@cyanheads/internet-archive-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-internet-archive-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/internet-archive-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-07 (score 66, +2)

- [security improvement] Known CVEs: partial → pass
- [functional] Dependency health: partial → 0.85

### 2026-08-06 (score 64, +28)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100

### 2026-08-05 (score 36, +2)

- [security improvement] CVE-2026-69207 no longer affects this package
- [security improvement] Known CVEs: fail → partial

### 2026-08-04 (score 34, −1)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-03 (score 35, +15)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 20, +14)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 6, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (5)

### `ia_find_snapshots` (~449 tokens)

Find Wayback Machine Snapshots

Find Wayback Machine snapshots of a URL. Mode "closest" returns the single nearest capture to a given timestamp via the Availability API (fast, one result). Mode "history" returns the full capture list via the CDX API — filterable by date range, HTTP status code, and MIME type, collapsed by default to one capture per day (collapse=timestamp:8). Use history mode to survey how a page changed over time; use closest mode when you need the snapshot nearest a specific date. history mode supports resume-key pagination for URLs with very large capture histories.

Input parameters:

- `collapse`: CDX collapse parameter (history mode only). Format: "timestamp:N" where N is 1–14 (4=year, 6=month, 8=day, 10=hour, 14=exact). Default "timestamp:8" collapses to one per day. Pass an empty string or…
- `from` (string): Start of date range filter in YYYYMMDD format (history mode only). Example: "20200101".
- `limit` (integer): Maximum number of CDX records to return (history mode only, default 100).
- `mode` (string, required): Lookup mode: "closest" returns the single nearest snapshot to the given timestamp; "history" returns the paginated full capture list via the CDX API.
- `resume_key` (string): Opaque pagination key from a previous history mode response. Pass this to continue from where the last page left off.
- `status_filter`: Filter CDX results to a specific HTTP status code (history mode only). Must be a 3-digit numeric code. Example: "200" to return only successful captures.
- `timestamp` (string): Target timestamp in YYYYMMDDHHMMSS format (or any prefix thereof). Required for mode=closest. Example: "20200101" for January 1, 2020.
- `to` (string): End of date range filter in YYYYMMDD format (history mode only). Example: "20231231".
- `url` (string, required): The URL to look up in the Wayback Machine.

Output parameters:

- `cap` (number): The limit that was applied.
- `resume_key` (string): Opaque key to pass as resume_key in the next call to continue paginating CDX history results.
- `shown` (number): Number of snapshots returned.
- `snapshots` (array): List of snapshots matching the query.
- `truncated` (boolean): True when the snapshot list was capped at the limit.

### `ia_get_snapshot` (~141 tokens)

Get Wayback Machine Snapshot Content

Fetch the archived content of a URL at a specific Wayback Machine timestamp. Resolves to the nearest available capture when the exact timestamp has no snapshot. Returns the archived page as readable plain text (HTML stripped) and the canonical replay URL for browser access. Use ia_find_snapshots first to discover valid timestamps for a URL.

Input parameters:

- `timestamp` (string, required): Target Wayback timestamp in YYYYMMDDHHMMSS format (or any prefix). The nearest available snapshot will be resolved and fetched. Example: "20200101120000" for noon on January 1, 2020.
- `url` (string, required): The URL whose archived content to retrieve.

Output parameters:

- `replay_url` (string): Canonical Wayback Machine replay URL used to fetch this content.
- `resolved_status` (string): HTTP status code of the original capture at the resolved timestamp. Returned by the Availability API for imprecise timestamps; assumed "200" for exact 14-digit timestamps (direct path skips the Avail…
- `resolved_timestamp` (string): The actual snapshot timestamp resolved from the nearest capture lookup.
- `text` (string): Readable plain text extracted from the archived HTML (scripts, styles, and nav stripped). Capped at the server-configured IA_MAX_SNAPSHOT_CHARS limit (default 50 000 characters).

### `ia_search_items` (~388 tokens)

Search Internet Archive Items

Search the Internet Archive library (40M+ items) using the Advanced Search (Solr) API. Filter by media type (texts, audio, movies, software, image, etc.), collection, creator, date range, and language. Sort by relevance, date, or downloads. Supports pagination via page/rows. Returns identifiers, titles, creators, media types, dates, download counts, total_found, and current page/rows for pagination context. Use ia_get_item with a returned identifier to get full metadata and file manifests.

Input parameters:

- `collection` (string): Filter to items within a specific collection identifier, e.g. "gutenberg" or "librivoxaudio".
- `creator` (string): Filter by creator name, e.g. "Charles Dickens".
- `date_from` (string): Start of date range filter in YYYY-MM-DD format. Example: "1900-01-01".
- `date_to` (string): End of date range filter in YYYY-MM-DD format. Example: "1999-12-31".
- `language` (string): Filter by language code or name, e.g. "eng" or "English".
- `mediatype` (string): Filter by media type. Common values: texts, audio, movies, software, image, data, web, collection, account.
- `page` (integer): Page number (1-indexed). Combine with rows for pagination.
- `query` (string, required): Solr query string. Supports field prefixes such as title:"war and peace", creator:dickens, subject:history. Plain keywords search all fields.
- `rows` (integer): Number of results per page (default 50, max 200).
- `sort` (string): Sort order in Solr format. Examples: "downloads desc", "date asc", "titleSorter asc". Default: "downloads desc".

Output parameters:

- `items` (array): Items matching the search query.
- `notice` (string): Guidance when the search returned no results.
- `page` (number): Current page number (1-indexed).
- `rows` (number): Number of rows requested per page.
- `total_found` (number): Total number of matching items across all pages.

### `ia_get_item` (~123 tokens)

Get Internet Archive Item

Retrieve full metadata and the complete file manifest for an Internet Archive item by identifier. Returns title, creator, description, subjects, collections, license, language, and every file with its format, size, and direct download URL. The primary tool to act on a search result from ia_search_items. Use ia_get_text to retrieve the readable text of a text item.

Input parameters:

- `identifier` (string, required): Internet Archive item identifier, e.g. "pg1342" (Pride and Prejudice) or "UndergraduateMathematics". Obtain from ia_search_items results.

Output parameters:

- `collection`: Collection(s) this item belongs to when provided.
- `creator`: Creator or author name(s) when provided.
- `date` (string): Publication or upload date when provided.
- `description`: Item description when provided.
- `file_count` (number): Total number of files in the item manifest.
- `files` (array): Complete file manifest for the item.
- `identifier` (string): The item identifier.
- `language` (string): Language when provided.
- `licenseurl` (string): License URL when provided.
- `mediatype` (string): Media type (texts, audio, movies, etc.).
- `rights` (string): Rights statement when provided.
- `subject`: Subject or topic tag(s) when provided.
- `title` (string): Item title when provided by the metadata.

### `ia_get_text` (~204 tokens)

Get Internet Archive Item Text

Retrieve the readable text content of a text item (OCR DjVuTXT or plain-text file) from the Internet Archive, with length-aware truncation and a continuation pointer for pagination. Suited for public-domain books, documents, scanned periodicals, and transcripts. Use max_chars and char_offset to page through long documents. Use ia_get_item first to confirm the item has a text file and to find its mediatype.

Input parameters:

- `char_offset` (integer): Character offset to start reading from (default 0). To read the next page, add max_chars to the previous char_offset.
- `identifier` (string, required): Internet Archive item identifier, e.g. "pg1342" (Pride and Prejudice). Obtain from ia_search_items results.
- `max_chars` (integer): Maximum number of characters to return in this response. Defaults to the server-configured maximum (IA_MAX_SNAPSHOT_CHARS, typically 50 000). Lower values reduce token usage.

Output parameters:

- `char_offset` (number): Character offset used for this response.
- `has_more` (boolean): True when there is more text beyond this slice. Increment char_offset by max_chars to read the next page.
- `max_chars` (number): Maximum characters returned in this response.
- `source_file` (string): Filename of the source text file fetched from the item.
- `text` (string): The text slice starting at char_offset up to max_chars characters.
- `total_chars` (number): Total character count of the full text file.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server#diagnostics

## Score history

- 2026-08-07: 66
- 2026-08-06: 64
- 2026-08-05: 36
- 2026-08-04: 34
- 2026-08-03: 35
- 2026-08-02: 20
- 2026-08-01: 20
- 2026-07-31: 6
- 2026-07-30: 24
- 2026-07-28: 24
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/@cyanheads/internet-archive-mcp-server
- Socket report: https://socket.dev/npm/package/@cyanheads/internet-archive-mcp-server
- Repository: https://github.com/cyanheads/internet-archive-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-internet-archive-mcp-server/cyanheads-internet-archive-mcp-server
