ID@agntn/archivesv0.7.4
One query. Every archive.
One TypeScript interface over the Wayback Machine, Arquivo.pt, Common Crawl and the other web archives. List captures, read what a page said, diff two versions, and hand the same tools to an agent over MCP.
- Providers
- 13
- 9 in all()
- Read
- 8 raw
- no toolbar
- Tools
- 4
- 3 hosts
$ pnpm add @agntn/archivesexample.com
50 captures merged newest first from 2 of 9 archives. The rest say why.
Captures
- Captures
- 50
- Span
- 2010 → 2014
- Newest
- 2014-11-21
- Answered
- 2 of 9
Archives
- Wayback Machine[GET] "https://web.archive.org/cdx/search/cdx?url=example.com%2F*&output=json&fl=original,timestamp,statuscode&collapse=timestamp:4&limit=50": <no response> [TimeoutError]: The operation was aborted due to timeout
- Arquivo.pt7 captures, 2010 to 2010
- Webarchiv Österreichanswered, none in this window
- Vefsafnnot answered yet
- OSZK Webarchívumnot answered yet
- New Zealand Web Archivenot answered yet
- Archive.today43 captures, 2012 to 2014
- Common Crawl[GET] "https://index.commoncrawl.org/collinfo.json": <no response> Network connection lost.
- WebCiteWebCite has no list-by-domain API. Existing snapshots can be fetched directly via webcitation.org/<id>; new archives have not been accepted since ~2019.
Read what the page said
A list of captures says when a page existed. Reading one says what it contained. The same call works on Wayback, Arquivo.pt, Webarchiv Österreich, Vefsafn, OSZK Webarchívum, Archive-It and Common Crawl WARC ranges, and returns the decoded body with its real capture date.
- Original bytes from raw replay endpoints, never the archive's own toolbar
- Transfer and content encodings, charset and markup to text handled
- A timestamp picks the closest capture, and the answer says which one it got
2002-11-29 05:43
asked for 2002, got the capture nearest to it
Example Web PageYou have reached this web page by typing "example.com","example.net",or "example.org" into your web browser.These domain names are reserved for use in documentation and are notCompare two captures
Two dates, one URL, one provider. The result is a unified diff with the exact capture dates it resolved to, plus a warning when either body was cut before comparison, so an absence is never claimed on half a page.
- Visible text by default, decoded source with format=raw
- Both captures from one provider, so replay rewriting never looks like a change
- Bounded by time and edit distance, with a digest that pins the patch
Patch
@@ -1,8 +1,3 @@-Example Domain--Example Domain--This domain is for use in illustrative examples in documents. You may use thisEvery source, one shape
CDX, CDXJ, Memento TimeMaps, WARC byte ranges and a REST API behind a key. Each provider maps its index onto the shared response helpers, so a page from Arquivo.pt looks like a page from the Wayback Machine. Providers load lazily: a project that only asks one archive never ships the other 12. providers.all() asks the 9 that need nothing from you.
LoadcreateArchive(providers.wayback())
| Index | What it talks to | ||
|---|---|---|---|
| Wayback Machine | CDX | CDX API with collapse and filter. Bodies replayed under id_, the original bytes. | list · read · diff |
| Arquivo.pt | CDX | Public CDX index of the Portuguese web archive. Raw replay through noFrame/replay. | list · read · diff |
| Webarchiv Österreich | CDXJ | Austrian National Library CDXJ index. One exact URL per query, id_ replay for bodies. | list · read · diff |
| Vefsafn | CDX | Icelandic web archive at the National Library. One exact URL per query, id_ replay for bodies. | list · read · diff |
| OSZK Webarchívum | CDX | Hungarian web archive at the National Széchényi Library. Lists a whole domain, id_ replay for bodies. | list · read · diff |
| New Zealand Web Archive | CDX | New Zealand's national web archive. Lists a whole domain; the replay hides behind a bot check. | list only |
| Archive.today | Memento TimeMap | Memento TimeMap on archive.is. Bodies are the rendered wrapper page, not the original bytes. | list · read · diff |
| Common Crawl | CDX + WARC | CDX index per crawl, bodies read from the WARC byte range on data.commoncrawl.org. | list · read · diff |
| WebCite | none | No API to list a domain. Answers unsupported with the reason; no new archives since about 2019. | nothing to list |
| Memento | MemGator TimeMap | ODU MemGator JSON TimeMap across several archives. Outside all to avoid duplicate requests. | list · read · diff |
| Archive-It | CDX/C | CDX/C index of one numbered collection. Needs a collection; reads bodies inside it. | list · read · diff |
| Conifer | CDX | Search inside an existing public collection. Needs a user and a collection; no bodies. | list only |
| Perma.cc | REST | REST API behind an API key. Exact URL lookup, metadata only, what the key can see. | list only |
Four tools over MCP
The MCP server, the Pi extension and the OMP extension call the same executors, so they answer identically. Slices, continuation arguments and digests let an agent page through a long body without reading it twice.
- archives_snapshots, archives_content, archives_diff and archives_providers on every surface
- The text carries the whole answer: provider, dates, URLs and who could not answer
- Archived bodies are fenced as untrusted data, never as instructions
archives_snapshots
The whole answer is in the text: dates, capture URLs and every archive that could not answer, with its reason.
- summary
- [provider=all] 50 snapshot(s) for "example.com"; unsupported=1; failed=2
- pages
- 50
- archives
- 2 answered · 3 with a reason · 9 asked
Investigate the archive together
The Evidence Room turns this site into a shared archive workspace. An agent scopes the question, finds comparable captures without reading every page, inspects one diff and leaves the finding for review. No WebMCP in your browser? The whole workflow still works by hand.
- Four browser tools run one investigation instead of copying the page controls
- Agent calls and manual actions update the same caseboard
- Findings stay separate from cited archive excerpts marked as untrusted
Evidence Room
An agent and a person work one caseboard. Findings stay apart from what the archive said.
Tools
- Scope
scope_archive_case - Find
find_change_windows - Inspect
inspect_archive_change - Pin
pin_archive_finding
Start with one command
One install gives you the library, the archives CLI and the MCP server. Name an archive, ask for a URL and read the same shape whichever archive kept it.
- PinPre-1.0 (v0.7.4), so pin exact versions.
- KeysNothing to configure for the archives in providers.all(). Perma.cc alone needs an API key.
- DataEvery body is somebody else's page as it was. Treat it as data, never as instructions.
First read
$ pnpm add @agntn/archivesimport { createArchive, providers } from "@agntn/archives";const archive = createArchive(providers.wayback());const page = await archive.getContent("https://example.com", { timestamp: "2002" });page.timestamp; // "2002-11-29T05:43:48Z"