关于 mcp-archiveorg
mcp-archiveorg 将 Internet Archive 与 Open Library 的检索和阅读能力提供给聊天客户端,适合查找数字馆藏与旧网页的研究者。它支持全文、目录、图书索引及 Wayback Machine 快照查询,无需 API 密钥或账户。
主要功能
- 01搜索扫描文档全文
- 02按条件搜索馆藏目录
- 03读取条目记录、文件和许可
- 04按主题与年代查找图书
- 05列出并读取网页历史快照
适用场景
- 01查找扫描书籍中提及的词句
- 02按媒介类型或年份筛选馆藏
- 03查询图书主题、地点或人物
- 04查看网站在指定日期的历史版本
MCP 相关
该 MCP 服务向客户端提供 Internet Archive、Open Library 和 Wayback Machine 的搜索、条目读取及快照查询工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
6收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | integer | 否 | 匹配结果页码,从 1 开始。分页最多到 100 页。 |
| limit | integer | 否 | 要返回的匹配项数。 |
| query | string | 是 | 要搜索的词语或带引号的短语,例如 '"call me ishmael"'。 |
| max_excerpt_chars | integer | 否 | 单个段落的字符数预算。请结合 'max_excerpts_per_match' 阅读:答案大小等于这两项的乘积再乘以匹配数。 |
| max_excerpts_per_match | integer | 否 | 每个匹配结果保留的段落数。索引会在较长作品中找到多个段落,后面的段落很少提供首段未包含的信息。 |
详细介绍
mcp-archiveorg
Internet Archive 是一家非营利图书馆,保存着世界出版的内容:扫描版书籍、电影、录制的音乐、广播、软件,以及网络上的网页。自 1996 年以来,这些网页一直由 Wayback Machine 反复捕获。数百万册书籍和文档已通过光学字符识别处理,因此可以搜索其中的文字;旁边的 Open Library 索引则介绍作品、版本及其主题。
此服务可将聊天客户端连接到该图书馆。你可以搜索文档全文、搜索馆藏目录、查看某件藏品的记录及其文件、按主题、地点、时期或人物查找书籍,还可以阅读某一天的网络内容。无需 API 密钥或账户。
安装
一键安装
Claude Code
claude mcp add archiveorg -- npx -y mcp-archiveorg
Claude Desktop、Cursor 以及任何使用标准配置格式的客户端
{
"mcpServers": {
"archiveorg": {
"command": "npx",
"args": ["-y", "mcp-archiveorg"]
}
}
}
需要 Node 24 或更高版本,无需设置环境变量。
使用 Docker
{
"mcpServers": {
"archiveorg": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-archiveorg:2.0.2"]
}
}
}
-i 会保持标准输入流打开,协议通过该流传输;省略 -t 是因为 TTY 会改写数据流。容器需要通过 HTTPS 出站访问 archive.org、web.archive.org 和 openlibrary.org,除此之外不需要任何东西:无需卷、端口或凭据。
打包版本,无需 npm
从最新版本下载
mcp-archiveorg-2.0.2.mcpb 并打开。支持 MCP bundle 的客户端会自行安装,无需 npm,也无需编辑配置文件。bundle 内含依赖项,因此安装时不会下载任何内容。
你可以询问什么
- “哪些书提到了 Beaumont 灯塔?”
- “为我查找有关 1906 年旧金山地震的资料。”
- “该条目包含哪些文件?它采用什么许可证?”
- “为我查找 1900 年以前出版的法国养蜂书籍。”
- “那个网站在 2001 年 3 月是什么样子?”
通常的流程是先搜索,再查看记录:结果行会包含一个 identifier,然后由 get_item 读取它。
工具
| 工具 | 功能 |
|---|---|
search_inside | 搜索档案扫描文档中的文字。 |
search_items | 按标题、创建者、主题和媒体类型搜索目录。 |
get_item | 读取某个条目的记录、文件和许可证。 |
search_books | 按主题、地点、时期、人物、篇幅或年份查找书籍。 |
list_snapshots | 列出 Wayback Machine 保存的某个地址的快照。 |
get_snapshot | 读取某个地址在指定日期或附近日期的快照。 |
search_inside
搜索档案文档中的文字。这些文字通过光学字符识别从页面提取,因此片段会带有识别过程中产生的误读。
| 参数 | 类型 | 必填 | 功能 |
|---|---|---|---|
query | 字符串,2 至 300 个字符 | 是 | 要在文档中查找的短语。 |
limit | 整数,1 至 50,默认值为 10 | 否 | 返回的匹配项数量。 |
page | 整数,1 至 100,默认值为 1 | 否 | 要查看的匹配结果页码。 |
max_excerpt_chars | 整数,80 至 1200,默认值为 300 | 否 | 返回片段的长度。 |
max_excerpts_per_match | 整数,1 至 10,默认值为 3 | 否 | 每篇匹配文档返回的片段数。 |
返回内容:hits,其中每项都包含 identifier,可供 get_item 使用;还包含 title、creator 和 year;excerpts 是机器从页面识别出的片段;matched_file 指明实际包含该片段的文件;以及 source_url。如果条目打包了多篇文档,且片段位于其中一篇文档内,inside_container 就为 true;此时标题、创建者和年份属于整个容器。
**total 统计文档数,结果按页显示。**它表示文档数量,匹配结果的最后一页会比第一页短。**不提供页码:**索引报告的是文字在条目中的位置,而几乎所有匹配项的值都是 1,因此这里不会指出书中的页码,也没有链接声称提供了页码。
search_items
在整个目录中搜索档案所收录的所有类型的内容。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
query | string,1 到 300 个字符 | 是 | 在目录中查找的词语。 |
media_type | texts、movies、audio、image、software、data 或 web | 否 | 要保留的内容类型。 |
year_from | integer,1 到 2200 | 否 | 最早年份。 |
year_to | integer,1 到 2200 | 否 | 最晚年份。 |
sort | relevance、downloads、newest、oldest 或 title,默认值为 relevance | 否 | 结果的排序方式。 |
limit | integer,1 到 50,默认值为 10 | 否 | 返回的结果数量。 |
page | integer,1 到 100,默认值为 1 | 否 | 要返回的结果页码。 |
返回内容: items,每项包含 identifier、title、creator、year、
media_type、downloads 和 source_url。记录中未填写的字段为
null。total 是目录中符合条件的项目总数,可能多于实际返回的数量。
get_item
读取某个项目的记录。由于记录可能很长,较大的部分需要明确请求才会返回。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
identifier | string,1 到 200 个字符 | 是 | 搜索结果行中包含的标识符。 |
sections | 数组,可选值为 basic、files、full_metadata,默认值为 ["basic"] | 否 | 要返回的部分。 |
file_format | string,最多 60 个字符 | 否 | 仅保留一种格式的文件。 |
max_files | integer,1 到 200,默认值为 25 | 否 | 返回文件数量上限。 |
max_description_chars | integer,100 到 20000,默认值为 2000 | 否 | 返回的描述长度。 |
返回内容: 项目及其 title、creator、year、media_type 和
source_url,以及 description、date、publisher、language、collections
和 license_url;记录中未注明的字段为 null。无论本次返回了哪些内容,file_count
都会统计该项目所含的文件数量,total_bytes 则表示这些文件的总大小。只有在
sections 中请求时才会返回 files 和 full_metadata。
search_books
通过档案旁的作品索引查找书籍。该索引描述的是作品及其版本,而非某一本扫描副本。
| Argument | Type | Required | What it does |
|---|---|---|---|
query | string, 2 to 300 characters | no | 自由文本,有则填写。 |
subject | string, 2 to 100 characters | no | 索引为作品归类的主题。 |
place | string, 2 to 100 characters | no | 作品涉及的地点。 |
time | string, 2 to 100 characters | no | 作品涉及的时期。 |
person | string, 2 to 100 characters | no | 作品涉及的人物。 |
language | string, 2 to 20 characters | no | 作品的语言。 |
year_from | integer, 1 to 2200 | no | 最早的首次出版年份。 |
year_to | integer, 1 to 2200 | no | 最晚的首次出版年份。 |
pages_min | integer, 1 to 100000 | no | 可接受作品的最少页数。 |
pages_max | integer, 1 to 100000 | no | 可接受作品的最多页数。 |
sort | relevance, rating, readers, newest or oldest, default relevance | no | 结果行的排序方式。 |
limit | integer, 1 to 50, default 10 | no | 返回的结果行数。 |
page | integer, 1 to 100, default 1 | no | 返回第几页结果行。 |
返回内容: books,每项包含 title、authors、first_published_year、
edition_count、档案所藏扫描副本的 archive_identifiers、
scan_count、按各版本计算的中位数页数 page_count、subjects 和
source_url。searched_for 用文字说明本次回答所回应的查询,包括自由文本
和应用的每项条件;如果仅按条件进行搜索,query 为 null。total 统计匹配的作品数。
list_snapshots
列出 Wayback Machine 保存的某个地址的网页快照。
| Argument | Type | Required | What it does |
|---|---|---|---|
url | string, 3 to 2000 characters | yes | 要查询的地址。 |
limit | integer, 1 to 100, default 20 | no | 返回的快照数。 |
cursor | string, up to 500 characters | no | 上一次回答给出的 next_cursor。 |
返回内容: snapshots,每项包含 ISO 格式的 UTC 时间戳 captured_at、快照本身的
url,以及爬取记录的 status。first 和 last 描述的是本次回答,而非完整历史记录;
next_cursor 用于继续列出结果。
get_snapshot
读取某个地址在指定日期或附近日期的一次存档。
| Argument | Type | Required | What it does |
|---|---|---|---|
url | string, 3 to 2000 characters | yes | 要查询的地址。 |
at | YYYY-MM-DD or an ISO timestamp | no | 目标日期。默认返回最新的存档。 |
返回内容: snapshot 及其 captured_at 和地址,以及 requested_url 和 requested_at,从而可以看出请求日期与返回存档之间的时间差。对于没有存档的日期,Wayback Machine 会返回其保存的最接近日期的存档。
摘录的价值
扫描文档中的文字是通过光学字符识别从页面中提取的。因此,文本片段可能带有识别过程造成的误读,返回的内容会保留识别结果而不作修正:读起来奇怪的词,就是机器识别到的内容。引用扫描件中的片段时,请链接到该条目,以便读者查看页面。
配置
所有变量均为可选。在客户端配置的 env 块中设置。
| Variable | Default | What it does |
|---|---|---|
IA_USER_AGENT | 项目标识 | 向档案说明你的应用,并提供可联系到相关人员的地址。 |
IA_MIN_INTERVAL_MS | 1000 | 两次请求之间的间隔,范围为 500 至 60000。 |
IA_TIMEOUT_MS | 20000 | 单次请求的截止时间,范围为 1000 至 120000。 |
IA_HISTORY_TIMEOUT_MS | 60000 | Wayback Machine 历史记录请求的截止时间,范围为 5000 至 180000。 |
IA_MAX_RETRIES | 3 | 瞬时故障后的重试次数,范围为 0 至 8。 |
IA_CACHE_TTL_MS | 900000 | 答案在内存中的保留时长,范围为 0 至 86400000。 |
IA_CACHE_MAX_ENTRIES | 200 | 内存中同时保留的答案数,范围为 1 至 5000。 |
IA_LOG_LEVEL | error | 日志级别:silent、error、info 或 debug,写入 stderr。 |
超出范围的值会回退为默认值,原因会写入 stderr。
错误
每次失败都会附带六种代码之一、一条消息,以及在有帮助时指出下一步操作的提示。
| Code | 发生了什么 | 如何处理 |
|---|---|---|
not_found | 档案库已作出响应,但没有此项内容。 | 使用 search_items 检查标识符。 |
invalid_input | 请求尚未发出,参数就已被拒绝。 | 阅读消息,其中会指出相关参数。 |
rate_limited | 档案库要求此客户端放慢速度。 | 等待提示中指出的秒数,然后使用相同参数再次调用。该项内容仍然存在。 |
parse_failure | 收到的响应格式无法被此客户端读取。 | 在问题跟踪器中报告。 |
network_error | 请求未能完成。 | 稍后重试。 |
timeout | 请求超过了截止时间。 | 增大 IA_TIMEOUT_MS;如果是捕获历史记录,则增大 IA_HISTORY_TIMEOUT_MS。 |
作为库使用
读取档案库的这一层独立发布,拥有自己的请求节奏、缓存和错误处理,且不附带任何协议。
import { ArchiveClient } from "mcp-archiveorg/client";
const client = new ArchiveClient();
const { data, cached } = await client.searchItems({ query: "san francisco earthquake" });
console.log(data.total, cached);
每次读取都会返回 { data, cached },并抛出携带六种代码之一的错误。两次请求之间的最短间隔在这里同样适用。
请求节奏与来源标注
请求会逐个发出,间隔至少一秒;无论服务端如何配置,最短间隔都为半秒。User-Agent 始终以项目标识和可联系到相关人员的地址结尾。Internet Archive 是一家非营利图书馆,在其文档中搜索是它处理的成本较高的请求之一。
每条结果都会附上读取该结果的页面地址。内容归存放者个人或机构所有,并受每条记录在 license_url 中注明的条款约束。
此 MCP 服务是一个非官方项目,与 Internet Archive 没有关联。
隐私
此服务不会收集你的任何信息,也不会向作者发送任何内容。它在你的计算机上运行,只会联系 archive.org、web.archive.org 和 openlibrary.org,仅此而已;运行期间会将响应保存在内存中,不会写入磁盘。
PRIVACY.md 说明了请求会携带哪些内容,以及哪些设置会影响这些内容。
开发
npm install
npm run build:fixtures
npm test
npm run check
测试使用生成的测试夹具运行,不会发出网络请求。实时测试套件 npm run test:live 会为每条路由各发出一个请求,并在每晚直接对档案库运行。
贡献
Bug、问题和想法请提交到问题跟踪器。欢迎提交拉取请求;先创建问题有助于商定更改的形式。请参阅 CONTRIBUTING.md。
许可证
MIT,详见 LICENSE。内容归存放者所有,并受每条记录所注明的条款约束。
mcp-archiveorg(法语)
Internet Archive 是一家非营利图书馆,保存世界出版的内容:数字化书籍、电影、录制的音乐、广播、软件,以及网页本身。自 1996 年起,这些网页便由 Wayback Machine 一次又一次地抓取。数百万本书籍和文档经过了光学字符识别,因此其中的文字可以搜索;与之相邻的 Open Library 索引则介绍作品、版本和主题。
此服务将对话客户端连接到这座图书馆。你可以搜索文档全文、搜索目录、查看文档信息和文件,按主题、地点、时期或人物查找书籍,还可以查看网页在某一天的样子。无需 API 密钥,也无需账号。
安装
一键安装
Claude Code
claude mcp add archiveorg -- npx -y mcp-archiveorg
Claude Desktop、Cursor 以及所有采用标准配置格式的客户端
{
"mcpServers": {
"archiveorg": {
"command": "npx",
"args": ["-y", "mcp-archiveorg"]
}
}
}
需要 Node 24 或更高版本,无需设置任何环境变量。
使用 Docker
{
"mcpServers": {
"archiveorg": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-archiveorg:2.0.2"]
}
}
}
-i 会保持标准输入处于打开状态,标准输入是协议通道;省略 -t 是因为 TTY 会改写数据流。容器只需能够通过 HTTPS 访问 archive.org、web.archive.org 和 openlibrary.org,无需其他条件:不需要卷、端口或凭据。
Bundle,无需 npm
从最新发布版本下载 mcp-archiveorg-2.0.2.mcpb 并打开。支持 MCP bundle 的客户端会自动完成安装,无需 npm,也无需修改配置文件。Bundle 已包含其依赖项,因此安装时不会下载任何内容。
可以询问什么
- “哪些书提到了 Beaumont 灯塔?”
- “帮我找找关于 1906 年旧金山地震的文档。”
- “这份文档包含哪些文件?采用什么许可证?”
- “帮我找找 1900 年之前出版的法国养蜂类书籍。”
- “这个网站在 2001 年 3 月是什么样子?”
通常的操作流程是先搜索,再查看信息:搜索结果中的一行包含一个 identifier,使用 get_item 即可读取。
工具
| 工具 | 功能 |
|---|---|
search_inside | 搜索数字化文档中的文字。 |
search_items | 按标题、作者、主题和媒体类型搜索目录。 |
get_item | 查看文档信息、文件和许可证。 |
search_books | 按主题、地点、时期、人物、长度或年份查找书籍。 |
list_snapshots | 列出 Wayback Machine 保存的某个网址的抓取快照。 |
get_snapshot | 查看某个网址在指定日期或附近日期的抓取快照。 |
search_inside
在文档正文中搜索。正文来自光学字符识别,因此片段会带有此过程产生的识读错误。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
query | 字符串,2 至 300 个字符 | 是 | 要在文档中搜索的短语。 |
limit | 整数,1 至 50,默认值为 10 | 否 | 返回的匹配项数量。 |
page | 整数,1 至 100,默认值为 1 | 否 | 要返回的匹配项所在页。 |
max_excerpt_chars | 整数,80 至 1200,默认值为 300 | 否 | 返回片段的长度。 |
max_excerpts_per_match | 整数,1 至 10,默认值为 3 | 否 | 每个匹配文档返回的片段数量。 |
返回内容: hits,每项包含 identifier,可供 get_item 使用;
title、creator 和 year;excerpts,即机器从页面读取的片段;matched_file,用于标明实际包含该片段的文件;以及 source_url。当文档汇集了多个文件,且片段位于其中一个文件时,inside_container 为 true,此时标题、作者和年份属于容器文档。
total 统计文档数量,并支持分页。 该值表示文档数量,结果集的最后一页可能比第一页短。不提供页码: 索引会指出文本在文档中的位置,但几乎所有匹配项都显示为 1,因此这里没有标明书籍页码,也没有链接声称指向特定页码。
search_items
在目录中搜索,涵盖档案保存的所有内容。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
query | 字符串,1 至 300 个字符 | 是 | 要在目录中搜索的词语。 |
media_type | texts、movies、audio、image、software、data 或 web | 否 | 要保留的内容类型。 |
year_from | 整数,1 至 2200 | 否 | 最早年份。 |
year_to | 整数,1 至 2200 | 否 | 最晚年份。 |
sort | relevance、downloads、newest、oldest 或 title,默认值为 relevance | 否 | 条目的排序方式。 |
limit | 整数,1 至 50,默认值为 10 | 否 | 返回的条目数量。 |
page | 整数,1 至 100,默认值为 1 | 否 | 要返回的条目所在页。 |
返回内容: items,每项包含 identifier、title、creator、year、
media_type、downloads 和 source_url;条目中为空的字段会设为 null。total 统计整个目录中的匹配文档数量,因此可能大于返回的数量。
get_item
读取文档条目。较大的部分需按需请求,而不会默认返回,因为条目可能很长。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
identifier | 字符串,1 至 200 个字符 | 是 | 某一行所带的标识符。 |
sections | basic、files、full_metadata 数组,默认值为 ["basic"] | 否 | 要返回的部分。 |
file_format | 字符串,最多 60 个字符 | 否 | 仅保留指定格式的文件。 |
max_files | 整数,1 至 200,默认值为 25 | 否 | 返回文件数量上限。 |
max_description_chars | 整数,100 至 20000,默认值为 2000 | 否 | 返回的描述长度。 |
返回内容: 文档及其 title、creator、year、media_type 和
source_url,以及 description、date、publisher、language、collections
和 license_url;条目中未注明的字段均为 null。file_count
统计文档包含的文件数量,不受本次响应返回内容的影响,total_bytes 表示这些文件的总大小。只有在
sections 中请求时,才会返回 files 和 full_metadata。
search_books
通过与档案馆关联的作品索引查找书籍。该索引描述作品及其版本,而非数字化副本。
| Argument | Type | Requis | Ce qu'il fait |
|---|---|---|---|
query | chaîne, 2 à 300 caractères | non | Du texte libre, quand il y en a. |
subject | chaîne, 2 à 100 caractères | non | Un sujet sous lequel l'index classe. |
place | chaîne, 2 à 100 caractères | non | Un lieu dont une œuvre traite. |
time | chaîne, 2 à 100 caractères | non | Une période dont une œuvre traite. |
person | chaîne, 2 à 100 caractères | non | Une personne dont une œuvre traite. |
language | chaîne, 2 à 20 caractères | non | La langue de l'œuvre. |
year_from | entier, 1 à 2200 | non | Première publication la plus ancienne. |
year_to | entier, 1 à 2200 | non | Première publication la plus récente. |
pages_min | entier, 1 à 100000 | non | Œuvre la plus courte acceptable. |
pages_max | entier, 1 à 100000 | non | Œuvre la plus longue acceptable. |
sort | relevance, rating, readers, newest ou oldest, défaut relevance | non | L'ordre des lignes. |
limit | entier, 1 à 50, défaut 10 | non | Lignes à servir. |
page | entier, 1 à 100, défaut 1 | non | Quelle page de lignes. |
返回: books,每本书包含 title、authors、first_published_year、edition_count、archive_identifiers(档案馆持有的数字化副本标识符)、scan_count、作为各版本中位数的 page_count、subjects 和 source_url。searched_for 用文字说明此响应所回答的查询,包括自由文本和所有已应用的条件;如果搜索仅依据条件进行,query 的值为 null。total 表示匹配作品的数量。
list_snapshots
列出 Wayback Machine 保存的某个地址的网页快照。
| Argument | Type | Requis | Ce qu'il fait |
|---|---|---|---|
url | chaîne, 3 à 2000 caractères | oui | L'adresse à consulter. |
limit | entier, 1 à 100, défaut 20 | non | Captures à servir. |
cursor | chaîne, jusqu'à 500 caractères | non | Le next_cursor nommé par une réponse précédente. |
返回: snapshots,每个快照包含其 UTC ISO 时间戳 captured_at、快照本身的 url,以及采集时记录的 status。first 和 last 描述的是本次响应,而非全部历史记录;next_cursor 用于继续浏览列表。
get_snapshot
读取某个地址在指定日期或附近日期的快照。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
url | 字符串,3 至 2000 个字符 | 是 | 要查询的地址。 |
at | AAAA-MM-JJ 或 ISO 时间戳 | 否 | 目标日期。默认使用最新快照。 |
返回: snapshot 及其 captured_at 和地址,同时提供
requested_url 和 requested_at,以便看出请求日期与所提供快照之间的差异。
对于没有对应快照的日期,Wayback Machine 会返回其存档中日期最接近的快照。
如何看待摘录
数字化文档中的文本来自光学字符识别。因此,摘录中可能带有识别过程造成的错误,内容会按识别结果原样提供,而不会经过修正:读起来奇怪的词,就是机器识别到的内容。引用时,请将其标明为数字化文档的摘录,并附上文档链接,以便读者查看页面。
配置
所有变量均为可选。请将它们放在客户端配置的 env 块中。
| 变量 | 默认值 | 作用 |
|---|---|---|
IA_USER_AGENT | 项目标识 | 向档案馆标识你的应用,并提供可联系到相关人员的地址。 |
IA_MIN_INTERVAL_MS | 1000 | 两次请求之间的间隔,范围为 500 至 60000。 |
IA_TIMEOUT_MS | 20000 | 请求超时时间,范围为 1000 至 120000。 |
IA_HISTORY_TIMEOUT_MS | 60000 | Wayback Machine 历史记录请求的超时时间,范围为 5000 至 180000。 |
IA_MAX_RETRIES | 3 | 临时失败后的重试次数,范围为 0 至 8。 |
IA_CACHE_TTL_MS | 900000 | 响应在内存中的保留时长,范围为 0 至 86400000。 |
IA_CACHE_MAX_ENTRIES | 200 | 同时保留在内存中的响应数,范围为 1 至 5000。 |
IA_LOG_LEVEL | error | silent、error、info 或 debug,输出到错误输出流。 |
超出范围的值会恢复为默认值,原因会写入错误输出流。
错误
每次失败都会带有六种代码之一和一条消息,并在有帮助时附上下一步操作提示。
| 代码 | 发生了什么 | 怎么做 |
|---|---|---|
not_found | 存档已响应,但没有这份文档。 | 使用 search_items 检查标识符。 |
invalid_input | 参数在发出请求前就被拒绝了。 | 阅读消息,其中会指出相关参数。 |
rate_limited | 存档要求此客户端放慢速度。 | 等待指定的秒数,然后使用相同参数重新调用。文档仍然存在。 |
parse_failure | 响应已返回,但格式无法在此处解析。 | 在问题跟踪区报告。 |
network_error | 请求未能完成。 | 稍后重试。 |
timeout | 请求超时。 | 增大 IA_TIMEOUT_MS,如果是历史记录,则增大 IA_HISTORY_TIMEOUT_MS。 |
作为库使用
读取存档的这一层单独发布,拥有自己的节奏、缓存和错误,不绑定任何协议。
import { ArchiveClient } from "mcp-archiveorg/client";
const client = new ArchiveClient();
const { data, cached } = await client.searchItems({ query: "san francisco earthquake" });
console.log(data.total, cached);
每次读取都会返回 { data, cached },并抛出带有六种代码之一的错误。两次请求之间的最短间隔在此处同样适用。
请求节奏与署名
请求会逐个发出,间隔至少一秒;无论配置如何,最短间隔都不会低于半秒。User-Agent 始终以项目身份和一个可联系人联系到某人的地址结尾。Internet Archive 是一家非营利图书馆,对其文档进行全文检索是它处理的成本最高的请求之一。
每条结果都会附上读取该结果的页面地址。文档归存放者所有,并遵循每条记录在 license_url 中注明的条件。
此 MCP 项目为非官方项目,与 Internet Archive 无关联。
隐私
此服务不会收集你的任何信息,也不会向作者发送任何信息。它在你的计算机上运行,只连接 archive.org、web.archive.org 和 openlibrary.org,在运行期间将响应保存在内存中,不会写入磁盘。PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这些行为。
开发
npm install
npm run build:fixtures
npm test
npm run check
测试使用生成的 fixtures 运行,不会发出任何请求。实时测试套件 npm run test:live 会为每个路由发出一个请求,并且每晚针对存档本身运行。
贡献
问题、疑问和想法都可以提交到问题跟踪区。欢迎提交修改提案;先创建工单有助于就修改形式达成一致。请参阅 CONTRIBUTING.md。
许可证
MIT,详见 LICENSE。文档归存放者所有,并遵循每条记录注明的条件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。