A side-by-side look at the MCP Open Library and Goodreads MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose MCP Open Library for art & culture work as a local process; choose Goodreads MCP for art & culture as a local process. You can also run both side by side in one mcpServers block.
search_books, get_book_by_title, get_book_by_id.search_books, get_book, get_reviews.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Art & Culture | Art & Culture |
| Quality signal | 67/100 · Great | 52/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 96 | 0 |
| Directory activity | 6 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 7 | 12 |
| Full listing | View MCP Open Library | View Goodreads MCP |
search_booksSearch Open Library across titles, authors, subjects, places, people, publishers and ISBNs. Provide at least one search criterion: q, title, author, subject, place, person, publisher, isbn; combining several narrows the search. Returns at most `limit` results (default 10) together with `num_found`, the total number of matches; page through them with `offset`. Each result carries `best_edition` — one edition of the work, with its `isbn_13`/`isbn_10` where Open Library has them, and its `edition_key`, which can be passed to `get_book_by_id` as `{ idType: "olid" }` for that edition's full record.get_book_by_titleSearch for a book by its title on Open Library. Returns at most `limit` results (default 10) together with `num_found`, the total number of matches; page through them with `offset`. Each result carries `best_edition` — one edition of the work, with its `isbn_13`/`isbn_10` where Open Library has them, and its `edition_key`, which can be passed to `get_book_by_id` as `{ idType: "olid" }` for that edition's full record.get_book_by_idGet detailed information about a book using its identifier (ISBN, LCCN, OCLC, OLID).get_authors_by_nameSearch for author information on Open Library. Returns at most `limit` authors (default 10) together with `num_found`, the total number of matches; page through them with `offset`. Each result's `key` can be passed to `get_author_info` for that author's full record.get_author_infoGet detailed information for a specific author using their Open Library Author Key (e.g. OL23919A).get_author_photoGet the URL for an author's photo using their Open Library Author ID (OLID e.g. OL23919A). Reports when no photo exists rather than returning a URL to a blank placeholder.get_book_coverGet the URL for a book's cover image using a key (ISBN, OCLC, LCCN, OLID, ID) and value. Reports when no cover exists rather than returning a URL to a blank placeholder.search_booksJSON autocomplete endpoint (stable) — book_id, title, author, rating, cover; `max_results` defaults to 10, but the endpoint returns about 5 matches at mostget_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`, `a…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`)…similar_booksGraphQL — paginated "readers also enjoyed" recommendations; `limit` up to 100author_booksGraphQL — paginated author bibliography, ranked by popularity, from any of their books, plus `author_url`; `limit` up to 100series_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 100get_editionsGraphQL — paginated editions (format, ISBN, publisher, publication date as `publication_date` YYYY-MM-DD plus raw `publication_time` in epoch ms); `limit` up to 100book_listsGraphQL — paginated Listopia lists a book appears on (title, votes, size); `limit` up to 100popular_booksGraphQL — most popular books by release `year`, or a single `month` (1–12), ranked; `limit` capped at 50compare_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` entryget_shelfshelf RSS feed (stable) — 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 profilelist_shelvesbest-effort HTML scrape of the public profile page — shelf names; raises `LoginRequired` for a private profilePaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"8ensmith-mcp-open-library": {
"command": "npx",
"args": [
"-y",
"mcp-open-library"
]
}
}
}
{
"mcpServers": {
"goodreads-mcp": {
"command": "uvx",
"args": [
"goodreads-mcp-ai"
]
}
}
}