streamable-httpApache-2.0updated 2mo ago
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.
What can you do with On Demand Books?
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

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)
Install
Add On Demand Books to your client. Pick the one you use.
claude mcp add --transport http on-demand-books https://on-demand-books-dq2yvpdh.fermyon.app/codex mcp add on-demand-books --url https://on-demand-books-dq2yvpdh.fermyon.app/{
"mcpServers": {
"on-demand-books": {
"url": "https://on-demand-books-dq2yvpdh.fermyon.app/"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"on-demand-books": {
"type": "http",
"url": "https://on-demand-books-dq2yvpdh.fermyon.app/"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"on-demand-books": {
"url": "https://on-demand-books-dq2yvpdh.fermyon.app/"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"on-demand-books": {
"serverUrl": "https://on-demand-books-dq2yvpdh.fermyon.app/"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
3 tools
On Demand Books exposes 3 tools to a connected agent.
- 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`).
Score
66 / 100
Good
- Documentation21/25
- Maintenance16/25
- Trust13/20
- Capability4/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 54 days ago
- Has a release history
- Repository is not archived
- Licensed Apache-2.0
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 3 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.2.0Latest | Jul 8, 2026 |