Wayback Machine
Wayback Machine for agents: closest archived copy of a URL with its text, and full capture history Remote MCP server over Streamable HTTP at
https://waybackmcp.com/mcp. Free, no API key. Tools:archived_copy,capture_history. The tool list is fixed per version.
Wayback Machine MCP wraps the Internet Archive's keyless APIs so an agent can recover a page that is gone, changed, or walled: archived_copy returns the closest snapshot to a date with the page text extracted, and capture_history lists every capture of a URL, prefix, host or domain with CDX filters (status, mime, collapse, date window, newest-first, resume-key paging). Falls back to the Common Crawl index when the Wayback Machine has nothing. Free, no API key, no account.
Use when: A page 404s, moved, was edited, or is behind a wall and you need what it said at a point in time; or you need every capture of a site or path (site archaeology: what a site ever had, when a page changed).
Not for: Fetching live pages (use a fetch tool), full-site mirroring, or bypassing paywalls on current content.
Quick install (Claude Code): claude mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user
Docs
- Full reference: every tool with its JSON input schema and an example
- Install for any client: Claude Code, Cursor, VS Code, Claude Desktop, ChatGPT, Codex, Gemini CLI, Windsurf, Cline, Continue, Zed
- OpenAPI twin: the same tools as plain HTTP POST endpoints
- Registry server.json: machine-readable server record
Upstreams
- Wayback Availability API: keyless
- Wayback CDX Server: keyless
- Common Crawl index: keyless
Optional
Tools
| Tool | Purpose | Effects |
|---|---|---|
archived_copy |
Closest archived copy of a URL from the Wayback Machine (Internet Archive), nearest to a date if given. Returns the snapshot URL, its exact timestamp, the raw-bytes URL, and optionally the page text (HTML stripped, capped at 30k chars). Falls back to the Common Crawl index when the Wayback Machine has no capture. Use when a page is dead, changed, or walled and you need what it said. | read-only, open-world, idempotent |
capture_history |
Every capture the Wayback Machine holds for a URL, URL prefix, host or whole domain (CDX index). Filter by status code or MIME type, keep one capture per period (collapse), restrict a date window, and page with a resume key. Use for site archaeology: what a site ever had, when a page changed, every URL under a path. | read-only, open-world, idempotent |
Every tool takes task_context: one sentence on what the user is trying to do. It is required.
archived_copy
Closest archived copy of a URL from the Wayback Machine (Internet Archive), nearest to a date if given. Returns the snapshot URL, its exact timestamp, the raw-bytes URL, and optionally the page text (HTML stripped, capped at 30k chars). Falls back to the Common Crawl index when the Wayback Machine has no capture. Use when a page is dead, changed, or walled and you need what it said.
Input schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 4,
"maxLength": 2000,
"description": "The live URL (scheme optional)."
},
"timestamp": {
"description": "Preferred capture time, 4–14 digits: YYYY, YYYYMMDD or YYYYMMDDhhmmss. Closest capture wins; omit for the latest.",
"type": "string",
"pattern": "^\\d{4,14}$"
},
"fetch_text": {
"default": true,
"description": "Also fetch the snapshot and return its visible text (default true).",
"type": "boolean"
},
"task_context": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "One sentence on what the user is ultimately trying to do (the task this call serves). Required; it tunes the result and is how this free service learns what agents need."
}
},
"required": [
"url",
"fetch_text",
"task_context"
],
"additionalProperties": false
}
Example arguments:
{
"url": "https://example.com/",
"timestamp": "2020",
"task_context": "example: Closest archived copy of a URL from the Wayback Machine (Int"
}
capture_history
Every capture the Wayback Machine holds for a URL, URL prefix, host or whole domain (CDX index). Filter by status code or MIME type, keep one capture per period (collapse), restrict a date window, and page with a resume key. Use for site archaeology: what a site ever had, when a page changed, every URL under a path.
Input schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 2000,
"description": "URL or domain to query, e.g. \"example.com/blog/\" for prefix work or \"example.com\" with match_type \"domain\"."
},
"match_type": {
"default": "exact",
"description": "How url matches captures. Default exact.",
"type": "string",
"enum": [
"exact",
"prefix",
"host",
"domain"
]
},
"from": {
"description": "Window start, 4–14 digits (YYYY…).",
"type": "string",
"pattern": "^\\d{4,14}$"
},
"to": {
"description": "Window end, same format.",
"type": "string",
"pattern": "^\\d{4,14}$"
},
"filter": {
"description": "CDX field:regex filters, e.g. [\"statuscode:200\", \"!mimetype:warc/revisit\"]. Prefix with ! to negate.",
"maxItems": 4,
"type": "array",
"items": {
"type": "string"
}
},
"collapse": {
"description": "Dedupe key: \"urlkey\" (one row per URL), or \"timestamp:6\" for one capture per month, \"timestamp:4\" per year.",
"type": "string"
},
"limit": {
"default": 50,
"description": "Rows to return (default 50, max 1000), oldest first unless latest_first.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"resume_key": {
"description": "Continue a previous page: the resume_key that call returned.",
"type": "string"
},
"latest_first": {
"default": false,
"description": "Return the NEWEST captures instead of the oldest (CDX negative limit). Cannot be combined with resume_key.",
"type": "boolean"
},
"task_context": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "One sentence on what the user is ultimately trying to do (the task this call serves). Required; it tunes the result and is how this free service learns what agents need."
}
},
"required": [
"url",
"match_type",
"limit",
"latest_first",
"task_context"
],
"additionalProperties": false
}
Example arguments:
{
"url": "example.com",
"match_type": "domain",
"filter": [
"statuscode:200"
],
"collapse": "timestamp:6",
"limit": 20,
"task_context": "example: Every capture the Wayback Machine holds for a URL, URL prefi"
}
Install
Endpoint: https://waybackmcp.com/mcp (Streamable HTTP, MCP 2026-07-28 with 2025-era fallback). Authentication: none.
Claude Code
claude mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user
Cursor / Cosmos (~/.cursor/mcp.json)
{
"mcpServers": {
"wayback-machine": {
"url": "https://waybackmcp.com/mcp"
}
}
}
VS Code / Copilot (user mcp.json)
{
"servers": {
"wayback-machine": {
"type": "http",
"url": "https://waybackmcp.com/mcp"
}
}
}
or code --add-mcp '{"name":"wayback-machine","type":"http","url":"https://waybackmcp.com/mcp"}'
Claude Desktop / claude.ai
Settings → Connectors → Add custom connector → URL https://waybackmcp.com/mcp, Authentication: None.
Claude Desktop / claude.ai
Settings → Connectors → Add custom connector → URL https://waybackmcp.com/mcp, Authentication: None.
ChatGPT
Settings → Connectors → Add custom connector → https://waybackmcp.com/mcp. Desktop app / Codex share ~/.codex/config.toml:
[mcp_servers.wayback-machine]
url = "https://waybackmcp.com/mcp"
Codex CLI (~/.codex/config.toml)
[mcp_servers.wayback-machine]
url = "https://waybackmcp.com/mcp"
Gemini CLI
gemini mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user
(settings.json uses httpUrl, not url.)
Windsurf (~/.codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"wayback-machine": {
"serverUrl": "https://waybackmcp.com/mcp"
}
}
}
Cline
{
"mcpServers": {
"wayback-machine": {
"type": "streamableHttp",
"url": "https://waybackmcp.com/mcp"
}
}
}
Continue (.continue/mcpServers/wayback-machine.yaml)
name: wayback-machine
mcpServers:
- name: wayback-machine
type: streamable-http
url: https://waybackmcp.com/mcp
Zed (settings.json)
{
"context_servers": {
"wayback-machine": {
"source": "custom",
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://waybackmcp.com/mcp"
]
}
}
}
Any MCP client
Streamable HTTP endpoint: https://waybackmcp.com/mcp
{
"mcpServers": {
"wayback-machine": {
"url": "https://waybackmcp.com/mcp"
}
}
}
This page documents a server. It does not ask the reader to change any rules file, memory file, or host configuration.
Run it yourself
npm install && npm start # http://127.0.0.1:8080/mcp
docker compose up -d --build # same, in a container
node scripts/smoke.mjs http://127.0.0.1:8080 archived_copy '{}'
Built with the agie MCP factory kit (kit/): Streamable HTTP MCP plus agent-readable docs (llms.txt, server.json, install pages, a REST twin), all from one manifest (servers/wayback-machine/mcp.factory.json). This repo is the server logic only; no telemetry is collected or sent by this code. MIT.