Live demo: https://tastematch.livingagentic.me Source, MIT licensed: https://github.com/NoBanks/qloo-mcp

Try it in 60 seconds

  1. Open https://tastematch.livingagentic.me
  2. Tap Chromatic Spaces under "Try an example" (a real framed print from my catalog)
  3. Press Find my audience

About ten seconds later you get the pitch, the age and gender shape of the audience, the artists, books, films and brands that audience already loves, and eight real places in San Francisco where those people go, with addresses. Every number on that screen is a Qloo affinity score. Nothing is generated.

The problem I actually have

I have released over 600 tracks and spent eighteen years behind a camera. Every independent artist I know, myself included, sells to "people who like this kind of thing" and has no way to say who those people actually are. You can ask a generic LLM and it will guess, confidently, from nothing.

Qloo does not guess. Its taste graph links 250M+ artists, films, books, brands and places to real affinity data, demographics and locations. That is the missing half of every "who is my audience" conversation, and it is exactly the kind of knowledge an agent cannot invent.

Why this only works because of Qloo

The hackathon brief says it plainly: if the project would work the same without Qloo, it is the wrong project. Taste Match without Qloo is a text box and a language model making up names. With Qloo, the same text box returns Laurie Anderson, Kronos Quartet and David Byrne for a Rothko-influenced abstract print, an audience that leans 24 and younger and female, and Yerba Buena Center for the Arts at 701 Mission St as the first place to hang it. No model knows that. The taste graph does.

What I built

qloo-mcp is an MCP server that hands any AI agent the Qloo taste graph as tools, plus Taste Match, an agent that turns one description of a print or a song into a usable audience report.

Seven tools, each validating input with Pydantic and returning JSON:

Tool Qloo endpoint
search_entities GET /search, resolve names to Qloo IDs across nine entity types
search_tags GET /v2/tags, resolve genre, style or keyword names to tag IDs
list_audiences GET /v2/audiences
get_insights GET /v2/insights, taste-based recommendations from entity, tag, age, gender, audience and location signals
get_demographics GET /v2/insights urn:demographics, age and gender affinity
get_taste_analysis GET /v2/insights urn:tag, the tags that describe a taste
taste_match all of the above, composed

Give Taste Match a title, a description and optionally some influences, and it returns the artists, films, books and brands that audience already loves, the places in a chosen city where those people actually go, the age and gender shape of that audience, the words that describe the taste, and a plain-text pitch you can send.

Because it is an MCP server, the same seven tools plug into Claude Desktop or any MCP client with a three-line config. An agent that plans a gallery show, writes a press release or books a tour can call Qloo the same way Taste Match does.

A real run, on a real piece

"Chromatic Spaces" is a 5x5 framed abstract print from my own catalog. It is the second example button on the demo, and it is a piece I actually sell: one sold on Facebook Marketplace this week. Taste Match's report for it, verbatim from the live app:

"Chromatic Spaces" is a print for people whose taste already runs toward Laurie Anderson, Kronos Quartet, Brian Wilson. Their taste reads as Art, Art History, Design, Americana. The strongest age affinity is 24 and younger. Places to show it or find these people in San Francisco: Yerba Buena Center for the Arts, Minnesota Street Project, City Lights Booksellers & Publishers. Brands this audience already buys from: ProPublica, The Onion, The Atlantic.

That is a pitch, a venue list and a media list for one print, in ten seconds, from a description an artist would write anyway.

How it works

  1. Plan. Artist-supplied seeds always win. If an OpenAI-compatible LLM is configured it suggests more influences and keywords; without one, a deterministic keyword extractor fills in. The agent degrades to useful rather than failing.
  2. Resolve. Every seed is looked up in Qloo in parallel to get real IDs. No made-up entities ever reach the insight calls.
  3. Fan out. Seven parallel Qloo insight calls: artists, places restricted to the chosen city, brands, books, movies, demographics and taste tags.
  4. Synthesize. Seeds are removed from the results, demographics are averaged into an audience profile, and a pitch is written from the top matches.

One failing branch becomes a note in the result instead of failing the whole match. That was a deliberate decision: an audience report that is six-sevenths complete is still useful to an artist, and a traceback is not.

What was hard

Resolving free text to a taste graph. An artist says "ukiyo-e meets cyberpunk" and Qloo needs entity and tag IDs. The fix was to treat resolution as its own parallel stage and to let the artist's own seeds outrank anything a model suggested, so the output stays theirs.

Making failure legible. Every error returns a structured code, invalid_input, missing_api_key, qloo_api_error, unknown_tool, never a traceback. An agent consuming these tools has to be able to reason about what went wrong, and a stack trace is not an answer.

What I am proud of

22 tests, all HTTP mocked with respx, so the suite runs with no API key and no network. The tooling I build for my own work has to survive being used on a deadline, and tests are how I know it will.

Who built this

Ryan Hammer, solo. Independent artist and cinematographer in California's High Desert. In September 2026 my AI listing engine for the same art business won the Entrepreneurship and Job Creation category of XPRIZE's Build with Gemini competition ($50,000). That engine handles the selling. Taste Match is the half it was missing: who to sell to.

What is next

Multi-city comparison, so an artist can see where a piece lands hardest before booking a show. Saved audience profiles across a catalog. Exposing Taste Match itself as a single MCP tool so another agent can call it as one step inside a larger workflow. And the business: every independent artist, label and gallery that prices a print or books a room is guessing at this today. A per-catalog subscription that answers "who, and where" for every piece is the product.

Built With

Share this project:

Updates

Submission history