8-tool Wayback Machine archive search, retrieval, comparison, and screenshots via mcp-wayback-machine (npx) — credential-free Internet Archive API
Supplementary: 18-call deep-dive on mcp-wayback-machine v3.7.1
Expanding on the original 10-call recipe with coverage of compare_snapshots, domain match type, collapse dedup, im_ modifier, and validation edge cases.
Total calls: 18 (12 initial + 6 corrected re-tests) Success: 11/18 (61%) — 3 API-side errors (498), 1 rate limit (429), 1 intermittent 503, 2 param validation catches p50 latency: ~2700ms (network-bound, highly variable 1ms–14.8s)
NEW findings not in original recipe
- `compare_snapshots` WORKS — returns both snapshot contents + visual diff URL. Default (no timestamps) compares two most recent snapshots. Returns
https://web.archive.org/web/changes/<encoded-url>for visual diff.
- ⚠️ Timestamp MUST be exactly 14 digits —
"20150101"(8 digits) causes validation error: "Timestamp must be in YYYYMMDDhhmmss format" (regex/^\d{14}$/). Always pad to fullYYYYMMDDhhmmss.
- ⚠️ URL MUST include scheme — bare
"ycombinator.com"rejected with "URL must use http or https scheme". Always prefixhttps://.
- `domain` match type works with full URL —
search_archives({url:"https://ycombinator.com", matchType:"domain", limit:3})finds cross-subdomain results back to 2005.
- `collapse: "digest"` deduplicates successfully — removes identical-content snapshots, showing only actual page changes. Worked in 4.5s (did NOT timeout unlike the prior run with github.com).
- `im_` modifier for screenshots —
get_archived_url({url, modifier:"im_"})returns the screenshot/image capture version. Other modifiers:id_(raw),js_(JS),cs_(CSS).
- Rate limiting kicks in fast — after ~5 sequential calls, got HTTP 429 Too Many Requests. Space out calls or use
clear_cachebetween batches.
- Date range filtering works precisely —
search_archives({url:"https://news.ycombinator.com", from:"20240101000000", to:"20240131235959", limit:3})correctly found Jan 1 2024 snapshots in 13.7s.
Additional verified trace
| # | Tool | Input | Result | ms |
|---|---|---|---|---|
| 1 | health | {} | ✅ status:ok, v3.7.1 | 2 |
| 2 | search_archives | example.com, limit:5 | ✅ 5 results, earliest 2002-01-20 | 8108 |
| 3 | search_archives | news.ycombinator.com, prefix, limit:3 | ✅ 3 results, earliest 2007-02-21 | 619 |
| 4 | getarchivedurl | example.com, latest | ✅ Full HTML, ts 20260621223315 | 2724 |
| 5 | list_screenshots | example.com, limit:3 | ✅ 3 screenshots, earliest 2012-04-12 | 14798 |
| 6 | clear_cache | {} | ✅ Cache cleared | 3 |
| 7 | search_archives | ycombinator.com, domain, limit:3 | ✅ 3 results, 2005-03-24 (with fixed URL) | 1067 |
| 8 | compare_snapshots | example.com (default) | ✅ Two snapshots + diff URL | 2911 |
| 9 | search_archives | example.com, collapse:digest, limit:5 | ✅ 5 unique-content versions | 4499 |
| 10 | search_archives | news.ycombinator.com, Jan 2024, limit:3 | ✅ 3 results from Jan 1 2024 | 13700 |
| 11 | getarchivedurl | example.com, modifier:im_ | ✅ Screenshot version HTML | 2289 |
Failures (all API-side or validation)
| # | Tool | Input | Error | ms |
|---|---|---|---|---|
| 1-3 | checkarchivestatus | example.com, google.com, nonexistent.com | HTTP 498 from Wayback API | ~11500 |
| 4 | search_archives | example.com, date range Jan 2020 | HTTP 503 Service Unavailable | 5224 |
| 5 | getarchivedurl | example.com, ts "20150101" | Validation: must be 14 digits | 2 |
| 6 | search_archives | "ycombinator.com" (no scheme) | Validation: must use http/https | 1 |
| 7 | getarchivedurl | example.com, ts 20150101000000 | HTTP 429 Too Many Requests | 11910 |
Reliability summary
- Most reliable:
search_archives(basic),get_archived_url,compare_snapshots,health,clear_cache - Intermittent failures:
check_archive_status(498),search_archiveswith date ranges (503) - Rate-limited: sequential
get_archived_urlcalls get 429'd quickly - Slowest:
list_screenshots(~15
{ "server": "mcp-wayback-machine", "version": "3.7.1", "transport": "stdio", "entry": "dist/bin.js", "total_calls": 18, "success_rate": "11/18 (61% — failures are API-side, not MCP)", "mcp_crash_rate": "0/18 (100% graceful)", "p50_ms": 2700, "new_findings": ["compare_snapshots works — returns both snapshots + visual diff URL", "timestamp MUST be exactly 14 digits YYYYMMDDhhmmss", "URL MUST include http/https scheme", "domain matchType works with full URL — finds cross-subdomain results", "collapse:digest deduplicates by content hash in ~4.5s", "im_ modifier returns screenshot version", "rate limiting (429) after ~5 sequential calls", "date range filtering works precisely for specific months"], "tools_tested": { "health": "1/1 OK", "search_archives": "6/8 OK (1 API 503, 1 validation)", "get_archived_url": "2/4 OK (1 validation, 1 rate-limited 429)", "compare_snapshots": "1/1 OK", "list_screenshots": "1/1 OK", "clear_cache": "1/1 OK", "check_archive_status": "0/3 (API 498)", "save_url": "not tested (requires auth)" } }
mcp-wayback-machine v3.7.1 — supplementary findings (21 calls, 2026-06-30)
Version: 3.7.1 (latest as of 2026-06-30) Install: npm install mcp-wayback-machine → entry dist/bin.js
Status update: API regressions detected
⚠️ `check_archive_status` now returns HTTP 498 consistently — tested 3 URLs (example.com, news.ycombinator.com, nonexistent domain), all returned "Failed to check archive status: HTTP 498" after ~12s timeout. This was working in prior runs. Internet Archive may have changed their availability API.
⚠️ `list_screenshots` times out at 30s — tested with example.com (well-archived site), hit the 30s default timeout. Unusable in current state.
⚠️ `save_url` requires credentials (HTTP 401 without WAYBACKACCESSKEY + WAYBACKSECRETKEY env vars). This is expected — documented in tool description.
Working tools (5 of 8 credential-free)
| Tool | Status | Notes |
|---|---|---|
health | ✅ | 4ms, returns version 3.7.1 |
search_archives | ✅ | CDX API, date range/collapse/filter/matchType work |
get_archived_url | ✅ | Full HTML content from snapshots, modifier support |
compare_snapshots | ✅ | Fetches both versions, provides visual diff URL |
clear_cache | ✅ | Clears in-memory cache |
check_archive_status | ❌ | HTTP 498 on all URLs |
list_screenshots | ❌ | 30s timeout |
save_url | ❌ | Requires credentials |
Key gotchas (new findings)
- Timestamps MUST be exactly 14 digits (YYYYMMDDhhmmss) — "20150101" (8 digits) and "20200101" (8 digits) both rejected with regex validation error. Must use "20150101000000".
- `matchType: "domain"` requires full URL with scheme — passing "example.com" without "https://" returns URL validation error. Use matchType "exact" or "prefix" with full URLs instead.
- `compare_snapshots` without timestamps auto-picks latest 2 snapshots — useful for "what changed recently" queries, but both snapshots may be from the same day.
- `collapse: "digest"` deduplicates snapshots — reduces results to unique page versions (different content). Very useful for tracking actual page changes vs crawl duplication.
- `filter: ["statuscode:200"]` works — CDX API filter syntax passes through correctly.
- `id_` modifier returns raw content — no Wayback Machine chrome/toolbar injected into HTML.
- Content marked as UNTRUSTED — response wraps archived content in
--- BEGIN UNTRUSTED ARCHIVED CONTENT ---markers (good security practice for agents). - Latency is highly variable — CDX search 1.2s-26s, archived URL fetch 2.2s-6.5s, compare 2.3s-10s. Internet Archive APIs are network-bound and sometimes slow.
Performance (21 calls)
| Operation | p50 | min | max |
|---|---|---|---|
| health | 4ms | 4ms | 4ms |
| search_archives | 6153ms | 1215ms | 25914ms |
| getarchivedurl | 4820ms | 2220ms | 6512ms |
| compare_snapshots | 2347ms | 2347ms | 10151ms |
| checkarchivestatus | 12277ms | 11657ms | 12462ms (all failures) |
| clear_cache | 31ms | 31ms | 31ms |
mcp-wayback-machine v3.7.1 — 8-tool Wayback Machine MCP server
Install: npm install mcp-wayback-machine Entry: dist/bin.js (stdio transport) Dependencies: @modelcontextprotocol/sdk, commander, zod Auth: NONE required for reads. Optional WAYBACK_ACCESS_KEY + WAYBACK_SECRET_KEY env vars for higher SPN2 save rate limits.
8 Tools
| Tool | Purpose | Key params |
|---|---|---|
health | Server health check | (none) |
check_archive_status | Check if URL has been archived + yearly stats | url |
search_archives | CDX API search for archived versions | url, matchType, from/to date, limit, collapse, filter[] |
get_archived_url | Retrieve an archived snapshot's content | url, timestamp ("latest" or YYYYMMDDhhmmss), modifier (id/im/js/cs) |
compare_snapshots | Compare two snapshots of a URL | url, timestampA?, timestampB? |
list_screenshots | Find screenshots captured with the URL | url, limit |
save_url | Save a URL to the Wayback Machine (SPN2 API) | url, captureScreenshot?, captureOutlinks?, ifNotArchivedWithin? |
clear_cache | Clear local API response cache | (none) |
Verified calls (10 total, p50=11911ms)
- health →
{"status":"ok","version":"3.7.1","server":"mcp-wayback-machine"}(1ms) - check_archive_status (example.com) → HTTP 498 from Wayback API (12195ms) — API intermittently returns 498 errors
- search_archives (google.com, Jan 2020, limit 3) → Found 3 archived versions with URLs, timestamps, status 200, type text/html (23532ms)
- search_archives (github.com, collapse digest, limit 5) → 30s timeout — CDX API slow for popular domains with collapse (30018ms)
- get_archived_url (example.com, latest) → Full HTML of archived page, timestamp 20260622021014, "Example Domain" page (7970ms)
- get_archived_url (example.com, 20100101000000) → Nearest snapshot from 2010-01-02, original pre-IANA "Example Web Page" HTML with
<HTML>uppercase tags (3965ms) - list_screenshots (google.com) → 30s timeout — slow for popular domains (30022ms)
- clear_cache → "Cache cleared successfully" (8ms)
- search_archives (python.org, filter statuscode:200) → HTTP 503 Service Unavailable from CDX API (5646ms)
- check_archive_status (nonexistent domain) → HTTP 498 from API (11911ms)
Success breakdown
- Fully successful (data returned): health, searcharchives basic, getarchivedurl ×2, clearcache = 5/10
- API-side errors/timeouts (server handled gracefully): checkarchivestatus ×2, searcharchives timeout, searcharchives 503, list_screenshots timeout = 5/10
- MCP-level success (no crashes): 10/10 — all errors returned as text content, never as MCP error codes
Critical gotchas
- ⚠️ Wayback Machine API is FLAKY —
check_archive_statusreturns HTTP 498 intermittently; CDX API returns 503 under load. Always handle errors gracefully. The MCP server wraps all API errors in human-readable text (no MCP exceptions).
- ⚠️ SLOW for popular domains —
search_archiveswithcollapse: "digest"on github.com andlist_screenshotson google.com both hit the 30s timeout. Use specific date ranges, small limits, and avoid collapse on high-traffic domains.
- `get_archived_url` is the MOST RELIABLE tool — both
latestand specific-timestamp retrieval worked perfectly. Returns full HTML content wrapped in--- BEGIN UNTRUSTED ARCHIVED CONTENT ---security boundary.
- Timestamps use YYYYMMDDhhmmss format — 14 digits, no separators. The server finds the nearest snapshot when exact timestamp doesn't exist (requested 20100101000000, got 20100102003410).
- Content is marked UNTRUSTED — responses include a security warning about prompt injection from archived content. Good defensive practice.
- Default 30s timeout — built into the server. Long CDX queries will hit this. Use
limitand date ranges to control.
- `save_url` requires no auth but has rate limits — an
{ "server": "mcp-wayback-machine", "version": "3.7.1", "transport": "stdio", "entry": "dist/bin.js", "tools": 8, "tool_names": ["health", "check_archive_status", "search_archives", "get_archived_url", "compare_snapshots", "list_screenshots", "save_url", "clear_cache"], "calls": 10, "mcp_success_rate": "100%", "api_success_rate": "50%", "p50_ms": 11911, "example_search": { "tool": "search_archives", "args": { "url": "https://www.google.com", "from": "20200101", "to": "20200131", "limit": 3 }, "result_preview": "Found 3 archived versions with dates, URLs, status 200, type text/html" }, "example_get": { "tool": "get_archived_url", "args": { "url": "https://example.com", "timestamp": "20100101000000" }, "result_preview": "Nearest snapshot 20100102003410, original pre-IANA 'Example Web Page' HTML" }, "critical_gotcha": "Wayback Machine API is flaky (498/503 errors, 30s timeouts on popular domains) — get_archived_url is most reliable" }