存取口径
\[!警告\] 这个软件包完全是由Junie在JetBrains IntelliJ中编写的,没有经过人工检查。
\[!注意\] 考虑到使用vibe编码库的风险,我决定更喜欢deno提供的原生沙盒。看看 访问口径deno 相反,图书馆。
一个JavaScript库,用于连接到本地Calibre Content Server并抓取部分电子书。
Calibre Reader MCP Server in LM Studio
您需要在本地运行Calibre Content Server。首先,运行calibre并选择“连接/共享”选项。
MCP服务器
此库包括一个MCP(模型上下文协议)服务器,允许LLM与Calibre库交互。
提供的工具:
list_libraries:列出可用库。search_books:使用Calibre的搜索语法搜索书籍(例如,按标题、作者:“作者:阿西莫夫”)。list_books:列出图书馆里的所有书。list_epub_files:列出EPUB中可用的所有文件(例如HTML、CSS、图像、字体)。list_chapters:按阅读顺序列出一本书的章节。get_chapter_content:检索特定章节的HTML内容。get_chapter_content_markdown:检索转换为Markdown的特定章节的内容(通常对LLM更好)。render_chapter_page:将章节的特定页面渲染为PNG图像(对具有视觉功能的LLM很有用)。它还返回章节中的总页数。get_book_cover:将书籍的封面图像检索为PNG图像。search_in_book:在书中搜索特定的文字文本,并获取出现的片段。 注意:仅支持简单的文字字符串匹配,不支持布尔运算符(AND/OR)或引号。get_epub_file:从EPUB检索任何文件(例如CSS、图像)。
LLM identifying a book from a rendered page detail
配置
MCP服务器可以通过环境变量进行配置:
CALIBRE_URL:Calibre Content Server的URL(默认值:http://[::1]:8080/).CALIBRE_USERNAME:用于身份验证的可选用户名。CALIBRE_PASSWORD:用于身份验证的可选密码。
运行MCP服务器
日志记录
您可以通过提供以下内容来启用所有请求和响应的详细日志记录 --verbose (或 -v)论点:
npx access-calibre --verbose日志被写入 stderr 因此它们不会干扰MCP协议。
如果要将日志定向到文件,可以使用 --log-file 论点:
npx access-calibre --log-file=server.log您可以将两者结合起来查看日志 stderr 并将它们保存到文件中:
npx access-calibre --verbose --log-file=server.log帮助
您可以通过提供以下内容查看所有可用选项 --help (或 -h)论点:
npx access-calibre --help克劳德桌面版
您可以直接使用以下命令运行MCP服务器 npx (适用于Claude Desktop或其他MCP客户端):
npx access-calibreLM工作室
要在LM Studio中使用此MCP服务器,请执行以下操作:
- 打开 LM工作室.
- 点击 工具 左侧边栏中的图标(拼图块)。
- 点击 +添加工具.
- 选择 MCP服务器.
- 给它起个名字(例如。,
access-calibre). - 对于 命令,输入
npx. - 对于 参数,输入
access-calibre. - 添加任何必需的环境变量(如
CALIBRE_URL)在 环境变量 部分。 - 点击 添加工具.
或者,您可以将其添加到您的 mcp-config.json (通常在 ~/.lmstudio/mcp-config.json):
{
"mcpServers": {
"access-calibre": {
"command": "npx",
"args": ["access-calibre"],
"env": {
"CALIBRE_URL": "http://localhost:8080/"
}
}
}
}本地安装
npm run start:mcp或者直接通过Node:
CALIBRE_URL=http://localhost:8080 node mcp-server.js图书馆安装
要将其用作项目中的库,请执行以下操作:
npm install access-calibre用法
您可以将其用作项目中的库:
const CalibreClient = require('access-calibre');
const client = new CalibreClient('http://localhost:8080', 'username', 'password');
async function example() {
// List libraries
const libraries = await client.getLibraries();
const libraryId = Object.keys(libraries)[0];
// List books
const books = await client.getBooks(libraryId);
// Get EPUB contents
const bookId = books.book_ids[0];
const files = await client.getEpubContents(libraryId, bookId);
console.log('Files in EPUB:', files);
// Get a specific file (e.g., a chapter) from the EPUB
const html = await client.getEpubFile(libraryId, bookId, 'index_split_001.html');
console.log(html);
}API
new CalibreClient(baseUrl, username, password)
初始化客户端。
client.getLibraries()
返回一个对象,其中包含有关可用库的信息,包括图书计数。
client.getBooks(libraryId, limit, offset, search)
返回指定库的图书ID及其元数据列表。 search 是Calibre搜索语法中的可选搜索查询字符串。
client.getBookMetadata(libraryId, bookId)
返回特定书籍的详细元数据。
client.downloadBook(libraryId, bookId, format)
下载指定格式的书籍(例如“EPUB”、“PDF”)并返回缓冲区。
client.getEpubContents(libraryId, bookId)
返回EPUB文件内的文件路径列表。
client.getTOC(libraryId, bookId)
返回一个数组 { title, path } 代表书籍目录的对象。
client.getChapters(libraryId, bookId)
返回一个数组 { title, path, size } 以线性阅读顺序(如EPUB书脊中所定义)表示书籍章节的对象。 size 是章节文件的未压缩大小,单位为字节。
client.getChapterContentMarkdown(libraryId, bookId, chapterPath)
返回转换为Markdown的特定章节的内容。
client.searchText(libraryId, bookId, query, snippetWindow)
搜索 query 书中的文字。返回一个数组 { chapterTitle, chapterPath, offset, snippet, markdownOffset, markdownSnippet } 物体。 snippetWindow (默认值100)是片段中匹配前后要包含的字符数。 markdownOffset 和 markdownSnippet 提供用于基于Markdown的工具。
client.getEpubFile(libraryId, bookId, filePath, responseType)
从EPUB中提取特定文件,并将其内容作为字符串(默认)或缓冲区(如果 responseType 是 'buffer').
脚本
get-chapter.js
将章节的XML/HTML内容提取到控制台。
node get-chapter.js render-chapter.js
使用Playwright将章节中的特定页面渲染为PNG图像。
node render-chapter.js [output.png] [--page ]--page:可选。指定要呈现章节的哪一页(默认值为1)。- 如果没有提供输出文件名,则默认为
chapter_render.png.
注意:您可能需要运行 npx playwright install chromium 在使用此脚本之前。
运行测试
npm test