The Company: PC game price broker
Lowest live price for any PC game across 13 stores, with every store price and the record low.
作者による説明(英語の原文)
Read-only MCP server for Goodreads (no API required): search, books, shelves, ratings
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
GOODREADS_USER_ID必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"goodreads-ai": {
"command": "uvx",
"args": [
"goodreads-mcp-ai"
],
"env": {
"GOODREADS_USER_ID": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add goodreads-ai --env GOODREADS_USER_ID=your-value -- uvx goodreads-mcp-ai動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"goodreads-ai": {
"command": "uvx",
"args": [
"goodreads-mcp-ai"
],
"env": {
"GOODREADS_USER_ID": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"goodreads-ai": {
"type": "stdio",
"command": "uvx",
"args": [
"goodreads-mcp-ai"
],
"env": {
"GOODREADS_USER_ID": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
GOODREADS_USER_ID envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月10日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Danathar で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(2026.11.0)がレジストリに届いたのは一昨日です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:The Company: PC game price broker, GridIron Data, Trazo pilot
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Lowest live price for any PC game across 13 stores, with every store price and the record low.
NFL fantasy football data: players, projections, stats, snaps, news, injuries and prop odds.
Fly Trazo, a browser game over the real Nazca lines, turn by turn, and post to its AI board.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Thank you, [Shreeya Chand](https://github.com/shreeyachand). 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.
| tool | source / what it returns |
|---|---|
search_books | JSON 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_reviews | GraphQL — 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_books | GraphQL — paginated "readers also enjoyed" recommendations; limit up to 100 |
author_books | GraphQL — paginated author bibliography, ranked by popularity, from any of their books, plus author_url; limit up to 100 |
series_books | GraphQL — 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_editions | GraphQL — 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_lists | GraphQL — paginated Listopia lists a book appears on (title, votes, size); limit up to 100 |
popular_books | GraphQL — most popular books by release year, or a single month (1–12), ranked; limit capped at 50 |
compare_books | get_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_shelf | shelf 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_shelves | best-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
WAFChallengewith 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
LoginRequiredon a sign-in redirect for the same reason, and
list_shelvesreads the public profile page instead.
With pip:
cd goodreads-mcp
python3.11 -m venv .venv && .venv/bin/pip install -e .
Or with uv, which is also what the Claude Desktop bundle uses:
cd goodreads-mcp
uv sync uv 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.
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/ -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. 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.
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:
{
"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.
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") — raises ShelfFeedUnavailable while Goodreads answers the shelf feed with 404 (since Oct 2026); that is not a user_id problemlist_shelves() — best-effort shelf-name scrapeFor an end-to-end example that chains the tools, see prompts/research-a-book.md.
.venv/bin/pip install -e ".[test]" # pytest + pytest-cov
.venv/bin/pytest # offline parser/unit tests GOODREADS_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.
冒頭だけを表示しています。続きはリポジトリで読めます