LibGen下载器 + MCP服务器
一个强大的Node.js/TypeScript工具,用于从LibGen镜像站点搜索和下载电子书,其特点在于配备了一个模型上下文协议(MCP)服务器,以实现与大型语言模型(LLM)的无缝集成。
🚀 特点
- MCP服务器集成使大型语言模型(如Claude)能够通过工具调用搜索和下载书籍
- 程序化API完整Node.js API,用于自动化工作流
- 批量下载通过MD5同时下载多本书籍
- 智能镜发现LibGen+镜像的自动检测和故障转移
- 弹性运营内置网络请求的重试和错误处理功能
- TypeScript 支持包含完整的类型定义
📦 安装
对于MCP服务器(与大型语言模型集成)
npm install -g book-downloader-mcp用于程序化使用
npm install book-downloader-mcp要求建议使用 Node.js 16 或更高版本
🤖 MCP服务器设置
Claude 桌面集成
- 全局安装:
npm install -g book-downloader-mcp- 添加到你的
claude_desktop_config.json:
{
"mcpServers": {
"libgen": {
"command": "libgen-mcp"
}
}
}- 重启Claude桌面版
现在,助手将能够访问LibGen的搜索和下载功能!
其他MCP客户端
直接运行MCP服务器:
libgen-mcp或者从源代码:
npm run start:mcp💻 程序化使用
基本示例
const libgen = require('@rovodev/libgen-mcp-server');
async function searchAndDownload() {
// Initialize mirror connection
await libgen.ensureMirrorReady();
// Search for books
const results = await libgen.searchBooks('The Art of War');
console.log(`Found ${results.length} results`);
if (results.length > 0) {
const book = results[0];
console.log(`Downloading: ${book.title} by ${book.authors}`);
// Get direct download URL
const url = await libgen.getDirectDownloadUrlByMd5(book.md5);
console.log(`Download URL: ${url}`);
// Download the file
const outcome = await libgen.downloadByMd5(book.md5);
if (outcome.status === 'ok') {
console.log(`Downloaded to: ${outcome.path}`);
}
}
}
searchAndDownload();TypeScript 示例
import * as libgen from '@rovodev/libgen-mcp-server';
async function bulkDownload(searchQuery: string) {
await libgen.ensureMirrorReady();
const results = await libgen.searchBooks(searchQuery, 1, 10);
const md5List = results
.filter(book => book.md5)
.map(book => book.md5!)
.slice(0, 3); // Download first 3 books
const outcomes = await libgen.downloadByMd5List(md5List);
outcomes.forEach(outcome => {
if (outcome.status === 'ok') {
console.log(`✓ Downloaded: ${outcome.filename}`);
} else {
console.log(`✗ Failed: ${outcome.error}`);
}
});
}API 参考文档
ensureMirrorReady()初始化镜像配置searchBooks(query, page?, pageSize?)搜索书籍getDirectDownloadUrlByMd5(md5)获取书籍的下载链接downloadByMd5(md5)下载单本书籍downloadByMd5List(md5Array)批量下载多本书籍
🛠 MCP 工具参考
当通过MCP连接时,大型语言模型(LLMs)可使用以下工具:
核心运营
| 工具 | 描述 | 输入 | 输出 |
|---|---|---|---|
libgen.ensureMirror | 初始化并选择工作镜像 | {} | { mirror, config } |
libgen.getActiveMirror | 获取当前选中的镜像 | {} | { mirror } |
libgen.setActiveMirror | 手动设置活动镜像 | { mirrorSrc: string } | { mirror } |
搜索与发现
| 工具 | 描述 | 输入 | 输出 |
|---|---|---|---|
libgen.search | 在LibGen+上搜索书籍 | { query: string, page?: number, pageSize?: number } | 带有元数据的书籍条目数组 |
搜索结果字段: id, authors, title, publisher, year, pages, language, size, extension, mirror, md5, resolvedMirrorUrl
下载操作
| 工具 | 描述 | 输入 | 输出 |
|---|---|---|---|
libgen.getDownloadUrl | 获取直接下载链接 | { md5: string } | { md5, url } |
libgen.download | 下载单个文件 | { md5: string } | { md5, status, path?, filename?, total?, error? } |
libgen.bulkDownload | 下载多个文件 | { md5List: string[] } | 下载结果数组 |
示例MCP工作流程
// 1. Initialize
await mcp.call("libgen.ensureMirror", {});
// 2. Search
const results = await mcp.call("libgen.search", {
query: "machine learning",
page: 1
});
// 3. Download first result
if (results.length > 0) {
const outcome = await mcp.call("libgen.download", {
md5: results[0].md5
});
}⚠️ 重要提示
- 镜像状态LibGen镜像站点可能不稳定。该工具会自动从配置中发现可用的镜像站点
- 文件位置下载文件以原始文件名保存在当前工作目录中
- 网络韧性内置重试机制处理临时网络问题
- LibGen+ 兼容性针对LibGen+镜像结构和解析进行了优化
🔧 开发
构建项目
npm run build # Compile TypeScript
npm run build:mcp # Build and run MCP server
npm run watch # Watch mode for development本地运行
npm run start:mcp # Start MCP server in development
npm run lint # Run ESLint
npm run format # Format code with Prettier测试
npm test # Run all tests
npm run test:ci # Run tests in CI mode可选的集成测试为Groq API测试设置环境变量:
GROQ_API_KEY您的Groq API密钥RUN_GROQ_TESTS=1启用集成测试
创建一个 .env 文件(已添加到git忽略列表)或使用 .env.test 用于测试。参见 .env.example 供参考。
🏗 建筑学
- 核心层HTML解析(使用jsdom)、HTTP请求、镜像发现、重试逻辑
- MCP服务器基于Stdio的服务器,将LibGen操作作为MCP工具暴露出来
- 程序化API用于Node.js集成的直接函数导出
- 镜像管理动态配置获取与自动故障转移
📋 更新日志
v3.0.2(当前版本)
- ✅ 完整的测试覆盖率,使用适当的模拟
- ✅ 更新了MCP SDK兼容性
- ✅ 增强了错误处理和重试机制
- ✅ 改进了文档和示例
v3.0.0(版本3.0.0)
- 🔄 以LibGen镜像作为主要来源
- ➖ 移除了LibGen+兼容性的搜索过滤器
- ➖ 暂时移除备用下载选项
v2.x(版本2.x)
- ➕ 替代下载选项,进度指示器
- \+ CLI搜索功能和快捷键
- ➕ 缓存系统
v1.x
- 🔄 使用React/Ink/Zustand完成UI重写
- \+ 批量下载功能
- ✅ 增强了错误处理和重试逻辑
📄 许可证
WTFPL(Do What The Fuck You Want To Public License,即“做你他妈想做的事公共许可证”) “Do What The F\*ck You Want To Public License” 可以翻译为“随你便公共许可证”或“想干嘛就干嘛公共许可证”,不过这个名称包含不雅词汇,正式场合应避免使用。一个更正式且中性的翻译可能是“自由行动公共许可证”或“自主决定公共许可证”,但具体翻译还需根据上下文和语境来确定
⚖️ 法律免责声明
这个工具访问第三方LibGen镜像站点,这些站点可能:
- 在某些地区受阻或不稳定
- 遵守当地法律法规
请负责任地使用,并确保遵守您所在司法管辖区的适用法律。
______________________________________________________________________
🤝 贡献
- 为仓库创建分支(或“克隆仓库”)
- 创建一个特性分支
- 为新功能添加测试
- 确保所有测试通过:
npm test - 提交拉取请求
仓库https://github.com/obsfx/libgen-downloader 翻译为中文是:https://github.com/obsfx/libgen下载器(或:libgen下载工具)
