cd /news/ai-agents/i-turned-my-book-recommender-into-an… · home › topics › ai-agents › article
[ARTICLE · art-150110] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

I turned my book recommender into an AI app in a day. Here are the two bugs that taught me the most.

A developer built BookDNA, an MCP server that recommends real books by matching tropes, setting and tone and validating every suggestion against Open Library, then deployed it on Manufact Cloud so any MCP-capable AI chat can call its four tools. Two bugs surfaced during testing: MCP App widgets silently blocked Open Library cover images that redirect to archive.org because the widget's security policy only allowlisted the first domain, and the platform proxy rewrote the user-identifying header so all users shared a single rate limit. The developer's stated lessons are to allowlist every site in an image redirect chain and to test anything depending on request headers against the live deployment.

by read2 min views1 publishedOct 14, 2026

I read a lot of fantasy, especially romantasy, and I’ve always wanted to ask an AI for something specific, like “enemies to lovers in a fae court,” and get back real books, not made-up titles.

So I built BookDNA: it reads a book’s “DNA” (its tropes, setting, and tone), recommends books that match, and checks every single suggestion against Open Library, so it never recommends a book that doesn’t exist.

This week I turned it into an MCP server using mcp-use and deployed it on Manufact Cloud. Now any AI chat that supports MCP can use it.

What I built

Four tools an AI can call: search_book, get_book_dna, recommend, and recommend_by_tropes. The recommend tools return a small app that appears right inside the chat: a parchment shelf of book covers, each with a one-line reason it was picked.

My favorite moment: I tested it in Manufact’s Inspector chat using a GPT model, not Claude, and it worked perfectly. One server, any AI. That’s the promise of MCP, and seeing it happen was really satisfying.

Bug 1: only one cover showed up

My first shelf showed one cover and four broken images. Every book had a valid cover link, so the data wasn’t the problem.

It turned out that older Open Library covers redirect to a different server on archive.org. MCP App widgets run with a strict security policy that lists which sites they’re allowed to load images from, and I’d only allowed Open Library. The redirected images were silently blocked. The one cover that loaded was newer and didn’t redirect.

The fix was to allow archive.org too. I also added a fallback: if a cover ever fails, the card shows a parchment “title page” with the title and author instead of a broken image.

Lesson: if your widget loads images, allow every site in the redirect chain, not just the first one.

Bug 2: everyone shared one rate limit

The server is public, so I added rate limits to protect my AI budget, including a per-user limit. Testing it against the live deployment showed something I didn’t expect: the platform’s proxy rewrites the header that identifies the user, and the address I was reading belonged to the proxy, not the user. So every user was sharing one limit.

One small change fixed it, but I only found it because I tested against the real deployment instead of trusting my local setup.

Lesson: test anything that depends on request headers against your real deployment.

How I built it

I built this with Claude Code. I made the decisions, reviewed every change, and tested it myself, and I kept a “friction log” of everything that confused me along the way. A few items are already in this post.

Try it

GitHub: [github.com/ksaivarsha/bookdna](https://dev.tourl)

MCP server: [https://calm-wave-h30fs.run.mcp-use.com/mcp](https://dev.tourl)

If you build MCP Apps, I’d love to hear what tripped you up.
── more in #ai-agents 4 stories · sorted by recency
── more on @bookdna 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-turned-my-book-rec…] indexed:0 read:2min 2026-10-14 · —