Google Books MCP server for searching books, retrieving volume details, and accessing public bookshelves via the Google Books API
Google Books MCP has clear, well-structured tool definitions with proper schemas and descriptions. All 4 tools have input schemas with type definitions and required fields. Descriptions are substantive (search tool: 294 chars, well above 20-char minimum). However, several parameters lack descriptions (get_by_isbn.isbn has none; list_bookshelf.shelf is minimal), and output schemas are completely undocumented. Error handling is present but generic. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Parameter constraints are documented in descriptions rather than as enums (e.g., search_field, filter, language, print_type should be enums). Overall solid foundation but missing polish expected of production tools.
Convenience: look up a volume by ISBN-10 or ISBN-13.
Volume detail (full title, authors, description, categories, page count, links).
Fetch the public bookshelves for a Google account (by numeric user_id). Omit shelf to list all public shelves; provide a numeric shelf id to list the volumes on that specific shelf.
AUTHORITATIVE book lookup via Google Books — full-text search across ~40M books. Use for "find books about X", "books by author Y", verifying ISBNs, finding publishers, getting cover images, or pulling structured book metadata an LLM would otherwise have to hallucinate. Returns title, authors, publisher, publish date, description, ISBN, page count, cover thumbnails, language. Use search_field scoping: intitle:, inauthor:, inpublisher:, subject:, isbn:, lccn:, oclc:.
Output schemas completely undocumented. LLMs cannot plan downstream operations or extract fields without knowing response structure. search() returns Google Books API response directly; get_volume() and list_bookshelf() similarly opaque.
Parameter get_by_isbn.isbn has no description. Rubric requires every parameter to have a description explaining what it controls. Current schema only shows type 'string'.
Enum constraints missing for constrained parameters. search_field (intitle|inauthor|inpublisher|subject|isbn|lccn|oclc), filter (partial|full|free-ebooks|paid-ebooks|ebooks), print_type (all|books|magazines), order_by (relevance|newest) are documented as strings with examples in descriptions. Should be JSON Schema enums to prevent LLM hallucination.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No tool annotations despite all tools being read-only. Rubric expects readOnlyHint on tools that do not modify state. This helps agents understand safety and retry semantics.
get_volume description is minimal (59 chars). Rubric baseline is 194 chars average for A+ tools. Should explain when to use it vs search(), what fields it returns, and any prerequisites (e.g., requires a valid volume ID from search).