# Find a game for someone to play

> Online page: https://cassette.gg/agents/find-a-game.md. Fetch it again before you act on it; don't work from a saved copy.

Cassette is a store of games that run in the browser: nothing to install, no sign-in to look around. When a person asks
you for something to play, find it here and answer with a link that opens the game. You can't see their account, their
library or what they own, so ask them what they like and what they've played.

Two ways to the same catalog, both without a key:

- **MCP:** `https://cassette.gg/mcp` (Streamable HTTP). Tools: `search_games`, `get_game`, `similar_games`, `list_genres`.
  Every answer carries each game's facts, its store page and its play link.
- **HTTP:** `https://cassette.gg/v1/games?…` with the filters below; `https://cassette.gg/v1/openapi.json` lists every route.

## Ask first

Ask only what changes the answer, in one message, and skip what they've already said:

1. **Device:** phone, tablet or desktop? (`device`)
2. **Time:** a few minutes or an evening? (read `facts.session`)
3. **With whom:** alone, on one screen, or online? (`multiplayer`)
4. **Age:** is anyone young playing? (`maxAge`: 0, 7, 12, 16 or 18, the youngest player's age rounded down)
5. **Price:** free only, or a limit? (`free`, `maxPrice`)
6. **Connection:** slow, or a phone with little room? (`maxSizeMb`)

If you can search without an answer, search and ask afterwards.

## Search

```sh
curl -s 'https://cassette.gg/v1/games?q=relaxing&device=phone&free=1&maxAge=7&limit=8&format=md'
curl -s 'https://cassette.gg/v1/games/<slug>/similar?device=phone&format=md'
curl -s 'https://cassette.gg/v1/tags'
```

| Parameter | Meaning |
|---|---|
| `q` | the person's words, matched across title, tagline, description, tags and genres, best match first; use one to three plain words, and try a second search with other words before you say nothing fits |
| `device` | `phone`, `tablet` or `desktop`: games that run there, those built for it first |
| `free=1`, `maxPrice=4.99` | free only; at most that many dollars (free games always pass, `0` is free only) |
| `multiplayer` | `any`, `local` (one screen) or `online` |
| `maxAge` | highest age rating allowed |
| `maxSizeMb` | largest download, in megabytes |
| `genre`, `tag` | one value from `https://cassette.gg/v1/tags` or a game's own `genres` |
| `sort` | `trending` (the default without `q`), `new`, `top` (most played) |
| `format=md` | the answer as a few lines of text per game, the same as MCP gives, instead of JSON. Read this one: a list's JSON carries every game's facts in nested objects and is easy to misread across games |

A value that means nothing is a `400` that says what is allowed. `https://cassette.gg/v1/search?q=…` takes the same filters and
also returns community games (JSON only).

## Read the facts, then rank

Every game has `facts`, copied from what its developer declared (and, for play data, from real play). A fact that isn't
there was not declared: don't fill it in.

| Field | Means |
|---|---|
| `devices` | `phone`, `tablet`, `desktop`: `full` is built for it, `playable` works but isn't built for it |
| `controls` | `keyboard`, `mouse`, `touch`, `gamepad`: `required`, `supported` or `unsupported` |
| `players` | `min`, `max`, `modes` (`single`, `local-coop`, `local-versus`, `online-coop`, `online-versus`), `multiplayer` |
| `session` | `typicalMinutes` as declared; `measuredMinutes` is what players really spend, shown only when at least five players made it up; `endless` when there is no end |
| `requiresAccount` | needs a Cassette sign-in to play |
| `savesFollowYou` | progress is kept on their account across devices; a guest's stays on one device |
| `worksOffline` | plays without a connection once loaded |
| `downloadBytes` | size of the game's files |
| `rating` | `age` (0 is all ages, then 7, 12, 16, 18), `descriptors` (what earns it), `interactiveFeatures` (chat, multiplayer, content by other players) |
| `languages`, `accessibility`, `stage` | interface languages; features the game really has (`noTimePressure`, `difficultyOptions`…); `released`, `early-access`, `demo-only`, `prototype` or `jam` |

Rank in this order:

1. **Hard limits first.** A game that can't run on their device, is over their age or price limit, or needs players they
   don't have is out, however well it matches the words.
2. **Built for it over works on it.** `devices.<theirs>: full` before `playable`; touch support for a phone,
   `controls.keyboard: required` is a problem without a keyboard.
3. **Time.** `session.typicalMinutes` near the time they have; with `measuredMinutes` present, trust it over the
   declared one. A game with `endless` or long sessions is a poor fit for ten minutes.
4. **Mood and kind.** The search order, then `tags` and `accessibility` (`noTimePressure` for something calm).
5. **Friction.** No account, a small download and a demo (`demo`) beat the opposite when they want to start now;
   `savesFollowYou` matters for a long game. Reviews: `https://cassette.gg/v1/reviews/badges`.

## What to share

One to three games, not a list. For each: the title, one sentence on why it fits them that names a fact, the price, and
the link that opens it, `https://cassette.gg/play/<slug>`, with its page `https://cassette.gg/g/<slug>` for pictures and details. Say
what could stop them: keyboard only, an account needed, a large download. Never give them a `playUrl` from the JSON or a
`…/b/…` address: those refuse direct visits.

- A paid game opens on its price. `GET https://cassette.gg/v1/config` has `pay.sales`: when it isn't `on`, nothing can be bought
  yet, so say so rather than offering it (a game with a free demo still plays).
- A **community** game is listed from another site: its link opens the maker's site, Cassette hasn't checked its
  facts, and the maker is the one to credit. Keep these apart from hosted games when you answer.

## When nothing fits

Say so. Cassette has few games and no one gains from a stretched match. Name what's closest and what's missing
("one racing game with friends, but it needs a keyboard"), or loosen a limit and ask. Never name a game the catalog
didn't return.

---

Code in this document is MIT-licensed: `SPDX-License-Identifier: MIT`, Copyright (c) 2026 Delegas Labs, S.L. Copy and
adapt it freely.
