{"openapi":"3.1.0","info":{"title":"Ludo API","version":"0.1.0","description":"A fully local, hand-curated, original-content reference for cross-and-circle race games: Pachisi (India's ancient ancestor game), Ludo (the British adaptation), Parcheesi (the American adaptation), and the later relatives Sorry!, Trouble and Aggravation — rules by topic, a glossary, regional/edition variants, side-by-side comparisons, setup by player count, strategy concepts, beginner tips and hedged history notes.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://ludo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/ludo/docs"},"termsOfService":"https://connectorbay.com/ludo/terms"},"servers":[{"url":"https://ludo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/ludo/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/game_list":{"post":{"operationId":"game_list","summary":"A quick-reference table of every game covered: id, family role (ancestor/adaptation/descendant), origin","description":"A quick-reference table of every game covered: id, family role (ancestor/adaptation/descendant), origin\n    region, player count, randomizer (dice/cowries/cards/Pop-O-Matic), and its one signature twist. Use for\n    \"what games do you cover\", \"what's the difference between all of these at a glance\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"game_listArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/rule_lookup":{"post":{"operationId":"rule_lookup","summary":"One game's rule for a specific topic (starting, movement, capturing, safe_squares, blocking,","description":"One game's rule for a specific topic (starting, movement, capturing, safe_squares, blocking,\n    extra_turns, home_stretch, winning, team_play, special_squares, signature_move — not every topic applies\n    to every game), or every rule recorded for that game if no topic is given. Use for \"how do you capture a\n    piece in Ludo\", \"what's the home stretch rule in Parcheesi\", \"how do you win at Sorry!\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"description":"A game name.","examples":["Ludo","Parcheesi","Pachisi","Sorry!","Trouble","Aggravation"],"minLength":1,"title":"Game","type":"string"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A rules topic; omit to get every rule for the game.","examples":["starting","capturing","safe squares","home stretch","blocking","extra turns","winning","team play"],"title":"Topic"}},"required":["game"],"title":"rule_lookupArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/term_glossary":{"post":{"operationId":"term_glossary","summary":"Definitions of shared cross-and-circle family terms — yard/base, home column, safe square, capture,","description":"Definitions of shared cross-and-circle family terms — yard/base, home column, safe square, capture,\n    block/blockade, exact count, cowrie shells, Pop-O-Matic, slide, split, doubles, quadrant... Use for \"what's\n    a home stretch\", \"what does blockade mean\", \"what's a Pop-O-Matic\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"term_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/variant_info":{"post":{"operationId":"variant_info","summary":"Details on a named regional or edition variant (two-player Ludo, the three-sixes-forfeit house rule,","description":"Details on a named regional or edition variant (two-player Ludo, the three-sixes-forfeit house rule,\n    mobile-app Ludo conventions, Mensch ärgere Dich nicht, strict-blockade Parcheesi, classic vs. Slides-era\n    Sorry!, Frustration, Wahoo/Aggravation regional differences...), or every variant recorded for a given\n    game name. Use for \"what's the three sixes rule\", \"how is UK Ludo different\", \"what's Frustration\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A variant's name, or a game name to see all of its variants.","examples":["three-sixes-forfeit house rule","Frustration","Mensch ärgere Dich nicht","Ludo","Parcheesi"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"variant_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/game_comparison":{"post":{"operationId":"game_comparison","summary":"Side-by-side comparison of two named games across origin, board shape, randomizer, pieces, signature","description":"Side-by-side comparison of two named games across origin, board shape, randomizer, pieces, signature\n    twist, and their starting/capturing/home-stretch/extra-turn rules where recorded. Use for \"Ludo vs\n    Parcheesi\", \"how is Sorry! different from Ludo\", \"compare Pachisi and Aggravation\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game_a":{"description":"First game.","examples":["Ludo"],"minLength":1,"title":"Game A","type":"string"},"game_b":{"description":"Second game.","examples":["Parcheesi"],"minLength":1,"title":"Game B","type":"string"}},"required":["game_a","game_b"],"title":"game_comparisonArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/player_count_setup":{"post":{"operationId":"player_count_setup","summary":"Seating/setup guidance and rule adjustments for playing a specific game at a specific player count —","description":"Seating/setup guidance and rule adjustments for playing a specific game at a specific player count —\n    which yards to use, what to do with unused colors, and whether a partnership variant is common at 4. Use\n    for \"how do you set up Ludo for 3 people\", \"can Aggravation play 6 people\", \"2-player Parcheesi setup\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"description":"A game name.","examples":["Ludo","Aggravation"],"minLength":1,"title":"Game","type":"string"},"count":{"description":"Number of players.","maximum":6,"minimum":2,"title":"Count","type":"integer"}},"required":["game","count"],"title":"player_count_setupArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/strategy_concept":{"post":{"operationId":"strategy_concept","summary":"A named tactical concept for a game (timing your exit, stacking for safety, building a blockade,","description":"A named tactical concept for a game (timing your exit, stacking for safety, building a blockade,\n    holding the Sorry! card, using the backward move...), plus cross-family concepts like capturing-over-racing\n    and defensive spacing. Omit `name` to list every concept for the game; omit `game` (or pass \"general\") for\n    just the cross-family concepts. Use for \"any Ludo strategy tips\", \"how do blockades help in Parcheesi\",\n    \"what's defensive spacing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A game name; omit or use 'general' for cross-family concepts.","examples":["Ludo","Parcheesi","Sorry!","general"],"title":"Game"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific concept's name; omit to list all for the game.","examples":["Timing your exit","Building a blockade","Capturing over racing"],"title":"Name"}},"title":"strategy_conceptArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/beginner_tips":{"post":{"operationId":"beginner_tips","summary":"A curated shortlist of starter tips for learning a game, ordered from most to least essential. Use for","description":"A curated shortlist of starter tips for learning a game, ordered from most to least essential. Use for\n    \"beginner tips for Ludo\", \"how do I get started with Parcheesi\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"description":"A game name.","examples":["Ludo","Parcheesi","Sorry!"],"minLength":1,"title":"Game","type":"string"},"count":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many tips to return; omit for all.","title":"Count"}},"required":["game"],"title":"beginner_tipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/history_note":{"post":{"operationId":"history_note","summary":"One game's origin region, family role (ancestor/British adaptation/American adaptation/descendant), and","description":"One game's origin region, family role (ancestor/British adaptation/American adaptation/descendant), and\n    a hedged historical note — this family is old and was long passed down informally, so exact dates are\n    debated and given here as commonly-cited ranges. Use for \"where does Ludo come from\", \"is Pachisi older\n    than Ludo\", \"history of Parcheesi\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"description":"A game name.","examples":["Pachisi","Ludo","Parcheesi"],"minLength":1,"title":"Game","type":"string"}},"required":["game"],"title":"history_noteArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}