Skip to main content
Glama

on-demand-books MCP Server

An MCP (Model Context Protocol) server that helps AI agents find the perfect personalized puzzle book gift from a catalog of 100,853 customized books available on the On-Demand-Books Shopify store.

Add this server to any MCP-compatible AI agent (Claude Desktop, opencode, etc.) and your agent will be able to search for books by the recipient's first name and hand the buyer a direct Shopify purchase link.

Demo

on-demand-books MCP demo

Related MCP server: Shopify MCP Server

Tools provided

Tool

Purpose

search_books

Search the 100k+ personalized catalog by first name. Returns up to 9 matching books (mazes, name-sudokus, word searches across 3 difficulty levels) with direct Shopify purchase URLs, cover images, and ISBNs. Distinguishes exact matches from similar-name matches.

suggest_names

Suggest popular first names for which books are available, optionally filtered by a prefix. Use when a buyer is unsure of a spelling or wants gift-recipient ideas.

get_book

Re-resolve a single book's Shopify purchase URL from its product handle (as returned by search_books).

Live endpoint

https://on-demand-books-dq2yvpdh.fermyon.app/

Hosted on Fermyon Cloud as a Spin + WebAssembly component built with the wasmcp toolkit.

Add to your MCP client

Claude Desktop / Claude Code (claude_desktop_config.json)

{
  "mcpServers": {
    "on-demand-books": {
      "url": "https://on-demand-books-dq2yvpdh.fermyon.app/"
    }
  }
}

opencode (opencode.json)

{
  "mcp": {
    "on-demand-books": {
      "type": "http",
      "url": "https://on-demand-books-dq2yvpdh.fermyon.app/"
    }
  }
}

Other MCP clients

Point any MCP client that supports the Streamable HTTP transport at the live endpoint above. The server follows the MCP 2025-11-25 spec.

Example agent usage

User: I need a birthday gift for my niece Susan. She likes puzzles.

Agent calls search_books({ "name": "Susan" }) and replies:

Great news — there are 9 personalized puzzle books for Susan, including "Fun Mazes for Susan — Easy to Medium" and "Fun Name Sudokus for Susan — Hard to Insane". Here's a direct link to the first one: https://on-demand-books.com/products/vz5ygw — add it to your cart and check out on Shopify.

Build & run locally

make setup  # Install wasm32-wasip2 target
make build  # Output: target/wasm32-wasip2/release/on_demand_books.wasm
wasmcp compose server target/wasm32-wasip2/release/on_demand_books.wasm -o server.wasm --force
spin up --listen 127.0.0.1:8765   # http://127.0.0.1:8765/

Smoke test with curl:

curl -X POST http://127.0.0.1:8765 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

curl -X POST http://127.0.0.1:8765 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

curl -X POST http://127.0.0.1:8765 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_books","arguments":{"name":"susan"}}}'

Deploy

spin deploy

Implementation

This component uses the capability pattern from wasmcp, implementing just two methods from the tools-capability interface:

  • list_tools() — declares the three tools above.

  • call_tool() — dispatches to the right tool handler and returns the result.

The wasmcp compose CLI wraps the component with the tools-middleware that handles MCP protocol translation, request delegation, and response formatting.

Outbound HTTP to the search API uses the WASI HTTP outgoing-handler interface (not raw sockets) so the component runs correctly on Fermyon Cloud.

See src/lib.rs for the full implementation.

Architecture

MCP client (Claude / opencode / ...)
        │  HTTPS (MCP Streamable HTTP transport)
        ▼
Fermyon Cloud  →  server.wasm  (composed by wasmcp)
        │
        ├─ transport.wasm        (HTTP transport, MCP framing)
        ├─ tools_middleware.wasm (MCP protocol → tool dispatch)
        └─ on_demand_books.wasm  ← THIS COMPONENT
                │
                │  WASI HTTP outgoing-handler
                ▼
        https://on-demand-books-com-kzfxdscz.fermyon.app/search/{name}
                │
                ▼  returns book metadata
        https://on-demand-books.com/products/{handle}  (Shopify store)
A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gmlewis/on-demand-books-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server