Search, browse, and read 75,000+ public-domain books from Project Gutenberg with full plain-text retrieval and offset/limit chunking via MCP. STDIO or Streamable HTTP.
Strong tool definitions with comprehensive schemas, clear descriptions, and proper parameter typing. All 4 tools have detailed descriptions (194 - 350 chars, well above 20-char minimum). Input schemas are complete with type constraints, enums, and ranges. Tool names follow verb_noun pattern (gutenberg_search_books, gutenberg_get_book, gutenberg_get_text, gutenberg_browse_popular). Output schemas are documented in descriptions. Error handling is present but could be more prescriptive about recovery paths. No security issues detected (read-only tools, no secrets in params). Composition is clean, each tool has one responsibility and outputs chain naturally (search → get_book → get_text). Minor gaps: output field documentation could be more formal; error classification (retryable vs fatal) not explicit in descriptions.
Browse the most-downloaded Project Gutenberg books, ordered by popularity. Returns up to 32 titles with their Gutenberg IDs, authors, languages, and download counts. Optionally filter by language or topic. Use this as a discovery entry point — "what are the most popular classics in French?" — or as a heartbeat check that the catalog is reachable.
Fetch complete metadata for a Project Gutenberg book by ID — title, authors (with birth/death years), translators, editors, subjects, bookshelves, languages, copyright status, and the full formats map with download URLs for each available format (plain text, HTML, EPUB, cover image, etc.). Use this before gutenberg_get_text to confirm a plain-text format is available and to get the direct download URL.
Retrieve the plain-text content of a Project Gutenberg book, stripped of the standard license header and footer so the response contains only the literary work. For long works — novels routinely run 500KB–2MB — use offset and limit to read in chunks rather than fetching the whole book at once. The response reports totalChars and remainingChars for reliable pagination. Prefers UTF-8 plain text; falls back to an HTML edition converted to text; refuses audio books (media_type "Sound") with a clear error.
Search the Project Gutenberg catalog of 78,000+ public-domain books. Matches title and author name with query words; filters by topic (subject or bookshelf keyword), language, author lifespan, or a specific list of Gutenberg IDs. Results are ordered by popularity (download count) by default. Returns book ID, title, authors, languages, subjects, and download count — use gutenberg_get_book for the full formats map before fetching text.
Output schemas not formally documented in JSON Schema format. Descriptions mention returned fields (book ID, title, authors, etc.) but no structured schema definition visible in tool registration.
Error handling descriptions lack explicit recovery guidance. E.g., gutenberg_get_text mentions 'refuses audio books with a clear error' but does not state what the LLM should do next (e.g., 'Try a different book ID').
Parameter 'limit' in gutenberg_get_text has max 50000 chars but description notes 'actual returned length may be slightly less than limit when a natural paragraph boundary is found within 500 characters', this conditional behavior should be formalized as a constraint or documented in output schema.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
gutenberg_search_books and gutenberg_browse_popular return paginated results but pagination metadata (totalCount, hasMore, nextCursor) is mentioned in descriptions but not formally defined in output schema.
Tool descriptions include example Gutenberg IDs (1342, 2600, 84) which LLMs may reuse literally in real calls. Replace with parameter constraints or remove examples.