cwa-book-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cwa-book-mcpfind Project Hail Mary in my CWA library and get a download link"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cwa-book-mcp
通过 MCP 搜索 CWA 和 Z-Library,把经过校验的 EPUB/PDF 原文件链接交给 Agent,并默认自动加入 CWA。CWA 负责持久入库、转换和去重。
Node.js + TypeScript,单进程,stdio MCP,npm 分发。推荐 Node.js 24 LTS,最低 22.19;无需本项目 Docker 容器。
0.3.0 新增 download_book:默认下载并入库,支持仅下载和稍后入库。 当前发布进度见验证结果。支持本地进程的 MCP 客户端可使用:
npm 安装入口:npx -y cwa-book-mcp@latest,或导入下方配置。
{
"mcpServers": {
"cwa-books": {
"command": "npx",
"args": ["-y", "cwa-book-mcp@latest"],
"env": {
"CWA_BASE_URL": "http://localhost:8083",
"CWA_USERNAME": "<CWA_USER>",
"CWA_PASSWORD": "<CWA_PASSWORD>"
}
}
}
}写入默认关闭。确认 CWA 上传权限、转换与重复处理设置后,再启用 CWA_WRITE_ENABLED=true。书源是可选配置;仅配置 CWA 即可搜索、读取书库。
启用 Z-Library 只需在 env 中增加 ZLIBRARY_EMAIL 和 ZLIBRARY_PASSWORD,或使用已有会话 ZLIBRARY_USER_ID / ZLIBRARY_USER_KEY。程序自动更新、探测和切换入口,自动接受认证响应给出的公网 HTTPS 下载地址,无需维护域名或 CDN 列表。
手机与网页客户端通过远端 MCPHub 使用此进程。书源原文件交付和自动入库沿用现有出站网络与 CWA 地址,无需新增端口、CF 隧道路由或 PUBLIC_BASE_URL。Agent 需要具备将 HTTP 响应保存成文件并读取的工具;仅返回链接不代表已保存。不同客户端的 JSON 格式详见配置与接入。
使用:search_books 选定 Z 候选 → download_book 创建任务 → get_task 的 download.status 为 available → get_download_url → Agent 下载读取。默认复用 MCP 校验时的临时文件自动上传 CWA;仅下载传 save_to_cwa:false,缓存有效时可 collect。认证和常规文件校验均在 MCP 内部完成,入库进度单独报告。
六个工具:search_books、download_book、acquire_book、upload_book、get_task、get_download_url。acquire_book 保留书库获取/转换流程。CWA 独有文件或转换结果仍需客户端 CWA 认证或可达的显式签名网关;不会自动换成另一书源版本。upload_book 本地附件 PUT 也需可达的文件入口。文件不通过 MCP 消息传输。
开发:npm ci → npm run check → npm run build。从当前仓库启动使用 node dist/cli.js,验收打包使用 npm run test:package。
Available Tools
6 toolsacquire_bookAIdempotent
start 用 request_id、candidate_id、required_format 创建持久任务。retry 只核对已提交任务,不重新上传。resolve 用 task_id/candidate_id 明确选择 CWA 匹配,提交后的元数据差异可通过重新搜索再选择解决,语言仍须一致。cancel 不删除 CWA 记录。
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | start | |
| task_id | No | ||
| request_id | No | ||
| candidate_id | No | ||
| required_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly=false, destructive=false, idempotent=true, openWorld=true, so the safety profile is known. The description adds genuine behavioral detail beyond them: retry verifies without re-uploading, cancel does NOT delete CWA records, and resolve requires consistent language. These are useful operational constraints, though it doesn't explain repeated start behavior despite idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and organized sentence-per-action, with no filler. But there is no front-loaded statement of what the tool is, and the dense mixed Chinese/English text with the undefined acronym 'CWA' hurts immediate comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations cover safety. The per-action behavior is largely covered, but the description omits the tool's overall purpose and any guidance for choosing acquire_book versus its four siblings, which matters for an openWorld multi-action tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must carry the burden and only partially does. It usefully maps parameters to actions (request_id/candidate_id/required_format for start; task_id/candidate_id for resolve), which the schema cannot express, but it never defines the meaning, expected values, or provenance of those ids.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description precisely scopes each of the four actions (start creates a persistent task, retry only verifies submitted tasks, resolve selects a CWA match, cancel preserves records), so the agent knows what each invocation does. It also implicitly distinguishes itself from upload_book ('retry 不重新上传'). However, it never states the tool's overall purpose and uses an undefined term ('CWA'), so sibling differentiation against search_books/get_task is weak.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real routing context per action: retry is only for already-submitted tasks and does not re-upload, resolve is for explicitly choosing a match, and metadata differences after submission should be handled by re-searching rather than re-resolving. An exclusion ('不重新上传') and an alternative ('重新搜索再选择') are present, though it never addresses when to prefer acquire_book over the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_bookAIdempotent
从显式选择的 Z 候选下载 EPUB/PDF 原文件并在 MCP 内校验。start 需要 request_id、candidate_id、required_format,默认 save_to_cwa:true,将同一文件自动交给 CWA;仅下载用 false。get_task.download.status 为 available 后可用 get_download_url 获取无需账号认证的书源链接,由 Agent 的 HTTP 工具保存并读取。collection 独立报告入库结果。collect 用 task_id 将未过期缓存补入 CWA;retry/cancel 使用 task_id。取票不明或链接过期不自动重新消耗额度。不交付 CWA 转换后的文件。
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | start | |
| task_id | No | ||
| request_id | No | ||
| save_to_cwa | No | ||
| candidate_id | No | ||
| required_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly false, idempotent true, openWorld true, destructive false), so the bar is lower, yet the description still adds real value: in-MCP validation, automatic handoff of the same file to CWA, the fact that CWA-converted files are NOT delivered, and that unclear tickets or expired links do not re-consume quota. That quota and delivery-boundary context is not inferable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph but front-loads the core purpose and proceeds through actions, parameters, and behaviors without filler. For a four-action tool it is appropriately sized, though the density of concerns in one block slightly reduces scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still covers action semantics, parameter roles, CWA integration, quota behavior, and the delivery boundary. It is complete enough for correct invocation of a complex multi-action tool, with only sibling-level routing left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it documents the roles of request_id, candidate_id, required_format, save_to_cwa (default true), and task_id per action. The action enum values (start/collect/retry/cancel) are each described. It could state format/type constraints more precisely, but coverage is otherwise strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource (download EPUB/PDF original files from explicitly selected Z candidates) and adds in-MCP validation. It differentiates itself from siblings by describing the get_download_url handoff and the CWA integration. It loses a point only because the purpose is interleaved with per-action and parameter detail rather than crisply isolated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the per-action conditions (start requires request_id/candidate_id/required_format; collect/retry/cancel use task_id) and when to use save_to_cwa:false for download-only. It routes the agent to get_download_url once get_task.download.status is available. It never explicitly contrasts with acquire_book or search_books, so the sibling routing is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_download_urlARead-only
download_book 任务默认返回已在 MCP 内验证的书源原文件链接 delivery:source,无需客户端账号认证,可在 CWA 入库完成前获取;status:link_issued 仅表示链接提供,Agent 仍需 HTTP 保存并读取文件。重复取链接不重新取票,expires_at 为可识别的上游到期时间(未知为 null),available_until 同时受本地复用窗口与上游到期约束。其他任务默认返回需要 CWA Basic 认证的 OPDS 链接;delivery:gateway 显式取得限时签名 GET,需要可达的本程序文件入口。verification 仅记录服务端观察,无需客户端重复校验。
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| delivery | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only readOnly and openWorld, and the description adds substantial behavior beyond that: auth requirements per mode (none for source, CWA Basic for opds, reachable file entry for gateway), expiry semantics (expires_at unknown=null, available_until bound by local reuse window and upstream expiry), the meaning of status:link_issued, that repeated calls do not re-fetch the ticket, and that verification is server-observed. It is consistent with the annotations and materially richer than the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and mostly earns its place, but it is delivered as one semicolon-chained paragraph that opens with the delivery:source detail instead of a defining first sentence. It is hard to scan and not front-loaded, which hurts selection speed even though little is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return fields need not be explained, and annotations already carry the safety profile. The description still covers auth, expiry, status meaning, and the client-side follow-up required. It is nearly complete for a 2-param tool, with only the task_id provenance left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the meaning. It explains all three delivery enum values in operational terms (source=default original file link, opds=authenticated link, gateway=signed time-limited GET), which is the key disambiguation. task_id is only implied via 'download_book task' context rather than explicitly defined, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this tool resolves the downloadable URL for a task, with distinct delivery modes (source/opds/gateway). It never states its relationship to siblings like download_book or get_task as a routing rule, so an agent must infer when this is the right call versus those. Clear verb+resource, but no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance per delivery mode: download_book tasks default to delivery:source, other tasks default to CWA-authenticated OPDS links, and delivery:gateway is an explicit request for a time-limited signed GET requiring a reachable file entry. It also notes the agent must still perform the HTTP save/read itself. No exclusion criteria relative to sibling tools, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskBRead-only
查询持久任务状态。ready 只表示 CWA 目标格式已验证;download_book 的 download.status:available 独立表示原文件已校验,可取链接,collection 报告入库进度。都不表示 Agent 已保存文件。needs_review 时选择 choices,已提交任务也可重新搜索 CWA 后 resolve。blocked 且有 waiting_for 时先处理关联任务;修复后用 retry 核对。
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a safe, closed-world read. The description adds meaningful behavioral context by explaining what 'ready', 'available', 'needs_review', and 'blocked' states mean and that they don't imply the agent has saved the file. Still, it doesn't explain whether task state is persisted/immutable, what happens after retry, or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense run-on covering multiple state transitions and edge cases in a single paragraph with no headings or structure. It front-loads little and intersperses multiple concerns (ready, download.status, needs_review, blocked/waiting_for), making it hard to scan. It could be split into a purpose line and a status-reference list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, the description needn't explain return values, yet it spends most of its length interpreting status field values, which is useful but overlaps with what the output schema likely documents. It omits guidance on error cases (invalid task_id) and how this tool relates to its five siblings, leaving gaps for an agent navigating the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one required parameter (task_id), schema coverage is 0% but the schema itself constrains the UUID format. The description adds no information about task_id beyond what the schema provides. Baseline of 3 is appropriate for a zero-description single-param tool, but no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear purpose ('查询持久任务状态' = query persistent task status), correctly identifying a read of task state. However, the bulk of the text shifts to interpreting status semantics rather than clarifying what the tool returns or how it differs from siblings, leaving the core purpose somewhat buried.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditional guidance: when needs_review, choose choices; when blocked with waiting_for, handle the related task first, then retry to verify. This is actionable 'when to do what' context. It does not, however, name sibling tools or clarify when to use get_task versus get_download_url or download_book's status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_booksBRead-only
搜索书库与配置的书源。默认优先 CWA 中文、书源中文、CWA 其他、书源其他。partial 或 warnings 表示不能断言无结果;使用 next_cursor 继续。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| author | No | ||
| cursor | No | ||
| formats | No | ||
| language | No | zh_preferred |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, openWorldHint), and the description adds genuinely new context: the default source-priority order and the caveat that partial/warnings mean absence of results cannot be asserted. That last point is a meaningful, non-obvious behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose before the priority order and result-interpretation caveat. Dense and largely waste-free, though the source-priority ordering is somewhat cryptic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. However, with six undocumented parameters and no sibling routing guidance, the definition is only adequate for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all six parameters, so the description must carry the burden. It only loosely implies cursor behavior (next_cursor) and language preference (zh_preferred priority); author, formats, limit, and query semantics remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (搜索/search) and two concrete resources (书库 book library and 配置的书源 configured book sources). An agent can distinguish it from acquire_book/upload_book, though the description never names a sibling explicitly to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (search before acquiring) but never stated. The description gives useful operating guidance about interpreting results (partial/warnings) and continuing with next_cursor, yet it provides no explicit when-to-use or when-not-to-use versus the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_bookAIdempotent
prepare 用 request_id、title、filename、size_bytes、required_format 准备上传。文件真实元数据应与 title/authors/language 对应。按返回链接 PUT 完整文件;refresh_ticket 用 task_id 更新授权。禁止通过 MCP 传文件或任意服务端路径。
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| action | No | prepare | |
| sha256 | No | ||
| authors | No | ||
| task_id | No | ||
| filename | No | ||
| language | No | unknown | |
| request_id | No | ||
| size_bytes | No | ||
| required_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, but the description adds genuinely new behavioral context: the two-step prepare-then-PUT protocol, that the returned link is where the full file goes, that refresh_ticket only updates authorization, and that files must never be passed through MCP. It stops short of covering failure modes, size limits, or ticket expiry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loads the 'prepare' action, with each semicolon-delimited clause carrying distinct information (params, metadata rule, PUT step, refresh action, prohibition). The mixed Chinese/English phrasing is slightly awkward for an English-only agent, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description adequately describes the workflow and the file-transfer prohibition, but leaves sha256 and several parameter meanings undocumented for a 10-parameter tool, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it names most of them (request_id, title, filename, size_bytes, required_format, task_id, authors, language) plus the action values. It does not explain what sha256 is for, what request_id represents, or acceptable format values, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys a two-phase upload workflow ('prepare' to get a link, then PUT the file), so the resource and action are inferable. However, it never plainly states in a single clause that the tool uploads a book file to the library, and it makes no attempt to distinguish itself from siblings like acquire_book or get_download_url. Purpose is understandable but under-framed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly routes between the two actions: 'prepare' lists the parameters to supply, while 'refresh_ticket' is used with task_id to refresh authorization. It also adds a hard usage constraint ('禁止通过 MCP 传文件或任意服务端路径'), which tells the agent what not to attempt. What's missing is any explicit comparison to sibling tools or a stated 'when not to use' condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.3.0- Added
download_book - Changed
get_download_url1 field changed- added
Input schema / properties / deliveryAdded value: +{ + "enum": [ + "source", + "opds", + "gateway" + ], + "type": "string" +}
5 tool updates
v0.1.0- First observed
acquire_book - First observed
get_download_url - First observed
get_task - First observed
search_books - First observed
upload_book
TDQS
Scored across 6 tools
download_book and acquire_book overlap heavily — both take request_id, candidate_id, and required_format to create persistent tasks, and both expose retry/cancel semantics, so an agent could easily misselect between fetching the raw original versus the CWA-matched/converted copy. get_download_url and get_task are related status/retrieval tools but are more clearly separated by their resource. The distinctions exist but require close reading of dense descriptions.
All six tools follow a consistent verb_noun snake_case pattern: search_books, acquire_book, download_book, upload_book, get_task, get_download_url. The convention is predictable and uniform throughout, with no style mixing.
Six tools is well-scoped for a book-acquisition and library-management server. Sub-operations (retry, cancel, resolve, collect, prepare, refresh_ticket) are folded into action parameters rather than exploding into separate tools, keeping the surface lean and each tool earning its place.
The surface covers the core lifecycle: search sources, create acquisition task, get status, retrieve download URL, download original, and upload. Some operations an agent might expect as first-class tools (delete/remove from library, update metadata, list library) are absent or only implied, but the main workflows are covered.
Maintenance
Related MCP Connectors
MCP server for Russian books search, details, and recommendation candidates.
Books MCP — wraps Open Library API (free, no auth)
Read-only MCP server for verified book recommendations and reading lists.
Official Bookmax MCP server: search and save bookmarks, read notes and docs from AI assistants.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables conversational management of a Calibre ebook library via MCP, including search, metadata editing, adding, converting, deduplicating, removing, and emailing books with human-in-the-loop safety.1MIT
- AlicenseAqualityCmaintenanceEnables browsing, searching, and quote verification of a local ebook library via MCP, providing deterministic RAG with no embeddings or network.625 PyPI2MIT
- FlicenseAqualityBmaintenanceEnables bibliographic research on a private local Calibre library by providing read-only metadata search, book inspection, and optional RAG-based content retrieval through MCP.5-
- AlicenseAqualityCmaintenanceEnables MCP clients to search the Knihobot.cz public book catalog, inspect live physical copies, compare editions, and retrieve recommendations.5ISC