goodreads-mcp
A read-only MCP server for Goodreads that enables LLMs to search for books, retrieve detailed book info with ratings and reviews, and explore recommendations, series, and author bibliographies using public data sources without requiring authentication.
README
📚 goodreads-mcp
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 RSS feeds, the JSON autocomplete endpoint, and the __NEXT_DATA__ blob embedded in book pages. No login, no cookies, no writes — public data only.
tools
| tool | stability |
|---|---|
search_books |
stable (JSON endpoint) |
get_book |
stable (__NEXT_DATA__ via .xml path) — details, ratings histogram, series, review-language breakdown |
get_reviews |
GraphQL — paginated reader reviews (text, rating, likes, date, spoiler flag, permalink) with server-side min_rating / max_rating and exclude_spoilers; limit up to 100 |
similar_books |
GraphQL — "readers also enjoyed" recommendations |
author_books |
GraphQL — an author's bibliography (from any of their books) |
series_books |
GraphQL — books in a series with reading-order placement |
get_editions |
GraphQL — published editions (format, ISBN, publisher, date) |
book_lists |
GraphQL — Listopia lists a book appears on (title, votes, size) |
popular_books |
GraphQL — most popular books by release year (or year+month), ranked |
get_shelf |
stable (RSS) — public shelves |
list_shelves |
best effort (HTML) — public profiles |
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. This is the structured book graph a general web search can't assemble.
WAF 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.
install
cd goodreads-mcp
python3.10 -m venv .venv && .venv/bin/pip install -e .
Requires Python ≥ 3.10.
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.
mkdir -p ~/.config/goodreads-mcp
cat > ~/.config/goodreads-mcp/config.json << 'EOF'
{ "user_id": "12345678" }
EOF
Env var GOODREADS_USER_ID overrides the file.
Claude Desktop config
~/Library/Application Support/Claude/claude_desktop_config.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:
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")— checks youruser_id+ RSSlist_shelves()— best-effort shelf-name scrape
tests
.venv/bin/pip install -e ".[test]"
.venv/bin/pytest # offline parser/unit tests
GOODREADS_LIVE=1 .venv/bin/pytest # + live network smoke tests
design notes
- Request-first, no browser automation. Everything is
httpxagainst JSON/RSS/embedded-JSON/GraphQL surfaces; the only HTML regex is inlist_shelvesand the GraphQL config discovery. - GraphQL backbone (reviews).
get_reviewscalls Goodreads' AppSync GraphQL endpoint — the same backend the website uses. The web app ships a public read-only API key in its JS bundle; the client scrapes the endpoint + key from that bundle at runtime and caches them, so a key rotation self-heals (client.graphql_config). A hardcoded pair is kept as a fallback. This is what enables real pagination (past the ~30 reviews a page embeds) and server-side rating filters. GraphQL partial-success is respected: a deleted review's sub-resource just comes backnullrather than failing the call. - WAF-aware. Book pages sit behind an AWS WAF JS challenge;
get_bookuses the.xmlpath that isn't gated, and the client raisesWAFChallengeif it ever gets a challenge body so failures are loud, not silent. (The GraphQL endpoint is a separate AppSync host and isn't WAF-gated.) - Polite client. Single persistent session, browser-faithful headers, exponential backoff on 429/503;
get_reviewscaps paging at 100 reviews. - Caveats: all of this is unofficial and depends on markup/endpoints/keys that can drift.
shipped since v0.1
- richer book data —
get_booknow includes the ratings histogram, series/position, and review-language breakdown;series_booksandsimilar_bookscover series and recommendations;get_reviewsreturns paginated, filterable reader reviews. - author bibliography —
author_booksreturns an author's works (ranked by popularity) plus a link to their author page (author_url).
ideas for v2
- author page detail (bio, photo, follower count) — not currently exposed cleanly: the author page is legacy server-rendered HTML with no structured JSON, and there's no discoverable GraphQL contributor-detail query, so this would require brittle DOM scraping.
author_bookslinks to the page instead. compare_books([ids])— fan-out helper to rank several titles by rating/histogram- caching layer for repeated lookups
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。