Context7
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Read-only MCP server for Calibre-Web: library search, browsing and covers via the OPDS feed
Pick the AI app you use, then copy the settings.
Passed 3/3 checks · Runs on your computer
First: which AI do you use?
Pick your app and the steps appear below.
Works with Claude, with some setup first
You need a Calibre-Web key (create it on the maker’s site) · Install Node.js on your computer first (one time) · Only the Claude desktop app (Windows or Mac), not the web or phone
One time only; it works for every server that needs Node.js
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
SettingsDeveloperEdit Config
Checking the commands · copy buttons appear once they pass
Paste the key only into the app’s field, never into a chat or to anyone
Use Calibre-Web and tell me what you can do for me, then show me one thing✓ If Claude says it is using Calibre-Web or shows a Calibre-Web tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
ChatGPT cannot connect Calibre-Web yet
Calibre-Web runs on your computer, but ChatGPT can only connect servers that run on the web
A · Use an app that can connect Calibre-Web
B · Others in Search & AI memory that work with ChatGPT
Picked from the most used in the same category, only ones that connect by address with no key
Works with Claude Code, with some setup first
You need a Calibre-Web key (create it on the maker’s site) · Install Node.js on your computer first (one time)
One time only; it works for every server that needs Node.js
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
Mac: press Command+Space and type Terminal · Windows: open PowerShell
Checking the commands · copy buttons appear once they pass
Replace “your-value” with your key before pressing Enter
Paste the key only into the app’s field, never into a chat or to anyone
You should see Calibre-Web listed as connected
Use Calibre-Web and tell me what you can do for me, then show me one thing✓ If Claude Code says it is using Calibre-Web or shows a Calibre-Web tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with Cursor, with some setup first
You need a Calibre-Web key (create it on the maker’s site) · Install Node.js on your computer first (one time)
One time only; it works for every server that needs Node.js
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
Checking the commands · copy buttons appear once they pass
In the Calibre-Web settings, CALIBRE_WEB_URL, CALIBRE_WEB_USERNAME, CALIBRE_WEB_PASSWORD, CALIBRE_WEB_INSECURE_TLS, CALIBRE_WEB_ALLOW_TOOLS, CALIBRE_WEB_DENY_TOOLS is empty; add your key and save
Paste the key only into the app’s field, never into a chat or to anyone
Use Calibre-Web and tell me what you can do for me, then show me one thing✓ If Cursor says it is using Calibre-Web or shows a Calibre-Web tool in the answer, you are connected
Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with VS Code, with some setup first
You need a Calibre-Web key (create it on the maker’s site) · Install Node.js on your computer first (one time)
One time only; it works for every server that needs Node.js
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
Checking the commands · copy buttons appear once they pass
In the Calibre-Web settings, CALIBRE_WEB_URL, CALIBRE_WEB_USERNAME, CALIBRE_WEB_PASSWORD, CALIBRE_WEB_INSECURE_TLS, CALIBRE_WEB_ALLOW_TOOLS, CALIBRE_WEB_DENY_TOOLS is empty; add your key and save
Paste the key only into the app’s field, never into a chat or to anyone
Use Calibre-Web and tell me what you can do for me, then show me one thing✓ If VS Code says it is using Calibre-Web or shows a Calibre-Web tool in the answer, you are connected
Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.
JSON settings are under “For developers” below
Claude Code
Checking the commands · copy buttons appear once they pass
Claude Desktop (claude_desktop_config.json)
Checking the commands · copy buttons appear once they pass
Cursor (~/.cursor/mcp.json)
Checking the commands · copy buttons appear once they pass
VS Code (mcp.json)
Checking the commands · copy buttons appear once they pass
CALIBRE_WEB_URL required envCALIBRE_WEB_USERNAME envCALIBRE_WEB_PASSWORD secret envCALIBRE_WEB_INSECURE_TLS envCALIBRE_WEB_ALLOW_TOOLS envCALIBRE_WEB_DENY_TOOLS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
npm: calibreweb-mcpoci: ghcr.io/ni-c/calibreweb-mcp:0.3.1Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.
Run on your computer in
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 13, 2026
The registry name was verified with the GitHub account ni-c, which owns the repo
Code last changed 2 days ago
Uses MIT
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Ask, share a tip or report that it does not work. Sorted by what people marked helpful.
No posts yet. Be the first to ask or share.
Posts here are written by users, not the PopNx team.
No reviews yet
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: CALIBRE_WEB_URL, CALIBRE_WEB_PASSWORD
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed 2 days ago, and the latest version (0.3.1) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js, Docker on your computer.
In the same category: Context7, Codebase Memory, Ruflo
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Agent teams, swarms, memory and hooks for Claude Code and Codex, served over MCP.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A read-only Model Context Protocol (MCP) server for Calibre-Web (and Calibre-Web Automated), the self-hosted ebook library web UI.
Lets MCP clients like Claude Code, Claude Desktop or Codex search your library, browse the curated views and shelves, follow per-format download links and pull cover images straight into the conversation. It never writes anything: every tool is a GET.
Six tools is the ceiling, not the floor: CALIBRE_WEB_ALLOW_TOOLS=essential registers a curated five instead, and a model picks the right tool far more reliably from five than from six — see choosing which tools load.
Calibre-Web has no REST API — its only stable machine-readable interface is the OPDS catalog feed it serves for e-reader apps. This server speaks that feed: Atom XML with HTTP Basic auth in, structured book data out.
The API Calibre-Web never had. Calibre-Web exposes no REST API — its only stable machine interface is the OPDS Atom feed built for e-reader apps. These tools parse that feed into structured book data with numeric ids, per-format download URLs and bounded summaries.
Read-only by construction. All six tools are GETs. Redirects are refused so Basic credentials never travel, XML carrying a DOCTYPE is rejected outright, hrefs are locked to the configured origin, and metadata is marked as the untrusted data it is.
linuxserver/calibre-web image; Calibre-Web Automated works the same way)| Variable | Required | Description |
|---|---|---|
CALIBRE_WEB_URL | yes | Root URL of the instance, e.g. https://books.example.com. The /opds path is appended automatically. |
CALIBRE_WEB_USERNAME | yes¹ | Username of the Calibre-Web account. |
CALIBRE_WEB_PASSWORD | yes¹ | Password of that account (the web login password). |
CALIBRE_WEB_INSECURE_TLS | no | true to accept self-signed certificates — scoped to the configured host only. |
CALIBRE_WEB_ALLOW_TOOLS | no | Comma-separated tool names, list_* prefixes, or essential for a curated preset |
CALIBRE_WEB_DENY_TOOLS | no | Same syntax; removed from whatever CALIBRE_WEB_ALLOW_TOOLS left |
¹ Leave both unset for an instance that allows anonymous browsing; setting only one of them is a configuration error.
CALIBRE_WEB_ALLOW_TOOLS and CALIBRE_WEB_DENY_TOOLS take comma-separated tool names; a trailing * matches a whole family. essential is a curated preset of five: search_books, list_books, list_shelves, get_shelf_books, get_stats.
CALIBRE_WEB_ALLOW_TOOLS=essential
CALIBRE_WEB_ALLOW_TOOLS=search_books,list_shelves CALIBRE_WEB_DENY_TOOLS=get_cover
An entry that matches no tool aborts startup and names it, so a typo cannot silently hide a tool — an absent tool is not something anyone traces back to an environment variable. A filtered tool is never registered, so it is absent from tools/list and unknown to tools/call alike.
If you run several of these servers at once, mcp-hub is the other answer — its /hub endpoint replaces every server's tools with six meta-tools.
claude mcp add calibreweb \
-e CALIBRE_WEB_URL=https://books.example.com \ -e CALIBRE_WEB_USERNAME=reader \ -e CALIBRE_WEB_PASSWORD=... \ -- npx calibreweb-mcp
{
"mcpServers": { "calibreweb": { "command": "npx", "args": ["calibreweb-mcp"], "env": { "CALIBRE_WEB_URL": "https://books.example.com", "CALIBRE_WEB_USERNAME": "reader", "CALIBRE_WEB_PASSWORD": "..." } } } }
[mcp_servers.calibreweb]
command = "npx" args = ["calibreweb-mcp"] env = { CALIBRE_WEB_URL = "https://books.example.com", CALIBRE_WEB_USERNAME = "reader", CALIBRE_WEB_PASSWORD = "..." }
docker run -i --rm \
-e CALIBRE_WEB_URL=https://books.example.com \ -e CALIBRE_WEB_USERNAME=reader \ -e CALIBRE_WEB_PASSWORD=... \ ghcr.io/ni-c/calibreweb-mcp
A client that cannot spawn a local process — ChatGPT connectors, Claude on the web, Cursor, LibreChat — reaches calibreweb-mcp through mcp-hub: one container serves many stdio MCP servers over Streamable HTTP, with an OAuth 2.1 login behind a single password and long-lived tokens for the clients that cannot do OAuth. Its /hub endpoint puts every server behind six meta-tools, so one connector reaches all of them without N×tool schemas in the model's context, and it speaks both protocol revisions — a question this server asks travels through it to the person at the far end.
Its /config/mcp.json uses Claude Code's format, so the entry is the one you already have:
{
"mcpServers": { "calibreweb": { "command": "npx", "args": ["-y", "calibreweb-mcp"], "env": { "CALIBRE_WEB_ALLOW_TOOLS": "essential" }, "denyTools": ["get_cover"] } } }
allowTools and denyTools there are the hub's own per-server filter, which is not the same thing as *_ALLOW_TOOLS in env — the difference, and the mistake it invites, are in the client guide.
All tools are read-only (readOnlyHint: true).
| Tool | Description |
|---|---|
search_books | Search by title, author, series, publisher and tags. Calibre-Web returns every match at once; the result is capped client-side (limit, default 50) and reports the real match count. |
list_books | Book listings by view: new (default), hot, rated, discover (random), read, unread, or all (optionally narrowed to an initial letter). |
list_shelves | Public shelves plus the configured user's own shelves. |
get_shelf_books | The books on a shelf, in shelf order. |
get_cover | A book's cover, returned as an image the client can display. |
get_stats | Total books, authors, categories and series. |
Book entries include authors, tags, series (with index), rating, a bounded summary, a cover URL and per-format download URLs — ready-made links a human can open, since the model itself has no reason to download an EPUB.
Every tool declares an outputSchema and answers with structuredContent alongside the text block, so a client can use the result without parsing prose:
{
"untrusted": true, "source": "calibre-web", "totalFound": 2, "truncated": false, "books": [{ "id": 7, "title": "Dune", "authors": ["Frank Herbert"] }], "notes": ["Book titles, authors, tags, series and summaries come from …"], }
The untrusted marker is a field and not only a line in notes, because a client that reads the structured half would otherwise have to find the warning in a list of sentences. The two tools without it are get_stats, which is four counters this server has checked are numbers, and get_cover, which reports an id, a media type from a four-entry allowlist and a byte count — the image itself stays in the content block where a client renders it.
An over-budget result drops book summaries as before. Where that is still not enough it is now an error rather than JSON cut at the ceiling: unparseable text was tolerable in a text block and is not something structuredContent can carry, and the two channels have to hold the same value.
Feeds are paginated by the instance's _books per page_ setting (default 60); the page size is not