Goodreads MCP

io.github.Danathar由 GitHub 帳號 Danathar 發布v2026.11.0更新於 Nov 7, 2026

Read-only MCP server for Goodreads (no API required): search, books, shelves, ratings

概覽

AI 產生的概覽

唯讀的 MCP 伺服器,讓助理不需 API 金鑰即可搜尋 Goodreads,並查詢書籍、評分、書評、版本、系列與公開書櫃。

可以做什麼
  • 搜尋書籍,並取得書籍詳情、評分分布、所屬系列與各種識別碼
  • 分頁讀取讀者書評,可依評分、語言、排序與劇透篩選
  • 探索相關書籍:相似書籍、作者著作清單、系列閱讀順序、版本與 Listopia 書單
  • 依年份或月份尋找熱門書籍,並依評分比較最多十本書
  • 讀取公開使用者的書櫃與書櫃名稱,使用者 ID 可逐次傳入或設為預設
適用情境
適合讓助理研究某本書、作者或系列,蒐集讀者評價與書評,或查看某個公開 Goodreads 書櫃上的內容,且不需登入或持有 API 金鑰。
執行需求
以本機 Python 套件執行(需 Python 3.11 或更新版本),例如透過 uvx goodreads-mcp-ai 或 Claude Desktop 安裝包啟動。需要能連上 Goodreads 的網路。可選擇設定 GOODREADS_USER_ID 或設定檔,為書櫃工具提供預設使用者。
安裝前請注意
依賴非官方端點與網頁擷取,Goodreads 一旦變動工具就可能失效或報錯;書櫃 RSS 自 2026 年 10 月起回傳 404,私密個人檔案會觸發 LoginRequired。這是第三方、借助 AI 開發的衍生專案,未獲 Goodreads 認可,也不保證符合其條款;請節制請求量。僅讀取公開資料,不登入、不使用 Cookie、不寫入。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Goodreads MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[CI] [Nightly compliance] [Ask DeepWiki] [Maintenance assisted by Hivecommons Hive] [ACMM L6 Fully Autonomous] [AI assisted] [License: GPL-3.0]

📚 goodreads-mcp

Thank you, Shreeya Chand. This project is a fork of shreeyachand/goodreads-mcp, and it would not exist without that work. The core idea of reaching Goodreads without its retired API, and the tool set this server offers, come from Shreeya's project. We're grateful for it, and for the MIT licence that let us build on it. If this server is useful to you, please go star the original.

A read-only MCP server for Goodreads — built without the Goodreads API, because there hasn't been one since December 2020. Lets an LLM find and research books, ratings, and reviews. Tools ride on the JSON autocomplete endpoint, the __NEXT_DATA__ blob embedded in book pages, the AppSync GraphQL backend the Goodreads website itself uses, and the shelf RSS feed, which Goodreads has answered with 404 for every user since Oct 2026. No login, no cookies, no writes — public data only.

tools

