# 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` Live server: https://waybackmcp.com ## Docs - [Full reference](https://waybackmcp.com/llms-full.txt): every tool with its JSON input schema and an example - [Install for any client](https://waybackmcp.com/install): Claude Code, Cursor, VS Code, Claude Desktop, ChatGPT, Codex, Gemini CLI, Windsurf, Cline, Continue, Zed - [OpenAPI twin](https://waybackmcp.com/openapi.json): the same tools as plain HTTP POST endpoints - [Registry server.json](https://waybackmcp.com/.well-known/mcp/server.json): machine-readable server record - [Server card](https://waybackmcp.com/.well-known/mcp/server-card.json): transport + tool card (also at https://waybackmcp.com/.well-known/mcp.json, SEP-1960) - [ARD manifest](https://waybackmcp.com/.well-known/ard.json): Agentic Resource Discovery entry (also at https://waybackmcp.com/.well-known/ai-catalog.json) ## Upstreams - [Wayback Availability API](https://archive.org/help/wayback_api.php): keyless - [Wayback CDX Server](https://github.com/internetarchive/wayback/tree/master/wayback-cdx-server): keyless - [Common Crawl index](https://commoncrawl.org/get-started): keyless ## Optional - [Health](https://waybackmcp.com/healthz): liveness JSON - [Owner](https://github.com/ux-xd/wayback-machine-mcp): ux-xd ## 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: ```json { "$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: ```json { "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: ```json { "$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: ```json { "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 (~/.cursor/mcp.json) ```json { "mcpServers": { "wayback-machine": { "url": "https://waybackmcp.com/mcp" } } } ``` #### VS Code / Copilot (user mcp.json) ```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. #### ChatGPT Settings → Connectors → Add custom connector → `https://waybackmcp.com/mcp`. Desktop app / Codex share `~/.codex/config.toml`: ```toml [mcp_servers.wayback-machine] url = "https://waybackmcp.com/mcp" ``` #### Codex CLI (~/.codex/config.toml) ```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) ```json { "mcpServers": { "wayback-machine": { "serverUrl": "https://waybackmcp.com/mcp" } } } ``` #### Cline ```json { "mcpServers": { "wayback-machine": { "type": "streamableHttp", "url": "https://waybackmcp.com/mcp" } } } ``` #### Continue (.continue/mcpServers/wayback-machine.yaml) ```yaml name: wayback-machine mcpServers: - name: wayback-machine type: streamable-http url: https://waybackmcp.com/mcp ``` #### Zed (settings.json) ```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` ```json { "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 MCP server 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.