{"serverId":"mcp-registry/io.github.gmlewis/on-demand-books","tools":[{"name":"get_book","fixed":{"name":"get_book","description":"Re-resolve a single book's purchase URL, cover image, and ISBN from its Shopify product handle. Use this to refresh or re-reference a book across turns without re-running the full name search.","inputSchema":{"type":"object","required":["handle"],"properties":{"handle":{"type":"string","description":"Shopify product handle (as returned in the `shopify_handle` field of a `search_books` result)."},"utm_source":{"type":"string","description":"Optional UTM source tag for marketing attribution (e.g. 'mcp.so', 'claude', 'hn'). Appended as ?utm_source=<value> to the Shopify product URL. Defaults to 'mcp'."}}},"annotations":{"readOnlyHint":true},"title":"On-Demand-Books: Get Book by Handle"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":179,"tokensAfter":179},{"name":"search_books","fixed":{"name":"search_books","description":"Search for personalized puzzle books by first name. Returns matching books with direct Shopify purchase links, cover images, and ISBNs. A typical exact match returns 9 books across 3 puzzle types (mazes, name-sudokus, word searches) and 3 difficulty levels. When no exact match exists, returns similarly-named books. Use this whenever a user is shopping for a personalized gift and knows the recipient's first name.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"First name to search for personalized puzzle books (e.g. 'Susan', 'Bob'). Case-insensitive; non-letters are stripped."},"utm_source":{"type":"string","description":"Optional UTM source tag for marketing attribution (e.g. 'mcp.so', 'claude', 'hn'). Appended as ?utm_source=<value> to all Shopify product URLs so the seller can track which channel drove the sale. Defaults to 'mcp'."}}},"annotations":{"readOnlyHint":true},"title":"On-Demand-Books: Search Personalized Books"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":263,"tokensAfter":263},{"name":"suggest_names","fixed":{"name":"suggest_names","description":"Suggest first names for which personalized puzzle books are likely available. Use this when a user is unsure of a spelling, wants gift-recipient ideas, or only has part of a name. Returns popular available names, optionally filtered by a case-insensitive prefix. To confirm a specific name has matching books, follow up with `search_books`.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of suggestions to return (default 20, max 100)."},"prefix":{"type":"string","description":"Optional name prefix to complete (e.g. 'su' -> 'Susan', 'Susie', 'Suzanne'). If omitted, returns a curated list of popular names."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"On-Demand-Books: Suggest Available Names"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197}],"toolsChanged":3,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}