
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
概览
只读的 MCP 服务器,让助手无需 API 密钥即可搜索 Goodreads,并查询图书、评分、书评、版本、系列和公开书架。
- 可以做什么
- 搜索图书,并获取图书详情、评分分布、所属系列和各类标识符
- 分页读取读者书评,可按评分、语言、排序和剧透过滤
- 探索相关图书:相似图书、作者作品列表、系列阅读顺序、版本和 Listopia 书单
- 按年份或月份查找热门图书,并按评分比较最多十本书
- 读取公开用户的书架与书架名称,用户 ID 可按调用传入或设为默认
- 适用场景
- 适合让助手调研某本书、作者或系列,收集读者评价与书评,或查看某个公开 Goodreads 书架上的内容,且无需登录或持有 API 密钥。
- 运行要求
- 以本地 Python 包运行(需 Python 3.11 或更高版本),例如通过 uvx goodreads-mcp-ai 或 Claude Desktop 安装包启动。需要能访问 Goodreads 的网络。可选地设置 GOODREADS_USER_ID 或配置文件,为书架工具提供默认用户。
安装
在 SourceWeft 中
- 打开 控制台中的 Goodreads MCP,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
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
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_bookroutes 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 raisesWAFChallengewith a clear message instead of a confusing parse error. The review-list page (/review/list/{uid}) became login-only in Sep 2026; the client raisesLoginRequiredon a sign-in redirect for the same reason, andlist_shelvesreads the public profile page instead.
install
With pip:
Or with uv, which is also what the Claude Desktop bundle uses:
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.
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:
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:
search_books("project hail mary")— should just workget_book("54493401")— confirms the.xml/WAF workaround; check the histogram is populatedget_reviews("54493401")— should return real review textget_shelf("to-read")— raisesShelfFeedUnavailablewhile Goodreads answers the shelf feed with 404 (since Oct 2026); that is not auser_idproblemlist_shelves()— best-effort shelf-name scrape
For an end-to-end example that chains the tools, see prompts/research-a-book.md.
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
- docs/design.md — design notes: the data surfaces, WAF and login handling, politeness and concurrency
- docs/roadmap.md — ideas not built yet
- docs/maintenance.md — how this repository is maintained (Hive, ACMM L6, outreach PRs held for human review)
- docs/ai-ops-runbook.md — what to check and do for each automated signal
- docs/quality.md — what the tests and numbers do and do not prove
- docs/risk-tiers.md — the risk tier every pull request declares
- docs/review-rubric.md — the review checklist
- docs/metrics.md — outcome metrics
- docs/strategy.md — what the project is for, what it won't do, and the commands that say whether it is on track
- docs/reflections/ — lessons learned about this codebase
- docs/SECURITY-AI.md — what AI agents may and may not touch
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版本历史
4- v2026.11.0最新Nov 7, 2026
- v2026.10.0Oct 10, 2026
- v2026.9.3Sep 27, 2026
- v2026.9.2Sep 26, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
