What it does

Gift Scout is for the moment you know who a gift is for and a couple of things they love, and nothing else. You write "My dad. Le Carre novels and single malt. Christmas." The agent works out what each love is, asks Qloo's taste graph what the same audience loves across brands, books, podcasts, destinations and places, and comes back with six gift ideas.

Each card says what to give, a price band and one line on why. Under it is the proof: the Qloo result it rests on, its affinity, and Qloo's own split of which favourite pulled it in, for example "Lagavulin 55%, John le Carré 45%". A cuisine or a hobby is a Qloo tag, and Qloo gives a tag no share, so it is listed after the split. Each card links to the exact Qloo call that found it.

Then it is a conversation. Say "make it cheaper, under 30 dollars" and the agent plans again from what it already found, and code holds every card to the new budget. A share link reopens the same cards and the same calls, with no account. "Buy this one" makes a PayPal sandbox order for that card.

You can watch it think

Every Qloo call streams into the Behind the scenes panel as it happens. Each one has a plain line on what it asked ("What fans of John le Carré and Lagavulin love: brands"), its arguments, its time, whether it came from the cache, and the top results with their affinity. A small picture at the top shows the walk from the favourites to the Qloo results the cards rest on, each line as thick as Qloo's share.

How it uses Qloo

Qloo is the only source of the ideas. The agent uses three Qloo calls as tools:

  • /search turns a name into an entity. With no type, Qloo ranks every kind together, so "Le Carre" finds the author John le Carré and "single malt" finds Lagavulin.
  • /v2/tags turns a cuisine or a hobby into tags. "Korean food" becomes the Korean restaurant tag, and "running" the running tag.
  • /v2/insights walks the graph from all the seeds together. Tags go in as signals, a cuisine tag also filters places, a named city keeps places local, and who the gift is for goes in as an audience (age and gender) when the message makes it plain, as in "my dad". Every call asks for feature.explainability, which gives the cards their split.

For the dad above, Qloo answers with Guinness (0.939), The Infinite Monkey Cage (0.936), Talisker (0.933) and Ullapool (0.888).

The same three tools are an MCP server at /mcp, so any MCP client can ask Qloo the way Gift Scout does.

Qloo off, side by side

One tap asks the same model, with no tools, for its own gift ideas for the same person. Gift Scout looks each one up in Qloo and scores it against the same favourites with filter.results.entities. Ideas Qloo does not know are marked "not found in Qloo". The page shows both means. One run on 26 Oct 2026 for the dad: the plain model's picks scored a mean affinity of 0.782, and 2 of its 6 picks were not found in Qloo. Gift Scout's cards scored 0.915. That is one run, so a lead, not a benchmark.

How it is built

One Cloudflare Worker serves the page, the agent and the MCP server. The model runs on Workers AI. A first message is plan, then present: the model makes one plan call (each love and its kind, the city, the budget), code makes the same Qloo calls every time from that plan, and the model writes the cards. Later messages are a free tool loop over the same tools.

Code checks the agent

The model writes the gift and the sentence. Code does the rest.

  • A card must rest on an entity that a Qloo insights call returned in the same conversation. The affinity, the name and the seeds on a card are copied from Qloo's answer by code.
  • A card with no Qloo result behind it, over the budget the person wrote, under 5 dollars, or a third of one kind is dropped. The page lists each dropped idea with the reason.
  • A name Qloo does not know is set aside and named on screen, never used as a seed.

Measured

A quality check sends ten messages a judge might type and reads what comes back. Run live on 27 Oct 2026: 52 of 52 cards traced to a Qloo result, 0 of 11 cards over a stated budget, a mean Qloo affinity of 0.881, and 17 ideas dropped by code (8 past six cards, 5 outside the buyable price range, 4 too small to be a gift). A run used about 60 neurons, Workers AI's own unit of use.

Free to try

There is no account. A visitor never costs money: every model call is counted against a daily budget, each visitor has a daily number of turns, and every Qloo answer is cached for 60 days. If Qloo's monthly calls run low, it stops calling Qloo live and serves what it has cached. When live scouting cannot run, the three examples replay recorded runs, marked as recorded with their date. To buy in the PayPal sandbox, use the sandbox buyer login in the README. It is a test account with play money.

Challenges

A small model given every tool at once skipped the taste graph and wrote cards on ids it made up. Splitting the first message into a plan the model writes and Qloo calls the code makes, and checking every card against Qloo's answers in code, made every run ask Qloo the full set and keep only grounded cards. Finding the right seed was the other one: a typed book search for an author found books about the author, and an untyped search found the author itself.

What is next

More kinds of gift from the graph (films, shows, games), and a way to keep a person's tastes for next year's birthday.

Built With

  • cloudflare-d1
  • cloudflare-workers
  • durable-objects
  • model-context-protocol
  • paypal
  • qloo
  • qwen3
  • typescript
  • workers-ai
Share this project:

Updates

Submission history