Taste Overlap

io.github.Sooonic008Published by GitHub account Sooonic008v0.1.0Updated Oct 24, 2026

Plans a shared evening for two people: places both would enjoy, ranked by Qloo's taste graph.

VerifiedStreamable HTTPWeb executableLocation & LifestyleAI & ML

Overview

AI-generated overview

Plans a shared evening for two people: up to six places in a city both would enjoy, ranked by Qloo's taste graph and ordered as activity, food, drink.

What you can do
  • Plan a shared evening for two people from a city and a few favourites each (artists, films, shows, books, brands)
  • Get up to six places ranked by Qloo's taste graph, keeping only picks that score well for both people
  • See the shared taste tags that explain each pick and the evening order: something to do, food, then a drink
  • Receive the plan as text plus structured content from a single tool, plan_shared_evening
When to use it
Useful when two people want a joint recommendation for an evening out in a given city and are willing to supply a few favourites each as taste signals. It is a narrow, single-purpose planner rather than a general recommendation or search tool.
Requirements
A remote MCP endpoint is available with nothing to install. Local use needs Node.js 22.19+ and the Qloo harness, plus a Qloo API key and base URL supplied by environment variables (QLOO_API_KEY, QLOO_BASE_URL, QLOO_TRUSTED_BASE_URL). A credential-free demo mode replays one recorded Vienna example only.
Before you install
Results depend entirely on Qloo; without a key only the recorded demo example works and other inputs return an error. The remote endpoint shares per-visitor and daily limits. Favourites and city are sent to Qloo's API, and the API key is passed to the server through environment variables.

Installation

In SourceWeft

  1. Open Taste Overlap in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.Sooonic008%2Ftaste-overlap/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "taste-overlap": {
      "type": "http",
      "url": "https://taste-overlap.onrender.com/mcp"
    }
  }
}

README

Taste Overlap

Two people, a few favourites each (artists, films, shows, books, places). Qloo's taste graph ranks places in your city for person A, for person B and for both together. Taste Overlap keeps only the places that rank well for both (harmonic mean of the two affinities, so one-sided picks drop out), explains each pick with the shared taste tags, and orders them into an evening: something to do, food, then a drink.

Without Qloo there is nothing to show: the overlap is computed from Qloo's per-person affinities, not from an LLM guess.

Run

Needs Node.js 22.19+ and the official Qloo harness (the supported event surface):

bash
npm install --global @qloo/qloo-harness   # qloo --version >= 0.1.26export QLOO_API_KEY=...                    # the hackathon key (or: qloo setup --qloo)export QLOO_BASE_URL=https://hackathon.api.qloo.comexport QLOO_TRUSTED_BASE_URL=https://hackathon.api.qloo.com   # the harness only sends a key to an approved endpointnpm start                                  # http://localhost:8787

Demo without credentials: QLOO_TRANSPORT=demo npm start replays a real recorded run (demo/vienna.json, 11 qloo exec calls) through the same code. Only that example works (Vienna; Radiohead + Wes Anderson / Taylor Swift + Studio Ghibli); other inputs return an error instead of invented places.

Optional: QLOO_TRANSPORT=rest with QLOO_API_KEY uses the direct REST client (src/qloo.js) instead; QLOO_BASE, PORT.

Use it from an agent (MCP tool)

Remote, nothing to install: the live demo also speaks MCP at https://taste-overlap.onrender.com/mcp (streamable HTTP, JSON answers). In claude.ai or the Claude app: Settings → Connectors → Add custom connector and paste that URL. Tool calls share the demo's per-visitor and daily limits.

Local (stdio):

Taste Overlap is also an agent tool: mcp-server.js is a dependency-free MCP stdio server with one tool, plan_shared_evening (city, person_a[], person_b[]). It returns the explained evening as text plus structured content, and any MCP client can call it:

bash
claude mcp add taste-overlap -- node /path/to/taste-overlap/mcp-server.js   # Claude Code# or in claude_desktop_config.json / Cursor: {"command": "node", "args": ["/path/to/mcp-server.js"],#   "env": {"QLOO_API_KEY": "...", "QLOO_BASE_URL": "https://hackathon.api.qloo.com", "QLOO_TRUSTED_BASE_URL": "https://hackathon.api.qloo.com"}}

Without a key, QLOO_TRANSPORT=demo makes the tool answer the recorded Vienna example.

Test

bash
node --test

How it works

  • src/mcp.js (default transport) - one long-running qloo mcp process (the harness's canonical MCP adapter) serves every workflow as qloo_<op>; on a small host this takes ~0.5-1.2 s per call instead of >30 s for a fresh qloo exec. QLOO_TRANSPORT=exec switches back to one qloo exec per call.
  • src/harness.js - the Qloo workflows: recommend (target_type: place, the favourites as signals, filter_location: the city) for A, B and both; entity_tags for the tags that explain each pick. The harness resolves the names and validates input before calling Qloo; when a name is ambiguous (status: needs_input) the client takes Qloo's top-ranked non-album candidate, retries once with its entity id and returns that choice. Workflow names are fixed, user text goes in on stdin.
  • Each pick's reason comes from Qloo's per-result explainability (signal.interests.entities): which favourites drove the place and by how much.
  • src/demo.js - records and replays real harness envelopes for the credential-free demo.
  • src/qloo.js (fallback) - resolves each favourite with /search, ranks places with /v2/insights (filter.type=urn:entity:place, signal.interests.entities, filter.location.query). The key is sent as a header from the server and never reaches the browser.
  • src/overlap.js - pure logic: shared picks, reasons, evening order (unit-tested). Qloo returns at most 20 places per call, and two tastes can share none of them (measured: Berlin, Daft Punk + Christopher Nolan vs Adele + Pixar). Real overlaps come first; the rest is topped up from the joint list and labelled "combined taste". A place scored one-sided in both personal lists never comes back that way.
  • src/plan.js - three Qloo calls (A, B, both) -> overlap -> explained plan.
  • server.js - dependency-free Node server, serves public/ and POST /api/plan.
  • mcp-server.js - the same plan as an MCP tool for agents; src/transport.js picks the Qloo transport for both.

License

MIT

Source: README.md at commit da98941

Tools

1

plan_shared_evening

Plan a shared evening (Qloo taste overlap)

Given a city and a few favourites for each of two people (artists, films, shows, books, brands), returns up to six places both would enjoy, ranked by Qloo's taste graph, each with the reason and in evening order (something to do, food, a drink). Picks marked basis=combined come from Qloo's list for the combined taste because the two personal top-20 lists did not overlap enough.

Parameterscityrequiredperson_arequiredperson_brequired

Version history

1
  1. v0.1.0LatestOct 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts