mcpField
W
Wayback Machine

Wayback Machine

本地服务
github.com/Mearman浏览器自动化613 周前更新

关于 Wayback Machine

Wayback Machine 是面向 MCP 客户端和命令行用户的 Internet Archive Wayback Machine 工具,可搜索、获取和比较网页存档。匿名访问可用,也可配置凭据以获得更高的 SPN2 速率限制。

主要功能

  1. 01搜索 CDX 存档记录
  2. 02获取存档快照内容
  3. 03保存网页到 Wayback Machine
  4. 04查看存档状态与截图
  5. 05比较两个快照
  6. 06支持可选访问凭据

适用场景

  1. 01查找某个网址在特定日期的存档
  2. 02保存网页以便日后查阅
  3. 03比较网页的早期与近期版本
  4. 04查看网址的存档次数和截图

MCP 相关

该 MCP 服务向客户端提供网页存档搜索、读取、保存、状态查询、截图列表及快照比较工具。项目也提供命令行工具,并可部署为 Cloudflare Worker。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mearman-mcp-wayback-machine": {
"command": "npx",
"args": [
"-y",
"mcp-wayback-machine"
],
"env": {
"WAYBACK_ACCESS_KEY": "<WAYBACK_ACCESS_KEY>",
"WAYBACK_SECRET_KEY": "<WAYBACK_SECRET_KEY>"
}
}
}
}
启动命令npx -y mcp-wayback-machine
需要配置的环境变量
WAYBACK_ACCESS_KEY密钥Internet Archive S3 access key for higher SPN2 rate limits. Optional — anonymous mode works without it.
WAYBACK_SECRET_KEY密钥Internet Archive S3 secret key for higher SPN2 rate limits. Optional — anonymous mode works without it.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-wayback-machine3.7.1

工具

8

收录的工具列表 · 更新于 2 周前

参数类型必填说明
urlstring是要保存到 Wayback Machine 的 URL
forceGetboolean否使用简单的 HTTP GET,而非浏览器渲染(速度更快,但不执行 JS)
captureOutlinksboolean否同时存档此 URL 链接的最多 100 个外链页面
captureScreenshotboolean否将页面捕获为 PNG 图像(使用 im_ 修饰符)
jsBehaviorTimeoutinteger否捕获前运行 JavaScript 的秒数 N(最多 30 秒)
delayWbAvailabilityboolean否将索引延迟约 12 小时,以降低服务器负载
ifNotArchivedWithinstring否如果指定时间范围内已有存档,则跳过,例如 "30d"(30 天)、"1h"(1 小时)

详细介绍

MCP Wayback Machine 服务

GitHub npm Release CI

用于与 Internet Archive 的 Wayback Machine 交互的 MCP 服务和命令行工具。支持完整的 CDX 搜索、快照内容检索、截图列表、快照比较,以及可选身份验证,以获得更高的 SPN2 速率限制。

npm 下载量图表,对数刻度 GitHub 星标图表,对数刻度

技术栈: TypeScript · Node.js 22+ · ES Modules · pnpm · Turbo · Zod

开始使用

需要 Node.js 22+ 和 pnpm。

pnpm install

可选凭据(可匿名访问,但通过身份验证的请求可获得更高的 SPN2 速率限制):

export WAYBACK_ACCESS_KEY="your-access-key"
export WAYBACK_SECRET_KEY="your-secret-key"

请在 archive.org/account/s3.php 获取凭据。

构建、测试和代码检查

pnpm validate          # typecheck + lint + build + test + untested-files check (the full CI gate)
pnpm check             # typecheck + lint + build only
pnpm build             # compile TypeScript to dist/
pnpm test              # run unit and integration tests
pnpm test:coverage     # run tests with coverage (80% line/branch/function threshold)
pnpm lint              # lint with ESLint
pnpm lint:fix          # auto-fix lint issues

运行单个测试文件:

node --test tests/tools/save.unit.test.ts

端到端测试会调用 Wayback Machine 的实时 API,需选择启用:

pnpm test:e2e          # sets WAYBACK_LIVE_TESTS=1 internally via turbo

pnpm validate 是发布前必须通过的门槛。prepublishOnly 会自动运行它。

架构

src/bin.ts 是入口点。它会检测自身是作为命令行工具调用,还是作为 MCP 服务加载,并据此进行路由。

src/
  bin.ts          — entry point; dispatches to CLI or MCP server
  cli.ts          — Commander-based CLI implementation
  server.ts       — MCP server wiring (ListTools + CallTool handlers)
  contexts.ts     — shared context (rate limiter, cache, credentials)
  schemas.ts      — Zod schemas for all tool inputs; single source of truth
  tools/
    save.ts       — save_url tool (SPN2 API)
    retrieve.ts   — get_archived_url tool
    search.ts     — search_archives tool (CDX API)
    status.ts     — check_archive_status tool (sparkline API)
    screenshots.ts — list_screenshots tool
    compare.ts    — compare_snapshots tool
    cache.ts      — clear_cache tool
    context.ts    — injects shared context into tool handlers
  utils/
    http.ts       — fetch wrapper with rate limiting and Retry-After handling
    cache.ts      — in-memory + disk cache with per-endpoint TTLs
    rate-limit.ts — 15 req/min token bucket
    validation.ts — shared Zod validation helpers

每个工具模块都会导出一个架构(由 ListToolsRequestSchema 使用)和一个执行函数(由 CallToolRequestSchema 使用)。新增工具时,必须在 server.ts 中注册这两项。

缓存 TTL 均为有意设置,请勿统一调整:

资源TTL原因
快照内容24 h捕获后不可变
可用性、CDX、迷你图1 h会增长,但不会发生变化
保存操作30 min对每个 URL 都是幂等的
保存状态轮询30 s活跃任务期间会变化