toolsource / what it returns
search_booksJSON autocomplete endpoint (stable) — book_id, title, author, rating, cover; max_results defaults to 10, but the endpoint returns about 5 matches at most
get_book__NEXT_DATA__ via the .xml page (stable) — details, cover, ratings histogram, every series membership, review-language breakdown (review_language_limit, default 5, max 25); edition publication_date and the work's first_published, original_title, language, isbn / isbn13 / asin, author_url (each null when absent)
get_reviewsGraphQL — paginated reader reviews (text, rating, likes, date, spoiler flag, permalink); limit default 10, capped at 100; server-side min_rating / max_rating (1–5, min ≤ max), sort (relevance default, newest, oldest), language (two-letter code, as in get_book's review_languages) and search over review text; exclude_spoilers; reports has_more
similar_booksGraphQL — paginated "readers also enjoyed" recommendations; limit up to 100
author_booksGraphQL — paginated author bibliography, ranked by popularity, from any of their books, plus author_url; limit up to 100
series_booksGraphQL — paginated series books with reading-order placement; series_index (zero-based, in get_book's series_memberships order) picks the series; limit up to 100
get_editionsGraphQL — paginated editions (format, ISBN, publisher, publication date as publication_date YYYY-MM-DD plus raw publication_time in epoch ms); limit up to 100
book_listsGraphQL — paginated Listopia lists a book appears on (title, votes, size); limit up to 100
popular_booksGraphQL — most popular books by release year, or a single month (1–12), ranked; limit capped at 50
compare_booksget_book for each id (__NEXT_DATA__ via .xml) — ranks 1–10 distinct books by rating with positive/critical share; a repeated id is fetched once; more than 10 ids is refused; a book that fails comes back as an error entry; if Goodreads answers 429 or 503 the comparison stops there, keeps the books already fetched, and marks the rest as not fetched
get_shelfshelf RSS feed — books on a public shelf (rating and year as ints, None when absent; dates as YYYY-MM-DD; plus cover, pages, my_review); page starts at 1, about 100 items per page; user_id overrides the configured user; raises LoginRequired for a private profile, and ShelfFeedUnavailable while Goodreads answers the feed with 404 (since Oct 2026)
list_shelvesbest-effort HTML scrape of the public profile page — shelf names; raises LoginRequired for a private profile

Every tool is registered with MCP read-only annotations (read-only, non-destructive, idempotent).

The discovery tools all take a book_id and return results carrying book_id/title/author/rating/url, so an agent can chain them — e.g. similar_books → get_reviews on a recommendation. book_id is a string on both sides ("54493401", or the slug form "54493401-title" on input), so a value copied out of one result is accepted as-is by the next call. average_rating is a number (or null) in every tool, so results from different tools sort together. This is the structured book graph a general web search can't assemble.

The five paginated discovery tools (similar_books, author_books, series_books, get_editions, book_lists) page in batches of 20 and accept a total limit up to 100; popular_books caps limit at 50. Responses include returned and has_more, keeping larger lookups useful without allowing unbounded traffic.

WAF and login note: Goodreads book HTML pages now sit behind an AWS WAF JavaScript challenge (HTTP 202) that plain HTTP clients can't solve. get_book routes around it via the .xml-suffixed page, so it still works without a browser. If Goodreads ever extends the WAF to a path we depend on, the client raises WAFChallenge with a clear message instead of a confusing parse error. The review-list page (/review/list/{uid}) became login-only in Sep 2026; the client raises LoginRequired on a sign-in redirect for the same reason, and list_shelves reads the public profile page instead.

install

With pip:

bash
cd goodreads-mcppython3.11 -m venv .venv && .venv/bin/pip install -e .

Or with uv, which is also what the Claude Desktop bundle uses:

bash
cd goodreads-mcpuv syncuv run goodreads-mcp

Requires Python ≥ 3.11.

Each date-numbered release is also published to PyPI as goodreads-mcp-ai (the goodreads-mcp name there belongs to an unrelated project) and listed on the official MCP registry as io.github.Danathar/goodreads-mcp-ai, from server.json. The listing carries a uvx runtime hint; a client that follows it runs uvx goodreads-mcp-ai, which you can also run yourself.

config (optional)

No login or cookies — everything is public data. The only setting is your numeric user_id, the default for the shelf tools. It's the number in goodreads.com/user/show/<ID>-yourname; you can also pass user_id to each shelf tool per call.

bash
mkdir -p ~/.config/goodreads-mcpcat > ~/.config/goodreads-mcp/config.json << 'EOF'{ "user_id": "12345678" }EOF

Env var GOODREADS_USER_ID overrides the file. A config file that can't be read, isn't valid JSON, isn't a JSON object, or has a user_id that is neither a string nor a whole number is ignored with a warning on stderr (a bare number such as 12345678 is accepted and used as its string form; booleans, floats, lists and objects are ignored); the server still starts.

Claude Desktop config

Bundle. Each release carries a goodreads-mcp.mcpb. Releases come out monthly when the server itself changed, numbered by date (2026.10.0, 2026.10.1, 2026.11.0); 0.1.1 was the last of the old numbering, and every date-numbered release is newer than it. See CONTRIBUTING.md for how one is cut. Open the .mcpb in Claude Desktop to install. The bundle ships no dependencies — the manifest launches the server with uv run, and the host resolves pyproject.toml into a private environment on first launch — so one bundle runs on macOS, Windows and Linux with any Python ≥ 3.11. The bundle's optional "Goodreads User ID" setting (user_config.goodreads_user_id) is passed to the server as GOODREADS_USER_ID; left empty, it is passed as an empty value, and the server falls back to the config file.

Manual. Add the server to claude_desktop_config.json — on macOS ~/Library/Application Support/Claude/claude_desktop_config.json, on Windows %APPDATA%\Claude\claude_desktop_config.json; in any version, Settings → Developer → Edit Config opens it:

json
{  "mcpServers": {    "goodreads": {      "command": "/path/to/goodreads-mcp/.venv/bin/goodreads-mcp"    }  }}

Or for development, mcp dev goodreads_mcp/server.py gives you the Inspector UI to poke each tool.

first-run verification

The endpoints are unofficial, so verify in this order:

  1. search_books("project hail mary") — should just work
  2. get_book("54493401") — confirms the .xml/WAF workaround; check the histogram is populated
  3. get_reviews("54493401") — should return real review text
  4. get_shelf("to-read") — raises ShelfFeedUnavailable while Goodreads answers the shelf feed with 404 (since Oct 2026); that is not a user_id problem
  5. list_shelves() — best-effort shelf-name scrape

For an end-to-end example that chains the tools, see prompts/research-a-book.md.

tests

bash
.venv/bin/pip install -e ".[test]"     # pytest + pytest-cov.venv/bin/pytest                       # offline parser/unit testsGOODREADS_LIVE=1 .venv/bin/pytest      # + live network smoke tests

The offline suite runs on fixtures; CI runs it with pytest-cov and enforces a coverage floor (--cov-fail-under in ci.yml). The live smoke tests are in tests/e2e/test_smoke_live.py and skip unless GOODREADS_LIVE=1 is set. The nightly compliance run runs the live suite against the real endpoints every night, so upstream drift shows up within a day.

documentation

about this project

[!NOTE] Work on this fork is done with AI assistance and should be treated cautiously.

This is a third-party tool. It is not an official Goodreads or Amazon product, is not sanctioned by either, and uses no official API — there hasn't been one since December 2020. "Goodreads" is a trademark of its owner and is used here only to say what this software talks to.

It reads public data only: no login, no cookies, no writes. It is provided as-is, with no promise that the endpoints it depends on will keep working or that using it is consistent with Goodreads' terms. Keep request volume modest. The maintainer is not responsible for rate limiting, blocking, data loss, or other consequences of using this software.

license

This fork is licensed under the GNU General Public License v3.0, version 3 only (GPL-3.0-only) — no automatic upgrade to later versions.

It incorporates code from shreeyachand/goodreads-mcp, Copyright (c) 2026 Shreeya Chand, released under the MIT License. That code remains under MIT; its licence text and copyright notice are preserved in LICENSE.MIT as the MIT licence requires. The combined work — upstream code together with this fork's changes — is distributed under GPL-3.0.

來源:README.md,提交 e22b3b0

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

4
  1. v2026.11.0最新Nov 7, 2026
  2. v2026.10.0Oct 10, 2026
  3. v2026.9.3Sep 27, 2026
  4. v2026.9.2Sep 26, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分