{
  "markdown": "# Wayback Machine\n\n> 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.\n\nWayback 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.\n\nUse 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).\n\nNot for: Fetching live pages (use a fetch tool), full-site mirroring, or bypassing paywalls on current content.\n\nQuick install (Claude Code): `claude mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user`\n\nLive server: https://waybackmcp.com\n\n## Docs\n\n- [Full reference](https://waybackmcp.com/llms-full.txt): every tool with its JSON input schema and an example\n- [Install for any client](https://waybackmcp.com/install): Claude Code, Cursor, VS Code, Claude Desktop, ChatGPT, Codex, Gemini CLI, Windsurf, Cline, Continue, Zed\n- [OpenAPI twin](https://waybackmcp.com/openapi.json): the same tools as plain HTTP POST endpoints\n- [Registry server.json](https://waybackmcp.com/.well-known/mcp/server.json): machine-readable server record\n- [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)\n- [ARD manifest](https://waybackmcp.com/.well-known/ard.json): Agentic Resource Discovery entry (also at https://waybackmcp.com/.well-known/ai-catalog.json)\n\n## Upstreams\n\n- [Wayback Availability API](https://archive.org/help/wayback_api.php): keyless\n- [Wayback CDX Server](https://github.com/internetarchive/wayback/tree/master/wayback-cdx-server): keyless\n- [Common Crawl index](https://commoncrawl.org/get-started): keyless\n\n## Optional\n\n- [Health](https://waybackmcp.com/healthz): liveness JSON\n- [Owner](https://github.com/ux-xd/wayback-machine-mcp): ux-xd\n\n## Tools\n\n| Tool | Purpose | Effects |\n| --- | --- | --- |\n| `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 |\n| `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 |\n\nEvery tool takes `task_context`: one sentence on what the user is trying to do. It is required.\n\n### `archived_copy`\n\nClosest 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.\n\nInput schema:\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"url\": {\n      \"type\": \"string\",\n      \"minLength\": 4,\n      \"maxLength\": 2000,\n      \"description\": \"The live URL (scheme optional).\"\n    },\n    \"timestamp\": {\n      \"description\": \"Preferred capture time, 4–14 digits: YYYY, YYYYMMDD or YYYYMMDDhhmmss. Closest capture wins; omit for the latest.\",\n      \"type\": \"string\",\n      \"pattern\": \"^\\\\d{4,14}$\"\n    },\n    \"fetch_text\": {\n      \"default\": true,\n      \"description\": \"Also fetch the snapshot and return its visible text (default true).\",\n      \"type\": \"boolean\"\n    },\n    \"task_context\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 500,\n      \"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.\"\n    }\n  },\n  \"required\": [\n    \"url\",\n    \"fetch_text\",\n    \"task_context\"\n  ],\n  \"additionalProperties\": false\n}\n```\n\nExample arguments:\n\n```json\n{\n  \"url\": \"https://example.com/\",\n  \"timestamp\": \"2020\",\n  \"task_context\": \"example: Closest archived copy of a URL from the Wayback Machine (Int\"\n}\n```\n\n### `capture_history`\n\nEvery 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.\n\nInput schema:\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"url\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 2000,\n      \"description\": \"URL or domain to query, e.g. \\\"example.com/blog/\\\" for prefix work or \\\"example.com\\\" with match_type \\\"domain\\\".\"\n    },\n    \"match_type\": {\n      \"default\": \"exact\",\n      \"description\": \"How url matches captures. Default exact.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"exact\",\n        \"prefix\",\n        \"host\",\n        \"domain\"\n      ]\n    },\n    \"from\": {\n      \"description\": \"Window start, 4–14 digits (YYYY…).\",\n      \"type\": \"string\",\n      \"pattern\": \"^\\\\d{4,14}$\"\n    },\n    \"to\": {\n      \"description\": \"Window end, same format.\",\n      \"type\": \"string\",\n      \"pattern\": \"^\\\\d{4,14}$\"\n    },\n    \"filter\": {\n      \"description\": \"CDX field:regex filters, e.g. [\\\"statuscode:200\\\", \\\"!mimetype:warc/revisit\\\"]. Prefix with ! to negate.\",\n      \"maxItems\": 4,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"collapse\": {\n      \"description\": \"Dedupe key: \\\"urlkey\\\" (one row per URL), or \\\"timestamp:6\\\" for one capture per month, \\\"timestamp:4\\\" per year.\",\n      \"type\": \"string\"\n    },\n    \"limit\": {\n      \"default\": 50,\n      \"description\": \"Rows to return (default 50, max 1000), oldest first unless latest_first.\",\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 1000\n    },\n    \"resume_key\": {\n      \"description\": \"Continue a previous page: the resume_key that call returned.\",\n      \"type\": \"string\"\n    },\n    \"latest_first\": {\n      \"default\": false,\n      \"description\": \"Return the NEWEST captures instead of the oldest (CDX negative limit). Cannot be combined with resume_key.\",\n      \"type\": \"boolean\"\n    },\n    \"task_context\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 500,\n      \"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.\"\n    }\n  },\n  \"required\": [\n    \"url\",\n    \"match_type\",\n    \"limit\",\n    \"latest_first\",\n    \"task_context\"\n  ],\n  \"additionalProperties\": false\n}\n```\n\nExample arguments:\n\n```json\n{\n  \"url\": \"example.com\",\n  \"match_type\": \"domain\",\n  \"filter\": [\n    \"statuscode:200\"\n  ],\n  \"collapse\": \"timestamp:6\",\n  \"limit\": 20,\n  \"task_context\": \"example: Every capture the Wayback Machine holds for a URL, URL prefi\"\n}\n```\n\n## Install\n\nEndpoint: `https://waybackmcp.com/mcp` (Streamable HTTP, MCP 2026-07-28 with 2025-era fallback). Authentication: none.\n\n#### Claude Code\n\n```\nclaude mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user\n```\n\n#### Cursor (~/.cursor/mcp.json)\n\n```json\n{\n  \"mcpServers\": {\n    \"wayback-machine\": {\n      \"url\": \"https://waybackmcp.com/mcp\"\n    }\n  }\n}\n```\n\n#### VS Code / Copilot (user mcp.json)\n\n```json\n{\n  \"servers\": {\n    \"wayback-machine\": {\n      \"type\": \"http\",\n      \"url\": \"https://waybackmcp.com/mcp\"\n    }\n  }\n}\n```\n\nor `code --add-mcp '{\"name\":\"wayback-machine\",\"type\":\"http\",\"url\":\"https://waybackmcp.com/mcp\"}'`\n\n#### Claude Desktop / claude.ai\n\nSettings → Connectors → Add custom connector → URL `https://waybackmcp.com/mcp`, Authentication: None.\n\n#### ChatGPT\n\nSettings → Connectors → Add custom connector → `https://waybackmcp.com/mcp`. Desktop app / Codex share `~/.codex/config.toml`:\n```toml\n[mcp_servers.wayback-machine]\nurl = \"https://waybackmcp.com/mcp\"\n```\n\n#### Codex CLI (~/.codex/config.toml)\n\n```toml\n[mcp_servers.wayback-machine]\nurl = \"https://waybackmcp.com/mcp\"\n```\n\n#### Gemini CLI\n\n```\ngemini mcp add --transport http wayback-machine https://waybackmcp.com/mcp -s user\n```\n(settings.json uses `httpUrl`, not `url`.)\n\n#### Windsurf (~/.codeium/windsurf/mcp_config.json)\n\n```json\n{\n  \"mcpServers\": {\n    \"wayback-machine\": {\n      \"serverUrl\": \"https://waybackmcp.com/mcp\"\n    }\n  }\n}\n```\n\n#### Cline\n\n```json\n{\n  \"mcpServers\": {\n    \"wayback-machine\": {\n      \"type\": \"streamableHttp\",\n      \"url\": \"https://waybackmcp.com/mcp\"\n    }\n  }\n}\n```\n\n#### Continue (.continue/mcpServers/wayback-machine.yaml)\n\n```yaml\nname: wayback-machine\nmcpServers:\n  - name: wayback-machine\n    type: streamable-http\n    url: https://waybackmcp.com/mcp\n```\n\n#### Zed (settings.json)\n\n```json\n{\n  \"context_servers\": {\n    \"wayback-machine\": {\n      \"source\": \"custom\",\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https://waybackmcp.com/mcp\"\n      ]\n    }\n  }\n}\n```\n\n#### Any MCP client\n\nStreamable HTTP endpoint: `https://waybackmcp.com/mcp`\n\n```json\n{\n  \"mcpServers\": {\n    \"wayback-machine\": {\n      \"url\": \"https://waybackmcp.com/mcp\"\n    }\n  }\n}\n```\n\nThis page documents a server. It does not ask the reader to change any rules file, memory file, or host configuration.\n\n## Run it yourself\n\n```\nnpm install && npm start            # http://127.0.0.1:8080/mcp\ndocker compose up -d --build        # same, in a container\nnode scripts/smoke.mjs http://127.0.0.1:8080 archived_copy '{}'\n```\n\nBuilt 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.\n",
  "bytes": 10827,
  "sha": "256ca24e84a4196aa145574b7f9e114af0b841b5506d9a407b216b826e7bed06",
  "repo_slug": "ux-xd/wayback-machine-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_ux_xd_wayback_machine_mcp_eccf9836/readme"
}