约定

  • TypeScript 严格模式,启用 noUncheckedIndexedAccess 和 exactOptionalPropertyTypes——不使用 any,不使用 as 断言。
  • 全面使用 ES Modules——package.json 中设置 "type": "module"。相对导入始终使用 .ts 扩展名(构建时通过 rewriteRelativeImportExtensions 重写为 .js)。
  • Zod 是所有工具输入结构的唯一事实来源。schemas.ts 定义这些结构;zodToJsonSchema 会生成与 MCP 兼容的 JSON Schema。
  • Prettier 格式化所有 TypeScript:4 个空格缩进、双引号、尾随逗号(es5)、80 个字符的打印宽度、LF 换行符。
  • Conventional commits 由 commitlint 强制执行。允许的作用域:retrieve、save、search、status、fetch、http、validation、cli、build、release、ci、deps。提交消息必须使用英式英语。
  • 测试与代码并置:单元测试位于 tests/tools/*.unit.test.ts 和 tests/utils/*.unit.test.ts;集成测试位于 tests/*.integration.test.ts。使用 Node.js 内置测试运行器,不使用 Jest 或 Vitest。
  • erasableSyntaxOnly: true——不使用无法在不经过转换的情况下剥离的 TypeScript 语法(不使用 enum、装饰器或 namespace)。

注意事项

  • 推送前运行 pnpm validate。 CI 会运行 check + test + coverage + untested-files。pnpm validate 通过 Turbo 在本地复现这些检查。
  • Turbo 会积极使用缓存。 如果你修改了 Turbo 未跟踪为输入的配置文件,缓存的任务结果可能会过时。如果结果看起来不正确,请运行 pnpm turbo run <task> --force 清除缓存。
  • 运行 test:e2e 必须设置 WAYBACK_LIVE_TESTS。 Turbo 配置通过 globalPassThroughEnv 传递该变量;不要在 .env 文件中设置它,而应在运行前于 shell 中导出。
  • 覆盖率统计不包括 src/contexts.ts、src/cli.ts、src/bin.ts 和 src/tools/context.ts——这些是连接和入口文件。80% 的门槛适用于其余代码。
  • 所有 Wayback Machine API 调用的速率限制为每分钟 15 次,并会自动处理 429 响应中的 Retry-After。使用模拟 HTTP 的测试必须遵守此限制——不要在单元测试中调用真实端点。
  • noUncheckedIndexedAccess 意味着 Record<string, T> 查找返回 T | undefined。不要使用 ?? default 作为回退——请显式缩小类型范围,或重构为具体类型。
  • Node 版本在 .tool-versions 中固定。CI 会针对 Node 22、24 和 26 进行测试。请勿使用 Node 22 中不可用的 Node API。

贡献

提交信息遵循 Conventional Commits 规范,并由 commitlint 在 PR 中检查。PR 以 main 为目标分支;CI 必须通过(check、test、coverage)。发布完全通过 semantic-release 在推送到 main 时自动完成。

发布后,别名包(wayback-machine-mcp、mcp-internet-archive、internet-archive-mcp、@mearman/mcp-wayback-machine)会由 CI 自动发布——请勿手动发布。

安装

作为 MCP 服务
CLI 简写

Claude Code(MCP):

claude mcp add wayback-machine -- npx -y mcp-wayback-machine

Claude Code(插件市场):

/plugin marketplace add https://github.com/Mearman/mcp-wayback-machine.git
/plugin install mcp-wayback-machine@mcp-wayback-machine

OpenAI Codex:

codex mcp add wayback-machine -- npx -y mcp-wayback-machine

如需包含可选凭据:

claude mcp add wayback-machine --env WAYBACK_ACCESS_KEY=xxx --env WAYBACK_SECRET_KEY=xxx -- npx -y mcp-wayback-machine
手动配置

添加到相应的配置文件中:

{
  "wayback-machine": {
    "command": "npx",
    "args": ["-y", "mcp-wayback-machine"],
    "env": {
      "WAYBACK_ACCESS_KEY": "your-access-key",
      "WAYBACK_SECRET_KEY": "your-secret-key"
    }
  }
}
Harness配置文件配置键
Claude Code.mcp.json(项目)/ ~/.claude.json(用户)mcpServers
Codex~/.codex/config.toml[mcp_servers.wayback-machine]
Gemini CLI~/.gemini/settings.jsonmcpServers
Crush.crush.json / ~/.config/crush/crush.jsonmcp
Cline.cline/mcp.jsonmcpServers
Cursor.cursor/mcp.jsonmcpServers
Zed~/.config/zed/settings.jsoncontext_servers
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonmcpServers

env 块为可选项——无需凭据,服务也可以匿名运行。

作为 CLI 工具
npx mcp-wayback-machine save https://example.com

或全局安装:

npm install -g mcp-wayback-machine
wayback save https://example.com
作为 Cloudflare Worker

将 MCP 服务部署为无状态 Cloudflare Worker。可在免费套餐上运行,无需付费绑定项——所有持久化状态均使用缓存 API,该 API 没有公布每日限额。

pnpm add -D wrangler
wrangler deploy

Worker 使用 SDK 的 StreamableHTTPServerTransport,并以无状态模式运行(不使用会话 ID),因此每个请求都是独立的,并能妥善处理冷启动。

环境变量(通过 wrangler secret put 设置):

变量必需用途
WAYBACK_ACCESS_KEY否备用 IA S3 凭据,用于提高 SPN2 速率限制
WAYBACK_SECRET_KEY否备用 IA S3 凭据
MCP_AUTH_TOKEN否用于客户端身份验证的 Bearer 令牌

设置 MCP_AUTH_TOKEN 后,客户端必须发送 Authorization: Bearer <token>。未设置时,Worker 接受未经身份验证的请求。

每个请求的凭据。 客户端可以通过 HTTP 标头在每个请求中传入自己的 IA S3 凭据,覆盖服务端的环境变量:

X-Archive-Access-Key: <your-access-key>
X-Archive-Secret-Key: <your-secret-key>

这样,多个用户就可以共用一个 Worker 部署,同时各自使用自己的凭据来提高 SPN2 速率限制。如果两个标头都存在,它们的优先级高于 WAYBACK_ACCESS_KEY/WAYBACK_SECRET_KEY。如果缺少这些标头,Worker 将使用环境变量作为备用凭据。

Worker 专用文件不包含在主 tsconfig.json 中,而是通过 tsconfig.worker.json 单独进行类型检查(该配置会添加 @cloudflare/workers-types)。

架构。 stdio 和 Worker 部署通过可插拔接口共用相同的工具逻辑:

组件StdioWorker
缓存DiskCacheBackend(操作系统缓存目录)CacheApiBackend(caches.open())
速率限制InMemoryRateLimiterCacheApiRateLimiter
身份验证无StaticTokenAuthProvider(可选)
凭据环境变量请求标头,然后是环境变量

快速示例

Archive https://example.com to the Wayback Machine
Find all archived snapshots of https://example.com from 2023
What's the earliest archived version of https://example.com?
Compare the oldest and newest snapshots of https://example.com
Check how many times https://example.com has been archived

工具

save_url

使用 SPN2 API 将 URL 存档到 Wayback Machine。

参数
参数必需描述
url是要存档的 URL
captureScreenshot否截取 PNG 图片格式的屏幕截图
captureOutlinks否同时存档最多 100 个外链页面
ifNotArchivedWithin否如果在指定时间范围内已有存档则跳过,例如 "30d"
jsBehaviorTimeout否捕获前运行 JavaScript 的秒数(最长 30 秒)
forceGet否使用简单 HTTP GET,而不是浏览器渲染
delayWbAvailability否将索引延迟约 12 小时,以减轻服务端负载
get_archived_url

获取存档快照的内容和元数据。

参数
参数必需描述
url是要获取的 URL
timestamp否指定时间戳(YYYYMMDDhhmmss)或 "latest"
modifier否URL 修饰符:id_(原始内容)、im_(屏幕截图)、js_(JS)、cs_(CSS)
search_archives

通过 CDX API 搜索某个 URL 的存档版本。

参数
参数必需描述
url是要搜索的 URL 模式
matchType否exact、prefix、host 或 domain
from否开始日期(YYYYMMDD 或 YYYY-MM-DD)
to否结束日期(YYYYMMDD 或 YYYY-MM-DD)
limit否最大结果数(默认值为 10)
offset否跳过前 N 个结果
collapse否合并重复项,例如 "timestamp:8"(按小时)或 "digest"
filter否按字段正则表达式筛选,例如 ["statuscode:200", "!mimetype:image.*"]
resolveRevisits否将 warc/revisit 条目解析为原始元数据
showDupeCount否显示每个捕获的重复计数
page否分页页码
pageSize否每页结果数
### `check_archive_status`

检查 URL 的存档统计信息——抓取次数、按年份细分的数据,以及首次和最近一次抓取日期。

参数
参数必填描述
url是要检查的 URL
list_screenshots

列出某个 URL 的可用截图。

参数
参数必填描述
url是要查找截图的 URL
limit否结果数量上限(默认值为 10)
compare_snapshots

比较某个 URL 的两个存档快照。获取两者的原始内容,并提供一个可视化差异对比 URL。

参数
参数必填描述
url是要比较快照的 URL
timestampA否第一个时间戳。默认为最早的可用快照。
timestampB否第二个时间戳。默认为最新的可用快照。
clear_cache

清除所有缓存的 API 响应。需要获取最新数据或保存新 URL 后使用。

命令行用法

wayback save https://example.com
wayback get https://example.com
wayback get https://example.com --timestamp 20231225120000
wayback search https://example.com --from 2023-01-01 --to 2023-12-31 --limit 20
wayback status https://example.com
wayback screenshots https://example.com
wayback compare https://example.com
wayback compare https://example.com --timestamp-a 20230101000000 --timestamp-b 20240101000000

参考资料

许可证

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。

CC BY-NC-SA 4.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。