A paid public-domain knowledge base for AI agents. Full-text search, book metadata, chapters, quotes, flagship ask-a-book retrieval Q&A, and 100+ curated subject shelves over a growing corpus of public-domain books (17k+ toward ~62k). $0.001-$0.02 per call via x402 USDC micropayments, no API key, no account. Retrieval only — real cited passages, never LLM-generated.
ForgeMesh Library MCP demonstrates solid tool definition quality with consistent naming patterns, complete input schemas for all 8 tools, and comprehensive descriptions. All tools follow verb_noun naming convention (search_*, get_*, browse_*, book_of_the_day). Tool descriptions are well-crafted and explain cost/payment requirements clearly. However, there are notable gaps: (1) NO output schemas are documented anywhere in the source code, the descriptions state what tools return but never provide JSON Schema for the response structure; (2) idempotentHint is set to false for read-only tools that should be true, suggesting misunderstanding of the annotation semantics; (3) parameter descriptions lack format guidance (e.g., 'query' in search_literature should specify length bounds, language, or query syntax rules); (4) no error handling guidance is visible, tools reference x402 payment failures and API errors but provide no recovery instructions; (5) pagination is mentioned in tool descriptions but not formally exposed as parameters (search_books and search_literature accept 'limit' but no offset/cursor/page parameter for iteration). The server uses proper toolAnnotations (readOnlyHint, destructiveHint, idempotentHint), which is modern and correct. All 8 tools have complete, well-formed inputSchemas with required field declarations. Descriptions average ~250 chars, within the 194-char baseline but on the longer side, they could be tightened. The server properly injects secrets via environment variables (WALLET_PRIVATE_KEY, BASE_RPC_URL) and does not expose them in parameters, following pattern:secret-injection.
Ask a natural-language question about one of the flagship books and get back the most relevant passages from the book itself, with chapter/location citations. Retrieval only — never a generated summary. Pass any recognizable name for "book" (e.g. "Moby Dick", "the Odyssey") — it resolves to the matching route. Available flagship books: alice in wonderland, art of war, count of monte cristo, crime and punishment, don quixote, dracula, frankenstein, great expectations, grimms fairy tales, jane eyre, meditations, moby dick, picture of dorian gray, pride and prejudice, sherlock holmes, iliad, odyssey, republic, time machine, tom sawyer, treasure island, walden, war and peace, wuthering heights. Costs $0.01 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
Free daily book recommendation: a random high-quality book from the corpus. Returns title, author, Gutenberg book_id, and a brief description. Refreshes daily (UTC). Zero cost.
Browse a curated category/subject shelf: 10 hand-picked categories (adventure, childrens-classics, classic-literature, economics-and-politics, gothic-horror, history, philosophy, poetry, science-and-nature, shakespeare-and-drama) plus 100+ auto-generated shelves drawn from real Gutenberg subjects/bookshelves (e.g. 'gothic-fiction', 'russian-literature', 'detective-fiction'). Returns a ranked list of books with book_id for drill-down. Full shelf catalog is discoverable free at https://library.forgemesh.io/llms.txt. Costs $0.003 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
No output schemas documented for any tool. Tool descriptions state what is returned (e.g., 'passages with title/author citations', 'matching books with book_id', 'title, author, year, subjects, ...') but the actual JSON response structure is never formalized. This forces LLMs to infer response structure from prose descriptions, which is error-prone and prevents schema validation.
Incorrect idempotentHint values. All 7 read-only retrieval tools (search_literature, search_books, get_book_metadata, get_chapter, get_quotes, ask_book, browse_shelf) have idempotentHint: false, but they are inherently idempotent, calling them multiple times with the same parameters returns the same results. This misannotation may lead agents to believe these tools have side effects and are unsafe to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Full metadata for one indexed book by book_id: title, author, year, subjects, bookshelves, download rank, chunk count, and detected chapter range. Use search_books first to find a book_id. Costs $0.002 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
Full text of one chapter from an indexed book by book_id and chapter number. Chapter 0 is front matter before the first detected heading. Use get_book_metadata for the valid chapter range. Costs $0.005 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
Notable passages from one indexed book by book_id. Pass an optional theme to full-text search within that book, or omit it for a sample of short dialogue-bearing lines. Costs $0.005 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
Search the indexed public-domain book corpus by title or author substring, e.g. 'Dickens' or 'Frankenstein'. Returns matching books ranked by historical popularity with book_id for drill-down into metadata, chapters, quotes, or full-text search. Costs $0.005 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
PREMIUM full-text search across the entire indexed public-domain corpus (17k+ books and growing). Returns the most relevant passages from ANY book, ranked by relevance, with title/author citations. Retrieval only — real cited passages, never LLM-generated or summarized. Costs $0.02 via x402 (requires WALLET_PRIVATE_KEY, USDC on Base).
Parameter constraints are described in prose but not formalized in inputSchema. For example, search_literature accepts 'limit' with 'max 30', search_books with 'max 50', and ask_book with '5 - 15 range', but these are mentioned only in descriptions, not enforced via JSON Schema minimum/maximum fields. This allows LLMs to pass invalid values (e.g., limit: 1000) which the server must reject at runtime.
No formal enum constraint on 'ask_book.book' parameter. The description lists 24 flagship books and notes the tool 'resolves to the matching route', but the inputSchema does not declare an enum of valid book values. The code has a FLAGSHIP_BOOKS lookup table with fuzzy matching, but this is hidden from the inputSchema. LLMs cannot discover valid books programmatically and may hallucinate names like 'hamlet' or 'ulysses'.
No error handling guidance. Tool descriptions mention costs and x402 payment requirements but provide no guidance on what happens if payment fails, if USDC balance is insufficient, or if the Backend service is unavailable. Descriptions do not indicate whether errors are retryable, require user intervention, or are fatal.
Pagination is not formally exposed as tool parameters. search_literature and search_books mention 'limit' for result count but provide no way to retrieve the next page (no offset, cursor, or page parameter). This prevents agents from iterating through large result sets and may force them to re-query with different keywords.
browse_shelf lacks enumeration or pattern constraint for valid shelf names. The description mentions '10 hand-picked categories' and '100+ auto-generated shelves' but does not enumerate them or provide a discovery mechanism. The note about discovering shelves at 'https://library.forgemesh.io/llms.txt' requires an out-of-band HTTP call.