# mcp-archiveorg [Health: Active]

**Category:** 🔎 Search & Data Extraction  
**Repository:** https://github.com/smeet666/mcp-archiveorg  
**GitHub Stars:** 3  
**npm Downloads (last month):** 1083  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/mcp-archiveorg

## Description
Search inside digitised books, browse the Internet Archive catalogue and read Wayback captures.

## Tools
Capabilities this server exposes over MCP:

- **search_inside** — Search the text inside digitised books, newspapers and documents on the Internet Archive. This reads what optical recognition took off the scanned pages, so it finds a phrase that appears nowhere in a title or a catalogue record. Put a phrase in double quotes to hold the words together in that order. The index folds accents, case and punctuation before it matches, so the letters are not held: a quoted "bûcher" comes back on pages printing Bücher and Bucher. Read an excerpt before repeating a quoted query as the spelling a page carries. Without quotes the words are matched separately, which finds far more. 'total' counts the documents that match, and they page: ask for page 2, 3 and so on to see beyond the first answer. It is not a count of how many times the phrase occurs. The index reports no page number, so a match names the item and the passage, never a leaf. Follow source_url and search the item to find where the passage sits. When 'inside_container' is true the passage came from a document bundled inside the item, and the title, creator and year describe the container rather than the text that matched: read 'matched_file' for what actually holds it. Use search_items or search_books instead when looking for a work by its title, author or subject.
- **search_items** — Search the Internet Archive catalogue: films, books, recordings, images, software and datasets. This matches titles, creators and descriptions, so a compilation whose notes mention a name ranks alongside that person's own work: read 'creator' on each row before treating a result as theirs. It does not read the contents of a scan; use search_inside for a phrase within a book. Set 'media_type' whenever the kind of thing is known, because one title exists across several media and mixing them makes a result list unreadable. 'oldest', 'newest', 'year_from' and 'year_to' all read one field: the date a depositor typed into the record. An item with no date carries a placeholder the index sorts as a real one, a date written as a fragment is filed at the year that fragment reads as, and the field holds no era, so a Babylonian tablet of 1712 BCE answers a search of 1700 to 1750. Read an order or a range as a statement about that field. Every row carries an 'identifier', which get_item takes.
- **get_item** — Read one Internet Archive item by its identifier, as returned by search_items or search_inside. Sections are opt-in: 'basic' is the default and covers what a description needs. 'files' lists the downloadable files, which on a scanned film or book run to dozens of derivatives, so filter by format when a particular one is wanted. 'full_metadata' returns every field the Archive publishes for the item, which is large and rarely needed. 'file_count' and 'total_bytes' are always reported, whether or not the file list was asked for.
- **get_snapshot** — Find the Wayback Machine capture of a web page closest to a given date. Give 'at' to ask for a moment in time; leave it out for the most recent capture. The answer always states 'days_from_requested', because the closest capture can be years away from the date asked for: read it before describing what the page said on that date. It also states the address the capture is of, which the Wayback Machine can resolve to a neighbouring form of the one asked about. This finds the capture and links to it. It does not return the page's contents.
- **list_snapshots** — List Wayback Machine captures of a web page, oldest first, with the dates they were taken. Answers how long a page has been archived and how often, which get_snapshot cannot. A capture whose content repeats the row before it is left out of the index answer. The index also holds one site under several addresses at once, such as its www form, its https form and a form carrying credentials, and returns them interleaved, so two consecutive rows can differ because the address differs rather than because the page did. Every row names the address it captured; read that before counting the captures of any one of them. A capture records when the crawler came, not when the page changed: the change happened somewhere between two dates. This route is slow, tens of seconds on a heavily archived address, and it is paged for that reason. To walk further back, pass the 'next_cursor' from the previous answer as 'cursor'. The index counts rows rather than positions, so there is no page number and no arithmetic to do: a null 'next_cursor' means the end of what it holds.
- **search_books** — Find a book on Open Library, the Internet Archive's catalogue of works, either by name or by description. Pass 'query' when you know what you are looking for: a title, an author. Free text matches parts of words and reads titles and authors together, so a name also finds works by authors whose name merely contains it: read 'authors' on each row before treating a result as that author's work. Pass the criteria instead when you do not, and they combine: 'subject' for what a work is catalogued under, 'place' for where it is set, 'time' for the period it treats, 'person' for who it is about, plus ranges on the year of first publication and on the page count. 'sort' by rating or by readers answers 'what is worth reading', which relevance alone does not. 'first_published_year' is the year Open Library derives from its edition records, and a reissue or a mistyped edition can put it centuries from the real date; 'newest' and 'oldest' rank on that field, so the rows carrying the doubtful years lead the order. Answers who wrote a book, when it first appeared and how many editions exist, which the item catalogue describes poorly because it holds one upload at a time. 'archive_identifiers' lists up to 3 scans of the work: pass one to get_item, or use it to read the book itself. 'scan_count' says how many the work has. A scan is one edition, and a work first printed centuries ago is often held only as a later reissue or a translation, so read the scan's own record before dating what it holds. Use this to identify a work, and search_inside to find a phrase within one.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "mcp-archiveorg": {
    "command": "npx",
    "args": ["-y","mcp-archiveorg"]
  }
}
```

## Documentation

## What mcp-archiveorg does

mcp-archiveorg exposes search and retrieval tools for three related collections. Internet Archive tools cover catalogue items, OCR text inside scanned books and documents, item metadata, and downloadable files. Open Library search helps identify works by title, author, subject, place, period, person, publication year, or page count. Wayback tools locate captures of web pages and list the dates held for an address.

A typical workflow starts with a search and follows an `identifier` into `get_item`. For full-text research, `search_inside` returns passages and the item or container that holds them. For historical web research, `get_snapshot` finds the capture nearest a requested moment, while `list_snapshots` shows the available capture dates.

## How it works

The server communicates with an MCP client through the command launched by `npx`, or through the supplied Docker image or MCP bundle. Its remote requests require outbound HTTPS access to `archive.org`, `web.archive.org`, and `openlibrary.org` when run in Docker. No credentials, account, volume, or listening port are required.

Search results are paginated. `search_inside` searches OCR output, so excerpts can contain recognition errors. Quoted queries keep words together, while unquoted words are matched separately; accent, case, and punctuation differences are folded by the index. Its `total` value counts matching documents, not phrase occurrences, and the result does not identify a printed page number.

Wayback results describe captures rather than page contents. `get_snapshot` reports how far the selected capture is from the requested date and may return a neighbouring URL form. `list_snapshots` is paged with a cursor and can take tens of seconds for heavily archived addresses.

## Setup and configuration

Install with the standard MCP command:

```json
{
  "mcpServers": {
    "archiveorg": {
      "command": "npx",
      "args": ["-y", "mcp-archiveorg"]
    }
  }
}
```

Node.js 24 or later is required. Claude Code can add it with `claude mcp add archiveorg -- npx -y mcp-archiveorg`. Cursor and VS Code have installation links, and the same standard configuration works with Claude Desktop.

Docker users can run `ghcr.io/smeet666/mcp-archiveorg` with an interactive standard input stream and no TTY. The project also publishes an `.mcpb` bundle that can be opened by clients supporting MCP bundles; the bundle includes its dependencies and needs no npm setup. No environment variables need to be configured.

## Tools and capabilities

- `search_inside` searches OCR text in digitised books, newspapers, and documents. It returns excerpts, identifiers, source URLs, and the file containing a match.
- `search_items` searches Internet Archive catalogue metadata across texts, films, audio, images, software, datasets, and web material. Filters include media type, date range, and sort order.
- `get_item` reads an item by identifier. Optional sections provide basic metadata, files, or the complete metadata record; file count and total bytes are always included.
- `search_books` searches Open Library works using free text or criteria such as subject, place, time, person, first-publication year, and page count. Results can include up to three archive identifiers and the number of scans.
- `get_snapshot` finds the Wayback capture closest to a supplied date, or the most recent capture when no date is given.
- `list_snapshots` lists archived captures oldest first, with dates, captured addresses, and a cursor for retrieving later results.

## Limitations and notes

OCR matches reflect the text recognition layer rather than a verified transcription. A hit inside a bundled item may describe the container; inspect `matched_file` to identify the document that actually matched. Catalogue dates are depositor-entered fields, while Open Library publication years are derived from edition records, so either can require verification in the returned record. A Wayback capture records when a crawler visited a URL, not exactly when the page changed, and finding a capture does not return the page body.

_Full upstream README: https://allmcps.com/mcp/mcp-archiveorg/readme_

