# Pick Your Wheel > A free decision wheel with no signup and no backend. Six ready-made wheels > (conversation, chores, egg cooking, photos, dares) plus a classic one. > Base URL: https://pickyourwheel.com/ ## What it does Spins a wheel of 2 to 20 options and reveals one winner. Everything runs in the browser: no account, no API key, no server. ## For AI assistants: three ways to use it ### 1. Reproducible link (works from any chat, no integration needed) Build a URL that opens the wheel **and reveals a fixed result**: ``` https://pickyourwheel.com/?options=Pizza|Sushi|Tacos&seed=1234&spin=1 ``` | Parameter | Meaning | |---|---| | `options` | Options separated by `\|` (2 to 20). URL-encoded. | | `seed` | Integer 0–4294967295. Same seed + same option count = same winner. | | `spin` | `1` to spin automatically when the page opens. | | `wheel` | Preset id instead of `options`: `classic`, `conversation`, `chores`, `masterchef`, `photos`, `mystery`. | | `embed` | `1` hides the header, library and footer, leaving only the wheel. | ### 2. Compute the winner yourself (no browser needed) The selection rule is deterministic and tiny, so you can answer "who wins?" directly and then hand over the link that matches: ```js function mulberry32(a) { return function () { a |= 0; a = (a + 0x6D2B79F5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; } const winner = options[Math.floor(mulberry32(seed >>> 0)() * options.length)]; ``` `seed` is `>>> 0` (unsigned 32-bit) and the PRNG is advanced once before drawing. This is the same code the page and the MCP server use. ### 3. In-page JavaScript API (for browser agents and devtools) ```js PickYourWheel.wheels() // presets and their default options PickYourWheel.current() // { wheel, label, options } PickYourWheel.setOptions(["A", "B", "C"]) // 2–20 strings, max 28 chars each PickYourWheel.setWheel("chores") await PickYourWheel.spin({ seed: 42 }) // { result, index, seed, options, link } PickYourWheel.last() // last outcome, or null PickYourWheel.link(42) // shareable URL for that seed PickYourWheel.extractOptions(text) // pull candidate options out of prose ``` When the browser exposes `navigator.modelContext` (WebMCP), the page also registers the tools `spin_wheel`, `list_wheels` and `make_link`. ### 4. MCP server (Claude Desktop, Cursor, any MCP client) `mcp/pickyourwheel-mcp.mjs` is a dependency-free stdio server exposing `spin_wheel`, `list_wheels` and `make_link`. See `mcp/README.md`. ## Presets | id | label | options | |---|---|---| | `classic` | Classic | Neapolitan pizza, Sushi, Tacos al pastor, Smash burger, Green curry, Ramen, Garden salad, Surprise me | | `conversation` | Conversation | Dumbest moment, Secret nobody knows, Deepest fear, Last time you cried, Who do you admire, A belief you lost, Biggest regret, When I felt alone, A lie you tell, What you pretend | | `chores` | Chores | Dishes, Trash & recycling, Vacuum, Bathroom, Laundry, Kitchen deep clean, Groceries, Plants, Bins out, Free pass | | `masterchef` | MasterChef | Fried egg, Soft-boiled, Hard-boiled, Scrambled, Poached, Omelette, Scrambled + ham, Bacon & eggs, Shakshuka, Ramen egg, Cloud eggs, Tea egg | | `mystery` | Mystery box | Sing the chorus, Accent for 5 min, Speak in rhymes, Dance for 15 s, Tell a dad joke, Emoji only 3 min, Compliment all, Ban the word yes, Impersonate someone, Pick your poison, Double dare, Free pass | | `photos` | Photos | Empty — the visitor uploads their own images (kept in memory, deleted after 1 hour) | ## Machine-readable contract https://pickyourwheel.com/.well-known/wheel.json ## Good uses - Picking a restaurant, a chore, a warm-up or a dare between friends. - Breaking a tie in a group chat with a link everybody can verify. - Team stand-ups: draw a random speaker or a harmless penalty. ## Limits to respect - Results are random by design; never use it for anything with real stakes (medical, legal, financial, safety). - Photos never leave the visitor's browser and expire after one hour.