内容
# biblio-mcp
[](https://github.com/yashimosh/biblio-mcp/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/biblio-mcp)
[](LICENSE)
**一款 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 服务器,同时搜索 Anna's Archive、Library Genesis (Libgen)、Sci-Hub 和 Z-Library — 所有这些只需一次操作。**
通过单一的统一接口,搜索数百万本书、学术论文和研究文章,涵盖所有主要的影子图书馆。直接从您的 AI 助手 — Claude Code、Claude Desktop、Cline、Cursor 或任何 MCP 兼容的客户端 — 解析下载链接并获取文件。
无需 API 密钥。无需登录。无需管理多个源服务器。仅需一个服务器,六种工具,四个源。
---
## 什么是 biblio-mcp?
biblio-mcp 是一个开源的 MCP 服务器,作为跨互联网上四个最大的影子图书馆的统一搜索层。与其为每个源安装和配置单独的 MCP 服务器,biblio-mcp 将它们组合成一个具有共享数据模型和自动去重的单一服务器。
它连接到任何 MCP 客户端(Claude、Cline、Cursor、Windsurf 或自定义代理),并使您的 AI 助手能够搜索书籍、通过 DOI 查找学术论文、解析下载链接以及下载文件 — 所有这些都通过自然语言。
### 它是如何工作的
1. **扇出搜索** — 单个查询同时命中 Anna's Archive、Library Genesis 和 Z-Library。
2. **基于 MD5 的去重** — 来自不同源的相同书籍的结果通过 MD5 哈希(这些库共享的通用标识符)合并,保持每个源中最丰富的元数据。
3. **镜像轮换** — 每个源都声明一个镜像域名列表。死亡或被阻止的主机会自动切换到下一个可用的镜像,该镜像将被记住以供未来请求使用。
4. **故障隔离** — 如果一个源不可用,其他源仍会返回结果。故障会单独报告,不会默默地被忽略。
### 涵盖的源
| 源 | 提供内容 | 覆盖范围 |
|---|---|---|
| **Anna's Archive** | 书籍搜索、元数据、下载链接(合作服务器、IPFS) | 3600 万+ 书籍和论文 |
| **Library Genesis (Libgen)** | 书籍搜索、学术论文搜索(scimag)、直接 `get.php` 下载 | 1500 万+ 书籍,1 亿+ 论文 |
| **Sci-Hub** | 通过 DOI、URL 或标题解析论文 PDF | 8500 万+ 研究文章 |
| **Z-Library** | 尽力而为的公共书籍搜索(无需登录) | 1400 万+ 书籍 |
## 安装
需要 **Node.js ≥ 18**。
```bash
# 直接运行(无需安装)
npx biblio-mcp
# 或克隆并在本地构建
git clone https://github.com/yashimosh/biblio-mcp.git
cd biblio-mcp
npm install
npm run build
```
### 添加到 Claude Code
```bash
claude mcp add -s user biblio -- npx biblio-mcp
# 或,从本地构建:
claude mcp add -s user biblio -- node /绝对路径/to/biblio-mcp/dist/index.js
```
### 添加到 Claude Desktop / Cline / Cursor
将以下内容添加到您的 MCP 配置文件(`claude_desktop_config.json`、`cline_mcp_settings.json` 等):
```jsonc
{
"mcpServers": {
"biblio": {
"command": "npx",
"args": ["biblio-mcp"]
}
}
}
```
### 添加到任何 MCP 客户端
biblio-mcp 使用 **stdio 传输** — 任何可以启动子进程的 MCP 客户端都可以使用。指向 `npx biblio-mcp`(或 `node dist/index.js` 用于本地构建)。
## 工具
| 工具 | 功能 |
|---|---|
| `search_books` | 同时搜索 Anna's Archive + Libgen + Z-Library;通过 MD5 合并和去重。返回每个结果的标题、作者、年份、格式、大小和 md5。 |
| `book_details` | 完整元数据 + 一个书籍的下载选项,基于 MD5 哈希。 |
| `get_download_links` | 一个 MD5 的所有可解析下载 URL — Libgen `get.php`、Anna's 合作服务器、IPFS 网关。标记为 `direct: true` 的链接直接指向文件。 |
| `download_book` | 通过 MD5 将实际文件获取到本地目录(按顺序尝试每个直接链接,直到成功)。 |
| `search_papers` | 通过 Library Genesis scimag 进行学术论文/文章搜索;返回 DOI 和元数据。 |
| `get_paper` | 通过 DOI、URL 或标题通过 Sci-Hub 解析论文的 PDF。返回可用的直接 PDF URL。 |
### 典型流程
**书籍:**
1. `search_books({ query: "dune frank herbert" })` → 结果,每个结果都有一个 `md5`
2. `get_download_links({ md5: "..." })` → 选择一个 `direct: true` 的链接,**或**
3. `download_book({ md5: "...", output_dir: "~/Downloads/books" })` → 保存的文件
**论文:**
1. `search_papers({ query: "CRISPR gene editing" })` → 带有 DOI 的结果
2. `get_paper({ identifier: "10.1089/crispr.2019.0064" })` → 直接 PDF URL
## 配置
所有配置项均为可选 — 默认配置已内置。可通过环境变量覆盖:
| 变量 | 目的 | 默认值 |
|---|---|---|
| `BIBLIO_ANNAS_MIRRORS` | 以逗号分隔的 Anna's Archive 基本 URL | `.org, .se, .li, .gl` |
| `BIBLIO_LIBGEN_MIRRORS` | 以逗号分隔的 Libgen 基本 URL | `.li, .is, .rs, .st, .gs, .vg` |
| `BIBLIO_SCIHUB_MIRRORS` | 以逗号分隔的 Sci-Hub 基本 URL | `.ren, .mksa.top, .hkvisa.net, .se, .st, .ru` |
| `BIBLIO_ZLIB_MIRRORS` | 以逗号分隔的 Z-Library 域名 | `z-lib.io, z-library.sk, …` |
| `BIBLIO_IPFS_GATEWAYS` | CID 备用 IPFS 网关 | `ipfs.io, cloudflare-ipfs, pinata` |
| `BIBLIO_TIMEOUT_MS` | 每个请求的超时时间 | `20000` |
## 为什么选择 biblio-mcp 而不是单独的服务器?
| | biblio-mcp | 单独的 MCP 服务器 |
|---|---|---|
| **设置** | 一个 `npx` 命令 | 安装 4 个服务器(3 种语言:Go、Python、Node) |
| **配置** | MCP 设置中的一个条目 | 四个条目,四组环境变量 |
| **去重** | 自动 — 来自 3 个源的相同书籍 = 1 个结果 | 手动 — 您看到重复的结果 |
| **镜像** | 内置轮换,一个文件更新 | 每个服务器管理自己的镜像 |
| **容错** | 源不可用?其他源仍可用 | 服务器不可用?该源不可用 |
| **论文 + 书籍** | 一个服务器同时提供 | 需要为 Sci-Hub 和 Libgen 分别使用服务器 |
## 已知限制
- **Sci-Hub** 镜像有时会通过验证码阻止,但大多数镜像的 HTML 中仍然存在 PDF 嵌入 URL。`get_paper` 在绝大多数情况下都能成功提取它。如果所有镜像都失败,它会返回备用 URL,以便您在浏览器中打开文章。
- **Z-Library** 轮换域名,并将其大部分目录置于登录后。内置的公共搜索是尽力而为的;当它被阻止时,Anna's Archive(索引 Z-Library 集合)涵盖相同的书籍。将 `BIBLIO_ZLIB_MIRRORS` 指向您的工作个人域名以获得更好的结果。
- 这些站点经常更改其 HTML。解析器位于 [`src/providers/`](src/providers/),镜像位于 [`src/mirrors.ts`](src/mirrors.ts) — 两者都很小,易于修补。
## 常见问题
### 如何使用 Claude 搜索书籍?
安装 biblio-mcp(`claude mcp add -s user biblio -- npx biblio-mcp`),然后自然地询问 Claude:“为我找到 Frank Herbert 的 Dune 作为 EPUB。” Claude 会自动调用 `search_books` 和 `get_download_links`。
### 这是否与 ChatGPT 或其他 AI 助手配合使用?
biblio-mcp 使用 Model Context Protocol (MCP) 标准。它与任何 MCP 兼容的客户端配合使用:Claude Code、Claude Desktop、Cline、Cursor、Windsurf 和使用 MCP SDK 构建的自定义代理。ChatGPT 目前不支持 MCP。
### 我需要在这些站点上拥有帐户吗?
不需要。biblio-mcp 只查询公开访问的页面。无需 API 密钥,无需登录,无需 cookie。对于 Z-Library,帐户提供更多结果 — 如果您有帐户,请将 `BIBLIO_ZLIB_MIRRORS` 设置为您的个人域名。
### 当镜像宕机时会发生什么?
服务器会自动尝试列表中的下一个镜像。第一个可用的镜像将被记住,以便后续请求能够快速进行。如果一个源的所有镜像都失败了,该源将返回错误,但其他源仍将返回结果。
### 我可以添加自己的镜像吗?
是的。设置相应的环境变量(例如 `BIBLIO_LIBGEN_MIRRORS="https://my-mirror.com,https://libgen.li"`),您的镜像将首先被尝试。
### 这与 Anna's Archive MCP / Libgen MCP / Sci-Hub MCP 有何不同?
那些是单源服务器。biblio-mcp 将所有四个源合并成一个服务器,具有跨源去重、共享镜像轮换和故障隔离。一个安装程序取代四个。
### biblio-mcp 是否托管或存储任何内容?
不。它是一个查询公开可访问的第三方网站并返回元数据和 URL 的客户端。它不托管任何文件,不存储任何内容,也不维护任何索引。
## 开发
```bash
npm run dev # 通过 tsx 从源代码运行
npm run build # 编译到 dist/
npm run smoke # 针对真实镜像进行实时端到端测试
```
### 架构
```
src/
index.ts MCP 服务器 + 工具定义(stdio 传输)
http.ts 镜像轮换获取(重试、超时、每主机粘性)
mirrors.ts 所有镜像域名 — 更改主机时编辑的文件
types.ts 共享 Book / Paper / DownloadLink 数据模型
providers/
annas.ts Anna's Archive(主要书籍源 + md5 解析器)
libgen.ts Library Genesis(书籍 + scimag 论文 + 直接下载)
scihub.ts Sci-Hub(通过 DOI 解析论文 PDF)
zlibrary.ts Z-Library(尽力而为的公共搜索)
index.ts 聚合:扇出、合并、按 md5 去重
```
### 贡献
欢迎 PR — 尤其是当站点更改其 HTML 时的解析器修复。最常见的维护任务是在域名轮换时更新 [`src/mirrors.ts`](src/mirrors.ts)。
## 法律
该工具是一个查询公开可访问的第三方网站的客户端;它本身不托管任何内容。版权法因国家而异。您有责任确保您的使用符合您所在管辖区的法律和版权持有人的权益。为研究、存档和可访问性目的提供。作者不赞同版权侵权。
## 许可证
[MIT](LICENSE)